diff options
author | Sam Ravnborg <sam@ravnborg.org> | 2007-11-10 20:40:05 +0100 |
---|---|---|
committer | Sam Ravnborg <sam@ravnborg.org> | 2007-11-12 21:02:20 +0100 |
commit | 0f855aa64b3f63d35a891510cf7db932a435c116 (patch) | |
tree | e3e8ad4bf17598ac3c6aeb6c5fed81fc1096b615 /scripts/kconfig | |
parent | 9c900a9c9d9351e55ab6a84e12e3a52c474c7c8b (diff) |
kconfig: add helper to set config symbol from environment variable
Add conf_set_env_sym() that can set an already defined symbol
based on the value of an environment variable.
Unknown symbols are silently ignored.
A warning is printed if the value of the environment variable
is unexpected.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Roman Zippel <zippel@linux-m68k.org>
Diffstat (limited to 'scripts/kconfig')
-rw-r--r-- | scripts/kconfig/confdata.c | 27 | ||||
-rw-r--r-- | scripts/kconfig/lkc_proto.h | 1 |
2 files changed, 28 insertions, 0 deletions
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index e0f402f3b75..e4fa3f30254 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c @@ -145,6 +145,33 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p) return 0; } +/* Read an environment variable and assign the value to the symbol */ +int conf_set_env_sym(const char *env, const char *symname, int def) +{ + struct symbol *sym; + char *p; + int def_flags; + + p = getenv(env); + if (p) { + char warning[200]; + sprintf(warning, "Environment variable (%s = \"%s\")", env, p); + conf_filename = warning; + def_flags = SYMBOL_DEF << def; + if (def == S_DEF_USER) { + sym = sym_find(symname); + if (!sym) + return 1; + } else { + sym = sym_lookup(symname, 0); + if (sym->type == S_UNKNOWN) + sym->type = S_OTHER; + } + conf_set_sym_val(sym, def, def_flags, p); + } + return 0; +} + int conf_read_simple(const char *name, int def) { FILE *in = NULL; diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h index 4d09f6ddefe..dca294e90cc 100644 --- a/scripts/kconfig/lkc_proto.h +++ b/scripts/kconfig/lkc_proto.h @@ -1,6 +1,7 @@ /* confdata.c */ P(conf_parse,void,(const char *name)); +P(conf_set_env_sym,int,(const char *envname, const char *symname, int def)); P(conf_read,int,(const char *name)); P(conf_read_simple,int,(const char *name, int)); P(conf_write,int,(const char *name)); |