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