mirror of
https://github.com/mirror/make.git
synced 2025-01-09 11:50:46 +08:00
f4b8ddf260
When MAKEFLAGS is set in a makefile, reparse it immediately rather than waiting until after all makefiles have been read and parsed. This change doesn't actually fix the SV bug referenced because, even though we do reparse MAKEFLAGS, we don't handle the -r or -R options immediately. Doing this will require more effort. * NEWS: Announce the change. * src/makeint.h: Publish reset_switches() and decode_env_switches() from main.c * src/main.c (main): Don't call construct_include_path(); it will be invoked decode_switches(). Preserve the old values of builtin_rules, builtin_variables, and job_slots before we read makefiles since they can be changed now. (reset_switches): Publish (remove static). Set the initial value of the stringlist list to NULL. (decode_switches): Call construct_include_path() after decoding. (decode_env_switches): Publish (remove static). (define_makeflags): Set the MAKEFLAGS variable for special handling. * src/read.c (eval_makefile): Check for empty include_directories. (construct_include_path): Clear any old value of .INCLUDE_DIRS before appending new values. Free the previous include_directories. * src/variable.c (lookup_special_var): When MAKEFLAGS is set, first reset the switches then re-parse the variable. * tests/run_make_tests.pl: Memo-ize some default variable values. * tests/scripts/options/dash-r: Create tests for setting -r and -R. * tests/scripts/variables/MAKEFLAGS: Test that resetting -I from within the makefile takes effect immediately.
66 lines
1.7 KiB
Perl
66 lines
1.7 KiB
Perl
# -*-perl-*-
|
|
|
|
$description = "Test proper behavior of MAKEFLAGS";
|
|
|
|
$details = "DETAILS";
|
|
|
|
# Normal flags aren't prefixed with "-"
|
|
run_make_test(q!
|
|
all: ; @echo $(MAKEFLAGS)
|
|
!,
|
|
'-e -r -R', 'erR');
|
|
|
|
# Long arguments mean everything is prefixed with "-"
|
|
run_make_test(q!
|
|
all: ; @echo $(MAKEFLAGS)
|
|
!,
|
|
'--no-print-directory -e -r -R --trace', "#MAKEFILE#:2: update target 'all' due to: target does not exist
|
|
echo erR --trace --no-print-directory
|
|
erR --trace --no-print-directory");
|
|
|
|
|
|
# Recursive invocations of make should accumulate MAKEFLAGS values.
|
|
# Savannah bug #2216
|
|
run_make_test(q!
|
|
MSG = Fails
|
|
.RECIPEPREFIX = >
|
|
all:
|
|
> @echo '$@: MAKEFLAGS=$(MAKEFLAGS)'
|
|
> @MSG=Works $(MAKE) -e -f #MAKEFILE# jump
|
|
jump:
|
|
> @echo '$@ $(MSG): MAKEFLAGS=$(MAKEFLAGS)'
|
|
> @$(MAKE) -f #MAKEFILE# print
|
|
print:
|
|
> @echo '$@ $(MSG): MAKEFLAGS=$(MAKEFLAGS)'
|
|
.PHONY: all jump print
|
|
!,
|
|
'--no-print-directory',
|
|
'all: MAKEFLAGS= --no-print-directory
|
|
jump Works: MAKEFLAGS=e --no-print-directory
|
|
print Works: MAKEFLAGS=e --no-print-directory');
|
|
|
|
# Ensure MAKEFLAGS updates are handled immediately rather than later
|
|
|
|
mkdir('foo', 0777);
|
|
mkdir('bar', 0777);
|
|
|
|
run_make_test(q!
|
|
$(info MAKEFLAGS=$(MAKEFLAGS))
|
|
$(info INCLUDE_DIRS=$(.INCLUDE_DIRS))
|
|
MAKEFLAGS += -Ibar
|
|
$(info MAKEFLAGS=$(MAKEFLAGS))
|
|
$(info INCLUDE_DIRS=$(.INCLUDE_DIRS))
|
|
.PHONY: all
|
|
all: ; @echo 'MAKEFLAGS=$(MAKEFLAGS)' "\$$MAKEFLAGS=$$MAKEFLAGS"
|
|
!,
|
|
'-I- -Ifoo', 'MAKEFLAGS= -I- -Ifoo
|
|
INCLUDE_DIRS=foo
|
|
MAKEFLAGS= -I- -Ifoo -Ibar
|
|
INCLUDE_DIRS=foo bar
|
|
MAKEFLAGS= -I- -Ifoo -Ibar $MAKEFLAGS= -I- -Ifoo -Ibar');
|
|
|
|
rmdir('foo');
|
|
rmdir('bar');
|
|
|
|
1;
|