| # -*-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; | |
| my @flavors; | |
| # Simple flags. | |
| @opts = ('i', 'k', 'n', 'q', 'r', 's', 'w', 'd'); | |
| exists $FEATURES{'check-symlink'} and push @opts, 'L'; | |
| @flavors = ('=', ':=', ':::=', '+=-'); | |
| for my $fl (@flavors) { | |
| for my $opt (@opts) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}B | |
| all:; \$(info makeflags='\$(MAKEFLAGS)') | |
| ", "-$opt", "/makeflags='B$opt'/"); | |
| } | |
| } | |
| # Strawberry Perl's exec()--or something!--appears to replace all /tmp with the | |
| # user's %TEMP% value so we can't use that for -I testing. Make a directory. | |
| mkdir('localtmp', 0777); | |
| # Switches which carry arguments. | |
| @opts = (' -Ilocaltmp', ' -Onone', ' --debug=b', ' -l2.5'); | |
| for my $fl (@flavors) { | |
| for my $opt (@opts) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}B | |
| all:; \$(info makeflags='\$(MAKEFLAGS)') | |
| ", "$opt", "/makeflags='B$opt'/"); | |
| } | |
| } | |
| # Long options which take no arguments. | |
| # sv 62514. | |
| @opts = (' --no-print-directory', ' --warn=undefined-var', ' --trace'); | |
| for my $fl (@flavors) { | |
| for my $opt (@opts) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}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 = (' -Ilocaltmp', ' -Onone', ' --debug=b', ' -l2.5'); | |
| for my $fl (@flavors) { | |
| for my $opt (@opts) { | |
| $ENV{'MAKEFLAGS'} = $opt; | |
| run_make_test(" | |
| MAKEFLAGS${fl}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. | |
| for my $fl (@flavors) { | |
| $ENV{'MAKEFLAGS'} = '-I1 -Onone --debug=b -l2.5 -I2 -I3 -I4 -I5 -I6 -I2 -I2'; | |
| run_make_test(" | |
| MAKEFLAGS${fl}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 | |
| for my $fl (@flavors) { | |
| $ENV{'MAKEFLAGS'} = 'ikB --no-print-directory --warn=undefined-var --trace'; | |
| run_make_test(" | |
| MAKEFLAGS${fl}iknqrswd -Ilocaltmp -Ilocaltmp -Onone -Onone -l2.5 -l2.5 | |
| all:; \$(info makeflags='\$(MAKEFLAGS)') | |
| ", | |
| '-Onone -l2.5 -l2.5 -Onone -Ilocaltmp -iknqrswd -i -n -s -k -Ilocaltmp', | |
| "/makeflags='Bdiknqrsw -Ilocaltmp -l2.5 -Onone --trace --warn=undefined-var'/"); | |
| } | |
| # Verify MAKEFLAGS are all available to shell function at parse time. | |
| for my $fl (@flavors) { | |
| my $answer = 'Biknqrs -Ilocaltmp -l2.5 -Onone --no-print-directory --warn=undefined-var'; | |
| $ENV{'MAKEFLAGS'} = 'ikB --no-print-directory --warn=undefined-var'; | |
| run_make_test(" | |
| MAKEFLAGS${fl}iknqrsw -Ilocaltmp -Ilocaltmp -Onone -Onone -l2.5 -l2.5 --no-print-directory | |
| \$(info at parse time '\$(MAKEFLAGS)') | |
| XX := \$(shell echo \"\$\$MAKEFLAGS\") | |
| all:; \$(info at build time makeflags='\$(XX)') | |
| ", | |
| '-Onone -l2.5 -l2.5 -Onone -Ilocaltmp -iknqrs -i -n -s -k -Ilocaltmp', | |
| "at parse time '$answer' | |
| at build time makeflags='$answer'"); | |
| } | |
| # Verify MAKEFLAGS and command line definitions are all available to shell function at parse time. | |
| for my $fl (@flavors) { | |
| $ENV{'MAKEFLAGS'} = 'ikB --no-print-directory --warn=undefined-var'; | |
| my $answer = 'Biknqrs -Ilocaltmp -l2.5 -Onone --no-print-directory --warn=undefined-var -- hello=world'; | |
| run_make_test(" | |
| MAKEFLAGS${fl}iknqrsw -Ilocaltmp -Ilocaltmp -Onone -Onone -l2.5 -l2.5 --no-print-directory | |
| \$(info at parse time '\$(MAKEFLAGS)') | |
| XX := \$(shell echo \"\$\$MAKEFLAGS\") | |
| all:; \$(info at build time makeflags='\$(XX)') | |
| ", | |
| '-Onone -l2.5 -l2.5 -Onone -Ilocaltmp -iknqrs -i -n -s -k -Ilocaltmp hello=world', | |
| "at parse time '$answer' | |
| at build time makeflags='$answer'"); | |
| } | |
| # 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/"); | |
| # sv 63347. | |
| # Verify that command line arguments are included in MAKEFLAGS | |
| # when makefiles are parsed. | |
| my $answer = 'erR -- hello:=world FOO=bar'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '-e FOO=bar -r -R hello:=world', | |
| "$answer | |
| $answer | |
| #MAKE#: 'all' is up to date.\n"); | |
| # sv 63347. | |
| # Same as above, with makefile setting the value of the same variables as | |
| # defined on the cli. | |
| $answer = 'erR -- hello:=world FOO=bar'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| FOO=moon | |
| hello:=moon | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '-e FOO=bar -r -R hello:=world', | |
| "$answer | |
| $answer | |
| $answer | |
| #MAKE#: 'all' is up to date.\n"); | |
| # sv 63347. | |
| # Same as above, with makefile overriding the value of cli definition. | |
| $answer = 'erR -- hello:=world FOO=bar'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| override FOO=moon | |
| override hello:=moon | |
| export hello | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '-e FOO=bar -r -R hello:=world', | |
| "$answer | |
| $answer | |
| $answer | |
| #MAKE#: 'all' is up to date.\n"); | |
| # Same as above, and makefile overrides the value of cli definition. | |
| # resets MAKEOVERRIDES. | |
| $answer = 'rR -- hello:=world FOO=bar'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| override FOO=moon | |
| override hello:=moon | |
| export hello | |
| $(info $(MAKEFLAGS)) | |
| MAKEOVERRIDES= | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, 'FOO=bar -r -R hello:=world', | |
| "$answer | |
| $answer | |
| rR -- \nrR | |
| #MAKE#: 'all' is up to date.\n"); | |
| # sv 63347. | |
| # MAKEFLAGS set is env and makefile sets MAKEFLAGS and there is a command | |
| # line definition. | |
| $answer = ' -- bye=moon hello=world'; | |
| $ENV{'MAKEFLAGS'} = 'hello=world'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, 'bye=moon', | |
| " -- bye=moon hello=world | |
| -- bye=moon hello=world | |
| #MAKE#: 'all' is up to date.\n"); | |
| # sv 63347. | |
| # Conditional assignment and MAKEFLAGS. | |
| $answer = 'B -- bye=moon hello=world'; | |
| $ENV{'MAKEFLAGS'} = 'hello=world'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| MAKEFLAGS?=-k | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '-B bye=moon', | |
| "$answer | |
| $answer | |
| $answer | |
| #MAKE#: 'all' is up to date.\n"); | |
| # sv 63347. | |
| # MAKEFLAGS set is env and makefile sets MAKEFLAGS and there is a command | |
| # line definition. | |
| for my $fl (@flavors) { | |
| my $answer = ' -- bye=moon hello=world'; | |
| $ENV{'MAKEFLAGS'} = 'hello=world'; | |
| run_make_test(" | |
| \$(info \$(MAKEFLAGS)) | |
| MAKEFLAGS${fl}R | |
| \$(info \$(MAKEFLAGS)) | |
| all:; \$(info \$(MAKEFLAGS)) | |
| ", 'bye=moon', | |
| "$answer | |
| rR$answer | |
| rR$answer | |
| #MAKE#: 'all' is up to date.\n"); | |
| } | |
| # sv 63347. | |
| # Test changes introduced by makefiles to MAKEFLAGS. | |
| for my $fl (@flavors) { | |
| my $answer = 'rR --no-print-directory -- hello:=world FOO=bar'; | |
| run_make_test(q! | |
| MAKEFLAGS+=--no-print-directory | |
| $(info $(MAKEFLAGS)) | |
| MAKEFLAGS+=-k | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, 'FOO=bar -r -R hello:=world', | |
| "$answer | |
| k$answer | |
| k$answer | |
| #MAKE#: 'all' is up to date.\n"); | |
| } | |
| # sv 63347. | |
| # Test changes introduced by makefiles to MAKEFLAGS. | |
| # Same as above, but with -e. | |
| for my $fl (@flavors) { | |
| my $answer = 'erR -- hello:=world FOO=bar'; | |
| run_make_test(q! | |
| MAKEFLAGS+=--no-print-directory | |
| $(info $(MAKEFLAGS)) | |
| MAKEFLAGS+=-k | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '-e FOO=bar -r -R hello:=world', | |
| "$answer | |
| $answer | |
| $answer | |
| #MAKE#: 'all' is up to date.\n"); | |
| } | |
| mkdir('bye', 0777); | |
| create_file('bye/makefile', | |
| 'hello=moon | |
| all:; $(info $(hello))'); | |
| # sv 63347. | |
| # Test that a cli definition takes precedence over a definition set in | |
| # submake. | |
| run_make_test(q! | |
| v:=$(shell $(MAKE) -C bye --no-print-directory) | |
| all: ; $(info $(v)) | |
| !, 'hello=world', "world #MAKE#[1]: 'all' is up to date.\n#MAKE#: 'all' is up to date."); | |
| # Same as above with the shell assignment operator. | |
| run_make_test(q! | |
| v \!= $(MAKE) -C bye --no-print-directory | |
| all: ; $(info $(v)) | |
| !, 'hello=world', "world #MAKE#[1]: 'all' is up to date.\n#MAKE#: 'all' is up to date."); | |
| unlink('bye/makefile'); | |
| rmdir('bye'); | |
| # sv 63347 | |
| # Invalid command line variable definition. | |
| run_make_test(q! | |
| all:; $(info $(hello)) | |
| !, 'hello=\'$(world\'', "#MAKEFILE#:2: *** unterminated variable reference. Stop.\n", 512); | |
| # sv 63347 | |
| # An unused invalid command line variable definition is ignored. | |
| run_make_test(q! | |
| all:; $(info good) | |
| !, 'hello=\'$(world\'', "good\n#MAKE#: 'all' is up to date.\n"); | |
| # sv 63537 | |
| # Certain switches can be flipped on and off. | |
| # -k/-S, -w/--no-print-directory and -s/--no-silent. | |
| # Test the following aspects of behavior of these switches | |
| # 1. A switch can be enabled or disabled in makefile. | |
| # 2. A switch can be enabled or disabled in env. | |
| # 3. A switch can be enabled or disabled on the command line. | |
| # 4. Command line beats makefile. | |
| # 5. Env beats makefile. | |
| # 6. Command line beats env. | |
| # 7. MAKEFLAGS contains each specified switch at parse and build time. | |
| # 8. If contradicting switches are specified in multiple origins, MAKEFLAGS | |
| # contains the winning switch at parse and build time. | |
| # 9. MAKEFLAGS does not contain the beaten switch. | |
| @flavors = ('=', ':=', ':::=', '+='); | |
| # sv 63537 | |
| # -w vs --no-print-directory | |
| # -w on the command line. | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '-w', | |
| "#MAKE#: Entering directory '#PWD#' | |
| w | |
| w | |
| #MAKE#: 'all' is up to date. | |
| #MAKE#: Leaving directory '#PWD#'\n"); | |
| # -w in the env. | |
| $ENV{'MAKEFLAGS'} = '-w'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '', | |
| "#MAKE#: Entering directory '#PWD#' | |
| w | |
| w | |
| #MAKE#: 'all' is up to date. | |
| #MAKE#: Leaving directory '#PWD#'\n"); | |
| # -w in env, --no-print-directory on the command line. | |
| $ENV{'MAKEFLAGS'} = '-w'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '--no-print-directory', | |
| " --no-print-directory | |
| --no-print-directory | |
| #MAKE#: 'all' is up to date.\n"); | |
| # --no-print-directory in env, -w on the command line. | |
| $ENV{'MAKEFLAGS'} = '--no-print-directory'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '-w', | |
| "#MAKE#: Entering directory '#PWD#' | |
| w | |
| w | |
| #MAKE#: 'all' is up to date. | |
| #MAKE#: Leaving directory '#PWD#'\n"); | |
| delete $ENV{'MAKEFLAGS'}; | |
| # -w in makefile. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}-w | |
| \$(info \$(MAKEFLAGS)) | |
| all:; \$(info \$(MAKEFLAGS)) | |
| ", '', | |
| "#MAKE#: Entering directory '#PWD#' | |
| w | |
| w | |
| #MAKE#: 'all' is up to date. | |
| #MAKE#: Leaving directory '#PWD#'\n"); | |
| } | |
| # sv 63537 | |
| # -w in makefile, --no-print-directory on the command line. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}-w | |
| \$(info \$(MAKEFLAGS)) | |
| all:; \$(info \$(MAKEFLAGS)) | |
| ", '--no-print-directory', | |
| " --no-print-directory | |
| --no-print-directory | |
| #MAKE#: 'all' is up to date.\n"); | |
| } | |
| mkdir('lib2', 0777); | |
| create_file('lib2/makefile', 'all:; $(info $(MAKEFLAGS))'); | |
| # sv 63537 | |
| # Default, no -w or --no-print-directory is specified. | |
| run_make_test(q! | |
| all:; $(MAKE) -C lib2 | |
| !, '', | |
| "#MAKEPATH# -C lib2 | |
| #MAKE#[1]: Entering directory '#PWD#/lib2' | |
| #MAKE#[1]: 'all' is up to date. | |
| #MAKE#[1]: Leaving directory '#PWD#/lib2'\n"); | |
| # sv 63537 | |
| # --no-print-directory in makefile, -w on the command line. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}--no-print-directory | |
| \$(info \$(MAKEFLAGS)) | |
| all: | |
| \t \$(info \$(MAKEFLAGS)) | |
| \t \$(MAKE) -C lib2 | |
| ", '-w', | |
| "#MAKE#: Entering directory '#PWD#' | |
| w | |
| w | |
| #MAKEPATH# -C lib2 | |
| #MAKE#[1]: Entering directory '#PWD#/lib2' | |
| w | |
| #MAKE#[1]: 'all' is up to date. | |
| #MAKE#[1]: Leaving directory '#PWD#/lib2' | |
| #MAKE#: Leaving directory '#PWD#'\n"); | |
| } | |
| # sv 63537 | |
| # --no-print-directory in makefile, -w in the env. | |
| for my $fl (@flavors) { | |
| $ENV{'MAKEFLAGS'} = '-w'; | |
| run_make_test(" | |
| MAKEFLAGS${fl}--no-print-directory | |
| \$(info \$(MAKEFLAGS)) | |
| all: | |
| \t \$(info \$(MAKEFLAGS)) | |
| \t \$(MAKE) -C lib2 | |
| ", '', | |
| "#MAKE#: Entering directory '#PWD#' | |
| w | |
| w | |
| #MAKEPATH# -C lib2 | |
| #MAKE#[1]: Entering directory '#PWD#/lib2' | |
| w | |
| #MAKE#[1]: 'all' is up to date. | |
| #MAKE#[1]: Leaving directory '#PWD#/lib2' | |
| #MAKE#: Leaving directory '#PWD#'\n"); | |
| } | |
| unlink('lib2/makefile'); | |
| rmdir('lib2'); | |
| # sv 63537 | |
| # -k vs -S. | |
| # -S in env. | |
| $ENV{'MAKEFLAGS'} = '-S'; | |
| run_make_test(q! | |
| .RECIPEPREFIX := > | |
| $(info $(MAKEFLAGS)) | |
| all: one two | |
| one: | |
| > $(info $(MAKEFLAGS)) | |
| > #HELPER# -q fail 1 | |
| two:; $(info $@) | |
| !, '', | |
| "S | |
| S | |
| #HELPER# -q fail 1 | |
| #MAKE#: *** [#MAKEFILE#:7: one] Error 1", 512); | |
| # -S in env, -k on the command line. | |
| $ENV{'MAKEFLAGS'} = '-S'; | |
| run_make_test(q! | |
| .RECIPEPREFIX := > | |
| $(info $(MAKEFLAGS)) | |
| all: one two | |
| one: | |
| > $(info $(MAKEFLAGS)) | |
| > #HELPER# -q fail 1 | |
| two:; $(info $@) | |
| !, '-k', | |
| "k | |
| k | |
| #HELPER# -q fail 1 | |
| #MAKE#: *** [#MAKEFILE#:7: one] Error 1 | |
| two | |
| #MAKE#: Target 'all' not remade because of errors.", 512); | |
| # -k in env. | |
| $ENV{'MAKEFLAGS'} = '-k'; | |
| run_make_test(q! | |
| .RECIPEPREFIX := > | |
| $(info $(MAKEFLAGS)) | |
| all: one two | |
| one: | |
| > $(info $(MAKEFLAGS)) | |
| > #HELPER# -q fail 1 | |
| two:; $(info $@) | |
| !, '', | |
| "k | |
| k | |
| #HELPER# -q fail 1 | |
| #MAKE#: *** [#MAKEFILE#:7: one] Error 1 | |
| two | |
| #MAKE#: Target 'all' not remade because of errors.", 512); | |
| # -k in env, -S on the command line. | |
| $ENV{'MAKEFLAGS'} = '-k'; | |
| run_make_test(q! | |
| .RECIPEPREFIX := > | |
| $(info $(MAKEFLAGS)) | |
| all: one two | |
| one: | |
| > $(info $(MAKEFLAGS)) | |
| > #HELPER# -q fail 1 | |
| two:; $(info $@) | |
| !, '-S', | |
| "S | |
| S | |
| #HELPER# -q fail 1 | |
| #MAKE#: *** [#MAKEFILE#:7: one] Error 1", 512); | |
| delete $ENV{'MAKEFLAGS'}; | |
| # -k in makefile. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}-k | |
| \$(info \$(MAKEFLAGS)) | |
| all: one two | |
| one: | |
| \t \$(info \$(MAKEFLAGS)) | |
| \t #HELPER# -q fail 1 | |
| two:; \$(info \$@) | |
| ", '', | |
| "k | |
| k | |
| #HELPER# -q fail 1 | |
| #MAKE#: *** [#MAKEFILE#:7: one] Error 1 | |
| two | |
| #MAKE#: Target 'all' not remade because of errors.", 512); | |
| } | |
| # sv 63537 | |
| # -k in makefile and -S on the command line. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}-k | |
| \$(info \$(MAKEFLAGS)) | |
| all: one two | |
| one: | |
| \t \$(info \$(MAKEFLAGS)) | |
| \t #HELPER# -q fail 1 | |
| two:; \$(info \$@) | |
| ", '-S', | |
| "S | |
| S | |
| #HELPER# -q fail 1 | |
| #MAKE#: *** [#MAKEFILE#:7: one] Error 1", 512); | |
| } | |
| # sv 63537 | |
| # -k in makefile and -S in the env. | |
| for my $fl (@flavors) { | |
| $ENV{'MAKEFLAGS'} = '-S'; | |
| run_make_test(" | |
| MAKEFLAGS${fl}-k | |
| \$(info \$(MAKEFLAGS)) | |
| all: one two | |
| one: | |
| \t \$(info \$(MAKEFLAGS)) | |
| \t #HELPER# -q fail 1 | |
| two:; \$(info \$@) | |
| ", '', | |
| "S | |
| S | |
| #HELPER# -q fail 1 | |
| #MAKE#: *** [#MAKEFILE#:7: one] Error 1", 512); | |
| } | |
| delete $ENV{'MAKEFLAGS'}; | |
| # sv 63537 | |
| # -S in makefile. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}-S | |
| \$(info \$(MAKEFLAGS)) | |
| all: one two | |
| one: | |
| \t \$(info \$(MAKEFLAGS)) | |
| \t #HELPER# -q fail 1 | |
| two:; \$(info \$@) | |
| ", '', | |
| "S | |
| S | |
| #HELPER# -q fail 1 | |
| #MAKE#: *** [#MAKEFILE#:7: one] Error 1", 512); | |
| } | |
| # -S in makefile and -k on the command line. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}-S | |
| \$(info \$(MAKEFLAGS)) | |
| all: one two | |
| one: | |
| \t \$(info \$(MAKEFLAGS)) | |
| \t #HELPER# -q fail 1 | |
| two:; \$(info \$@) | |
| ", '-k', | |
| "k | |
| k | |
| #HELPER# -q fail 1 | |
| #MAKE#: *** [#MAKEFILE#:7: one] Error 1 | |
| two | |
| #MAKE#: Target 'all' not remade because of errors.", 512); | |
| } | |
| # sv 63537 | |
| # -S in makefile and -k in the env. | |
| for my $fl (@flavors) { | |
| $ENV{'MAKEFLAGS'} = '-k'; | |
| run_make_test(" | |
| MAKEFLAGS${fl}-S | |
| \$(info \$(MAKEFLAGS)) | |
| all: one two | |
| one: | |
| \t \$(info \$(MAKEFLAGS)) | |
| \t #HELPER# -q fail 1 | |
| two:; \$(info \$@) | |
| ", '', | |
| "k | |
| k | |
| #HELPER# -q fail 1 | |
| #MAKE#: *** [#MAKEFILE#:7: one] Error 1 | |
| two | |
| #MAKE#: Target 'all' not remade because of errors.", 512); | |
| } | |
| # sv 63537 | |
| # -s vs --no-silent. | |
| # -s in env. | |
| $ENV{'MAKEFLAGS'} = '-s'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '', "s\ns"); | |
| # -s in env, --no-silent on the command line. | |
| $ENV{'MAKEFLAGS'} = '-s'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '--no-silent', | |
| " --no-silent | |
| --no-silent | |
| #MAKE#: 'all' is up to date.\n"); | |
| # --no-silent in env. | |
| $ENV{'MAKEFLAGS'} = '--no-silent'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '', | |
| " --no-silent | |
| --no-silent | |
| #MAKE#: 'all' is up to date.\n"); | |
| # --no-silent in env, -s on the command line. | |
| $ENV{'MAKEFLAGS'} = '--no-silent'; | |
| run_make_test(q! | |
| $(info $(MAKEFLAGS)) | |
| all:; $(info $(MAKEFLAGS)) | |
| !, '-s', "s\ns"); | |
| delete $ENV{'MAKEFLAGS'}; | |
| # -s in the makefile. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}-s | |
| \$(info \$(MAKEFLAGS)) | |
| all:; \$(info \$(MAKEFLAGS)) | |
| ", '', "s\ns"); | |
| } | |
| # sv 63537 | |
| # -s in makefile and --no-silent on the command line. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}-s | |
| \$(info \$(MAKEFLAGS)) | |
| all:; \$(info \$(MAKEFLAGS)) | |
| ", '--no-silent', | |
| " --no-silent | |
| --no-silent | |
| #MAKE#: 'all' is up to date.\n"); | |
| } | |
| # sv 63537 | |
| # -s in makefile and --no-silent in the env. | |
| for my $fl (@flavors) { | |
| $ENV{'MAKEFLAGS'} = '--no-silent'; | |
| run_make_test(" | |
| MAKEFLAGS${fl}-s | |
| \$(info \$(MAKEFLAGS)) | |
| all:; \$(info \$(MAKEFLAGS)) | |
| ", '', | |
| " --no-silent | |
| --no-silent | |
| #MAKE#: 'all' is up to date.\n"); | |
| } | |
| delete $ENV{'MAKEFLAGS'}; | |
| # sv 63537 | |
| # --no-silent in makefile. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}--no-silent | |
| \$(info \$(MAKEFLAGS)) | |
| all:; \$(info \$(MAKEFLAGS)) | |
| ", '', | |
| " --no-silent | |
| --no-silent | |
| #MAKE#: 'all' is up to date.\n"); | |
| } | |
| # sv 63537 | |
| # --no-silent in makefile and -s on the command line. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}--no-silent | |
| \$(info \$(MAKEFLAGS)) | |
| all:; \$(info \$(MAKEFLAGS)) | |
| ", '-s', "s\ns"); | |
| } | |
| # sv 63537 | |
| # --no-silent in makefile and -s in the env. | |
| for my $fl (@flavors) { | |
| $ENV{'MAKEFLAGS'} = '-s'; | |
| run_make_test(" | |
| MAKEFLAGS${fl}--no-silent | |
| \$(info \$(MAKEFLAGS)) | |
| all:; \$(info \$(MAKEFLAGS)) | |
| ", '', "s\ns"); | |
| } | |
| delete $ENV{'MAKEFLAGS'}; | |
| # sv 63537 | |
| # Multiple --debug switches from various origins are all combined. | |
| # Because run_make_test regex matching facility does not allow to match against | |
| # multiple lines, run the test twice. During the first run match the output of | |
| # --debug=b, during the second run match the output of --debug=-j. | |
| # | |
| # --debug=b in makefile. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}--debug=b | |
| hello:; touch \$@ | |
| .PHONY: hello | |
| ", '', "/Updating makefiles/"); | |
| } | |
| # --debug=b in makefile, --debug=j on the command line. | |
| # Test for --debug=j output. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}--debug=b | |
| hello:; touch \$@ | |
| .PHONY: hello | |
| ", '--debug=j', "/Putting child/"); | |
| } | |
| # --debug=b in makefile, --debug=j on the command line. | |
| # Test for --debug=b output. | |
| for my $fl (@flavors) { | |
| run_make_test(" | |
| MAKEFLAGS${fl}--debug=b | |
| hello:; touch \$@ | |
| .PHONY: hello | |
| ", '--debug=j', "/Updating makefiles/"); | |
| } | |
| # --debug=j in makefile, --debug=b on the command line. | |
| # Test that MAKEFLAGS contains --debug=b. | |
| run_make_test(q! | |
| MAKEFLAGS=--debug=j | |
| $(info makeflags=$(MAKEFLAGS)) | |
| hello:; touch $@ | |
| .PHONY: hello | |
| !, '--debug=b', "/makeflags= --debug=b/"); | |
| # --debug=b in makefile, --debug=j in the env. | |
| # Test for --debug=j output. | |
| for my $fl (@flavors) { | |
| $ENV{'MAKEFLAGS'} = '--debug=j'; | |
| run_make_test(" | |
| MAKEFLAGS${fl}--debug=b | |
| hello:; touch \$@ | |
| .PHONY: hello | |
| ", '', "/Putting child/"); | |
| } | |
| # --debug=b in makefile, --debug=j in the env. | |
| # Test for --debug=b output. | |
| for my $fl (@flavors) { | |
| $ENV{'MAKEFLAGS'} = '--debug=j'; | |
| run_make_test(" | |
| MAKEFLAGS${fl}--debug=b | |
| hello:; touch \$@ | |
| .PHONY: hello | |
| ", '', "/Updating makefiles/"); | |
| } | |
| unlink('hello'); | |
| rmdir('localtmp'); | |
| # sv 66037. An infinite loop when MAKEFLAGS is specified on the command line. | |
| my @cli= ('-r MAKEFLAGS=-k hello=world', | |
| '-r MAKEFLAGS=-k hello=world MAKEFLAGS=-R', | |
| '-r MAKEFLAGS="-R -- hello=world MAKEFLAGS=-k"'); | |
| for my $c (@cli) { | |
| run_make_test(q! | |
| $(info hello=$(hello)) | |
| all:; | |
| !, $c, "hello=world\n#MAKE#: 'all' is up to date.\n"); | |
| } | |
| run_make_test(q! | |
| $(info hello=$(hello)) | |
| all:; | |
| !, '-r MAKEFLAGS="-R -- hello=world MAKEFLAGS=hello=bye"', | |
| "hello=bye\n#MAKE#: 'all' is up to date.\n"); | |
| run_make_test(q! | |
| $(info hello=$(hello)) | |
| all:; | |
| !, '-r MAKEFLAGS="-R -- hello=world MAKEFLAGS=-s"', | |
| "hello=world\n"); | |
| # This tells the test driver that the perl test script executed properly. | |
| 1; |