2 $description = "Test second expansion in implicit rules.";
9 $dir =~ s,.*/([^/]+)$,../$1,;
12 # Test #1: automatic variables.
16 .DEFAULT: ; @echo '$@'
24 $$(addprefix 3.,$$^) \
25 $$(addprefix 4.,$$+) \
59 # Test #2: target/pattern -specific variables.
65 foo.%: $$(%_a) $$(%_b) bar ; @:
76 # Test #3: order of prerequisites.
80 .DEFAULT: ; @echo '$@'
127 # Test #4: stem splitting logic.
133 $(dir)/tmp/foo/bar.c: ; @echo '$@'
134 $(dir)/tmp/bar/bar.c: ; @echo '$@'
137 %.o: $$(addsuffix /%.c,foo bar) foo.h ; @echo '$@: {$<} $^'
139 "dir=$dir", "$dir/tmp/foo/bar.c
142 $dir/tmp/bar.o: {$dir/tmp/foo/bar.c} $dir/tmp/foo/bar.c $dir/tmp/bar/bar.c foo.h
146 # Test #5: stem splitting logic and order-only prerequisites.
150 $(dir)/tmp/foo.o: $(dir)/tmp/foo.c
151 $(dir)/tmp/foo.c: ; @echo '$@'
154 %.o: %.c|bar.h ; @echo '$@: {$<} {$|} $^'
157 "dir=$dir", "$dir/tmp/foo.c
159 $dir/tmp/foo.o: {$dir/tmp/foo.c} {bar.h} $dir/tmp/foo.c
163 # Test #6: lack of implicit prerequisites.
170 %.o: ; @echo '$@: {$<} $^'
172 '', "foo.c\nfoo.o: {foo.c} foo.c\n");
175 # Test #7: Test stem from the middle of the name.
181 foo%baz: % $$*.1 ; @echo '$*'
183 bar bar.1: ; @echo '$@'
185 '', "bar\nbar.1\nbar\n");
188 # Test #8: Make sure stem triple-expansion does not happen.
194 f%r: % $$*.1 ; @echo '$*'
196 oo$$ba oo$$ba.1: ; @echo '$@'
203 # Test #9: Check the value of $^
207 %.so: | $$(extra) ; @echo $^
209 foo.so: extra := foo.o
215 # Test #10: Test second expansion with second expansion prerequisites
216 # Ensures pattern_search() recurses with SE prereqs.
220 sim_base_rgg := just_a_name
223 sim_%.f: $${sim_$$*_f} ; echo $@
224 sim_%.src: $${sim_$$*_src} ; echo $@
226 $$(if $$(sim_$$*_src),sim_%.src) \
227 $$(if $$(sim_$$*_f),sim_%.f) \
228 $$(if $$(sim_$$*_rgg),$$(sim_$$*_rgg).s) ; echo $@
230 '-s sim_base', "#MAKE#: *** No rule to make target 'sim_base'. Stop.", 512);
234 # Ensure that order-only tokens embedded in second expansions are parsed
240 f%o: $$(PREREQS) ; @echo '$@' from '$^' and '$|'
241 b%r: p1|$$(P2) ; @echo '$@' from '$^' and '$|'
244 "", ": p1\n: p2\nfoo from p1 and p2\nbar from p1 and p2\n");
246 # SV 28456 : Don't reset $$< for default recipes
255 '', "bar\n#MAKE#: Nothing to be done for 'foo'.\n");
257 # SV 54161: Expand $$* properly when it contains a path
261 %x: $$(info $$*); @echo '$*'
263 'q/ux', "q/u\nq/u\n");
265 # This tells the test driver that the perl test script executed properly.