diff options
Diffstat (limited to 'scripts/kconfig')
-rw-r--r-- | scripts/kconfig/conf.c | 123 |
1 files changed, 57 insertions, 66 deletions
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index 36b5eedcdc75..3e1057f885c6 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c | |||
@@ -32,6 +32,7 @@ char *defconfig_file; | |||
32 | 32 | ||
33 | static int indent = 1; | 33 | static int indent = 1; |
34 | static int valid_stdin = 1; | 34 | static int valid_stdin = 1; |
35 | static int sync_kconfig; | ||
35 | static int conf_cnt; | 36 | static int conf_cnt; |
36 | static char line[128]; | 37 | static char line[128]; |
37 | static struct menu *rootEntry; | 38 | static struct menu *rootEntry; |
@@ -65,7 +66,7 @@ static void strip(char *str) | |||
65 | 66 | ||
66 | static void check_stdin(void) | 67 | static void check_stdin(void) |
67 | { | 68 | { |
68 | if (!valid_stdin && input_mode == ask_silent) { | 69 | if (!valid_stdin) { |
69 | printf(_("aborted!\n\n")); | 70 | printf(_("aborted!\n\n")); |
70 | printf(_("Console input/output is redirected. ")); | 71 | printf(_("Console input/output is redirected. ")); |
71 | printf(_("Run 'make oldconfig' to update configuration.\n\n")); | 72 | printf(_("Run 'make oldconfig' to update configuration.\n\n")); |
@@ -427,43 +428,6 @@ static void check_conf(struct menu *menu) | |||
427 | check_conf(child); | 428 | check_conf(child); |
428 | } | 429 | } |
429 | 430 | ||
430 | static void conf_do_update(void) | ||
431 | { | ||
432 | /* Update until a loop caused no more changes */ | ||
433 | do { | ||
434 | conf_cnt = 0; | ||
435 | check_conf(&rootmenu); | ||
436 | } while (conf_cnt); | ||
437 | } | ||
438 | |||
439 | static int conf_silent_update(void) | ||
440 | { | ||
441 | const char *name; | ||
442 | |||
443 | if (conf_get_changed()) { | ||
444 | name = getenv("KCONFIG_NOSILENTUPDATE"); | ||
445 | if (name && *name) { | ||
446 | fprintf(stderr, | ||
447 | _("\n*** Kernel configuration requires explicit update.\n\n")); | ||
448 | return 1; | ||
449 | } | ||
450 | conf_do_update(); | ||
451 | } | ||
452 | return 0; | ||
453 | } | ||
454 | |||
455 | static int conf_update(void) | ||
456 | { | ||
457 | rootEntry = &rootmenu; | ||
458 | conf(&rootmenu); | ||
459 | if (input_mode == ask_all) { | ||
460 | input_mode = ask_silent; | ||
461 | valid_stdin = 1; | ||
462 | } | ||
463 | conf_do_update(); | ||
464 | return 0; | ||
465 | } | ||
466 | |||
467 | int main(int ac, char **av) | 431 | int main(int ac, char **av) |
468 | { | 432 | { |
469 | int opt; | 433 | int opt; |
@@ -477,11 +441,11 @@ int main(int ac, char **av) | |||
477 | while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) { | 441 | while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) { |
478 | switch (opt) { | 442 | switch (opt) { |
479 | case 'o': | 443 | case 'o': |
480 | input_mode = ask_new; | 444 | input_mode = ask_silent; |
481 | break; | 445 | break; |
482 | case 's': | 446 | case 's': |
483 | input_mode = ask_silent; | 447 | input_mode = ask_silent; |
484 | valid_stdin = isatty(0) && isatty(1) && isatty(2); | 448 | sync_kconfig = 1; |
485 | break; | 449 | break; |
486 | case 'd': | 450 | case 'd': |
487 | input_mode = set_default; | 451 | input_mode = set_default; |
@@ -519,6 +483,19 @@ int main(int ac, char **av) | |||
519 | name = av[optind]; | 483 | name = av[optind]; |
520 | conf_parse(name); | 484 | conf_parse(name); |
521 | //zconfdump(stdout); | 485 | //zconfdump(stdout); |
486 | if (sync_kconfig) { | ||
487 | if (stat(".config", &tmpstat)) { | ||
488 | fprintf(stderr, _("***\n" | ||
489 | "*** You have not yet configured your kernel!\n" | ||
490 | "*** (missing kernel .config file)\n" | ||
491 | "***\n" | ||
492 | "*** Please run some configurator (e.g. \"make oldconfig\" or\n" | ||
493 | "*** \"make menuconfig\" or \"make xconfig\").\n" | ||
494 | "***\n")); | ||
495 | exit(1); | ||
496 | } | ||
497 | } | ||
498 | |||
522 | switch (input_mode) { | 499 | switch (input_mode) { |
523 | case set_default: | 500 | case set_default: |
524 | if (!defconfig_file) | 501 | if (!defconfig_file) |
@@ -531,16 +508,6 @@ int main(int ac, char **av) | |||
531 | } | 508 | } |
532 | break; | 509 | break; |
533 | case ask_silent: | 510 | case ask_silent: |
534 | if (stat(".config", &tmpstat)) { | ||
535 | printf(_("***\n" | ||
536 | "*** You have not yet configured your kernel!\n" | ||
537 | "*** (missing kernel .config file)\n" | ||
538 | "***\n" | ||
539 | "*** Please run some configurator (e.g. \"make oldconfig\" or\n" | ||
540 | "*** \"make menuconfig\" or \"make xconfig\").\n" | ||
541 | "***\n")); | ||
542 | exit(1); | ||
543 | } | ||
544 | case ask_all: | 511 | case ask_all: |
545 | case ask_new: | 512 | case ask_new: |
546 | conf_read(NULL); | 513 | conf_read(NULL); |
@@ -569,6 +536,19 @@ int main(int ac, char **av) | |||
569 | default: | 536 | default: |
570 | break; | 537 | break; |
571 | } | 538 | } |
539 | |||
540 | if (sync_kconfig) { | ||
541 | if (conf_get_changed()) { | ||
542 | name = getenv("KCONFIG_NOSILENTUPDATE"); | ||
543 | if (name && *name) { | ||
544 | fprintf(stderr, | ||
545 | _("\n*** Kernel configuration requires explicit update.\n\n")); | ||
546 | return 1; | ||
547 | } | ||
548 | } | ||
549 | valid_stdin = isatty(0) && isatty(1) && isatty(2); | ||
550 | } | ||
551 | |||
572 | switch (input_mode) { | 552 | switch (input_mode) { |
573 | case set_no: | 553 | case set_no: |
574 | conf_set_all_new_symbols(def_no); | 554 | conf_set_all_new_symbols(def_no); |
@@ -585,27 +565,38 @@ int main(int ac, char **av) | |||
585 | case set_default: | 565 | case set_default: |
586 | conf_set_all_new_symbols(def_default); | 566 | conf_set_all_new_symbols(def_default); |
587 | break; | 567 | break; |
588 | case ask_silent: | ||
589 | case ask_new: | 568 | case ask_new: |
590 | if (conf_silent_update()) | ||
591 | exit(1); | ||
592 | break; | ||
593 | case ask_all: | 569 | case ask_all: |
594 | if (conf_update()) | 570 | rootEntry = &rootmenu; |
595 | exit(1); | 571 | conf(&rootmenu); |
572 | input_mode = ask_silent; | ||
573 | /* fall through */ | ||
574 | case ask_silent: | ||
575 | /* Update until a loop caused no more changes */ | ||
576 | do { | ||
577 | conf_cnt = 0; | ||
578 | check_conf(&rootmenu); | ||
579 | } while (conf_cnt); | ||
596 | break; | 580 | break; |
597 | } | 581 | } |
598 | 582 | ||
599 | if (conf_write(NULL)) { | 583 | if (sync_kconfig) { |
600 | fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); | 584 | /* silentoldconfig is used during the build so we shall update autoconf. |
601 | exit(1); | 585 | * All other commands are only used to generate a config. |
602 | } | 586 | */ |
603 | /* ask_silent is used during the build so we shall update autoconf. | 587 | if (conf_get_changed() && conf_write(NULL)) { |
604 | * All other commands are only used to generate a config. | 588 | fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); |
605 | */ | 589 | exit(1); |
606 | if (input_mode == ask_silent && conf_write_autoconf()) { | 590 | } |
607 | fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); | 591 | if (conf_write_autoconf()) { |
608 | return 1; | 592 | fprintf(stderr, _("\n*** Error during update of the kernel configuration.\n\n")); |
593 | return 1; | ||
594 | } | ||
595 | } else { | ||
596 | if (conf_write(NULL)) { | ||
597 | fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); | ||
598 | exit(1); | ||
599 | } | ||
609 | } | 600 | } |
610 | return 0; | 601 | return 0; |
611 | } | 602 | } |