1 | # -*-perl-*-
|
---|
2 | $description = "Test second expansion in ordinary rules.";
|
---|
3 |
|
---|
4 | $details = "";
|
---|
5 |
|
---|
6 | # TEST #0: Test handing of '$' in prerequisites with and without second
|
---|
7 | # expansion.
|
---|
8 |
|
---|
9 | # If we don't support archives then the prerequisite is different
|
---|
10 | my $prereq = exists $FEATURES{'archives'} ? '$' : '$(PRE)';
|
---|
11 |
|
---|
12 | run_make_test(q!
|
---|
13 | ifdef SE
|
---|
14 | .SECONDEXPANSION:
|
---|
15 | endif
|
---|
16 | foo$$bar: bar$$baz bar$$biz ; @echo '$@ : $^'
|
---|
17 | PRE = one two
|
---|
18 | bar$$baz: $$(PRE)
|
---|
19 | baraz: $$(PRE)
|
---|
20 | PRE = three four
|
---|
21 | .DEFAULT: ; @echo '$@'
|
---|
22 | !,
|
---|
23 | '',
|
---|
24 | "$prereq\nbar\$biz\nfoo\$bar : bar\$baz bar\$biz");
|
---|
25 |
|
---|
26 | run_make_test(undef, 'SE=1', "three\nfour\nbariz\nfoo\$bar : baraz bariz");
|
---|
27 |
|
---|
28 | # TEST #1: automatic variables.
|
---|
29 | #
|
---|
30 | run_make_test(q!
|
---|
31 | .SECONDEXPANSION:
|
---|
32 | .DEFAULT: ; @echo '$@'
|
---|
33 |
|
---|
34 | foo: bar baz
|
---|
35 |
|
---|
36 | foo: biz | buz
|
---|
37 |
|
---|
38 | foo: [email protected] \
|
---|
39 | $$<.2 \
|
---|
40 | $$(addsuffix .3,$$^) \
|
---|
41 | $$(addsuffix .4,$$+) \
|
---|
42 | $$|.5 \
|
---|
43 | $$*.6
|
---|
44 |
|
---|
45 | !,
|
---|
46 | '',
|
---|
47 | 'bar
|
---|
48 | baz
|
---|
49 | biz
|
---|
50 | buz
|
---|
51 | foo.1
|
---|
52 | bar.2
|
---|
53 | bar.3
|
---|
54 | baz.3
|
---|
55 | biz.3
|
---|
56 | bar.4
|
---|
57 | baz.4
|
---|
58 | biz.4
|
---|
59 | buz.5
|
---|
60 | .6
|
---|
61 | ');
|
---|
62 |
|
---|
63 |
|
---|
64 | # Test #2: target/pattern -specific variables.
|
---|
65 | #
|
---|
66 | run_make_test(q!
|
---|
67 | .SECONDEXPANSION:
|
---|
68 | .DEFAULT: ; @echo '$@'
|
---|
69 |
|
---|
70 | foo.x: $$a $$b
|
---|
71 |
|
---|
72 | foo.x: a := bar
|
---|
73 |
|
---|
74 | %.x: b := baz
|
---|
75 | !,
|
---|
76 | '',
|
---|
77 | 'bar
|
---|
78 | baz
|
---|
79 | ');
|
---|
80 |
|
---|
81 |
|
---|
82 | # Test #3: order of prerequisites.
|
---|
83 | #
|
---|
84 | run_make_test(q!
|
---|
85 | .SECONDEXPANSION:
|
---|
86 | .DEFAULT: ; @echo '$@'
|
---|
87 |
|
---|
88 | all: foo bar baz
|
---|
89 |
|
---|
90 | # Subtest #1
|
---|
91 | foo: foo.1; @:
|
---|
92 | foo: foo.2
|
---|
93 | foo: foo.3
|
---|
94 |
|
---|
95 | # Subtest #2
|
---|
96 | bar: bar.2
|
---|
97 | bar: bar.1; @:
|
---|
98 | bar: bar.3
|
---|
99 |
|
---|
100 | # Subtest #3
|
---|
101 | baz: baz.1
|
---|
102 | baz: baz.2
|
---|
103 | baz: ; @:
|
---|
104 | !,
|
---|
105 | '',
|
---|
106 | 'foo.1
|
---|
107 | foo.2
|
---|
108 | foo.3
|
---|
109 | bar.1
|
---|
110 | bar.2
|
---|
111 | bar.3
|
---|
112 | baz.1
|
---|
113 | baz.2
|
---|
114 | ');
|
---|
115 |
|
---|
116 | # TEST #4: eval in a context where there is no reading_file
|
---|
117 | run_make_test(q!
|
---|
118 | .SECONDEXPANSION:
|
---|
119 | all : $$(eval $$(info test))
|
---|
120 | !,
|
---|
121 | '', "test\n#MAKE#: Nothing to be done for 'all'.\n");
|
---|
122 |
|
---|
123 | # TEST #5: (NEGATIVE) catch eval in a prereq list trying to create new
|
---|
124 | # target/prereq relationships.
|
---|
125 |
|
---|
126 | run_make_test(q!
|
---|
127 | .SECONDEXPANSION:
|
---|
128 | proj1.exe : proj1.o $$(eval $$(test))
|
---|
129 | define test
|
---|
130 | proj1.o : proj1.c
|
---|
131 | proj1.c: proj1.h
|
---|
132 | endef
|
---|
133 | !,
|
---|
134 | '', "#MAKE#: *** prerequisites cannot be defined in recipes. Stop.\n", 512);
|
---|
135 |
|
---|
136 |
|
---|
137 | # Automatic $$+ variable expansion issue. Savannah bug #25780
|
---|
138 | run_make_test(q!
|
---|
139 | all : foo foo
|
---|
140 | .SECONDEXPANSION:
|
---|
141 | all : $$+ ; @echo '$+'
|
---|
142 | foo : ;
|
---|
143 | !,
|
---|
144 | '', "foo foo foo foo\n");
|
---|
145 |
|
---|
146 |
|
---|
147 | # Automatic $$+ variable expansion issue. Savannah bug #25780
|
---|
148 | run_make_test(q!
|
---|
149 | all : bar bar
|
---|
150 | bar : ;
|
---|
151 | q%x : ;
|
---|
152 | .SECONDEXPANSION:
|
---|
153 | a%l: q1x $$+ q2x ; @echo '$+'
|
---|
154 | !,
|
---|
155 | '', "q1x bar bar q2x bar bar\n");
|
---|
156 |
|
---|
157 |
|
---|
158 | # Allow patsubst shorthand in second expansion context.
|
---|
159 | # Requires the colon to be quoted. Savannah bug #16545
|
---|
160 | run_make_test(q!
|
---|
161 | .PHONY: foo.bar
|
---|
162 | .SECONDEXPANSION:
|
---|
163 | foo: $$(@\\:%=%.bar); @echo '$^'
|
---|
164 | !,
|
---|
165 | '', "foo.bar\n");
|
---|
166 |
|
---|
167 | 1;
|
---|