xref: /netbsd-src/external/gpl2/gmake/dist/tests/scripts/features/patspecific_vars (revision 69606e3f5c9388e52aed8c120ad63c049ca45d8f)
1*69606e3fSchristos#                                                                    -*-perl-*-
2*69606e3fSchristos$description = "Test pattern-specific variable settings.";
3*69606e3fSchristos
4*69606e3fSchristos$details = "\
5*69606e3fSchristosCreate a makefile containing various flavors of pattern-specific variable
6*69606e3fSchristossettings, override and non-override, and using various variable expansion
7*69606e3fSchristosrules, semicolon interference, etc.";
8*69606e3fSchristos
9*69606e3fSchristosopen(MAKEFILE,"> $makefile");
10*69606e3fSchristos
11*69606e3fSchristosprint MAKEFILE <<'EOF';
12*69606e3fSchristosall: one.x two.x three.x
13*69606e3fSchristosFOO = foo
14*69606e3fSchristosBAR = bar
15*69606e3fSchristosBAZ = baz
16*69606e3fSchristosone.x: override FOO = one
17*69606e3fSchristos%.x: BAR = two
18*69606e3fSchristost%.x: BAR = four
19*69606e3fSchristosthr% : override BAZ = three
20*69606e3fSchristosone.x two.x three.x: ; @echo $@: $(FOO) $(BAR) $(BAZ)
21*69606e3fSchristosfour.x: baz ; @echo $@: $(FOO) $(BAR) $(BAZ)
22*69606e3fSchristosbaz: ; @echo $@: $(FOO) $(BAR) $(BAZ)
23*69606e3fSchristos
24*69606e3fSchristos# test matching multiple patterns
25*69606e3fSchristosa%: AAA = aaa
26*69606e3fSchristos%b: BBB = ccc
27*69606e3fSchristosa%: BBB += ddd
28*69606e3fSchristos%b: AAA ?= xxx
29*69606e3fSchristos%b: AAA += bbb
30*69606e3fSchristos.PHONY: ab
31*69606e3fSchristosab: ; @echo $(AAA); echo $(BBB)
32*69606e3fSchristosEOF
33*69606e3fSchristos
34*69606e3fSchristosclose(MAKEFILE);
35*69606e3fSchristos
36*69606e3fSchristos
37*69606e3fSchristos# TEST #1 -- basics
38*69606e3fSchristos
39*69606e3fSchristos&run_make_with_options($makefile, "", &get_logfile);
40*69606e3fSchristos$answer = "one.x: one two baz\ntwo.x: foo four baz\nthree.x: foo four three\n";
41*69606e3fSchristos&compare_output($answer,&get_logfile(1));
42*69606e3fSchristos
43*69606e3fSchristos
44*69606e3fSchristos# TEST #2 -- try the override feature
45*69606e3fSchristos
46*69606e3fSchristos&run_make_with_options($makefile, "BAZ=five", &get_logfile);
47*69606e3fSchristos$answer = "one.x: one two five\ntwo.x: foo four five\nthree.x: foo four three\n";
48*69606e3fSchristos&compare_output($answer,&get_logfile(1));
49*69606e3fSchristos
50*69606e3fSchristos
51*69606e3fSchristos# TEST #3 -- make sure patterns are inherited properly
52*69606e3fSchristos
53*69606e3fSchristos&run_make_with_options($makefile, "four.x", &get_logfile);
54*69606e3fSchristos$answer = "baz: foo two baz\nfour.x: foo two baz\n";
55*69606e3fSchristos&compare_output($answer,&get_logfile(1));
56*69606e3fSchristos
57*69606e3fSchristos
58*69606e3fSchristos# TEST #4 -- test multiple patterns matching the same target
59*69606e3fSchristos
60*69606e3fSchristos&run_make_with_options($makefile, "ab", &get_logfile);
61*69606e3fSchristos$answer = "aaa bbb\nccc ddd\n";
62*69606e3fSchristos&compare_output($answer,&get_logfile(1));
63*69606e3fSchristos
64*69606e3fSchristos# TEST #5 -- test pattern-specific exported variables
65*69606e3fSchristos#
66*69606e3fSchristosrun_make_test('
67*69606e3fSchristos/%: export foo := foo
68*69606e3fSchristos
69*69606e3fSchristos/bar:
70*69606e3fSchristos	@echo $(foo) $$foo
71*69606e3fSchristos', '', 'foo foo');
72*69606e3fSchristos
73*69606e3fSchristos
74*69606e3fSchristos# TEST #6 -- test expansion of pattern-specific simple variables
75*69606e3fSchristos#
76*69606e3fSchristosrun_make_test('
77*69606e3fSchristos.PHONY: all
78*69606e3fSchristos
79*69606e3fSchristosall: inherit := good $$t
80*69606e3fSchristosall: bar baz
81*69606e3fSchristos
82*69606e3fSchristosb%: pattern := good $$t
83*69606e3fSchristos
84*69606e3fSchristosglobal := orginal $$t
85*69606e3fSchristos
86*69606e3fSchristos
87*69606e3fSchristos# normal target
88*69606e3fSchristos#
89*69606e3fSchristosifdef rec
90*69606e3fSchristosbar: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
91*69606e3fSchristoselse
92*69606e3fSchristosbar: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
93*69606e3fSchristosendif
94*69606e3fSchristos
95*69606e3fSchristosbar: ; @echo \'normal: $a;\'
96*69606e3fSchristos
97*69606e3fSchristos
98*69606e3fSchristos# pattern target
99*69606e3fSchristos#
100*69606e3fSchristosifdef rec
101*69606e3fSchristos%z: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
102*69606e3fSchristoselse
103*69606e3fSchristos%z: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
104*69606e3fSchristosendif
105*69606e3fSchristos
106*69606e3fSchristos%z: ; @echo \'pattrn: $a;\'
107*69606e3fSchristos
108*69606e3fSchristos
109*69606e3fSchristosglobal := new $$t
110*69606e3fSchristos',
111*69606e3fSchristos'',
112*69606e3fSchristos'normal: global: orginal $t pattern:  inherit: ;
113*69606e3fSchristospattrn: global: orginal $t pattern:  inherit: ;');
114*69606e3fSchristos
115*69606e3fSchristos
116*69606e3fSchristos# TEST #7 -- test expansion of pattern-specific recursive variables
117*69606e3fSchristos#
118*69606e3fSchristosrun_make_test(undef, # reuse previous makefile
119*69606e3fSchristos'rec=1',
120*69606e3fSchristos'normal: global: new $t pattern: good $t inherit: good $t;
121*69606e3fSchristospattrn: global: new $t pattern: good $t inherit: good $t;');
122*69606e3fSchristos
123*69606e3fSchristos
124*69606e3fSchristos1;
125