Skip to content

Commit

Permalink
kconfig: set all new symbols automatically
Browse files Browse the repository at this point in the history
Add conf_set_all_new_symbols() which set all symbols (which don't have a
value yet) to a specifed value.

Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
  • Loading branch information
Roman Zippel authored and Sam Ravnborg committed Jul 25, 2008
1 parent a717417 commit dc7862e
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
70 changes: 70 additions & 0 deletions scripts/kconfig/confdata.c
Original file line number Diff line number Diff line change
Expand Up @@ -812,3 +812,73 @@ void conf_set_changed_callback(void (*fn)(void))
{
conf_changed_callback = fn;
}


void conf_set_all_new_symbols(enum conf_def_mode mode)
{
struct symbol *sym, *csym;
struct property *prop;
struct expr *e;
int i, cnt, def;

for_all_symbols(i, sym) {
if (sym_has_value(sym))
continue;
switch (sym_get_type(sym)) {
case S_BOOLEAN:
case S_TRISTATE:
switch (mode) {
case def_yes:
sym->def[S_DEF_USER].tri = yes;
break;
case def_mod:
sym->def[S_DEF_USER].tri = mod;
break;
case def_no:
sym->def[S_DEF_USER].tri = no;
break;
case def_random:
sym->def[S_DEF_USER].tri = (tristate)(rand() % 3);
break;
default:
continue;
}
if (!sym_is_choice(sym) || mode != def_random)
sym->flags |= SYMBOL_DEF_USER;
break;
default:
break;
}

}

if (modules_sym)
sym_calc_value(modules_sym);

if (mode != def_random)
return;

for_all_symbols(i, csym) {
if (sym_has_value(csym) || !sym_is_choice(csym))
continue;

sym_calc_value(csym);
prop = sym_get_choice_prop(csym);
def = -1;
while (1) {
cnt = 0;
expr_list_for_each_sym(prop->expr, e, sym) {
if (sym->visible == no)
continue;
if (def == cnt++) {
csym->def[S_DEF_USER].val = sym;
break;
}
}
if (def >= 0 || cnt < 2)
break;
def = (rand() % cnt) + 1;
}
csym->flags |= SYMBOL_DEF_USER;
}
}
9 changes: 9 additions & 0 deletions scripts/kconfig/lkc.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@ extern "C" {
#define TF_PARAM 0x0002
#define TF_OPTION 0x0004

enum conf_def_mode {
def_default,
def_yes,
def_mod,
def_no,
def_random
};

#define T_OPT_MODULES 1
#define T_OPT_DEFCONFIG_LIST 2
#define T_OPT_ENV 3
Expand Down Expand Up @@ -69,6 +77,7 @@ const char *conf_get_configname(void);
char *conf_get_default_confname(void);
void sym_set_change_count(int count);
void sym_add_change_count(int count);
void conf_set_all_new_symbols(enum conf_def_mode mode);

/* kconfig_load.c */
void kconfig_load(void);
Expand Down

0 comments on commit dc7862e

Please sign in to comment.