diff options
author | Roman Zippel <zippel@linux-m68k.org> | 2006-06-09 01:12:39 -0400 |
---|---|---|
committer | Sam Ravnborg <sam@mars.ravnborg.org> | 2006-06-09 01:31:30 -0400 |
commit | c955ccafc38e77312b4c65e5a70960080fb8a3f2 (patch) | |
tree | f630610edef42b8ed60c455cfdb74d897190f1d3 | |
parent | ddc97cacb310ad68483952e67764c4153c138ed2 (diff) |
kconfig: fix .config dependencies
This fixes one of the worst kbuild warts left - the broken dependencies used
to check and regenerate the .config file. This was done via an indirect
dependency and the .config itself had an empty command, which can cause make
not to reread the changed .config file.
Instead of this we generate now a new file include/config/auto.conf from
.config, which is used for kbuild and has the proper dependencies. It's also
the main make target now for all files generated during this step (and thus
replaces include/linux/autoconf.h).
This also means we can now relax the syntax requirements for the .config file
and we don't have to rewrite it all the time, i.e. silentoldconfig only
writes .config now when it's necessary to keep it in sync with the Kconfig
files and even this can be suppressed by setting the environment variable
KCONFIG_NOSILENTUPDATE, so the update can (and must) be done manually.
Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
-rw-r--r-- | Makefile | 27 | ||||
-rw-r--r-- | scripts/Makefile.build | 2 | ||||
-rw-r--r-- | scripts/Makefile.modpost | 2 | ||||
-rw-r--r-- | scripts/kconfig/conf.c | 16 | ||||
-rw-r--r-- | scripts/kconfig/confdata.c | 177 | ||||
-rw-r--r-- | scripts/kconfig/lkc_proto.h | 1 | ||||
-rw-r--r-- | scripts/kconfig/util.c | 4 |
7 files changed, 156 insertions, 73 deletions
@@ -404,7 +404,7 @@ include $(srctree)/arch/$(ARCH)/Makefile | |||
404 | export KBUILD_DEFCONFIG | 404 | export KBUILD_DEFCONFIG |
405 | 405 | ||
406 | config %config: scripts_basic outputmakefile FORCE | 406 | config %config: scripts_basic outputmakefile FORCE |
407 | $(Q)mkdir -p include/linux | 407 | $(Q)mkdir -p include/linux include/config |
408 | $(Q)$(MAKE) $(build)=scripts/kconfig $@ | 408 | $(Q)$(MAKE) $(build)=scripts/kconfig $@ |
409 | $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease | 409 | $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease |
410 | 410 | ||
@@ -421,8 +421,6 @@ PHONY += scripts | |||
421 | scripts: scripts_basic include/config/MARKER | 421 | scripts: scripts_basic include/config/MARKER |
422 | $(Q)$(MAKE) $(build)=$(@) | 422 | $(Q)$(MAKE) $(build)=$(@) |
423 | 423 | ||
424 | scripts_basic: include/linux/autoconf.h | ||
425 | |||
426 | # Objects we will link into vmlinux / subdirs we need to visit | 424 | # Objects we will link into vmlinux / subdirs we need to visit |
427 | init-y := init/ | 425 | init-y := init/ |
428 | drivers-y := drivers/ sound/ | 426 | drivers-y := drivers/ sound/ |
@@ -436,25 +434,22 @@ ifeq ($(dot-config),1) | |||
436 | 434 | ||
437 | # Read in dependencies to all Kconfig* files, make sure to run | 435 | # Read in dependencies to all Kconfig* files, make sure to run |
438 | # oldconfig if changes are detected. | 436 | # oldconfig if changes are detected. |
439 | -include .kconfig.d | 437 | -include include/config/auto.conf.cmd |
440 | 438 | -include include/config/auto.conf | |
441 | include .config | ||
442 | 439 | ||
443 | # If .config needs to be updated, it will be done via the dependency | ||
444 | # that autoconf has on .config. | ||
445 | # To avoid any implicit rule to kick in, define an empty command | 440 | # To avoid any implicit rule to kick in, define an empty command |
446 | .config .kconfig.d: ; | 441 | .config include/config/auto.conf.cmd: ; |
447 | 442 | ||
448 | # If .config is newer than include/linux/autoconf.h, someone tinkered | 443 | # If .config is newer than include/config/auto.conf, someone tinkered |
449 | # with it and forgot to run make oldconfig. | 444 | # with it and forgot to run make oldconfig. |
450 | # If kconfig.d is missing then we are probarly in a cleaned tree so | 445 | # if auto.conf.cmd is missing then we are probarly in a cleaned tree so |
451 | # we execute the config step to be sure to catch updated Kconfig files | 446 | # we execute the config step to be sure to catch updated Kconfig files |
452 | include/linux/autoconf.h: .kconfig.d .config | 447 | include/config/auto.conf: .config include/config/auto.conf.cmd |
453 | $(Q)mkdir -p include/linux | ||
454 | $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig | 448 | $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig |
449 | |||
455 | else | 450 | else |
456 | # Dummy target needed, because used as prerequisite | 451 | # Dummy target needed, because used as prerequisite |
457 | include/linux/autoconf.h: ; | 452 | include/config/auto.conf: ; |
458 | endif | 453 | endif |
459 | 454 | ||
460 | # The all: target is the default when no target is given on the | 455 | # The all: target is the default when no target is given on the |
@@ -779,7 +774,7 @@ PHONY += prepare-all | |||
779 | prepare3: .kernelrelease | 774 | prepare3: .kernelrelease |
780 | ifneq ($(KBUILD_SRC),) | 775 | ifneq ($(KBUILD_SRC),) |
781 | @echo ' Using $(srctree) as source for kernel' | 776 | @echo ' Using $(srctree) as source for kernel' |
782 | $(Q)if [ -f $(srctree)/.config ]; then \ | 777 | $(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \ |
783 | echo " $(srctree) is not clean, please run 'make mrproper'";\ | 778 | echo " $(srctree) is not clean, please run 'make mrproper'";\ |
784 | echo " in the '$(srctree)' directory.";\ | 779 | echo " in the '$(srctree)' directory.";\ |
785 | /bin/false; \ | 780 | /bin/false; \ |
@@ -822,7 +817,7 @@ include/asm: | |||
822 | 817 | ||
823 | # Split autoconf.h into include/linux/config/* | 818 | # Split autoconf.h into include/linux/config/* |
824 | 819 | ||
825 | include/config/MARKER: scripts/basic/split-include include/linux/autoconf.h | 820 | include/config/MARKER: scripts/basic/split-include include/config/auto.conf |
826 | @echo ' SPLIT include/linux/autoconf.h -> include/config/*' | 821 | @echo ' SPLIT include/linux/autoconf.h -> include/config/*' |
827 | @scripts/basic/split-include include/linux/autoconf.h include/config | 822 | @scripts/basic/split-include include/linux/autoconf.h include/config |
828 | @touch $@ | 823 | @touch $@ |
diff --git a/scripts/Makefile.build b/scripts/Makefile.build index e48e60da3040..53e53a2e80ae 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build | |||
@@ -8,7 +8,7 @@ PHONY := __build | |||
8 | __build: | 8 | __build: |
9 | 9 | ||
10 | # Read .config if it exist, otherwise ignore | 10 | # Read .config if it exist, otherwise ignore |
11 | -include .config | 11 | -include include/config/auto.conf |
12 | 12 | ||
13 | include scripts/Kbuild.include | 13 | include scripts/Kbuild.include |
14 | 14 | ||
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 0e056cffffdb..576cce5e387f 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost | |||
@@ -35,7 +35,7 @@ | |||
35 | PHONY := _modpost | 35 | PHONY := _modpost |
36 | _modpost: __modpost | 36 | _modpost: __modpost |
37 | 37 | ||
38 | include .config | 38 | include include/config/auto.conf |
39 | include scripts/Kbuild.include | 39 | include scripts/Kbuild.include |
40 | include scripts/Makefile.lib | 40 | include scripts/Makefile.lib |
41 | 41 | ||
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index 8012d1076876..9334da65f364 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c | |||
@@ -599,7 +599,15 @@ int main(int ac, char **av) | |||
599 | input_mode = ask_silent; | 599 | input_mode = ask_silent; |
600 | valid_stdin = 1; | 600 | valid_stdin = 1; |
601 | } | 601 | } |
602 | } | 602 | } else if (sym_change_count) { |
603 | name = getenv("KCONFIG_NOSILENTUPDATE"); | ||
604 | if (name && *name) { | ||
605 | fprintf(stderr, _("\n*** Kernel configuration requires explicit update.\n\n")); | ||
606 | return 1; | ||
607 | } | ||
608 | } else | ||
609 | goto skip_check; | ||
610 | |||
603 | do { | 611 | do { |
604 | conf_cnt = 0; | 612 | conf_cnt = 0; |
605 | check_conf(&rootmenu); | 613 | check_conf(&rootmenu); |
@@ -608,5 +616,11 @@ int main(int ac, char **av) | |||
608 | fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); | 616 | fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); |
609 | return 1; | 617 | return 1; |
610 | } | 618 | } |
619 | skip_check: | ||
620 | if (input_mode == ask_silent && conf_write_autoconf()) { | ||
621 | fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); | ||
622 | return 1; | ||
623 | } | ||
624 | |||
611 | return 0; | 625 | return 0; |
612 | } | 626 | } |
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index a9e3b6abf661..2da4a8d775a5 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c | |||
@@ -342,7 +342,7 @@ int conf_read(const char *name) | |||
342 | 342 | ||
343 | int conf_write(const char *name) | 343 | int conf_write(const char *name) |
344 | { | 344 | { |
345 | FILE *out, *out_h; | 345 | FILE *out; |
346 | struct symbol *sym; | 346 | struct symbol *sym; |
347 | struct menu *menu; | 347 | struct menu *menu; |
348 | const char *basename; | 348 | const char *basename; |
@@ -379,13 +379,6 @@ int conf_write(const char *name) | |||
379 | out = fopen(newname, "w"); | 379 | out = fopen(newname, "w"); |
380 | if (!out) | 380 | if (!out) |
381 | return 1; | 381 | return 1; |
382 | out_h = NULL; | ||
383 | if (!name) { | ||
384 | out_h = fopen(".tmpconfig.h", "w"); | ||
385 | if (!out_h) | ||
386 | return 1; | ||
387 | file_write_dep(NULL); | ||
388 | } | ||
389 | sym = sym_lookup("KERNELVERSION", 0); | 382 | sym = sym_lookup("KERNELVERSION", 0); |
390 | sym_calc_value(sym); | 383 | sym_calc_value(sym); |
391 | time(&now); | 384 | time(&now); |
@@ -401,16 +394,6 @@ int conf_write(const char *name) | |||
401 | sym_get_string_value(sym), | 394 | sym_get_string_value(sym), |
402 | use_timestamp ? "# " : "", | 395 | use_timestamp ? "# " : "", |
403 | use_timestamp ? ctime(&now) : ""); | 396 | use_timestamp ? ctime(&now) : ""); |
404 | if (out_h) | ||
405 | fprintf(out_h, "/*\n" | ||
406 | " * Automatically generated C config: don't edit\n" | ||
407 | " * Linux kernel version: %s\n" | ||
408 | "%s%s" | ||
409 | " */\n" | ||
410 | "#define AUTOCONF_INCLUDED\n", | ||
411 | sym_get_string_value(sym), | ||
412 | use_timestamp ? " * " : "", | ||
413 | use_timestamp ? ctime(&now) : ""); | ||
414 | 397 | ||
415 | if (!sym_change_count) | 398 | if (!sym_change_count) |
416 | sym_clear_all_valid(); | 399 | sym_clear_all_valid(); |
@@ -426,11 +409,6 @@ int conf_write(const char *name) | |||
426 | "#\n" | 409 | "#\n" |
427 | "# %s\n" | 410 | "# %s\n" |
428 | "#\n", str); | 411 | "#\n", str); |
429 | if (out_h) | ||
430 | fprintf(out_h, "\n" | ||
431 | "/*\n" | ||
432 | " * %s\n" | ||
433 | " */\n", str); | ||
434 | } else if (!(sym->flags & SYMBOL_CHOICE)) { | 412 | } else if (!(sym->flags & SYMBOL_CHOICE)) { |
435 | sym_calc_value(sym); | 413 | sym_calc_value(sym); |
436 | if (!(sym->flags & SYMBOL_WRITE)) | 414 | if (!(sym->flags & SYMBOL_WRITE)) |
@@ -448,59 +426,39 @@ int conf_write(const char *name) | |||
448 | switch (sym_get_tristate_value(sym)) { | 426 | switch (sym_get_tristate_value(sym)) { |
449 | case no: | 427 | case no: |
450 | fprintf(out, "# CONFIG_%s is not set\n", sym->name); | 428 | fprintf(out, "# CONFIG_%s is not set\n", sym->name); |
451 | if (out_h) | ||
452 | fprintf(out_h, "#undef CONFIG_%s\n", sym->name); | ||
453 | break; | 429 | break; |
454 | case mod: | 430 | case mod: |
455 | fprintf(out, "CONFIG_%s=m\n", sym->name); | 431 | fprintf(out, "CONFIG_%s=m\n", sym->name); |
456 | if (out_h) | ||
457 | fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name); | ||
458 | break; | 432 | break; |
459 | case yes: | 433 | case yes: |
460 | fprintf(out, "CONFIG_%s=y\n", sym->name); | 434 | fprintf(out, "CONFIG_%s=y\n", sym->name); |
461 | if (out_h) | ||
462 | fprintf(out_h, "#define CONFIG_%s 1\n", sym->name); | ||
463 | break; | 435 | break; |
464 | } | 436 | } |
465 | break; | 437 | break; |
466 | case S_STRING: | 438 | case S_STRING: |
467 | // fix me | ||
468 | str = sym_get_string_value(sym); | 439 | str = sym_get_string_value(sym); |
469 | fprintf(out, "CONFIG_%s=\"", sym->name); | 440 | fprintf(out, "CONFIG_%s=\"", sym->name); |
470 | if (out_h) | 441 | while (1) { |
471 | fprintf(out_h, "#define CONFIG_%s \"", sym->name); | ||
472 | do { | ||
473 | l = strcspn(str, "\"\\"); | 442 | l = strcspn(str, "\"\\"); |
474 | if (l) { | 443 | if (l) { |
475 | fwrite(str, l, 1, out); | 444 | fwrite(str, l, 1, out); |
476 | if (out_h) | 445 | str += l; |
477 | fwrite(str, l, 1, out_h); | ||
478 | } | ||
479 | str += l; | ||
480 | while (*str == '\\' || *str == '"') { | ||
481 | fprintf(out, "\\%c", *str); | ||
482 | if (out_h) | ||
483 | fprintf(out_h, "\\%c", *str); | ||
484 | str++; | ||
485 | } | 446 | } |
486 | } while (*str); | 447 | if (!*str) |
448 | break; | ||
449 | fprintf(out, "\\%c", *str++); | ||
450 | } | ||
487 | fputs("\"\n", out); | 451 | fputs("\"\n", out); |
488 | if (out_h) | ||
489 | fputs("\"\n", out_h); | ||
490 | break; | 452 | break; |
491 | case S_HEX: | 453 | case S_HEX: |
492 | str = sym_get_string_value(sym); | 454 | str = sym_get_string_value(sym); |
493 | if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) { | 455 | if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) { |
494 | fprintf(out, "CONFIG_%s=%s\n", sym->name, str); | 456 | fprintf(out, "CONFIG_%s=%s\n", sym->name, str); |
495 | if (out_h) | ||
496 | fprintf(out_h, "#define CONFIG_%s 0x%s\n", sym->name, str); | ||
497 | break; | 457 | break; |
498 | } | 458 | } |
499 | case S_INT: | 459 | case S_INT: |
500 | str = sym_get_string_value(sym); | 460 | str = sym_get_string_value(sym); |
501 | fprintf(out, "CONFIG_%s=%s\n", sym->name, str); | 461 | fprintf(out, "CONFIG_%s=%s\n", sym->name, str); |
502 | if (out_h) | ||
503 | fprintf(out_h, "#define CONFIG_%s %s\n", sym->name, str); | ||
504 | break; | 462 | break; |
505 | } | 463 | } |
506 | } | 464 | } |
@@ -520,10 +478,6 @@ int conf_write(const char *name) | |||
520 | } | 478 | } |
521 | } | 479 | } |
522 | fclose(out); | 480 | fclose(out); |
523 | if (out_h) { | ||
524 | fclose(out_h); | ||
525 | rename(".tmpconfig.h", "include/linux/autoconf.h"); | ||
526 | } | ||
527 | if (!name || basename != conf_def_filename) { | 481 | if (!name || basename != conf_def_filename) { |
528 | if (!name) | 482 | if (!name) |
529 | name = conf_def_filename; | 483 | name = conf_def_filename; |
@@ -542,3 +496,120 @@ int conf_write(const char *name) | |||
542 | 496 | ||
543 | return 0; | 497 | return 0; |
544 | } | 498 | } |
499 | |||
500 | int conf_write_autoconf(void) | ||
501 | { | ||
502 | struct symbol *sym; | ||
503 | const char *str; | ||
504 | char *name; | ||
505 | FILE *out, *out_h; | ||
506 | time_t now; | ||
507 | int i, l; | ||
508 | |||
509 | file_write_dep("include/config/auto.conf.cmd"); | ||
510 | |||
511 | out = fopen(".tmpconfig", "w"); | ||
512 | if (!out) | ||
513 | return 1; | ||
514 | |||
515 | out_h = fopen(".tmpconfig.h", "w"); | ||
516 | if (!out_h) { | ||
517 | fclose(out); | ||
518 | return 1; | ||
519 | } | ||
520 | |||
521 | sym = sym_lookup("KERNELVERSION", 0); | ||
522 | sym_calc_value(sym); | ||
523 | time(&now); | ||
524 | fprintf(out, "#\n" | ||
525 | "# Automatically generated make config: don't edit\n" | ||
526 | "# Linux kernel version: %s\n" | ||
527 | "# %s" | ||
528 | "#\n", | ||
529 | sym_get_string_value(sym), ctime(&now)); | ||
530 | fprintf(out_h, "/*\n" | ||
531 | " * Automatically generated C config: don't edit\n" | ||
532 | " * Linux kernel version: %s\n" | ||
533 | " * %s" | ||
534 | " */\n" | ||
535 | "#define AUTOCONF_INCLUDED\n", | ||
536 | sym_get_string_value(sym), ctime(&now)); | ||
537 | |||
538 | sym_clear_all_valid(); | ||
539 | |||
540 | for_all_symbols(i, sym) { | ||
541 | sym_calc_value(sym); | ||
542 | if (!(sym->flags & SYMBOL_WRITE) || !sym->name) | ||
543 | continue; | ||
544 | switch (sym->type) { | ||
545 | case S_BOOLEAN: | ||
546 | case S_TRISTATE: | ||
547 | switch (sym_get_tristate_value(sym)) { | ||
548 | case no: | ||
549 | break; | ||
550 | case mod: | ||
551 | fprintf(out, "CONFIG_%s=m\n", sym->name); | ||
552 | fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name); | ||
553 | break; | ||
554 | case yes: | ||
555 | fprintf(out, "CONFIG_%s=y\n", sym->name); | ||
556 | fprintf(out_h, "#define CONFIG_%s 1\n", sym->name); | ||
557 | break; | ||
558 | } | ||
559 | break; | ||
560 | case S_STRING: | ||
561 | str = sym_get_string_value(sym); | ||
562 | fprintf(out, "CONFIG_%s=\"", sym->name); | ||
563 | fprintf(out_h, "#define CONFIG_%s \"", sym->name); | ||
564 | while (1) { | ||
565 | l = strcspn(str, "\"\\"); | ||
566 | if (l) { | ||
567 | fwrite(str, l, 1, out); | ||
568 | fwrite(str, l, 1, out_h); | ||
569 | str += l; | ||
570 | } | ||
571 | if (!*str) | ||
572 | break; | ||
573 | fprintf(out, "\\%c", *str); | ||
574 | fprintf(out_h, "\\%c", *str); | ||
575 | str++; | ||
576 | } | ||
577 | fputs("\"\n", out); | ||
578 | fputs("\"\n", out_h); | ||
579 | break; | ||
580 | case S_HEX: | ||
581 | str = sym_get_string_value(sym); | ||
582 | if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) { | ||
583 | fprintf(out, "CONFIG_%s=%s\n", sym->name, str); | ||
584 | fprintf(out_h, "#define CONFIG_%s 0x%s\n", sym->name, str); | ||
585 | break; | ||
586 | } | ||
587 | case S_INT: | ||
588 | str = sym_get_string_value(sym); | ||
589 | fprintf(out, "CONFIG_%s=%s\n", sym->name, str); | ||
590 | fprintf(out_h, "#define CONFIG_%s %s\n", sym->name, str); | ||
591 | break; | ||
592 | default: | ||
593 | break; | ||
594 | } | ||
595 | } | ||
596 | fclose(out); | ||
597 | fclose(out_h); | ||
598 | |||
599 | name = getenv("KCONFIG_AUTOHEADER"); | ||
600 | if (!name) | ||
601 | name = "include/linux/autoconf.h"; | ||
602 | if (rename(".tmpconfig.h", name)) | ||
603 | return 1; | ||
604 | name = getenv("KCONFIG_AUTOCONFIG"); | ||
605 | if (!name) | ||
606 | name = "include/config/auto.conf"; | ||
607 | /* | ||
608 | * This must be the last step, kbuild has a dependency on auto.conf | ||
609 | * and this marks the successful completion of the previous steps. | ||
610 | */ | ||
611 | if (rename(".tmpconfig", name)) | ||
612 | return 1; | ||
613 | |||
614 | return 0; | ||
615 | } | ||
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h index b6a389c5fcbd..bd0fb1dc1322 100644 --- a/scripts/kconfig/lkc_proto.h +++ b/scripts/kconfig/lkc_proto.h | |||
@@ -4,6 +4,7 @@ P(conf_parse,void,(const char *name)); | |||
4 | P(conf_read,int,(const char *name)); | 4 | P(conf_read,int,(const char *name)); |
5 | P(conf_read_simple,int,(const char *name)); | 5 | P(conf_read_simple,int,(const char *name)); |
6 | P(conf_write,int,(const char *name)); | 6 | P(conf_write,int,(const char *name)); |
7 | P(conf_write_autoconf,int,(void)); | ||
7 | 8 | ||
8 | /* menu.c */ | 9 | /* menu.c */ |
9 | P(rootmenu,struct menu,); | 10 | P(rootmenu,struct menu,); |
diff --git a/scripts/kconfig/util.c b/scripts/kconfig/util.c index 656d2c87d661..e3f28b9d59f4 100644 --- a/scripts/kconfig/util.c +++ b/scripts/kconfig/util.c | |||
@@ -44,7 +44,9 @@ int file_write_dep(const char *name) | |||
44 | else | 44 | else |
45 | fprintf(out, "\t%s\n", file->name); | 45 | fprintf(out, "\t%s\n", file->name); |
46 | } | 46 | } |
47 | fprintf(out, "\n.config include/linux/autoconf.h: $(deps_config)\n\n$(deps_config):\n"); | 47 | fprintf(out, "\ninclude/config/auto.conf: \\\n" |
48 | "\t$(deps_config)\n\n" | ||
49 | "$(deps_config): ;\n"); | ||
48 | fclose(out); | 50 | fclose(out); |
49 | rename("..config.tmp", name); | 51 | rename("..config.tmp", name); |
50 | return 0; | 52 | return 0; |