]> git.ipfire.org Git - thirdparty/make.git/commitdiff
[SV 46581] Pre-define .LOADED to avoid warnings.
authorPaul Smith <psmith@gnu.org>
Sun, 13 Mar 2016 07:02:00 +0000 (03:02 -0400)
committerPaul Smith <psmith@gnu.org>
Sun, 13 Mar 2016 07:02:00 +0000 (03:02 -0400)
* main.c (main): Pre-define .LOADED as a default-level variable.
* load.c (load_file): Set the value rather than append it.  Avoid
adding an extra initial whitespace.
* tests/scripts/features/load: Run with --warn-undefined-variables.

load.c
main.c
tests/scripts/features/load

diff --git a/load.c b/load.c
index 191ebd873492e52d7867d00f9e61c41eb62eb3a6..2beab83dce4af8889ec93114d49a450c98a62f53 100644 (file)
--- a/load.c
+++ b/load.c
@@ -168,9 +168,8 @@ load_file (const gmk_floc *flocp, const char **ldname, int noerror)
   loaded = allocated_variable_expand ("$(.LOADED)");
   fp = strstr (loaded, *ldname);
   r = fp && (fp==loaded || fp[-1]==' ') && (fp[nmlen]=='\0' || fp[nmlen]==' ');
-  free (loaded);
   if (r)
-    return 1;
+    goto exit;
 
   /* If we didn't find a symbol name yet, construct it from the ldname.  */
   if (! symname)
@@ -214,8 +213,21 @@ load_file (const gmk_floc *flocp, const char **ldname, int noerror)
 
   /* If it succeeded, add the load file to the loaded variable.  */
   if (r > 0)
-    do_variable_definition (flocp, ".LOADED", *ldname, o_default, f_append, 0);
+    {
+      size_t loadlen = strlen (loaded);
+      char *newval = alloca (loadlen + strlen (*ldname) + 2);
+      /* Don't add a space if it's empty.  */
+      if (loadlen)
+        {
+          memcpy (newval, loaded, loadlen);
+          newval[loadlen++] = ' ';
+        }
+      strcpy (&newval[loadlen], *ldname);
+      do_variable_definition (flocp, ".LOADED", newval, o_default, f_simple, 0);
+    }
 
+ exit:
+  free (loaded);
   return r;
 }
 
@@ -237,7 +249,7 @@ unload_file (const char *name)
 #else
 
 int
-load_file (const gmk_floc *flocp, const char **ldname, int noerror)
+load_file (const gmk_floc *flocp, const char **ldname UNUSED, int noerror)
 {
   if (! noerror)
     O (fatal, flocp,
@@ -247,7 +259,7 @@ load_file (const gmk_floc *flocp, const char **ldname, int noerror)
 }
 
 void
-unload_file (const char *name)
+unload_file (const char *name UNUSED)
 {
   O (fatal, NILF, "INTERNAL: Cannot unload when load is not supported!");
 }
diff --git a/main.c b/main.c
index f16c6b417bdf3b7ad01d213a4612b90a654edd0d..62ed7a8a907f7b3745500b46941c96271b0136f8 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1316,6 +1316,7 @@ main (int argc, char **argv, char **envp)
   /* define_variable_cname (".TARGETS", "", o_default, 0)->special = 1; */
   define_variable_cname (".RECIPEPREFIX", "", o_default, 0)->special = 1;
   define_variable_cname (".SHELLFLAGS", "-c", o_default, 0);
+  define_variable_cname (".LOADED", "", o_default, 0);
 
   /* Set up .FEATURES
      Use a separate variable because define_variable_cname() is a macro and
index 1f8cdc22a33b89113f087aa3267e52b0b37bec6f..2e9318d52dca30a2b46043231a00ea75b053ec99 100644 (file)
@@ -56,7 +56,7 @@ load testload.so
 POST := $(.LOADED)
 all: ; @echo pre=$(PRE) post=$(POST) $(TESTLOAD)
 !,
-              '', "pre= post=testload.so implicit\n");
+              '--warn-undefined-variables', "pre= post=testload.so implicit\n");
 
 # TEST 2
 # Load using an explicit function