mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-12-29 00:05:58 +00:00
148 lines
3.1 KiB
Perl
148 lines
3.1 KiB
Perl
# -*-perl-*-
|
|
$description = "Test pattern-specific variable settings.";
|
|
|
|
$details = "\
|
|
Create a makefile containing various flavors of pattern-specific variable
|
|
settings, override and non-override, and using various variable expansion
|
|
rules, semicolon interference, etc.";
|
|
|
|
open(MAKEFILE,"> $makefile");
|
|
|
|
print MAKEFILE <<'EOF';
|
|
all: one.x two.x three.x
|
|
FOO = foo
|
|
BAR = bar
|
|
BAZ = baz
|
|
one.x: override FOO = one
|
|
%.x: BAR = two
|
|
t%.x: BAR = four
|
|
thr% : override BAZ = three
|
|
one.x two.x three.x: ; @echo $@: $(FOO) $(BAR) $(BAZ)
|
|
four.x: baz ; @echo $@: $(FOO) $(BAR) $(BAZ)
|
|
baz: ; @echo $@: $(FOO) $(BAR) $(BAZ)
|
|
|
|
# test matching multiple patterns
|
|
a%: AAA = aaa
|
|
%b: BBB = ccc
|
|
a%: BBB += ddd
|
|
%b: AAA ?= xxx
|
|
%b: AAA += bbb
|
|
.PHONY: ab
|
|
ab: ; @echo $(AAA); echo $(BBB)
|
|
EOF
|
|
|
|
close(MAKEFILE);
|
|
|
|
|
|
# TEST #1 -- basics
|
|
|
|
&run_make_with_options($makefile, "", &get_logfile);
|
|
$answer = "one.x: one two baz\ntwo.x: foo four baz\nthree.x: foo four three\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
|
|
# TEST #2 -- try the override feature
|
|
|
|
&run_make_with_options($makefile, "BAZ=five", &get_logfile);
|
|
$answer = "one.x: one two five\ntwo.x: foo four five\nthree.x: foo four three\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
|
|
# TEST #3 -- make sure patterns are inherited properly
|
|
|
|
&run_make_with_options($makefile, "four.x", &get_logfile);
|
|
$answer = "baz: foo two baz\nfour.x: foo two baz\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
|
|
# TEST #4 -- test multiple patterns matching the same target
|
|
|
|
&run_make_with_options($makefile, "ab", &get_logfile);
|
|
$answer = "aaa bbb\nccc ddd\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
# TEST #5 -- test pattern-specific exported variables
|
|
#
|
|
run_make_test('
|
|
/%: export foo := foo
|
|
|
|
/bar:
|
|
@echo $(foo) $$foo
|
|
', '', 'foo foo');
|
|
|
|
|
|
# TEST #6 -- test expansion of pattern-specific simple variables
|
|
#
|
|
run_make_test('
|
|
.PHONY: all
|
|
|
|
all: inherit := good $$t
|
|
all: bar baz
|
|
|
|
b%: pattern := good $$t
|
|
|
|
global := orginal $$t
|
|
|
|
|
|
# normal target
|
|
#
|
|
ifdef rec
|
|
bar: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
|
|
else
|
|
bar: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
|
|
endif
|
|
|
|
bar: ; @echo \'normal: $a;\'
|
|
|
|
|
|
# pattern target
|
|
#
|
|
ifdef rec
|
|
%z: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
|
|
else
|
|
%z: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
|
|
endif
|
|
|
|
%z: ; @echo \'pattrn: $a;\'
|
|
|
|
|
|
global := new $$t
|
|
',
|
|
'',
|
|
'normal: global: orginal $t pattern: inherit: ;
|
|
pattrn: global: orginal $t pattern: inherit: ;');
|
|
|
|
|
|
# TEST #7 -- test expansion of pattern-specific recursive variables
|
|
#
|
|
run_make_test(undef, # reuse previous makefile
|
|
'rec=1',
|
|
'normal: global: new $t pattern: good $t inherit: good $t;
|
|
pattrn: global: new $t pattern: good $t inherit: good $t;');
|
|
|
|
# TEST #8: override in pattern-specific variables
|
|
|
|
run_make_test('
|
|
a%: override FOO += f1
|
|
a%: FOO += f2
|
|
ab: ; @echo "$(FOO)"
|
|
',
|
|
'', "f1\n");
|
|
|
|
run_make_test(undef, 'FOO=C', "C f1\n");
|
|
|
|
# TEST #9: Test shortest stem selection in pattern-specific variables.
|
|
|
|
run_make_test('
|
|
%-mt.x: x := two
|
|
%.x: x := one
|
|
|
|
all: foo.x foo-mt.x
|
|
|
|
foo.x: ;@echo $x
|
|
foo-mt.x: ;@echo $x
|
|
',
|
|
'',
|
|
"one\ntwo");
|
|
|
|
1;
|