lkml.org 
[lkml]   [2008]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 20/24] kconfig: set all new symbols automatically
    Date
    From: Roman Zippel <zippel@linux-m68k.org>

    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>
    ---
    scripts/kconfig/confdata.c | 70 ++++++++++++++++++++++++++++++++++++++++++++
    scripts/kconfig/lkc.h | 9 +++++
    2 files changed, 79 insertions(+), 0 deletions(-)

    diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
    index ee5fe94..0759761 100644
    --- a/scripts/kconfig/confdata.c
    +++ b/scripts/kconfig/confdata.c
    @@ -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;
    + }
    +}
    diff --git a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h
    index 96521cb..4a9af6f 100644
    --- a/scripts/kconfig/lkc.h
    +++ b/scripts/kconfig/lkc.h
    @@ -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
    @@ -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);
    --
    1.5.6.1.93.gef98


    \
     
     \ /
      Last update: 2008-06-30 23:45    [W:0.030 / U:60.136 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site