Message ID | 1306795186.2029.459.camel@i7.infradead.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 31.5.2011 18:12, Arnaud Lacombe wrote: > Hi, > > On Tue, May 31, 2011 at 11:48 AM, David Woodhouse<dwmw2@infradead.org> wrote: >> On Mon, 2011-05-30 at 20:24 -0400, Arnaud Lacombe wrote: >>> It would seem that the underlying symbol is not visible, triggering >>> the failure of sym_set_tristate_value(). >> >> Yes, this only lets you set *visible* symbols. If the symbol you're >> interested in is not visible because some of its dependencies are not >> set, it doesn't go and automatically enable those. >> > As for this choice, it *is* visible. You are missing a call to > `sym_calc_value()' (actually sym_calc_visibility() but it is not > exported) before the conditional to correct the visibility. David, will you post a patch with this fix? $ make CONFIG_ARCH_OMAP=y ARCH=arm allnoconfig $ grep CONFIG_ARCH_OMAP .config # CONFIG_ARCH_OMAP is not set vs. $ echo CONFIG_ARCH_OMAP=y >all.config $ make ARCH=arm allnoconfig $ grep CONFIG_ARCH_OMAP .config CONFIG_ARCH_OMAP=y ... > Beside that, if the environment is to influence the configuration > unconditionally, it would rather be better to do that when the Kconfig > are parsed. I don't quite understand what you mean here. The environment variables are evaluated right after the potential all*.config file is read. Do you think there is a problem with that? Michal -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index 006ad81..2b91e3b 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c @@ -456,7 +456,7 @@ static struct option long_opts[] = { {NULL, 0, NULL, 0} }; -int main(int ac, char **av) +int main(int ac, char **av, char **ep) { int opt; const char *name; @@ -563,6 +563,11 @@ int main(int ac, char **av) break; } + for ( ; *ep; ep++) { + if (!strncmp(*ep, CONFIG_, strlen(CONFIG_))) + conf_set_symbol_from_env(*ep); + } + if (sync_kconfig) { if (conf_get_changed()) { name = getenv("KCONFIG_NOSILENTUPDATE"); diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 61c35bf..e8ff902 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c @@ -338,6 +338,47 @@ setsym: return 0; } +void conf_set_symbol_from_env(char *str) +{ + char *p = strchr(str, '='); + struct symbol *sym; + int def = S_DEF_USER; + int def_flags = SYMBOL_DEF << def; + + if (!p) + return; + + *p = 0; + sym = sym_find(str + strlen(CONFIG_)); + *p++ = '='; + + if (!sym) + return; + + if (!sym_set_string_value(sym, p)) + return; + conf_message("CONFIG_%s set to %s from environment", sym->name, p); + if (sym && sym_is_choice_value(sym)) { + struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); + switch (sym->def[def].tri) { + case no: + break; + case mod: + if (cs->def[def].tri == yes) { + conf_warning("%s creates inconsistent choice state", sym->name); + cs->flags &= ~def_flags; + } + break; + case yes: + if (cs->def[def].tri != no) + conf_warning("override: %s changes choice state", sym->name); + cs->def[def].val = sym; + break; + } + cs->def[def].tri = EXPR_OR(cs->def[def].tri, sym->def[def].tri); + } +} + int conf_read(const char *name) { struct symbol *sym, *choice_sym; diff --git a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h index febf0c9..bf6fade 100644 --- a/scripts/kconfig/lkc.h +++ b/scripts/kconfig/lkc.h @@ -91,6 +91,7 @@ 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); +void conf_set_symbol_from_env(char *); /* confdata.c and expr.c */ static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
This allows you to set (and clear) config options on the make command line, for all config targets. For example: make CONFIG_64BIT=n randconfig make CONFIG_64BIT=n allmodconfig make CONFIG_64BIT=y CONFIG_SATA_MV=y oldconfig Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>