Use level o_env_override for MAKEFLAGS so it's reset even with -e.
authorPaul Smith <psmith@gnu.org>
Mon, 13 May 2013 06:17:29 +0000 (02:17 -0400)
committerPaul Smith <psmith@gnu.org>
Mon, 13 May 2013 06:30:14 +0000 (02:30 -0400)
Fixes Savannah bug #2216.

ChangeLog
main.c
tests/scripts/variables/MAKEFLAGS

index 57803f0ec692c39088c1a5f34b9545706f3717a9..d73e22dda2d3df974c885e72b0442301ba4974ba 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2013-05-13  Paul Smith  <psmith@gnu.org>
 
+       * main.c (define_makeflags): Assign o_env_override level to
+       MAKEFLAGS to ensure it's set even in the presence of -e.
+       Fixes Savannah bug #2216.
+
        * makeint.h (TRACE_NONE, TRACE_RULE, TRACE_DIRECTORY): Define
        constants for the trace mode.
        * main.c: Add new --trace mode parsing.
diff --git a/main.c b/main.c
index fe0f54ee454fb58dcd150c7b4e9d18fe0b20417f..f3c4a3d36900842c2984feb5fce869248e412380 100644 (file)
--- a/main.c
+++ b/main.c
@@ -3150,14 +3150,14 @@ define_makeflags (int all, int makefile)
   if (flagstring[0] == '-' && flagstring[1] != '-')
     ++flagstring;
 
+  /* This used to use o_env, but that lost when a makefile defined MAKEFLAGS.
+     Makefiles set MAKEFLAGS to add switches, but we still want to redefine
+     its value with the full set of switches.  Then we used o_file, but that
+     lost when users added -e, causing a previous MAKEFLAGS env. var. to take
+     precedence over the new one.  Of course, an override or command
+     definition will still take precedence.  */
   v = define_variable_cname ("MAKEFLAGS", flagstring,
-                             /* This used to use o_env, but that lost when a
-                                makefile defined MAKEFLAGS.  Makefiles set
-                                MAKEFLAGS to add switches, but we still want
-                                to redefine its value with the full set of
-                                switches.  Of course, an override or command
-                                definition will still take precedence.  */
-                             o_file, 1);
+                             env_overrides ? o_env_override : o_file, 1);
 
   if (! all)
     /* The first time we are called, set MAKEFLAGS to always be exported.
index 0b567e8f8f190eddb4d0dba77519c597de9599c5..a41738832a225f1f14771cc619b74f3e853d4ca2 100644 (file)
@@ -1,4 +1,4 @@
-#                                                                   -*-perl-*-
+#                                                                    -*-perl-*-
 
 $description = "Test proper behavior of MAKEFLAGS";
 
@@ -14,30 +14,26 @@ all: ; @echo $(MAKEFLAGS)
 run_make_test(q!
 all: ; @echo $(MAKEFLAGS)
 !,
-              '--no-print-directory -e -r -R', '--no-print-directory -Rre');
+              '--no-print-directory -e -r -R --trace=none --trace=dir', '--no-print-directory --trace=none --trace=dir -Rre');
 
 
-if ($all_tests) {
-    # Recursive invocations of make should accumulate MAKEFLAGS values.
-    # Savannah bug #2216
-    run_make_test(q!
+# Recursive invocations of make should accumulate MAKEFLAGS values.
+# Savannah bug #2216
+run_make_test(q!
 MSG = Fails
 all:
        @echo '$@: MAKEFLAGS=$(MAKEFLAGS)'
        @MSG=Works $(MAKE) -e -f #MAKEFILE# jump
 jump:
-       @echo '$@: MAKEFLAGS=$(MAKEFLAGS)'
+       @echo '$@ $(MSG): MAKEFLAGS=$(MAKEFLAGS)'
        @$(MAKE) -f #MAKEFILE# print
 print:
-       @echo '$@: MAKEFLAGS=$(MAKEFLAGS)'
-       @echo $(MSG)
+       @echo '$@ $(MSG): MAKEFLAGS=$(MAKEFLAGS)'
 .PHONY: all jump print
 !,
                   '--no-print-directory',
-                  'all: MAKEFLAGS= --no-print-directory
-jump: MAKEFLAGS= --no-print-directory -e
-print: MAKEFLAGS= --no-print-directory -e
-Works');
-}
+                  'all: MAKEFLAGS=--no-print-directory
+jump Works: MAKEFLAGS=--no-print-directory -e
+print Works: MAKEFLAGS=--no-print-directory -e');
 
 1;