diff options
Diffstat (limited to 'scripts/kconfig/conf.c')
-rw-r--r-- | scripts/kconfig/conf.c | 161 |
1 files changed, 75 insertions, 86 deletions
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index bde01b4..2dec584 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c @@ -10,6 +10,7 @@ #include <string.h> #include <time.h> #include <unistd.h> +#include <getopt.h> #include <sys/stat.h> #include <sys/time.h> @@ -23,18 +24,19 @@ static void conf(struct menu *menu); static void check_conf(struct menu *menu); -enum { - ask_all, - ask_new, - ask_silent, - dont_ask, - dont_ask_dont_tell, - set_default, - set_yes, - set_mod, - set_no, - set_random -} input_mode = ask_all; +enum input_mode { + oldaskconfig, + silentoldconfig, + oldconfig, + allnoconfig, + allyesconfig, + allmodconfig, + randconfig, + defconfig, + nonint_oldconfig, + loose_nonint_oldconfig, +} input_mode = oldaskconfig; + char *defconfig_file; static int indent = 1; @@ -100,14 +102,14 @@ static int conf_askvalue(struct symbol *sym, const char *def) } switch (input_mode) { - case ask_new: - case ask_silent: + case oldconfig: + case silentoldconfig: if (sym_has_value(sym)) { printf("%s\n", def); return 0; } check_stdin(); - case ask_all: + case oldaskconfig: fflush(stdout); fgets(line, 128, stdin); return 1; @@ -297,15 +299,15 @@ static int conf_choice(struct menu *menu) printf("?"); printf("]: "); switch (input_mode) { - case ask_new: - case ask_silent: + case oldconfig: + case silentoldconfig: if (!is_new) { cnt = def; printf("%d\n", cnt); break; } check_stdin(); - case ask_all: + case oldaskconfig: fflush(stdout); fgets(line, 128, stdin); strip(line); @@ -363,9 +365,9 @@ static void conf(struct menu *menu) switch (prop->type) { case P_MENU: - if ((input_mode == ask_silent || - input_mode == dont_ask || - input_mode == dont_ask_dont_tell) && + if ((input_mode == silentoldconfig || + input_mode == nonint_oldconfig || + input_mode == loose_nonint_oldconfig) && rootEntry != menu) { check_conf(menu); return; @@ -424,9 +426,9 @@ static void check_conf(struct menu *menu) if (sym && !sym_has_value(sym)) { if (sym_is_changable(sym) || (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) { - if (input_mode == dont_ask || - input_mode == dont_ask_dont_tell) { - if (input_mode == dont_ask && + if (input_mode == nonint_oldconfig || + input_mode == loose_nonint_oldconfig) { + if (input_mode == nonint_oldconfig && sym->name && !sym_is_choice_value(sym)) { if (!unset_variables) fprintf(stderr, "The following" @@ -448,6 +450,20 @@ static void check_conf(struct menu *menu) check_conf(child); } +static struct option long_opts[] = { + {"oldaskconfig", no_argument, NULL, oldaskconfig}, + {"oldconfig", no_argument, NULL, oldconfig}, + {"silentoldconfig", no_argument, NULL, silentoldconfig}, + {"defconfig", optional_argument, NULL, defconfig}, + {"allnoconfig", no_argument, NULL, allnoconfig}, + {"allyesconfig", no_argument, NULL, allyesconfig}, + {"allmodconfig", no_argument, NULL, allmodconfig}, + {"randconfig", no_argument, NULL, randconfig}, + {"nonint_oldconfig", no_argument, NULL, nonint_oldconfig}, + {"loose_nonint_oldconfig", no_argument, NULL, loose_nonint_oldconfig}, + {NULL, 0, NULL, 0} +}; + int main(int ac, char **av) { int opt; @@ -458,38 +474,16 @@ int main(int ac, char **av) bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); - while ((opt = getopt(ac, av, "osbBdD:nmyrh")) != -1) { + while ((opt = getopt_long_only(ac, av, "", long_opts, NULL)) != -1) { + input_mode = (enum input_mode)opt; switch (opt) { - case 'o': - input_mode = ask_silent; - break; - case 's': - input_mode = ask_silent; + case silentoldconfig: sync_kconfig = 1; break; - case 'b': - input_mode = dont_ask; - break; - case 'B': - input_mode = dont_ask_dont_tell; - break; - case 'd': - input_mode = set_default; - break; - case 'D': - input_mode = set_default; + case defconfig: defconfig_file = optarg; break; - case 'n': - input_mode = set_no; - break; - case 'm': - input_mode = set_mod; - break; - case 'y': - input_mode = set_yes; - break; - case 'r': + case randconfig: { struct timeval now; unsigned int seed; @@ -502,17 +496,12 @@ int main(int ac, char **av) seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1)); srand(seed); - - input_mode = set_random; break; } - case 'h': - printf(_("See README for usage info\n")); - exit(0); - break; - default: + case '?': fprintf(stderr, _("See README for usage info\n")); exit(1); + break; } } if (ac == optind) { @@ -537,7 +526,7 @@ int main(int ac, char **av) } switch (input_mode) { - case set_default: + case defconfig: if (!defconfig_file) defconfig_file = conf_get_default_confname(); if (conf_read(defconfig_file)) { @@ -547,27 +536,27 @@ int main(int ac, char **av) exit(1); } break; - case ask_silent: - case ask_all: - case ask_new: - case dont_ask: - case dont_ask_dont_tell: + case silentoldconfig: + case oldaskconfig: + case oldconfig: + case nonint_oldconfig: + case loose_nonint_oldconfig: conf_read(NULL); break; - case set_no: - case set_mod: - case set_yes: - case set_random: + case allnoconfig: + case allyesconfig: + case allmodconfig: + case randconfig: name = getenv("KCONFIG_ALLCONFIG"); if (name && !stat(name, &tmpstat)) { conf_read_simple(name, S_DEF_USER); break; } switch (input_mode) { - case set_no: name = "allno.config"; break; - case set_mod: name = "allmod.config"; break; - case set_yes: name = "allyes.config"; break; - case set_random: name = "allrandom.config"; break; + case allnoconfig: name = "allno.config"; break; + case allyesconfig: name = "allyes.config"; break; + case allmodconfig: name = "allmod.config"; break; + case randconfig: name = "allrandom.config"; break; default: break; } if (!stat(name, &tmpstat)) @@ -592,37 +581,37 @@ int main(int ac, char **av) } switch (input_mode) { - case set_no: + case allnoconfig: conf_set_all_new_symbols(def_no); break; - case set_yes: + case allyesconfig: conf_set_all_new_symbols(def_yes); break; - case set_mod: + case allmodconfig: conf_set_all_new_symbols(def_mod); break; - case set_random: + case randconfig: conf_set_all_new_symbols(def_random); break; - case set_default: + case defconfig: conf_set_all_new_symbols(def_default); break; - case ask_new: - case ask_all: + case oldconfig: + case oldaskconfig: rootEntry = &rootmenu; conf(&rootmenu); - input_mode = ask_silent; + input_mode = silentoldconfig; /* fall through */ - case dont_ask: - case dont_ask_dont_tell: - case ask_silent: + case nonint_oldconfig: + case loose_nonint_oldconfig: + case silentoldconfig: /* Update until a loop caused no more changes */ do { conf_cnt = 0; check_conf(&rootmenu); } while (conf_cnt && - (input_mode != dont_ask && - input_mode != dont_ask_dont_tell)); + (input_mode != nonint_oldconfig && + input_mode != loose_nonint_oldconfig)); break; } @@ -638,7 +627,7 @@ int main(int ac, char **av) fprintf(stderr, _("\n*** Error during update of the kernel configuration.\n\n")); return 1; } - } else if (!unset_variables || input_mode != dont_ask) { + } else if (!unset_variables || input_mode != nonint_oldconfig) { if (conf_write(NULL)) { fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); exit(1); |