| # -*-perl-*- |
| $description = "Test second expansion in ordinary rules."; |
| |
| $details = ""; |
| |
| use Cwd; |
| |
| $dir = cwd; |
| $dir =~ s,.*/([^/]+)$,../$1,; |
| |
| |
| # Test #1: automatic variables. |
| # |
| run_make_test(' |
| .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(' |
| .SECONDEXPANSION: |
| foo.x: |
| |
| foo.%: $$(%_a) $$(%_b) bar |
| @: |
| |
| foo.x: x_a := bar |
| |
| %.x: x_b := baz |
| |
| bar baz: ; @echo $@ |
| |
| ', |
| '', |
| 'bar |
| baz |
| '); |
| |
| |
| # Test #3: order of prerequisites. |
| # |
| run_make_test(' |
| .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(' |
| .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(' |
| .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(' |
| .SECONDEXPANSION: |
| foo.o: foo.c |
| foo.c: ; @echo $@ |
| |
| %.o: |
| @echo $@: {$<} $^ |
| |
| ', |
| '', |
| 'foo.c |
| foo.o: {foo.c} foo.c |
| '); |
| |
| # Test #7: Test stem from the middle of the name. |
| # |
| run_make_test(' |
| .SECONDEXPANSION: |
| foobarbaz: |
| |
| foo%baz: % $$*.1 |
| @echo $* |
| |
| bar bar.1: |
| @echo $@ |
| |
| ', |
| '', |
| 'bar |
| bar.1 |
| bar |
| '); |
| |
| # Test #8: Make sure stem triple-expansion does not happen. |
| # |
| run_make_test(' |
| .SECONDEXPANSION: |
| foo$$bar: |
| |
| f%r: % $$*.1 |
| @echo \'$*\' |
| |
| oo$$ba oo$$ba.1: |
| @echo \'$@\' |
| |
| ', |
| '', |
| 'oo$ba |
| oo$ba.1 |
| oo$ba |
| '); |
| |
| |
| # This tells the test driver that the perl test script executed properly. |
| 1; |