| # -*-perl-*- |
| |
| $description = "Test various flavors of make variable setting."; |
| |
| $details = ""; |
| |
| # TEST 0: Recursive |
| |
| run_make_test(' |
| ugh = Goodbye |
| foo = $(bar) |
| bar = ${ugh} |
| ugh = Hello |
| all: ; @echo $(foo) |
| ', |
| '', "Hello\n"); |
| |
| # TEST 1: Simple |
| |
| run_make_test(' |
| bar = Goodbye |
| foo := $(bar) |
| bar = ${ugh} |
| ugh = Hello |
| all: ; @echo $(foo) |
| ', |
| '', "Goodbye\n"); |
| |
| # TEST 2: Append to recursive |
| |
| run_make_test(' |
| foo = Hello |
| ugh = Goodbye |
| foo += $(bar) |
| bar = ${ugh} |
| ugh = Hello |
| all: ; @echo $(foo) |
| ', |
| '', "Hello Hello\n"); |
| |
| # TEST 3: Append to simple |
| |
| run_make_test(' |
| foo := Hello |
| ugh = Goodbye |
| bar = ${ugh} |
| foo += $(bar) |
| ugh = Hello |
| all: ; @echo $(foo) |
| ', |
| '', "Hello Goodbye\n"); |
| |
| # TEST 4: Conditional pre-set |
| |
| run_make_test(' |
| foo = Hello |
| ugh = Goodbye |
| bar = ${ugh} |
| foo ?= $(bar) |
| ugh = Hello |
| all: ; @echo $(foo) |
| ', |
| '', "Hello\n"); |
| |
| # TEST 5: Conditional unset |
| |
| run_make_test(' |
| ugh = Goodbye |
| bar = ${ugh} |
| foo ?= $(bar) |
| ugh = Hello |
| all: ; @echo $(foo) |
| ', |
| '', "Hello\n"); |
| |
| # TEST 6: Simple using POSIX syntax |
| run_make_test(' |
| bar = Goodbye |
| foo ::= $(bar) |
| bar = ${ugh} |
| ugh = Hello |
| all: ; @echo $(foo) |
| ', |
| '', "Goodbye\n"); |
| |
| # TEST 7: POSIX syntax no spaces |
| run_make_test(' |
| bar = Goodbye |
| foo::=$(bar) |
| bar = ${ugh} |
| ugh = Hello |
| all: ; @echo $(foo) |
| ', |
| '', "Goodbye\n"); |
| |
| # TEST 8: Append to empty |
| run_make_test(q! |
| recur = |
| recur += foo |
| simple := |
| simple += bar |
| recur_empty = foo |
| recur_empty += |
| simple_empty := bar |
| simple_empty += |
| empty_recur = |
| empty_recur += |
| empty_simple := |
| empty_simple += |
| |
| all: ; @: $(info recur=/$(recur)/ simple=/$(simple)/ recure=/$(recur_empty)/ simplee=/$(simple_empty)/ erecur=/$(empty_recur)/ esimple=/$(empty_simple)/) |
| !, |
| '', "recur=/foo/ simple=/bar/ recure=/foo/ simplee=/bar/ erecur=// esimple=//\n"); |
| |
| # TEST 9: Line continuation |
| run_make_test(q! |
| recur = $\ |
| zero $\ |
| one$$\ |
| two$$$\ |
| three |
| simple := $\ |
| four $\ |
| five$$\ |
| six$$$\ |
| seven |
| |
| all: d$\ |
| e$\ |
| p; @: |
| |
| .PHONY: dep |
| dep: ; @: $(info recur=/$(recur)/ simple=/$(simple)/) |
| !, |
| '', "recur=/zeroone\$ two\$three/ simple=/fourfive\$ six\$seven/\n"); |
| |
| # TEST 9: Line continuation with POSIX |
| run_make_test(q! |
| .POSIX: |
| recur = $\ |
| zero $\ |
| one$$\ |
| two$$$\ |
| three |
| simple := $\ |
| four $\ |
| five$$\ |
| six$$$\ |
| seven |
| |
| all: d$\ |
| e$\ |
| p; @: |
| |
| .PHONY: dep |
| dep: ; @: $(info recur=/$(recur)/ simple=/$(simple)/) |
| !, |
| '', "recur=/zero one\$ two\$three/ simple=/four five\$ six\$seven/\n"); |
| |
| # Test POSIX :::= |
| # This creates a recursive variable, but it expands the RHS first. Any |
| # variable escapes ('$$') are preserved so that this recursive variable can be |
| # expanded again without changing its contents. |
| run_make_test(' |
| bar = Goodbye |
| foo :::= $(bar) |
| bar = ${ugh} |
| ugh = Hello |
| all: ; @echo $(foo) |
| ', |
| '', "Goodbye"); |
| |
| # POSIX :::= no spaces |
| run_make_test(q! |
| bar = Goodbye |
| foo:::=$(bar) |
| bar = ${ugh} |
| ugh = Hello |
| all: ; @echo $(foo) |
| !, |
| '', "Goodbye"); |
| |
| # Variable escapes ('$$') are preserved. |
| run_make_test(q! |
| bar = Good$$bye |
| foo :::= $(bar) $$what |
| bar = ${ugh} |
| ugh = Hello |
| all: ; @echo '$(foo)' |
| !, |
| '', 'Good$bye $what'); |
| |
| # Append works as expected |
| run_make_test(q! |
| bar = Good$$bye |
| foo :::= $(bar) |
| foo += $$what $(bar) |
| bar = ${ugh} |
| ugh = Hello |
| all: ; @echo '$(foo)' |
| !, |
| '', 'Good$bye $what Hello'); |
| |
| # Target-specific variable |
| run_make_test(q! |
| bar = Good$$bye |
| all: foo :::= $(bar) |
| all: ; @echo '$(foo)' |
| !, |
| '', 'Good$bye'); |
| |
| 1; |