Commit 204c96f6 authored by zippel@linux-m68k.org's avatar zippel@linux-m68k.org Committed by Linus Torvalds

kconfig: fix silentoldconfig

Recent changes to oldconfig have mixed up the silentoldconfig handling,
so this fixes that by clearly separating that special mode, e.g.
KCONFIG_NOSILENTUPDATE is only relevant here, the .config is written as
needed.

This will also properly close Bug 11230.
Signed-off-by: default avatarRoman Zippel <zippel@linux-m68k.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d0185c08
...@@ -32,6 +32,7 @@ char *defconfig_file; ...@@ -32,6 +32,7 @@ char *defconfig_file;
static int indent = 1; static int indent = 1;
static int valid_stdin = 1; static int valid_stdin = 1;
static int sync_kconfig;
static int conf_cnt; static int conf_cnt;
static char line[128]; static char line[128];
static struct menu *rootEntry; static struct menu *rootEntry;
...@@ -65,7 +66,7 @@ static void strip(char *str) ...@@ -65,7 +66,7 @@ static void strip(char *str)
static void check_stdin(void) static void check_stdin(void)
{ {
if (!valid_stdin && input_mode == ask_silent) { if (!valid_stdin) {
printf(_("aborted!\n\n")); printf(_("aborted!\n\n"));
printf(_("Console input/output is redirected. ")); printf(_("Console input/output is redirected. "));
printf(_("Run 'make oldconfig' to update configuration.\n\n")); printf(_("Run 'make oldconfig' to update configuration.\n\n"));
...@@ -427,43 +428,6 @@ static void check_conf(struct menu *menu) ...@@ -427,43 +428,6 @@ static void check_conf(struct menu *menu)
check_conf(child); check_conf(child);
} }
static void conf_do_update(void)
{
/* Update until a loop caused no more changes */
do {
conf_cnt = 0;
check_conf(&rootmenu);
} while (conf_cnt);
}
static int conf_silent_update(void)
{
const char *name;
if (conf_get_changed()) {
name = getenv("KCONFIG_NOSILENTUPDATE");
if (name && *name) {
fprintf(stderr,
_("\n*** Kernel configuration requires explicit update.\n\n"));
return 1;
}
conf_do_update();
}
return 0;
}
static int conf_update(void)
{
rootEntry = &rootmenu;
conf(&rootmenu);
if (input_mode == ask_all) {
input_mode = ask_silent;
valid_stdin = 1;
}
conf_do_update();
return 0;
}
int main(int ac, char **av) int main(int ac, char **av)
{ {
int opt; int opt;
...@@ -477,11 +441,11 @@ int main(int ac, char **av) ...@@ -477,11 +441,11 @@ int main(int ac, char **av)
while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) { while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
switch (opt) { switch (opt) {
case 'o': case 'o':
input_mode = ask_new; input_mode = ask_silent;
break; break;
case 's': case 's':
input_mode = ask_silent; input_mode = ask_silent;
valid_stdin = isatty(0) && isatty(1) && isatty(2); sync_kconfig = 1;
break; break;
case 'd': case 'd':
input_mode = set_default; input_mode = set_default;
...@@ -519,6 +483,19 @@ int main(int ac, char **av) ...@@ -519,6 +483,19 @@ int main(int ac, char **av)
name = av[optind]; name = av[optind];
conf_parse(name); conf_parse(name);
//zconfdump(stdout); //zconfdump(stdout);
if (sync_kconfig) {
if (stat(".config", &tmpstat)) {
fprintf(stderr, _("***\n"
"*** You have not yet configured your kernel!\n"
"*** (missing kernel .config file)\n"
"***\n"
"*** Please run some configurator (e.g. \"make oldconfig\" or\n"
"*** \"make menuconfig\" or \"make xconfig\").\n"
"***\n"));
exit(1);
}
}
switch (input_mode) { switch (input_mode) {
case set_default: case set_default:
if (!defconfig_file) if (!defconfig_file)
...@@ -531,16 +508,6 @@ int main(int ac, char **av) ...@@ -531,16 +508,6 @@ int main(int ac, char **av)
} }
break; break;
case ask_silent: case ask_silent:
if (stat(".config", &tmpstat)) {
printf(_("***\n"
"*** You have not yet configured your kernel!\n"
"*** (missing kernel .config file)\n"
"***\n"
"*** Please run some configurator (e.g. \"make oldconfig\" or\n"
"*** \"make menuconfig\" or \"make xconfig\").\n"
"***\n"));
exit(1);
}
case ask_all: case ask_all:
case ask_new: case ask_new:
conf_read(NULL); conf_read(NULL);
...@@ -569,6 +536,19 @@ int main(int ac, char **av) ...@@ -569,6 +536,19 @@ int main(int ac, char **av)
default: default:
break; break;
} }
if (sync_kconfig) {
if (conf_get_changed()) {
name = getenv("KCONFIG_NOSILENTUPDATE");
if (name && *name) {
fprintf(stderr,
_("\n*** Kernel configuration requires explicit update.\n\n"));
return 1;
}
}
valid_stdin = isatty(0) && isatty(1) && isatty(2);
}
switch (input_mode) { switch (input_mode) {
case set_no: case set_no:
conf_set_all_new_symbols(def_no); conf_set_all_new_symbols(def_no);
...@@ -585,27 +565,38 @@ int main(int ac, char **av) ...@@ -585,27 +565,38 @@ int main(int ac, char **av)
case set_default: case set_default:
conf_set_all_new_symbols(def_default); conf_set_all_new_symbols(def_default);
break; break;
case ask_silent:
case ask_new: case ask_new:
if (conf_silent_update())
exit(1);
break;
case ask_all: case ask_all:
if (conf_update()) rootEntry = &rootmenu;
exit(1); conf(&rootmenu);
input_mode = ask_silent;
/* fall through */
case ask_silent:
/* Update until a loop caused no more changes */
do {
conf_cnt = 0;
check_conf(&rootmenu);
} while (conf_cnt);
break; break;
} }
if (conf_write(NULL)) { if (sync_kconfig) {
fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); /* silentoldconfig is used during the build so we shall update autoconf.
exit(1); * All other commands are only used to generate a config.
} */
/* ask_silent is used during the build so we shall update autoconf. if (conf_get_changed() && conf_write(NULL)) {
* All other commands are only used to generate a config. fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
*/ exit(1);
if (input_mode == ask_silent && conf_write_autoconf()) { }
fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); if (conf_write_autoconf()) {
return 1; fprintf(stderr, _("\n*** Error during update of the kernel configuration.\n\n"));
return 1;
}
} else {
if (conf_write(NULL)) {
fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
exit(1);
}
} }
return 0; return 0;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment