Imported Upstream version 4.0
[platform/upstream/make.git] / tests / scripts / features / escape
1 #                                                                    -*-perl-*-
2 $description = "Test various types of escaping in makefiles.";
3
4 $details = "\
5 Make sure that escaping of ':' works in target names.
6 Make sure escaping of whitespace works in target names.
7 Make sure that escaping of '#' works.
8 Make sure that backslash before non-special characters are kept.";
9
10
11 # TEST 1
12
13 run_make_test('
14 $(path)foo : ; @echo "touch ($@)"
15
16 foo\ bar: ; @echo "touch ($@)"
17
18 sharp: foo\#bar.ext
19 foo\#bar.ext: ; @echo "foo#bar.ext = ($@)"',
20               '',
21               'touch (foo)');
22
23 # TEST 2: This one should fail, since the ":" is unquoted.
24
25 run_make_test(undef,
26               'path=pre:',
27               "#MAKEFILE#:2: *** target pattern contains no '%'.  Stop.",
28               512);
29
30 # TEST 3: This one should work, since we escape the ":".
31
32 run_make_test(undef,
33               "'path=pre\\:'",
34               'touch (pre:foo)');
35
36 # TEST 4: This one should fail, since the escape char is escaped.
37
38 run_make_test(undef,
39               "'path=pre\\\\:'",
40               "#MAKEFILE#:2: *** target pattern contains no '%'.  Stop.",
41               512);
42
43 # TEST 5: This one should work
44
45 run_make_test(undef,
46               "'foo bar'",
47               'touch (foo bar)');
48
49 # TEST 6: Test escaped comments
50
51 run_make_test(undef,
52               'sharp',
53               'foo#bar.ext = (foo#bar.ext)');
54
55 # Test escaped colons in prerequisites
56 # Quoting of backslashes in q!! is kind of messy.
57 # Solaris sh does not properly handle backslashes even in '' so just
58 # check the output make prints, not what the shell interprets.
59 run_make_test(q!
60 foo: foo\\:bar foo\\\\\\:bar foo\\\\\\\\\\:bar
61 foo foo\\:bar foo\\\\\\:bar foo\\\\\\\\\\:bar: ; : '$@'
62 !,
63               '', ": 'foo:bar'\n: 'foo\\:bar'\n: 'foo\\\\:bar'\n: 'foo'\n");
64
65 # Test backslash before non-special chars: should be kept as-is
66
67 run_make_test(q!
68 all: ..\foo
69 .DEFAULT: ; : '$@'
70 !,
71               '', ": '..\\foo'\n");
72
73 # This tells the test driver that the perl test script executed properly.
74 1;