# -*-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'); # 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'/"); 1;