diff options
author | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | 2011-05-06 07:03:49 +0200 |
---|---|---|
committer | Michal Marek <mmarek@suse.cz> | 2011-05-17 15:59:23 +0200 |
commit | de125187dc17e3715ba983adf60faecfdc3a64c4 (patch) | |
tree | 3e466c01d3dac4c2117e3e0f9f6a6dfe0d403247 /scripts/kconfig | |
parent | 76ce94a37187327c09343a98726ccea81f9eab54 (diff) | |
download | linux-de125187dc17e3715ba983adf60faecfdc3a64c4.tar.gz linux-de125187dc17e3715ba983adf60faecfdc3a64c4.tar.bz2 linux-de125187dc17e3715ba983adf60faecfdc3a64c4.zip |
kconfig: autogenerated config_is_xxx macro
this will allow to use to use
if(config_is_xxx())
if(config_is_xxx_module())
in the code instead of
#ifdef CONFIG_xxx
#ifdef CONFIG_xxx_MODULE
and now let the compiler remove the non usefull code and not the
pre-processor
as done in the mach-types for arm as exmaple
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Acked-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Michal Marek <mmarek@suse.cz>
Diffstat (limited to 'scripts/kconfig')
-rw-r--r-- | scripts/kconfig/confdata.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 834eecb010ba..db06af0321b3 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c @@ -778,6 +778,29 @@ out: return res; } +static void conf_write_function_autoconf(FILE *out, char* conf, char* name, + int val) +{ + char c; + char *tmp, *d; + + d = strdup(conf); + tmp = d; + while ((c = *conf++)) + *d++ = tolower(c); + + fprintf(out, "#define %sis_", tmp); + free(tmp); + + d = strdup(name); + tmp = d; + while ((c = *name++)) + *d++ = tolower(c); + fprintf(out, "%s%s() %d\n", tmp, (val > 1) ? "_module" : "", + val ? 1 : 0); + free(tmp); +} + int conf_write_autoconf(void) { struct symbol *sym; @@ -785,6 +808,7 @@ int conf_write_autoconf(void) const char *name; FILE *out, *tristate, *out_h; int i; + int fct_val; sym_clear_all_valid(); @@ -825,6 +849,7 @@ int conf_write_autoconf(void) rootmenu.prompt->text); for_all_symbols(i, sym) { + fct_val = 1; sym_calc_value(sym); if (!(sym->flags & SYMBOL_WRITE) || !sym->name) continue; @@ -838,12 +863,14 @@ int conf_write_autoconf(void) case S_TRISTATE: switch (sym_get_tristate_value(sym)) { case no: + fct_val = 0; break; case mod: fprintf(tristate, "%s%s=M\n", CONFIG_, sym->name); fprintf(out_h, "#define %s%s_MODULE 1\n", CONFIG_, sym->name); + fct_val = 2; break; case yes: if (sym->type == S_TRISTATE) @@ -870,8 +897,10 @@ int conf_write_autoconf(void) CONFIG_, sym->name, str); break; default: + fct_val = 0; break; } + conf_write_function_autoconf(out_h, CONFIG_, sym->name, fct_val); } fclose(out); fclose(tristate); |