config: fix __enabled_ macros definition for invisible and un-selected symbols
authorArnaud Lacombe <lacombar@gmail.com>
Tue, 16 Aug 2011 05:20:20 +0000 (01:20 -0400)
committerChristian Lamparter <chunkeey@googlemail.com>
Wed, 23 Nov 2011 20:48:42 +0000 (21:48 +0100)
__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>
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
config/confdata.c

index c9939fa622e5c0dd15fa6bde786bfcd385034169..54b19b06fb1627b857fcf8d4959ef640dd3e3fcf 100644 (file)
@@ -549,17 +549,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: {
@@ -610,6 +599,35 @@ static struct conf_printer header_printer_cb =
        .print_comment = header_print_comment,
 };
 
+/*
+ * 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
  *
@@ -1000,11 +1018,16 @@ int conf_write_autoconf(void)
        conf_write_heading(out_c, &kconfig_printer_cmake_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);