| # -*-perl-*- | |
| $description = "Test the -e (environment overrides) option"; | |
| $ENV{GOOGLE} = 'boggle'; | |
| run_make_test(q! | |
| GOOGLE = bazzle | |
| all:; @echo "$(GOOGLE)" | |
| !, | |
| '-e', "boggle\n"); | |
| # Ensure variables set on the command line have the origin correct | |
| # See SV 61218 | |
| run_make_test(q! | |
| $(info FOO [$(origin FOO)]: $(value FOO)) | |
| all: ; | |
| recurse: ; @$(MAKE) -f #MAKEFILE# | |
| !, | |
| '-e --no-print-directory FOO=1 recurse', | |
| "FOO [command line]: 1\nFOO [command line]: 1\n#MAKE#[1]: 'all' is up to date."); | |
| # SV 64803. | |
| # Test that the origin of an env variable is 'enviroment override' when -e | |
| # is set and the makefile does not modify the variable. | |
| # First run the test without -e and then with -e. | |
| mkdir('lib', 0777); | |
| create_file('lib/makefile', | |
| '$(info in submake value=$(hello), origin=$(origin hello)) | |
| all:; @echo "value=$(hello), origin=$(origin hello)"'."\n"); | |
| # No -e. | |
| $ENV{hello} = 'world'; | |
| run_make_test(q! | |
| .RECIPEPREFIX = > | |
| $(info value=$(hello), origin=$(origin hello)) | |
| all: | |
| > @echo "value=$(hello), origin=$(origin hello)" | |
| > @$(MAKE) -C lib | |
| .PHONY: lib all | |
| !, | |
| '-s', | |
| "value=world, origin=environment\nvalue=world, origin=environment\n". | |
| "in submake value=world, origin=environment\nvalue=world, origin=environment"); | |
| # -e is specified on the command line. | |
| my @opts = ('-e', '--environment-overrides'); | |
| for my $opt (@opts) { | |
| $ENV{hello} = 'world'; | |
| run_make_test(q! | |
| .RECIPEPREFIX = > | |
| $(info value=$(hello), origin=$(origin hello)) | |
| all: | |
| > @echo "value=$(hello), origin=$(origin hello)" | |
| > @$(MAKE) -C lib | |
| .PHONY: lib all | |
| !, | |
| "-s $opt", | |
| "value=world, origin=environment override\nvalue=world, origin=environment override\n". | |
| "in submake value=world, origin=environment override\nvalue=world, origin=environment override"); | |
| } | |
| # MAKEFLAGS from env affects top level make. | |
| $ENV{hello} = 'world'; | |
| $ENV{MAKEFLAGS} = 'e'; | |
| run_make_test(q! | |
| .RECIPEPREFIX = > | |
| $(info value=$(hello), origin=$(origin hello)) | |
| all: | |
| > @echo "value=$(hello), origin=$(origin hello)" | |
| > @$(MAKE) -C lib | |
| .PHONY: lib all | |
| !, | |
| "-s", | |
| "value=world, origin=environment override\nvalue=world, origin=environment override\n". | |
| "in submake value=world, origin=environment override\nvalue=world, origin=environment override"); | |
| # -e is passed to submake on the command line. | |
| $ENV{hello} = 'world'; | |
| run_make_test(q! | |
| .RECIPEPREFIX = > | |
| $(info value=$(hello), origin=$(origin hello)) | |
| all: | |
| > @echo "value=$(hello), origin=$(origin hello)" | |
| > @$(MAKE) -e -C lib | |
| .PHONY: lib all | |
| !, | |
| "-s", | |
| "value=world, origin=environment\nvalue=world, origin=environment\n". | |
| "in submake value=world, origin=environment override\nvalue=world, origin=environment override"); | |
| # MAKEFLAGS is reset for submake. | |
| $ENV{hello} = 'world'; | |
| run_make_test(q! | |
| .RECIPEPREFIX = > | |
| $(info value=$(hello), origin=$(origin hello)) | |
| all: | |
| > @echo "value=$(hello), origin=$(origin hello)" | |
| > @$(MAKE) -C lib MAKEFLAGS= | |
| .PHONY: lib all | |
| !, | |
| "-se", | |
| "value=world, origin=environment override\nvalue=world, origin=environment override\n". | |
| "in submake value=world, origin=environment\nvalue=world, origin=environment"); | |
| # Some MAKEFLAGS in top make env. | |
| # This MAKEFLAGS does not conform to the format that make itself produces for | |
| # submake. However, make still parses and honors this MAKEFLAGS. | |
| # This test checks that make does not confuse 'e' in 'extramk' with '-e'. | |
| $ENV{MAKEFLAGS} = 'r -Iextramk -k bye=moon'; | |
| $ENV{hello} = 'world'; | |
| run_make_test(q! | |
| .RECIPEPREFIX = > | |
| $(info value=$(hello), origin=$(origin hello)) | |
| all: | |
| > @echo "value=$(hello), origin=$(origin hello)" | |
| > @$(MAKE) -C lib | |
| .PHONY: lib all | |
| !, | |
| "-s", | |
| "value=world, origin=environment\nvalue=world, origin=environment\n". | |
| "in submake value=world, origin=environment\nvalue=world, origin=environment"); | |
| # Some MAKEFLAGS in top make env. | |
| # This MAKEFLAGS does not conform to the format that make itself produces for | |
| # submake. However, make still parses and honors this MAKEFLAGS. | |
| # This test checks that make detects '-e' in this MAKEFLAGS. | |
| $ENV{MAKEFLAGS} = 'r -Iextramk -ke bye=moon'; | |
| $ENV{hello} = 'world'; | |
| run_make_test(q! | |
| .RECIPEPREFIX = > | |
| $(info value=$(hello), origin=$(origin hello)) | |
| all: | |
| > @echo "value=$(hello), origin=$(origin hello)" | |
| > @$(MAKE) -C lib | |
| .PHONY: lib all | |
| !, | |
| "-s", | |
| "value=world, origin=environment override\nvalue=world, origin=environment override\n". | |
| "in submake value=world, origin=environment override\nvalue=world, origin=environment override"); | |
| 1; |