general3 revision 1.1 1 1.1 christos # -*-perl-*-
2 1.1 christos
3 1.1 christos $description = "\
4 1.1 christos This tests random features of the parser that need to be supported, and
5 1.1 christos which have either broken at some point in the past or seem likely to
6 1.1 christos break.";
7 1.1 christos
8 1.1 christos run_make_test("
9 1.1 christos # We want to allow both empty commands _and_ commands that resolve to empty.
10 1.1 christos EMPTY =
11 1.1 christos
12 1.1 christos .PHONY: all a1 a2 a3 a4
13 1.1 christos all: a1 a2 a3 a4
14 1.1 christos
15 1.1 christos a1:;
16 1.1 christos a2:
17 1.1 christos \t
18 1.1 christos a3:;\$(EMPTY)
19 1.1 christos a4:
20 1.1 christos \t\$(EMPTY)
21 1.1 christos
22 1.1 christos \# Non-empty lines that expand to nothing should also be ignored.
23 1.1 christos STR = \# Some spaces
24 1.1 christos TAB = \t \# A TAB and some spaces
25 1.1 christos
26 1.1 christos \$(STR)
27 1.1 christos
28 1.1 christos \$(STR) \$(TAB)",
29 1.1 christos '', "#MAKE#: Nothing to be done for `all'.");
30 1.1 christos
31 1.1 christos # TEST 2
32 1.1 christos
33 1.1 christos # Make sure files without trailing newlines are handled properly.
34 1.1 christos # Have to use the old style invocation to test this.
35 1.1 christos
36 1.1 christos $makefile2 = &get_tmpfile;
37 1.1 christos
38 1.1 christos open(MAKEFILE, "> $makefile2");
39 1.1 christos print MAKEFILE "all:;\@echo FOO = \$(FOO)\nFOO = foo";
40 1.1 christos close(MAKEFILE);
41 1.1 christos
42 1.1 christos &run_make_with_options($makefile2,"",&get_logfile);
43 1.1 christos $answer = "FOO = foo\n";
44 1.1 christos &compare_output($answer,&get_logfile(1));
45 1.1 christos
46 1.1 christos # TEST 3
47 1.1 christos
48 1.1 christos # Check semicolons in variable references
49 1.1 christos
50 1.1 christos run_make_test('
51 1.1 christos $(if true,$(info true; true))
52 1.1 christos all: ; @:
53 1.1 christos ',
54 1.1 christos '', 'true; true');
55 1.1 christos
56 1.1 christos # TEST 4
57 1.1 christos
58 1.1 christos # Check that backslashes in command scripts are handled according to POSIX.
59 1.1 christos # Checks Savannah bug # 1332.
60 1.1 christos
61 1.1 christos # Test the fastpath / no quotes
62 1.1 christos run_make_test('
63 1.1 christos all:
64 1.1 christos @echo foo\
65 1.1 christos bar
66 1.1 christos @echo foo\
67 1.1 christos bar
68 1.1 christos @echo foo\
69 1.1 christos bar
70 1.1 christos @echo foo\
71 1.1 christos bar
72 1.1 christos @echo foo \
73 1.1 christos bar
74 1.1 christos @echo foo \
75 1.1 christos bar
76 1.1 christos @echo foo \
77 1.1 christos bar
78 1.1 christos @echo foo \
79 1.1 christos bar
80 1.1 christos ',
81 1.1 christos '', 'foobar
82 1.1 christos foobar
83 1.1 christos foo bar
84 1.1 christos foo bar
85 1.1 christos foo bar
86 1.1 christos foo bar
87 1.1 christos foo bar
88 1.1 christos foo bar');
89 1.1 christos
90 1.1 christos # Test the fastpath / single quotes
91 1.1 christos run_make_test("
92 1.1 christos all:
93 1.1 christos \@echo 'foo\\
94 1.1 christos bar'
95 1.1 christos \@echo 'foo\\
96 1.1 christos bar'
97 1.1 christos \@echo 'foo\\
98 1.1 christos bar'
99 1.1 christos \@echo 'foo\\
100 1.1 christos bar'
101 1.1 christos \@echo 'foo \\
102 1.1 christos bar'
103 1.1 christos \@echo 'foo \\
104 1.1 christos bar'
105 1.1 christos \@echo 'foo \\
106 1.1 christos bar'
107 1.1 christos \@echo 'foo \\
108 1.1 christos bar'
109 1.1 christos ",
110 1.1 christos '', 'foo\
111 1.1 christos bar
112 1.1 christos foo\
113 1.1 christos bar
114 1.1 christos foo\
115 1.1 christos bar
116 1.1 christos foo\
117 1.1 christos bar
118 1.1 christos foo \
119 1.1 christos bar
120 1.1 christos foo \
121 1.1 christos bar
122 1.1 christos foo \
123 1.1 christos bar
124 1.1 christos foo \
125 1.1 christos bar');
126 1.1 christos
127 1.1 christos # Test the fastpath / double quotes
128 1.1 christos run_make_test('
129 1.1 christos all:
130 1.1 christos @echo "foo\
131 1.1 christos bar"
132 1.1 christos @echo "foo\
133 1.1 christos bar"
134 1.1 christos @echo "foo\
135 1.1 christos bar"
136 1.1 christos @echo "foo\
137 1.1 christos bar"
138 1.1 christos @echo "foo \
139 1.1 christos bar"
140 1.1 christos @echo "foo \
141 1.1 christos bar"
142 1.1 christos @echo "foo \
143 1.1 christos bar"
144 1.1 christos @echo "foo \
145 1.1 christos bar"
146 1.1 christos ',
147 1.1 christos '', 'foobar
148 1.1 christos foobar
149 1.1 christos foo bar
150 1.1 christos foo bar
151 1.1 christos foo bar
152 1.1 christos foo bar
153 1.1 christos foo bar
154 1.1 christos foo bar');
155 1.1 christos
156 1.1 christos # Test the slow path / no quotes
157 1.1 christos run_make_test('
158 1.1 christos all:
159 1.1 christos @echo hi; echo foo\
160 1.1 christos bar
161 1.1 christos @echo hi; echo foo\
162 1.1 christos bar
163 1.1 christos @echo hi; echo foo\
164 1.1 christos bar
165 1.1 christos @echo hi; echo foo\
166 1.1 christos bar
167 1.1 christos @echo hi; echo foo \
168 1.1 christos bar
169 1.1 christos @echo hi; echo foo \
170 1.1 christos bar
171 1.1 christos @echo hi; echo foo \
172 1.1 christos bar
173 1.1 christos @echo hi; echo foo \
174 1.1 christos bar
175 1.1 christos ',
176 1.1 christos '', 'hi
177 1.1 christos foobar
178 1.1 christos hi
179 1.1 christos foobar
180 1.1 christos hi
181 1.1 christos foo bar
182 1.1 christos hi
183 1.1 christos foo bar
184 1.1 christos hi
185 1.1 christos foo bar
186 1.1 christos hi
187 1.1 christos foo bar
188 1.1 christos hi
189 1.1 christos foo bar
190 1.1 christos hi
191 1.1 christos foo bar');
192 1.1 christos
193 1.1 christos # Test the slow path / no quotes. This time we put the slow path
194 1.1 christos # determination _after_ the backslash-newline handling.
195 1.1 christos run_make_test('
196 1.1 christos all:
197 1.1 christos @echo foo\
198 1.1 christos bar; echo hi
199 1.1 christos @echo foo\
200 1.1 christos bar; echo hi
201 1.1 christos @echo foo\
202 1.1 christos bar; echo hi
203 1.1 christos @echo foo\
204 1.1 christos bar; echo hi
205 1.1 christos @echo foo \
206 1.1 christos bar; echo hi
207 1.1 christos @echo foo \
208 1.1 christos bar; echo hi
209 1.1 christos @echo foo \
210 1.1 christos bar; echo hi
211 1.1 christos @echo foo \
212 1.1 christos bar; echo hi
213 1.1 christos ',
214 1.1 christos '', 'foobar
215 1.1 christos hi
216 1.1 christos foobar
217 1.1 christos hi
218 1.1 christos foo bar
219 1.1 christos hi
220 1.1 christos foo bar
221 1.1 christos hi
222 1.1 christos foo bar
223 1.1 christos hi
224 1.1 christos foo bar
225 1.1 christos hi
226 1.1 christos foo bar
227 1.1 christos hi
228 1.1 christos foo bar
229 1.1 christos hi');
230 1.1 christos
231 1.1 christos # Test the slow path / single quotes
232 1.1 christos run_make_test("
233 1.1 christos all:
234 1.1 christos \@echo hi; echo 'foo\\
235 1.1 christos bar'
236 1.1 christos \@echo hi; echo 'foo\\
237 1.1 christos bar'
238 1.1 christos \@echo hi; echo 'foo\\
239 1.1 christos bar'
240 1.1 christos \@echo hi; echo 'foo\\
241 1.1 christos bar'
242 1.1 christos \@echo hi; echo 'foo \\
243 1.1 christos bar'
244 1.1 christos \@echo hi; echo 'foo \\
245 1.1 christos bar'
246 1.1 christos \@echo hi; echo 'foo \\
247 1.1 christos bar'
248 1.1 christos \@echo hi; echo 'foo \\
249 1.1 christos bar'
250 1.1 christos ",
251 1.1 christos '', 'hi
252 1.1 christos foo\
253 1.1 christos bar
254 1.1 christos hi
255 1.1 christos foo\
256 1.1 christos bar
257 1.1 christos hi
258 1.1 christos foo\
259 1.1 christos bar
260 1.1 christos hi
261 1.1 christos foo\
262 1.1 christos bar
263 1.1 christos hi
264 1.1 christos foo \
265 1.1 christos bar
266 1.1 christos hi
267 1.1 christos foo \
268 1.1 christos bar
269 1.1 christos hi
270 1.1 christos foo \
271 1.1 christos bar
272 1.1 christos hi
273 1.1 christos foo \
274 1.1 christos bar');
275 1.1 christos
276 1.1 christos # Test the slow path / double quotes
277 1.1 christos run_make_test('
278 1.1 christos all:
279 1.1 christos @echo hi; echo "foo\
280 1.1 christos bar"
281 1.1 christos @echo hi; echo "foo\
282 1.1 christos bar"
283 1.1 christos @echo hi; echo "foo\
284 1.1 christos bar"
285 1.1 christos @echo hi; echo "foo\
286 1.1 christos bar"
287 1.1 christos @echo hi; echo "foo \
288 1.1 christos bar"
289 1.1 christos @echo hi; echo "foo \
290 1.1 christos bar"
291 1.1 christos @echo hi; echo "foo \
292 1.1 christos bar"
293 1.1 christos @echo hi; echo "foo \
294 1.1 christos bar"
295 1.1 christos ',
296 1.1 christos '', 'hi
297 1.1 christos foobar
298 1.1 christos hi
299 1.1 christos foobar
300 1.1 christos hi
301 1.1 christos foo bar
302 1.1 christos hi
303 1.1 christos foo bar
304 1.1 christos hi
305 1.1 christos foo bar
306 1.1 christos hi
307 1.1 christos foo bar
308 1.1 christos hi
309 1.1 christos foo bar
310 1.1 christos hi
311 1.1 christos foo bar');
312 1.1 christos
313 1.1 christos 1;
314