# -*-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'); 1;