| # -*-perl-*- |
| $description = "Test second expansion in ordinary rules."; |
| |
| $details = ""; |
| |
| # TEST #0: Test handing of '$' in prerequisites with and without second |
| # expansion. |
| |
| # If we don't support archives then the prerequisite is different |
| my $prereq = exists $FEATURES{'archives'} ? '$' : '$(PRE)'; |
| |
| run_make_test(q! |
| ifdef SE |
| .SECONDEXPANSION: |
| endif |
| foo$$bar: bar$$baz bar$$biz ; @echo '$@ : $^' |
| PRE = one two |
| bar$$baz: $$(PRE) |
| baraz: $$(PRE) |
| PRE = three four |
| .DEFAULT: ; @echo '$@' |
| !, |
| '', |
| "$prereq\nbar\$biz\nfoo\$bar : bar\$baz bar\$biz"); |
| |
| run_make_test(undef, 'SE=1', "three\nfour\nbariz\nfoo\$bar : baraz bariz"); |
| |
| # TEST #1: automatic variables. |
| # |
| run_make_test(q! |
| .SECONDEXPANSION: |
| .DEFAULT: ; @echo '$@' |
| |
| foo: bar baz |
| |
| foo: biz | buz |
| |
| foo: $$@.1 \ |
| $$<.2 \ |
| $$(addsuffix .3,$$^) \ |
| $$(addsuffix .4,$$+) \ |
| $$|.5 \ |
| $$*.6 |
| |
| !, |
| '', |
| 'bar |
| baz |
| biz |
| buz |
| foo.1 |
| bar.2 |
| bar.3 |
| baz.3 |
| biz.3 |
| bar.4 |
| baz.4 |
| biz.4 |
| buz.5 |
| .6 |
| '); |
| |
| |
| # Test #2: target/pattern -specific variables. |
| # |
| run_make_test(q! |
| .SECONDEXPANSION: |
| .DEFAULT: ; @echo '$@' |
| |
| foo.x: $$a $$b |
| |
| foo.x: a := bar |
| |
| %.x: b := baz |
| !, |
| '', |
| 'bar |
| baz |
| '); |
| |
| |
| # Test #3: order of prerequisites. |
| # |
| run_make_test(q! |
| .SECONDEXPANSION: |
| .DEFAULT: ; @echo '$@' |
| |
| all: foo bar baz |
| |
| # Subtest #1 |
| foo: foo.1; @: |
| foo: foo.2 |
| foo: foo.3 |
| |
| # Subtest #2 |
| bar: bar.2 |
| bar: bar.1; @: |
| bar: bar.3 |
| |
| # Subtest #3 |
| baz: baz.1 |
| baz: baz.2 |
| baz: ; @: |
| !, |
| '', |
| 'foo.1 |
| foo.2 |
| foo.3 |
| bar.1 |
| bar.2 |
| bar.3 |
| baz.1 |
| baz.2 |
| '); |
| |
| # TEST #4: eval in a context where there is no reading_file |
| run_make_test(q! |
| .SECONDEXPANSION: |
| all : $$(eval $$(info test)) |
| !, |
| '', "test\n#MAKE#: Nothing to be done for 'all'.\n"); |
| |
| # TEST #5: (NEGATIVE) catch eval in a prereq list trying to create new |
| # target/prereq relationships. |
| |
| run_make_test(q! |
| .SECONDEXPANSION: |
| proj1.exe : proj1.o $$(eval $$(test)) |
| define test |
| proj1.o : proj1.c |
| proj1.c: proj1.h |
| endef |
| !, |
| '', "#MAKE#: *** prerequisites cannot be defined in recipes. Stop.\n", 512); |
| |
| |
| # Automatic $$+ variable expansion issue. Savannah bug #25780 |
| run_make_test(q! |
| all : foo foo |
| .SECONDEXPANSION: |
| all : $$+ ; @echo '$+' |
| foo : ; |
| !, |
| '', "foo foo foo foo\n"); |
| |
| |
| # Automatic $$+ variable expansion issue. Savannah bug #25780 |
| run_make_test(q! |
| all : bar bar |
| bar : ; |
| q%x : ; |
| .SECONDEXPANSION: |
| a%l: q1x $$+ q2x ; @echo '$+' |
| !, |
| '', "q1x bar bar q2x bar bar\n"); |
| |
| |
| # Allow patsubst shorthand in second expansion context. |
| # Requires the colon to be quoted. Savannah bug #16545 |
| run_make_test(q! |
| .PHONY: foo.bar |
| .SECONDEXPANSION: |
| foo: $$(@\\:%=%.bar); @echo '$^' |
| !, |
| '', "foo.bar\n"); |
| |
| 1; |