diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-09-07 14:40:28 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-09-07 14:40:28 +0200 |
| commit | 0b1c62934215a08351a80977c7cf8e9346683a1e (patch) | |
| tree | 5cfe2efe65bf95134e2db1803ab528bfdbaa8632 /scripts | |
| parent | 9d858f5717cfc261d2ee80efff954acd7b1e5c00 (diff) | |
| download | busybox-w32-0b1c62934215a08351a80977c7cf8e9346683a1e.tar.gz busybox-w32-0b1c62934215a08351a80977c7cf8e9346683a1e.tar.bz2 busybox-w32-0b1c62934215a08351a80977c7cf8e9346683a1e.zip | |
build system: fix "allnoconfig" to clear all options. Closes 10296
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/kconfig/conf.c | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index ea2446a89..e89637e7c 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c | |||
| @@ -76,14 +76,51 @@ static void conf_askvalue(struct symbol *sym, const char *def) | |||
| 76 | 76 | ||
| 77 | line[0] = '\n'; | 77 | line[0] = '\n'; |
| 78 | line[1] = 0; | 78 | line[1] = 0; |
| 79 | line[2] = 0; | ||
| 79 | 80 | ||
| 80 | if (!sym_is_changable(sym)) { | 81 | if (!sym_is_changable(sym)) { |
| 81 | printf("%s\n", def); | 82 | printf("%s\n", def); |
| 82 | line[0] = '\n'; | ||
| 83 | line[1] = 0; | ||
| 84 | return; | 83 | return; |
| 85 | } | 84 | } |
| 86 | 85 | ||
| 86 | // If autoconf run (allnoconfig and such), reset bool and tristates: | ||
| 87 | // "select ITEM" sets ITEM=y and then parent item might have been | ||
| 88 | // reset to "n" later. Try to set ITEM to "n" on the second run. | ||
| 89 | if (type == S_BOOLEAN || type == S_TRISTATE) { | ||
| 90 | switch (input_mode) { | ||
| 91 | case set_yes: | ||
| 92 | if (sym_tristate_within_range(sym, yes)) { | ||
| 93 | line[0] = 'y'; | ||
| 94 | line[1] = '\n'; | ||
| 95 | printf("%s", line); | ||
| 96 | return; | ||
| 97 | } | ||
| 98 | case set_mod: | ||
| 99 | if (type == S_TRISTATE) { | ||
| 100 | if (sym_tristate_within_range(sym, mod)) { | ||
| 101 | line[0] = 'm'; | ||
| 102 | line[1] = '\n'; | ||
| 103 | printf("%s", line); | ||
| 104 | return; | ||
| 105 | } | ||
| 106 | } else { | ||
| 107 | if (sym_tristate_within_range(sym, yes)) { | ||
| 108 | line[0] = 'y'; | ||
| 109 | line[1] = '\n'; | ||
| 110 | printf("%s", line); | ||
| 111 | return; | ||
| 112 | } | ||
| 113 | } | ||
| 114 | case set_no: | ||
| 115 | if (sym_tristate_within_range(sym, no)) { | ||
| 116 | line[0] = 'n'; | ||
| 117 | line[1] = '\n'; | ||
| 118 | printf("%s", line); | ||
| 119 | return; | ||
| 120 | } | ||
| 121 | } | ||
| 122 | } | ||
| 123 | |||
| 87 | switch (input_mode) { | 124 | switch (input_mode) { |
| 88 | case set_no: | 125 | case set_no: |
| 89 | case set_mod: | 126 | case set_mod: |
| @@ -590,6 +627,19 @@ int main(int ac, char **av) | |||
| 590 | if (input_mode != ask_silent) { | 627 | if (input_mode != ask_silent) { |
| 591 | rootEntry = &rootmenu; | 628 | rootEntry = &rootmenu; |
| 592 | conf(&rootmenu); | 629 | conf(&rootmenu); |
| 630 | // If autoconf run (allnoconfig and such), run it twice: | ||
| 631 | // "select ITEM" sets ITEM=y and then parent item | ||
| 632 | // is reset to "n" later. Second run sets ITEM to "n". | ||
| 633 | // Example: ADDUSER selects LONG_OPTS. | ||
| 634 | // allnoconfig must set _both_ to "n". | ||
| 635 | // Before, LONG_OPTS remained "y". | ||
| 636 | if (input_mode == set_no | ||
| 637 | || input_mode == set_mod | ||
| 638 | || input_mode == set_yes | ||
| 639 | ) { | ||
| 640 | rootEntry = &rootmenu; | ||
| 641 | conf(&rootmenu); | ||
| 642 | } | ||
| 593 | if (input_mode == ask_all) { | 643 | if (input_mode == ask_all) { |
| 594 | input_mode = ask_silent; | 644 | input_mode = ask_silent; |
| 595 | valid_stdin = 1; | 645 | valid_stdin = 1; |
