aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/basic/fixdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/basic/fixdep.c')
-rw-r--r--scripts/basic/fixdep.c93
1 files changed, 61 insertions, 32 deletions
diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c
index 7f6425e24ce3..078fe1d64e7d 100644
--- a/scripts/basic/fixdep.c
+++ b/scripts/basic/fixdep.c
@@ -320,49 +320,78 @@ static void parse_dep_file(void *map, size_t len)
320 char *end = m + len; 320 char *end = m + len;
321 char *p; 321 char *p;
322 char s[PATH_MAX]; 322 char s[PATH_MAX];
323 int first; 323 int is_target;
324 324 int saw_any_target = 0;
325 p = strchr(m, ':'); 325 int is_first_dep = 0;
326 if (!p) {
327 fprintf(stderr, "fixdep: parse error\n");
328 exit(1);
329 }
330 memcpy(s, m, p-m); s[p-m] = 0;
331 m = p+1;
332 326
333 clear_config(); 327 clear_config();
334 328
335 first = 1;
336 while (m < end) { 329 while (m < end) {
330 /* Skip any "white space" */
337 while (m < end && (*m == ' ' || *m == '\\' || *m == '\n')) 331 while (m < end && (*m == ' ' || *m == '\\' || *m == '\n'))
338 m++; 332 m++;
333 /* Find next "white space" */
339 p = m; 334 p = m;
340 while (p < end && *p != ' ') p++; 335 while (p < end && *p != ' ' && *p != '\\' && *p != '\n')
341 if (p == end) {
342 do p--; while (!isalnum(*p));
343 p++; 336 p++;
337 /* Is the token we found a target name? */
338 is_target = (*(p-1) == ':');
339 /* Don't write any target names into the dependency file */
340 if (is_target) {
341 /* The /next/ file is the first dependency */
342 is_first_dep = 1;
343 } else {
344 /* Save this token/filename */
345 memcpy(s, m, p-m);
346 s[p - m] = 0;
347
348 /* Ignore certain dependencies */
349 if (strrcmp(s, "include/generated/autoconf.h") &&
350 strrcmp(s, "arch/um/include/uml-config.h") &&
351 strrcmp(s, "include/linux/kconfig.h") &&
352 strrcmp(s, ".ver")) {
353 /*
354 * Do not list the source file as dependency,
355 * so that kbuild is not confused if a .c file
356 * is rewritten into .S or vice versa. Storing
357 * it in source_* is needed for modpost to
358 * compute srcversions.
359 */
360 if (is_first_dep) {
361 /*
362 * If processing the concatenation of
363 * multiple dependency files, only
364 * process the first target name, which
365 * will be the original source name,
366 * and ignore any other target names,
367 * which will be intermediate temporary
368 * files.
369 */
370 if (!saw_any_target) {
371 saw_any_target = 1;
372 printf("source_%s := %s\n\n",
373 target, s);
374 printf("deps_%s := \\\n",
375 target);
376 }
377 is_first_dep = 0;
378 } else
379 printf(" %s \\\n", s);
380 do_config_file(s);
381 }
344 } 382 }
345 memcpy(s, m, p-m); s[p-m] = 0; 383 /*
346 if (strrcmp(s, "include/generated/autoconf.h") && 384 * Start searching for next token immediately after the first
347 strrcmp(s, "arch/um/include/uml-config.h") && 385 * "whitespace" character that follows this token.
348 strrcmp(s, "include/linux/kconfig.h") && 386 */
349 strrcmp(s, ".ver")) {
350 /*
351 * Do not list the source file as dependency, so that
352 * kbuild is not confused if a .c file is rewritten
353 * into .S or vice versa. Storing it in source_* is
354 * needed for modpost to compute srcversions.
355 */
356 if (first) {
357 printf("source_%s := %s\n\n", target, s);
358 printf("deps_%s := \\\n", target);
359 } else
360 printf(" %s \\\n", s);
361 do_config_file(s);
362 }
363 first = 0;
364 m = p + 1; 387 m = p + 1;
365 } 388 }
389
390 if (!saw_any_target) {
391 fprintf(stderr, "fixdep: parse error; no targets found\n");
392 exit(1);
393 }
394
366 printf("\n%s: $(deps_%s)\n\n", target, target); 395 printf("\n%s: $(deps_%s)\n\n", target, target);
367 printf("$(deps_%s):\n", target); 396 printf("$(deps_%s):\n", target);
368} 397}