Skip to content

Commit

Permalink
kconfig: add defconfig_list/module option
Browse files Browse the repository at this point in the history
This makes it possible to change two options which were hardcoded sofar.
1. Any symbol can now take the role of CONFIG_MODULES
2. The more useful option is to change the list of default file names,
   which kconfig uses to load the base configuration if .config isn't
   available.

Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
  • Loading branch information
Roman Zippel authored and Sam Ravnborg committed Jun 9, 2006
1 parent f6a88aa commit face437
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 24 deletions.
8 changes: 8 additions & 0 deletions init/Kconfig
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
config DEFCONFIG_LIST
string
option defconfig_list
default "/lib/modules/$UNAME_RELEASE/.config"
default "/etc/kernel-config"
default "/boot/config-$UNAME_RELEASE"
default "arch/$ARCH/defconfig"

menu "Code maturity level options"

config EXPERIMENTAL
Expand Down
26 changes: 11 additions & 15 deletions scripts/kconfig/confdata.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,6 @@ const char conf_def_filename[] = ".config";

const char conf_defname[] = "arch/$ARCH/defconfig";

const char *conf_confnames[] = {
".config",
"/lib/modules/$UNAME_RELEASE/.config",
"/etc/kernel-config",
"/boot/config-$UNAME_RELEASE",
conf_defname,
NULL,
};

static void conf_warning(const char *fmt, ...)
{
va_list ap;
Expand Down Expand Up @@ -98,16 +89,21 @@ int conf_read_simple(const char *name, int def)
if (name) {
in = zconf_fopen(name);
} else {
const char **names = conf_confnames;
name = *names++;
if (!name)
return 1;
struct property *prop;

name = conf_def_filename;
in = zconf_fopen(name);
if (in)
goto load;
sym_change_count++;
while ((name = *names++)) {
name = conf_expand_value(name);
if (!sym_defconfig_list)
return 1;

for_all_defaults(sym_defconfig_list, prop) {
if (expr_calc_value(prop->visible.expr) == no ||
prop->expr->type != E_SYMBOL)
continue;
name = conf_expand_value(prop->expr->left.sym->name);
in = zconf_fopen(name);
if (in) {
printf(_("#\n"
Expand Down
1 change: 1 addition & 0 deletions scripts/kconfig/expr.h
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ struct file *lookup_file(const char *name);

extern struct symbol symbol_yes, symbol_no, symbol_mod;
extern struct symbol *modules_sym;
extern struct symbol *sym_defconfig_list;
extern int cdebug;
struct expr *expr_alloc_symbol(struct symbol *sym);
struct expr *expr_alloc_one(enum expr_type type, struct expr *ce);
Expand Down
1 change: 1 addition & 0 deletions scripts/kconfig/lkc.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ const char *str_get(struct gstr *gs);
/* symbol.c */
void sym_init(void);
void sym_clear_all_valid(void);
void sym_set_all_changed(void);
void sym_set_changed(struct symbol *sym);
struct symbol *sym_check_deps(struct symbol *sym);
struct property *prop_alloc(enum prop_type type, struct symbol *sym);
Expand Down
14 changes: 14 additions & 0 deletions scripts/kconfig/menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,20 @@ void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep)

void menu_add_option(int token, char *arg)
{
struct property *prop;

switch (token) {
case T_OPT_MODULES:
prop = prop_alloc(P_DEFAULT, modules_sym);
prop->expr = expr_alloc_symbol(current_entry->sym);
break;
case T_OPT_DEFCONFIG_LIST:
if (!sym_defconfig_list)
sym_defconfig_list = current_entry->sym;
else if (sym_defconfig_list != current_entry->sym)
zconf_error("trying to redefine defconfig symbol");
break;
}
}

static int menu_range_valid_sym(struct symbol *sym, struct symbol *sym2)
Expand Down
15 changes: 8 additions & 7 deletions scripts/kconfig/symbol.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ struct symbol symbol_yes = {
};

int sym_change_count;
struct symbol *sym_defconfig_list;
struct symbol *modules_sym;
tristate modules_val;

Expand Down Expand Up @@ -352,10 +353,13 @@ void sym_calc_value(struct symbol *sym)
sym->curr.val = sym_calc_choice(sym);
sym_validate_range(sym);

if (memcmp(&oldval, &sym->curr, sizeof(oldval)))
if (memcmp(&oldval, &sym->curr, sizeof(oldval))) {
sym_set_changed(sym);
if (modules_sym == sym)
modules_val = modules_sym->curr.tri;
if (modules_sym == sym) {
sym_set_all_changed();
modules_val = modules_sym->curr.tri;
}
}

if (sym_is_choice(sym)) {
int flags = sym->flags & (SYMBOL_CHANGED | SYMBOL_WRITE);
Expand Down Expand Up @@ -449,11 +453,8 @@ bool sym_set_tristate_value(struct symbol *sym, tristate val)
}

sym->def[S_DEF_USER].tri = val;
if (oldval != val) {
if (oldval != val)
sym_clear_all_valid();
if (sym == modules_sym)
sym_set_all_changed();
}

return true;
}
Expand Down
10 changes: 9 additions & 1 deletion scripts/kconfig/zconf.tab.c_shipped
Original file line number Diff line number Diff line change
Expand Up @@ -2112,7 +2112,9 @@ void conf_parse(const char *name)

sym_init();
menu_init();
modules_sym = sym_lookup("MODULES", 0);
modules_sym = sym_lookup(NULL, 0);
modules_sym->type = S_BOOLEAN;
modules_sym->flags |= SYMBOL_AUTO;
rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);

#if YYDEBUG
Expand All @@ -2122,6 +2124,12 @@ void conf_parse(const char *name)
zconfparse();
if (zconfnerrs)
exit(1);
if (!modules_sym->prop) {
struct property *prop;

prop = prop_alloc(P_DEFAULT, modules_sym);
prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0));
}
menu_finalize(&rootmenu);
for_all_symbols(i, sym) {
sym_check_deps(sym);
Expand Down
10 changes: 9 additions & 1 deletion scripts/kconfig/zconf.y
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,9 @@ void conf_parse(const char *name)

sym_init();
menu_init();
modules_sym = sym_lookup("MODULES", 0);
modules_sym = sym_lookup(NULL, 0);
modules_sym->type = S_BOOLEAN;
modules_sym->flags |= SYMBOL_AUTO;
rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);

#if YYDEBUG
Expand All @@ -491,6 +493,12 @@ void conf_parse(const char *name)
zconfparse();
if (zconfnerrs)
exit(1);
if (!modules_sym->prop) {
struct property *prop;

prop = prop_alloc(P_DEFAULT, modules_sym);
prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0));
}
menu_finalize(&rootmenu);
for_all_symbols(i, sym) {
sym_check_deps(sym);
Expand Down

0 comments on commit face437

Please sign in to comment.