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