make/tests/scripts/variables/flavors
Paul Smith 82708b3a3a Remove unnecessary parsing during makefile read
* src/read.c (make_word_type): Remove w_varassign from the enum.
(get_next_mword): This function is never called on a string in a place
where we might find a variable assignment.  Any variable assignments
have already been handled via try_variable_definition(), so we don't
need to check for them here.
* tests/scripts/variables/flavors: Check triple-colon assignment in
target-specific variables.
2024-01-27 16:40:36 -05:00

212 lines
3.5 KiB
Perl

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