1*7f56925bSchristos#                                                                    -*-perl-*-
2*7f56925bSchristos$description = "Test second expansion in ordinary rules.";
3*7f56925bSchristos
4*7f56925bSchristos$details = "";
5*7f56925bSchristos
6*7f56925bSchristosuse Cwd;
7*7f56925bSchristos
8*7f56925bSchristos$dir = cwd;
9*7f56925bSchristos$dir =~ s,.*/([^/]+)$,../$1,;
10*7f56925bSchristos
11*7f56925bSchristos
12*7f56925bSchristos# Test #1: automatic variables.
13*7f56925bSchristos#
14*7f56925bSchristosrun_make_test('
15*7f56925bSchristos.SECONDEXPANSION:
16*7f56925bSchristos.DEFAULT: ; @echo $@
17*7f56925bSchristos
18*7f56925bSchristosfoo.a: bar baz
19*7f56925bSchristos
20*7f56925bSchristosfoo.a: biz | buz
21*7f56925bSchristos
22*7f56925bSchristosfoo.%: 1.$$@ \
23*7f56925bSchristos       2.$$< \
24*7f56925bSchristos       $$(addprefix 3.,$$^) \
25*7f56925bSchristos       $$(addprefix 4.,$$+) \
26*7f56925bSchristos       5.$$| \
27*7f56925bSchristos       6.$$*
28*7f56925bSchristos	@:
29*7f56925bSchristos
30*7f56925bSchristos1.foo.a \
31*7f56925bSchristos2.bar \
32*7f56925bSchristos3.bar \
33*7f56925bSchristos3.baz \
34*7f56925bSchristos3.biz \
35*7f56925bSchristos4.bar \
36*7f56925bSchristos4.baz \
37*7f56925bSchristos4.biz \
38*7f56925bSchristos5.buz \
39*7f56925bSchristos6.a:
40*7f56925bSchristos	@echo $@
41*7f56925bSchristos
42*7f56925bSchristos',
43*7f56925bSchristos'',
44*7f56925bSchristos'1.foo.a
45*7f56925bSchristos2.bar
46*7f56925bSchristos3.bar
47*7f56925bSchristos3.baz
48*7f56925bSchristos3.biz
49*7f56925bSchristos4.bar
50*7f56925bSchristos4.baz
51*7f56925bSchristos4.biz
52*7f56925bSchristos5.buz
53*7f56925bSchristos6.a
54*7f56925bSchristosbar
55*7f56925bSchristosbaz
56*7f56925bSchristosbiz
57*7f56925bSchristosbuz
58*7f56925bSchristos');
59*7f56925bSchristos
60*7f56925bSchristos
61*7f56925bSchristos# Test #2: target/pattern -specific variables.
62*7f56925bSchristos#
63*7f56925bSchristosrun_make_test('
64*7f56925bSchristos.SECONDEXPANSION:
65*7f56925bSchristosfoo.x:
66*7f56925bSchristos
67*7f56925bSchristosfoo.%: $$(%_a) $$(%_b) bar
68*7f56925bSchristos	@:
69*7f56925bSchristos
70*7f56925bSchristosfoo.x: x_a := bar
71*7f56925bSchristos
72*7f56925bSchristos%.x: x_b := baz
73*7f56925bSchristos
74*7f56925bSchristosbar baz: ; @echo $@
75*7f56925bSchristos
76*7f56925bSchristos',
77*7f56925bSchristos'',
78*7f56925bSchristos'bar
79*7f56925bSchristosbaz
80*7f56925bSchristos');
81*7f56925bSchristos
82*7f56925bSchristos
83*7f56925bSchristos# Test #3: order of prerequisites.
84*7f56925bSchristos#
85*7f56925bSchristosrun_make_test('
86*7f56925bSchristos.SECONDEXPANSION:
87*7f56925bSchristos.DEFAULT: ; @echo $@
88*7f56925bSchristos
89*7f56925bSchristosall: foo bar baz
90*7f56925bSchristos
91*7f56925bSchristos
92*7f56925bSchristos# Subtest #1
93*7f56925bSchristos#
94*7f56925bSchristos%oo: %oo.1; @:
95*7f56925bSchristos
96*7f56925bSchristosfoo: foo.2
97*7f56925bSchristos
98*7f56925bSchristosfoo: foo.3
99*7f56925bSchristos
100*7f56925bSchristosfoo.1: ; @echo $@
101*7f56925bSchristos
102*7f56925bSchristos
103*7f56925bSchristos# Subtest #2
104*7f56925bSchristos#
105*7f56925bSchristosbar: bar.2
106*7f56925bSchristos
107*7f56925bSchristos%ar: %ar.1; @:
108*7f56925bSchristos
109*7f56925bSchristosbar: bar.3
110*7f56925bSchristos
111*7f56925bSchristosbar.1: ; @echo $@
112*7f56925bSchristos
113*7f56925bSchristos
114*7f56925bSchristos# Subtest #3
115*7f56925bSchristos#
116*7f56925bSchristosbaz: baz.1
117*7f56925bSchristos
118*7f56925bSchristosbaz: baz.2
119*7f56925bSchristos
120*7f56925bSchristos%az: ; @:
121*7f56925bSchristos
122*7f56925bSchristos',
123*7f56925bSchristos'',
124*7f56925bSchristos'foo.1
125*7f56925bSchristosfoo.2
126*7f56925bSchristosfoo.3
127*7f56925bSchristosbar.1
128*7f56925bSchristosbar.2
129*7f56925bSchristosbar.3
130*7f56925bSchristosbaz.1
131*7f56925bSchristosbaz.2
132*7f56925bSchristos');
133*7f56925bSchristos
134*7f56925bSchristos
135*7f56925bSchristos# Test #4: stem splitting logic.
136*7f56925bSchristos#
137*7f56925bSchristosrun_make_test('
138*7f56925bSchristos.SECONDEXPANSION:
139*7f56925bSchristos$(dir)/tmp/bar.o:
140*7f56925bSchristos
141*7f56925bSchristos$(dir)/tmp/foo/bar.c: ; @echo $@
142*7f56925bSchristos$(dir)/tmp/bar/bar.c: ; @echo $@
143*7f56925bSchristosfoo.h: ; @echo $@
144*7f56925bSchristos
145*7f56925bSchristos%.o: $$(addsuffix /%.c,foo bar) foo.h
146*7f56925bSchristos	@echo $@: {$<} $^
147*7f56925bSchristos
148*7f56925bSchristos',
149*7f56925bSchristos"dir=$dir",
150*7f56925bSchristos"$dir/tmp/foo/bar.c
151*7f56925bSchristos$dir/tmp/bar/bar.c
152*7f56925bSchristosfoo.h
153*7f56925bSchristos$dir/tmp/bar.o: {$dir/tmp/foo/bar.c} $dir/tmp/foo/bar.c $dir/tmp/bar/bar.c foo.h
154*7f56925bSchristos");
155*7f56925bSchristos
156*7f56925bSchristos
157*7f56925bSchristos# Test #5: stem splitting logic and order-only prerequisites.
158*7f56925bSchristos#
159*7f56925bSchristosrun_make_test('
160*7f56925bSchristos.SECONDEXPANSION:
161*7f56925bSchristos$(dir)/tmp/foo.o: $(dir)/tmp/foo.c
162*7f56925bSchristos$(dir)/tmp/foo.c: ; @echo $@
163*7f56925bSchristosbar.h: ; @echo $@
164*7f56925bSchristos
165*7f56925bSchristos%.o: %.c|bar.h
166*7f56925bSchristos	@echo $@: {$<} {$|} $^
167*7f56925bSchristos
168*7f56925bSchristos',
169*7f56925bSchristos"dir=$dir",
170*7f56925bSchristos"$dir/tmp/foo.c
171*7f56925bSchristosbar.h
172*7f56925bSchristos$dir/tmp/foo.o: {$dir/tmp/foo.c} {bar.h} $dir/tmp/foo.c
173*7f56925bSchristos");
174*7f56925bSchristos
175*7f56925bSchristos
176*7f56925bSchristos# Test #6: lack of implicit prerequisites.
177*7f56925bSchristos#
178*7f56925bSchristosrun_make_test('
179*7f56925bSchristos.SECONDEXPANSION:
180*7f56925bSchristosfoo.o: foo.c
181*7f56925bSchristosfoo.c: ; @echo $@
182*7f56925bSchristos
183*7f56925bSchristos%.o:
184*7f56925bSchristos	@echo $@: {$<} $^
185*7f56925bSchristos
186*7f56925bSchristos',
187*7f56925bSchristos'',
188*7f56925bSchristos'foo.c
189*7f56925bSchristosfoo.o: {foo.c} foo.c
190*7f56925bSchristos');
191*7f56925bSchristos
192*7f56925bSchristos# Test #7: Test stem from the middle of the name.
193*7f56925bSchristos#
194*7f56925bSchristosrun_make_test('
195*7f56925bSchristos.SECONDEXPANSION:
196*7f56925bSchristosfoobarbaz:
197*7f56925bSchristos
198*7f56925bSchristosfoo%baz: % $$*.1
199*7f56925bSchristos	@echo $*
200*7f56925bSchristos
201*7f56925bSchristosbar bar.1:
202*7f56925bSchristos	@echo $@
203*7f56925bSchristos
204*7f56925bSchristos',
205*7f56925bSchristos'',
206*7f56925bSchristos'bar
207*7f56925bSchristosbar.1
208*7f56925bSchristosbar
209*7f56925bSchristos');
210*7f56925bSchristos
211*7f56925bSchristos# Test #8: Make sure stem triple-expansion does not happen.
212*7f56925bSchristos#
213*7f56925bSchristosrun_make_test('
214*7f56925bSchristos.SECONDEXPANSION:
215*7f56925bSchristosfoo$$bar:
216*7f56925bSchristos
217*7f56925bSchristosf%r: % $$*.1
218*7f56925bSchristos	@echo \'$*\'
219*7f56925bSchristos
220*7f56925bSchristosoo$$ba oo$$ba.1:
221*7f56925bSchristos	@echo \'$@\'
222*7f56925bSchristos
223*7f56925bSchristos',
224*7f56925bSchristos'',
225*7f56925bSchristos'oo$ba
226*7f56925bSchristosoo$ba.1
227*7f56925bSchristosoo$ba
228*7f56925bSchristos');
229*7f56925bSchristos
230*7f56925bSchristos
231*7f56925bSchristos# This tells the test driver that the perl test script executed properly.
232*7f56925bSchristos1;
233