| # -*-perl-*- | |
| $description = "Test various types of escaping in makefiles."; | |
| $details = "\ | |
| Make sure that escaping of ':' works in target names. | |
| Make sure escaping of whitespace works in target names. | |
| Make sure that escaping of '#' works. | |
| Make sure that backslash before non-special characters are kept."; | |
| # TEST 1 | |
| run_make_test(' | |
| $(path)foo : ; @echo "touch ($@)" | |
| foo\ bar: ; @echo "touch ($@)" | |
| sharp: foo\#bar.ext | |
| foo\#bar.ext: ; @echo "foo#bar.ext = ($@)"', | |
| '', | |
| 'touch (foo)'); | |
| # TEST 2: This one should fail, since the ":" is unquoted. | |
| run_make_test(undef, | |
| 'path=pre:', | |
| "#MAKEFILE#:2: *** target pattern contains no '%'. Stop.", | |
| 512); | |
| # TEST 3: This one should work, since we escape the ":". | |
| run_make_test(undef, | |
| "'path=pre\\:'", | |
| 'touch (pre:foo)'); | |
| # TEST 4: This one should fail, since the escape char is escaped. | |
| run_make_test(undef, | |
| "'path=pre\\\\:'", | |
| "#MAKEFILE#:2: *** target pattern contains no '%'. Stop.", | |
| 512); | |
| # TEST 5: This one should work | |
| run_make_test(undef, | |
| "'foo bar'", | |
| 'touch (foo bar)'); | |
| # TEST 6: Test escaped comments | |
| run_make_test(undef, | |
| 'sharp', | |
| 'foo#bar.ext = (foo#bar.ext)'); | |
| # Test escaped colons in prerequisites | |
| # Quoting of backslashes in q!! is kind of messy. | |
| run_make_test(q! | |
| foo: foo\\:bar foo\\\\\\:bar foo\\\\\\\\\\:bar | |
| foo foo\\:bar foo\\\\\\:bar foo\\\\\\\\\\:bar: ; @echo '$@' | |
| !, | |
| '', "foo:bar\nfoo\\:bar\nfoo\\\\:bar\nfoo\n"); | |
| # Test backslash before non-special chars: should be kept as-is | |
| run_make_test(q! | |
| all: ..\foo | |
| .DEFAULT: ; @echo '$@' | |
| !, | |
| '', '..\foo'); | |
| # This tells the test driver that the perl test script executed properly. | |
| 1; |