diff options
Diffstat (limited to 'scripts/basic/fixdep.c')
-rw-r--r-- | scripts/basic/fixdep.c | 93 |
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 | } |