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