| # -*-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; |