Use level o_env_override for MAKEFLAGS so it's reset even with -e.

Fixes Savannah bug #2216.
This commit is contained in:
Paul Smith 2013-05-13 02:17:29 -04:00
parent 381baeef7a
commit 2627d83221
3 changed files with 21 additions and 21 deletions

View File

@ -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.

14
main.c
View File

@ -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.

View 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;