summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Ravnborg <sam@ravnborg.org>2007-11-10 20:40:05 +0100
committerSam Ravnborg <sam@ravnborg.org>2007-11-12 21:02:20 +0100
commit0f855aa64b3f63d35a891510cf7db932a435c116 (patch)
treee3e8ad4bf17598ac3c6aeb6c5fed81fc1096b615
parentkconfig: factor out code in confdata.c (diff)
downloadlinux-0f855aa64b3f63d35a891510cf7db932a435c116.tar.xz
linux-0f855aa64b3f63d35a891510cf7db932a435c116.zip
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>
-rw-r--r--scripts/kconfig/confdata.c27
-rw-r--r--scripts/kconfig/lkc_proto.h1
2 files changed, 28 insertions, 0 deletions
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index e0f402f3b75d..e4fa3f302541 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 4d09f6ddefe3..dca294e90cc3 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));