kconfig: fix __enabled_ macros definition for invisible and un-selected symbols
Arnaud Lacombe [Tue, 16 Aug 2011 05:20:20 +0000 (01:20 -0400)]
__enabled_<sym-name> are only generated on visible or selected entries, do not
reflect the purpose of its introduction.

Fix this by always generating these entries for named symbol.

Reported-by: Rabin Vincent <rabin@rab.in>
Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>

scripts/kconfig/confdata.c

index 59b667c..5a58965 100644 (file)
@@ -503,17 +503,6 @@ header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
                        fprintf(fp, "#define %s%s%s 1\n",
                            CONFIG_, sym->name, suffix);
                }
-               /*
-                * Generate the __enabled_CONFIG_* and
-                * __enabled_CONFIG_*_MODULE macros for use by the
-                * IS_{ENABLED,BUILTIN,MODULE} macros. The _MODULE variant is
-                * generated even for booleans so that the IS_ENABLED() macro
-                * works.
-                */
-               fprintf(fp, "#define __enabled_" CONFIG_ "%s %d\n",
-                               sym->name, (*value == 'y'));
-               fprintf(fp, "#define __enabled_" CONFIG_ "%s_MODULE %d\n",
-                               sym->name, (*value == 'm'));
                break;
        }
        case S_HEX: {
@@ -565,6 +554,35 @@ static struct conf_printer header_printer_cb =
 };
 
 /*
+ * Generate the __enabled_CONFIG_* and __enabled_CONFIG_*_MODULE macros for
+ * use by the IS_{ENABLED,BUILTIN,MODULE} macros. The _MODULE variant is
+ * generated even for booleans so that the IS_ENABLED() macro works.
+ */
+static void
+header_print__enabled_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
+{
+
+       switch (sym->type) {
+       case S_BOOLEAN:
+       case S_TRISTATE: {
+               fprintf(fp, "#define __enabled_" CONFIG_ "%s %d\n",
+                   sym->name, (*value == 'y'));
+               fprintf(fp, "#define __enabled_" CONFIG_ "%s_MODULE %d\n",
+                   sym->name, (*value == 'm'));
+               break;
+       }
+       default:
+               break;
+       }
+}
+
+static struct conf_printer header__enabled_printer_cb =
+{
+       .print_symbol = header_print__enabled_symbol,
+       .print_comment = header_print_comment,
+};
+
+/*
  * Tristate printer
  *
  * This printer is used when generating the `include/config/tristate.conf' file.
@@ -945,11 +963,16 @@ int conf_write_autoconf(void)
        conf_write_heading(out_h, &header_printer_cb, NULL);
 
        for_all_symbols(i, sym) {
+               if (!sym->name)
+                       continue;
+
                sym_calc_value(sym);
-               if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
+
+               conf_write_symbol(out_h, sym, &header__enabled_printer_cb, NULL);
+
+               if (!(sym->flags & SYMBOL_WRITE))
                        continue;
 
-               /* write symbol to auto.conf, tristate and header files */
                conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1);
 
                conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1);