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