diff options
Diffstat (limited to 'scripts/basic')
| -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 | } |
