kconfig: call env_write_dep() right after yyparse()
authorMasahiro Yamada <masahiroy@kernel.org>
Fri, 2 Feb 2024 15:58:05 +0000 (00:58 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Mon, 19 Feb 2024 09:20:40 +0000 (18:20 +0900)
This allows preprocess.c to free up all of its resources when the parse
stage is finished. It also ensures conf_write_autoconf_cmd() produces
consistent results even if called multiple times for any reason.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
scripts/kconfig/confdata.c
scripts/kconfig/lkc_proto.h
scripts/kconfig/parser.y
scripts/kconfig/preprocess.c

index f6a96fdddb7edab00480e5b0d133f964bdceb4c6..dafc572e7b7e39022665907740d32cd3b0850066 100644 (file)
@@ -994,13 +994,9 @@ static int conf_write_autoconf_cmd(const char *autoconf_name)
                return -1;
        }
 
-       fputs(str_get(&autoconf_cmd), out);
-
-       fprintf(out, "\n%s: $(deps_config)\n\n", autoconf_name);
+       fprintf(out, "autoconfig := %s\n", autoconf_name);
 
-       env_write_dep(out, autoconf_name);
-
-       fprintf(out, "\n$(deps_config): ;\n");
+       fputs(str_get(&autoconf_cmd), out);
 
        fflush(out);
        ret = ferror(out); /* error check for all fprintf() calls */
index a4ae5e9eadadb8758b5911d0f38c028b0622d937..85491d74a0942d40e546946ed4d14afa6bc04696 100644 (file)
@@ -46,7 +46,7 @@ enum variable_flavor {
        VAR_RECURSIVE,
        VAR_APPEND,
 };
-void env_write_dep(FILE *f, const char *auto_conf_name);
+void env_write_dep(struct gstr *gs);
 void variable_add(const char *name, const char *value,
                  enum variable_flavor flavor);
 void variable_all_del(void);
index 611038c502fc9bc3bd68e669b5d57c07b98e94b9..cfb82ba09037da539f3068777966313af1cbfa0a 100644 (file)
@@ -482,7 +482,7 @@ void conf_parse(const char *name)
 
        autoconf_cmd = str_new();
 
-       str_printf(&autoconf_cmd, "deps_config := \\\n");
+       str_printf(&autoconf_cmd, "\ndeps_config := \\\n");
 
        zconf_initscan(name);
 
@@ -492,6 +492,13 @@ void conf_parse(const char *name)
                yydebug = 1;
        yyparse();
 
+       str_printf(&autoconf_cmd,
+                  "\n"
+                  "$(autoconfig): $(deps_config)\n"
+                  "$(deps_config): ;\n");
+
+       env_write_dep(&autoconf_cmd);
+
        /* Variables are expanded in the parse phase. We can free them here. */
        variable_all_del();
 
index d1f5bcff4b62d68d83e6134b0c883876619f07a2..b9853d4a891c8b046bba114d44f3a5d439f4b66b 100644 (file)
@@ -87,14 +87,17 @@ static char *env_expand(const char *name)
        return xstrdup(value);
 }
 
-void env_write_dep(FILE *f, const char *autoconfig_name)
+void env_write_dep(struct gstr *s)
 {
        struct env *e, *tmp;
 
        list_for_each_entry_safe(e, tmp, &env_list, node) {
-               fprintf(f, "ifneq \"$(%s)\" \"%s\"\n", e->name, e->value);
-               fprintf(f, "%s: FORCE\n", autoconfig_name);
-               fprintf(f, "endif\n");
+               str_printf(s,
+                          "\n"
+                          "ifneq \"$(%s)\" \"%s\"\n"
+                          "$(autoconfig): FORCE\n"
+                          "endif\n",
+                          e->name, e->value);
                env_del(e);
        }
 }