Commit f0778c8c authored by Aristeu Rozanski's avatar Aristeu Rozanski Committed by Michal Marek

kconfig: introduce nonint_oldconfig and loose_nonint_oldconfig

This patch has been around for a long time in Fedora and Red Hat Enterprise
Linux kernels and it may be useful for others. The nonint_oldconfig target
will fail and print the unset config options while loose_nonint_oldconfig will
simply let the config option unset. They're useful in distro kernel packages
where the config files are built using a combination of smaller config files.

Arjan van de Ven wrote the initial nonint_config and Roland McGrath added the
loose_nonint_oldconfig.

Signed-off-by: Arjan van de Ven <arjan@redhat.com> [defunct email]
Whatevered-by: default avatarKyle McMartin <kyle@redhat.com>
Acked-by: default avatarArjan van de Ven <arjan@linux.intel.com>
Acked-by: default avatarRandy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: default avatarAristeu Rozanski <aris@redhat.com>
[mmarek: whitespace fixes]
Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
parent 64ffc9ff
...@@ -62,6 +62,12 @@ localyesconfig: $(obj)/streamline_config.pl $(obj)/conf ...@@ -62,6 +62,12 @@ localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
fi fi
$(Q)rm -f .tmp.config $(Q)rm -f .tmp.config
nonint_oldconfig: $(obj)/conf
$< -b $(Kconfig)
loose_nonint_oldconfig: $(obj)/conf
$< -B $(Kconfig)
# Create new linux.pot file # Create new linux.pot file
# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
# The symlink is used to repair a deficiency in arch/um # The symlink is used to repair a deficiency in arch/um
...@@ -126,6 +132,10 @@ help: ...@@ -126,6 +132,10 @@ help:
@echo ' allmodconfig - New config selecting modules when possible' @echo ' allmodconfig - New config selecting modules when possible'
@echo ' allyesconfig - New config where all options are accepted with yes' @echo ' allyesconfig - New config where all options are accepted with yes'
@echo ' allnoconfig - New config where all options are answered with no' @echo ' allnoconfig - New config where all options are answered with no'
@echo ' nonint_oldconfig - Checks the current configuration and fails if an option is '
@echo ' not set'
@echo ' loose_nonint_oldconfig - Same as nonint_oldconfig, but updates the config file with '
@echo ' missing config options as unset'
# lxdialog stuff # lxdialog stuff
check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
......
...@@ -16,6 +16,10 @@ ...@@ -16,6 +16,10 @@
#define LKC_DIRECT_LINK #define LKC_DIRECT_LINK
#include "lkc.h" #include "lkc.h"
/* Return codes */
#define EUNSETOPT 2 /* if -B and -b are used and unset config
* options were found */
static void conf(struct menu *menu); static void conf(struct menu *menu);
static void check_conf(struct menu *menu); static void check_conf(struct menu *menu);
...@@ -23,6 +27,8 @@ enum { ...@@ -23,6 +27,8 @@ enum {
ask_all, ask_all,
ask_new, ask_new,
ask_silent, ask_silent,
dont_ask,
dont_ask_dont_tell,
set_default, set_default,
set_yes, set_yes,
set_mod, set_mod,
...@@ -37,6 +43,7 @@ static int sync_kconfig; ...@@ -37,6 +43,7 @@ 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;
static int unset_variables;
static void print_help(struct menu *menu) static void print_help(struct menu *menu)
{ {
...@@ -360,7 +367,10 @@ static void conf(struct menu *menu) ...@@ -360,7 +367,10 @@ static void conf(struct menu *menu)
switch (prop->type) { switch (prop->type) {
case P_MENU: case P_MENU:
if (input_mode == ask_silent && rootEntry != menu) { if ((input_mode == ask_silent ||
input_mode == dont_ask ||
input_mode == dont_ask_dont_tell) &&
rootEntry != menu) {
check_conf(menu); check_conf(menu);
return; return;
} }
...@@ -418,12 +428,25 @@ static void check_conf(struct menu *menu) ...@@ -418,12 +428,25 @@ static void check_conf(struct menu *menu)
if (sym && !sym_has_value(sym)) { if (sym && !sym_has_value(sym)) {
if (sym_is_changable(sym) || if (sym_is_changable(sym) ||
(sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) { (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 &&
sym->name && !sym_is_choice_value(sym)) {
if (!unset_variables)
fprintf(stderr, "The following"
" variables are not set:\n");
fprintf(stderr, "CONFIG_%s\n",
sym->name);
unset_variables++;
}
} else {
if (!conf_cnt++) if (!conf_cnt++)
printf(_("*\n* Restart config...\n*\n")); printf(_("*\n* Restart config...\n*\n"));
rootEntry = menu_get_parent_menu(menu); rootEntry = menu_get_parent_menu(menu);
conf(rootEntry); conf(rootEntry);
} }
} }
}
for (child = menu->list; child; child = child->next) for (child = menu->list; child; child = child->next)
check_conf(child); check_conf(child);
...@@ -439,7 +462,7 @@ int main(int ac, char **av) ...@@ -439,7 +462,7 @@ int main(int ac, char **av)
bindtextdomain(PACKAGE, LOCALEDIR); bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE); textdomain(PACKAGE);
while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) { while ((opt = getopt(ac, av, "osbBdD:nmyrh")) != -1) {
switch (opt) { switch (opt) {
case 'o': case 'o':
input_mode = ask_silent; input_mode = ask_silent;
...@@ -448,6 +471,12 @@ int main(int ac, char **av) ...@@ -448,6 +471,12 @@ int main(int ac, char **av)
input_mode = ask_silent; input_mode = ask_silent;
sync_kconfig = 1; sync_kconfig = 1;
break; break;
case 'b':
input_mode = dont_ask;
break;
case 'B':
input_mode = dont_ask_dont_tell;
break;
case 'd': case 'd':
input_mode = set_default; input_mode = set_default;
break; break;
...@@ -525,6 +554,8 @@ int main(int ac, char **av) ...@@ -525,6 +554,8 @@ int main(int ac, char **av)
case ask_silent: case ask_silent:
case ask_all: case ask_all:
case ask_new: case ask_new:
case dont_ask:
case dont_ask_dont_tell:
conf_read(NULL); conf_read(NULL);
break; break;
case set_no: case set_no:
...@@ -586,12 +617,16 @@ int main(int ac, char **av) ...@@ -586,12 +617,16 @@ int main(int ac, char **av)
conf(&rootmenu); conf(&rootmenu);
input_mode = ask_silent; input_mode = ask_silent;
/* fall through */ /* fall through */
case dont_ask:
case dont_ask_dont_tell:
case ask_silent: case ask_silent:
/* Update until a loop caused no more changes */ /* Update until a loop caused no more changes */
do { do {
conf_cnt = 0; conf_cnt = 0;
check_conf(&rootmenu); check_conf(&rootmenu);
} while (conf_cnt); } while (conf_cnt &&
(input_mode != dont_ask &&
input_mode != dont_ask_dont_tell));
break; break;
} }
...@@ -607,11 +642,11 @@ int main(int ac, char **av) ...@@ -607,11 +642,11 @@ int main(int ac, char **av)
fprintf(stderr, _("\n*** Error during update of the kernel configuration.\n\n")); fprintf(stderr, _("\n*** Error during update of the kernel configuration.\n\n"));
return 1; return 1;
} }
} else { } else if (!unset_variables || input_mode != dont_ask) {
if (conf_write(NULL)) { if (conf_write(NULL)) {
fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n")); fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
exit(1); exit(1);
} }
} }
return 0; return unset_variables ? EUNSETOPT : 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