2013-05-13 06:17:29 +00:00
|
|
|
# -*-perl-*-
|
2009-10-03 20:08:20 +00:00
|
|
|
|
|
|
|
$description = "Test proper behavior of MAKEFLAGS";
|
|
|
|
|
|
|
|
$details = "DETAILS";
|
|
|
|
|
|
|
|
# Normal flags aren't prefixed with "-"
|
|
|
|
run_make_test(q!
|
2022-07-24 18:14:32 +00:00
|
|
|
all: ; @echo /$(MAKEFLAGS)/
|
2009-10-03 20:08:20 +00:00
|
|
|
!,
|
2022-07-24 18:14:32 +00:00
|
|
|
'-e -r -R', '/erR/');
|
2009-10-03 20:08:20 +00:00
|
|
|
|
|
|
|
# Long arguments mean everything is prefixed with "-"
|
|
|
|
run_make_test(q!
|
2022-07-24 18:14:32 +00:00
|
|
|
all: ; @echo /$(MAKEFLAGS)/
|
2009-10-03 20:08:20 +00:00
|
|
|
!,
|
2020-12-05 21:25:12 +00:00
|
|
|
'--no-print-directory -e -r -R --trace', "#MAKEFILE#:2: update target 'all' due to: target does not exist
|
2022-07-24 18:14:32 +00:00
|
|
|
echo /erR --trace --no-print-directory/
|
|
|
|
/erR --trace --no-print-directory/");
|
2009-10-03 20:08:20 +00:00
|
|
|
|
|
|
|
|
2013-05-13 06:17:29 +00:00
|
|
|
# Recursive invocations of make should accumulate MAKEFLAGS values.
|
|
|
|
# Savannah bug #2216
|
|
|
|
run_make_test(q!
|
2009-10-03 20:08:20 +00:00
|
|
|
MSG = Fails
|
2020-12-05 21:25:12 +00:00
|
|
|
.RECIPEPREFIX = >
|
2009-10-03 20:08:20 +00:00
|
|
|
all:
|
2020-12-05 21:25:12 +00:00
|
|
|
> @echo '$@: MAKEFLAGS=$(MAKEFLAGS)'
|
|
|
|
> @MSG=Works $(MAKE) -e -f #MAKEFILE# jump
|
2009-10-03 20:08:20 +00:00
|
|
|
jump:
|
2020-12-05 21:25:12 +00:00
|
|
|
> @echo '$@ $(MSG): MAKEFLAGS=$(MAKEFLAGS)'
|
|
|
|
> @$(MAKE) -f #MAKEFILE# print
|
2009-10-03 20:08:20 +00:00
|
|
|
print:
|
2020-12-05 21:25:12 +00:00
|
|
|
> @echo '$@ $(MSG): MAKEFLAGS=$(MAKEFLAGS)'
|
2009-10-03 20:08:20 +00:00
|
|
|
.PHONY: all jump print
|
|
|
|
!,
|
|
|
|
'--no-print-directory',
|
2013-05-22 11:51:46 +00:00
|
|
|
'all: MAKEFLAGS= --no-print-directory
|
|
|
|
jump Works: MAKEFLAGS=e --no-print-directory
|
|
|
|
print Works: MAKEFLAGS=e --no-print-directory');
|
2009-10-03 20:08:20 +00:00
|
|
|
|
2021-09-05 21:11:44 +00:00
|
|
|
# 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');
|
|
|
|
|
2022-06-18 21:14:46 +00:00
|
|
|
# Test that command line switches are all present in MAKEFLAGS.
|
|
|
|
# sv 62514.
|
|
|
|
my @opts;
|
|
|
|
|
|
|
|
# Simple flags.
|
|
|
|
@opts = ('i', 'k', 'n', 'q', 'r', 's', 'w', 'd');
|
|
|
|
exists $FEATURES{'check-symlink'} and push @opts, 'L';
|
|
|
|
|
|
|
|
for my $opt (@opts) {
|
|
|
|
run_make_test(q!
|
|
|
|
MAKEFLAGS:=B
|
|
|
|
all:; $(info makeflags='$(MAKEFLAGS)')
|
|
|
|
!, "-$opt", "/makeflags='B$opt'/");
|
|
|
|
}
|
|
|
|
|
|
|
|
# Switches which carry arguments.
|
|
|
|
@opts = (' -I/tmp', ' -Onone', ' --debug=b', ' -l2.5');
|
|
|
|
for my $opt (@opts) {
|
|
|
|
run_make_test(q!
|
|
|
|
MAKEFLAGS:=B
|
|
|
|
all:; $(info makeflags='$(MAKEFLAGS)')
|
|
|
|
!, "$opt", "/makeflags='B$opt'/");
|
|
|
|
}
|
|
|
|
|
|
|
|
# Long options which take no arguments.
|
|
|
|
# sv 62514.
|
|
|
|
@opts = (' --no-print-directory', ' --warn-undefined-variables', ' --trace');
|
|
|
|
for my $opt (@opts) {
|
|
|
|
run_make_test(q!
|
|
|
|
MAKEFLAGS:=B
|
|
|
|
all:; $(info makeflags='$(MAKEFLAGS)')
|
|
|
|
!, "$opt", "/makeflags='B$opt'/");
|
|
|
|
}
|
|
|
|
|
|
|
|
# Test that make filters out duplicates.
|
|
|
|
# Each option is specified in the makefile, env and on the command line.
|
|
|
|
@opts = (' -I/tmp', ' -Onone', ' --debug=b', ' -l2.5');
|
|
|
|
$ENV{'MAKEFLAGS'} = $opt;
|
|
|
|
for my $opt (@opts) {
|
|
|
|
run_make_test("
|
|
|
|
MAKEFLAGS:=B $opt
|
|
|
|
all:; \$(info makeflags='\$(MAKEFLAGS)')
|
|
|
|
", "$opt", "/makeflags='B$opt'/");
|
|
|
|
}
|
|
|
|
|
|
|
|
# Test that make filters out duplicates.
|
|
|
|
# Each option is specified in the makefile, env and on the command line.
|
|
|
|
# decode_switches reallocates when the number of parameters in sl->list exceeds 5.
|
|
|
|
# This test exercises the realloc branch.
|
|
|
|
$ENV{'MAKEFLAGS'} = '-I1 -Onone --debug=b -l2.5 -I2 -I3 -I4 -I5 -I6 -I2 -I2';
|
|
|
|
run_make_test(q!
|
|
|
|
MAKEFLAGS:=B -I1 -Onone --debug=b -l2.5 -I2 -I3 -I4 -I5 -I6 -I2 -I2
|
|
|
|
all:; $(info makeflags='$(MAKEFLAGS)')
|
|
|
|
!,
|
|
|
|
'-I1 -Onone --debug=b -l2.5 -I2 -I3 -I4 -I5 -I6',
|
|
|
|
"/makeflags='B -I1 -I2 -I3 -I4 -I5 -I6 -l2.5 -Onone --debug=b'/");
|
|
|
|
|
|
|
|
# A mix of multiple flags from env, the makefile and command line.
|
|
|
|
# Skip -L since it's not available everywhere
|
|
|
|
$ENV{'MAKEFLAGS'} = 'ikB --no-print-directory --warn-undefined-variables --trace';
|
|
|
|
run_make_test(q!
|
|
|
|
MAKEFLAGS:=iknqrswd -I/tmp -I/tmp -Onone -Onone -l2.5 -l2.5
|
|
|
|
all:; $(info makeflags='$(MAKEFLAGS)')
|
|
|
|
!,
|
|
|
|
'-Onone -l2.5 -l2.5 -Onone -I/tmp -iknqrswd -i -n -s -k -I/tmp',
|
|
|
|
"/makeflags='Bdiknqrsw -I/tmp -l2.5 -Onone --trace --warn-undefined-variables'/");
|
|
|
|
|
2022-07-16 23:43:34 +00:00
|
|
|
# Verify MAKEFLAGS are all available to shell functions
|
|
|
|
$ENV{'MAKEFLAGS'} = 'ikB --no-print-directory --warn-undefined-variables';
|
|
|
|
run_make_test(q!
|
|
|
|
MAKEFLAGS := iknqrsw -I/tmp -I/tmp -Onone -Onone -l2.5 -l2.5 --no-print-directory
|
|
|
|
XX := $(shell echo "$$MAKEFLAGS")
|
|
|
|
all:; $(info makeflags='$(XX)')
|
|
|
|
!,
|
|
|
|
'-Onone -l2.5 -l2.5 -Onone -I/tmp -iknqrs -i -n -s -k -I/tmp',
|
|
|
|
"makeflags='iknqrsw -I/tmp -I/tmp -Onone -Onone -l2.5 -l2.5 --no-print-directory'");
|
|
|
|
|
2022-07-24 18:14:32 +00:00
|
|
|
# Verify that command line arguments are included in MAKEFLAGS
|
|
|
|
run_make_test(q!
|
|
|
|
all: ; @echo $(MAKEFLAGS)
|
|
|
|
!,
|
|
|
|
'-e FOO=bar -r -R', 'erR -- FOO=bar');
|
|
|
|
|
|
|
|
# Long arguments mean everything is prefixed with "-"
|
|
|
|
run_make_test(q!
|
|
|
|
all: ; @echo /$(MAKEFLAGS)/
|
|
|
|
!,
|
|
|
|
'--no-print-directory -e -r -R --trace FOO=bar',
|
|
|
|
"#MAKEFILE#:2: update target 'all' due to: target does not exist
|
|
|
|
echo /erR --trace --no-print-directory -- FOO=bar/
|
|
|
|
/erR --trace --no-print-directory -- FOO=bar/");
|
|
|
|
|
|
|
|
|
2009-10-03 20:08:20 +00:00
|
|
|
1;
|