| # -*-perl-*- | |
| $description = "Test second expansion in ordinary rules."; | |
| $details = ""; | |
| use Cwd; | |
| $dir = cwd; | |
| $dir =~ s,.*/([^/]+)$,../$1,; | |
| # Test #1: automatic variables. | |
| # | |
| run_make_test(q! | |
| .SECONDEXPANSION: | |
| .DEFAULT: ; @echo '$@' | |
| foo.a: bar baz | |
| foo.a: biz | buz | |
| foo.%: 1.$$@ \ | |
| 2.$$< \ | |
| $$(addprefix 3.,$$^) \ | |
| $$(addprefix 4.,$$+) \ | |
| 5.$$| \ | |
| 6.$$* | |
| @: | |
| 1.foo.a \ | |
| 2.bar \ | |
| 3.bar \ | |
| 3.baz \ | |
| 3.biz \ | |
| 4.bar \ | |
| 4.baz \ | |
| 4.biz \ | |
| 5.buz \ | |
| 6.a: | |
| @echo '$@' | |
| !, | |
| '', | |
| '1.foo.a | |
| 2.bar | |
| 3.bar | |
| 3.baz | |
| 3.biz | |
| 4.bar | |
| 4.baz | |
| 4.biz | |
| 5.buz | |
| 6.a | |
| bar | |
| baz | |
| biz | |
| buz | |
| '); | |
| # Test #2: target/pattern -specific variables. | |
| # | |
| run_make_test(q! | |
| .SECONDEXPANSION: | |
| foo.x: | |
| foo.%: $$(%_a) $$(%_b) bar | |
| @: | |
| foo.x: x_a := bar | |
| %.x: x_b := baz | |
| bar baz: ; @echo '$@' | |
| !, | |
| '', "bar\nbaz\n"); | |
| # Test #3: order of prerequisites. | |
| # | |
| run_make_test(q! | |
| .SECONDEXPANSION: | |
| .DEFAULT: ; @echo '$@' | |
| all: foo bar baz | |
| # Subtest #1 | |
| # | |
| %oo: %oo.1; @: | |
| foo: foo.2 | |
| foo: foo.3 | |
| foo.1: ; @echo '$@' | |
| # Subtest #2 | |
| # | |
| bar: bar.2 | |
| %ar: %ar.1; @: | |
| bar: bar.3 | |
| bar.1: ; @echo '$@' | |
| # Subtest #3 | |
| # | |
| baz: baz.1 | |
| baz: baz.2 | |
| %az: ; @: | |
| !, | |
| '', | |
| 'foo.1 | |
| foo.2 | |
| foo.3 | |
| bar.1 | |
| bar.2 | |
| bar.3 | |
| baz.1 | |
| baz.2 | |
| '); | |
| # Test #4: stem splitting logic. | |
| # | |
| run_make_test(q! | |
| .SECONDEXPANSION: | |
| $(dir)/tmp/bar.o: | |
| $(dir)/tmp/foo/bar.c: ; @echo '$@' | |
| $(dir)/tmp/bar/bar.c: ; @echo '$@' | |
| foo.h: ; @echo '$@' | |
| %.o: $$(addsuffix /%.c,foo bar) foo.h | |
| @echo '$@: {$<} $^' | |
| !, | |
| "dir=$dir", "$dir/tmp/foo/bar.c | |
| $dir/tmp/bar/bar.c | |
| foo.h | |
| $dir/tmp/bar.o: {$dir/tmp/foo/bar.c} $dir/tmp/foo/bar.c $dir/tmp/bar/bar.c foo.h | |
| "); | |
| # Test #5: stem splitting logic and order-only prerequisites. | |
| # | |
| run_make_test(q! | |
| .SECONDEXPANSION: | |
| $(dir)/tmp/foo.o: $(dir)/tmp/foo.c | |
| $(dir)/tmp/foo.c: ; @echo '$@' | |
| bar.h: ; @echo '$@' | |
| %.o: %.c|bar.h | |
| @echo '$@: {$<} {$|} $^' | |
| !, | |
| "dir=$dir", "$dir/tmp/foo.c | |
| bar.h | |
| $dir/tmp/foo.o: {$dir/tmp/foo.c} {bar.h} $dir/tmp/foo.c | |
| "); | |
| # Test #6: lack of implicit prerequisites. | |
| # | |
| run_make_test(q! | |
| .SECONDEXPANSION: | |
| foo.o: foo.c | |
| foo.c: ; @echo '$@' | |
| %.o: | |
| @echo '$@: {$<} $^' | |
| !, | |
| '', "foo.c\nfoo.o: {foo.c} foo.c\n"); | |
| # Test #7: Test stem from the middle of the name. | |
| # | |
| run_make_test(q! | |
| .SECONDEXPANSION: | |
| foobarbaz: | |
| foo%baz: % $$*.1 | |
| @echo '$*' | |
| bar bar.1: | |
| @echo '$@' | |
| !, | |
| '', "bar\nbar.1\nbar\n"); | |
| # Test #8: Make sure stem triple-expansion does not happen. | |
| # | |
| run_make_test(q! | |
| .SECONDEXPANSION: | |
| foo$$bar: | |
| f%r: % $$*.1 | |
| @echo '$*' | |
| oo$$ba oo$$ba.1: | |
| @echo '$@' | |
| !, | |
| '', 'oo$ba | |
| oo$ba.1 | |
| oo$ba | |
| '); | |
| # Test #9: Check the value of $^ | |
| run_make_test(q! | |
| .SECONDEXPANSION: | |
| %.so: | $$(extra) ; @echo $^ | |
| foo.so: extra := foo.o | |
| foo.so: | |
| foo.o: | |
| !, | |
| '', "\n"); | |
| # This tells the test driver that the perl test script executed properly. | |
| 1; |