Imported Upstream version 4.0
[platform/upstream/make.git] / tests / scripts / misc / bs-nl
1 #                                                                    -*-perl-*-
2 $description = "Test backslash-newline handling.";
3
4 $details = "";
5
6 # TEST #1
7 # -------
8
9 # Backslash-newlines in recipes
10
11 # These are basic backslash-newlines with no tricks
12 run_make_test("fast:;\@echo fa\\\nst\n",
13               '', 'fast');
14
15 run_make_test("slow:;\@: no-op; echo sl\\\now\n",
16               '', 'slow');
17
18 run_make_test("dquote:;\@echo \"dqu\\\note\"\n",
19               '', 'dquote');
20
21 run_make_test("squote:;\@echo 'squ\\\note'\n",
22               '', "squ\\\note");
23
24 # Ensure that a leading prefix character is omitted
25 run_make_test("fast:;\@echo fa\\\n\tst\n",
26               '', 'fast');
27
28 run_make_test("slow:;\@: no-op; echo sl\\\n\tow\n",
29               '', 'slow');
30
31 run_make_test("dquote:;\@echo \"dqu\\\n\tote\"\n",
32               '', 'dquote');
33
34 run_make_test("squote:;\@echo 'squ\\\n\tote'\n",
35               '', "squ\\\note");
36
37 # Ensure that ONLY the leading prefix character is omitted
38 run_make_test("fast:;\@echo fa\\\n\t  st\n",
39               '', 'fa st');
40
41 run_make_test("slow:;\@: no-op; echo sl\\\n\t\tow\n",
42               '', "sl ow");
43
44 run_make_test("dquote:;\@echo \"dqu\\\n\t    ote\"\n",
45               '', 'dqu    ote');
46
47 run_make_test("squote:;\@echo 'squ\\\n\t\t   ote'\n",
48               '', "squ\\\n\t   ote");
49
50 # Backslash-newlines in variable values
51
52 # Simple
53 run_make_test(q!
54 var = he\
55 llo
56 var:;@echo '|$(var)|'!,
57               '', "|he llo|");
58
59 # Condense trailing space
60 run_make_test(q!
61 var = he  \
62 llo
63 var:;@echo '|$(var)|'!,
64               '', "|he llo|");
65
66 # Remove leading space
67 run_make_test(q!
68 var = he\
69     llo
70 var:;@echo '|$(var)|'!,
71               '', "|he llo|");
72
73 # Multiple bs/nl condensed
74 run_make_test(q!
75 var = he\
76 \
77 \
78     llo
79 var:;@echo '|$(var)|'!,
80               '', "|he llo|");
81
82 # POSIX: Preserve trailing space
83 run_make_test(q!
84 .POSIX:
85 x = y
86 var = he  \
87 llo
88 var:;@echo '|$(var)|'!,
89               '', "|he   llo|");
90
91 # POSIX: One space per bs-nl
92 run_make_test(q!
93 .POSIX:
94 x = y
95 var = he\
96 \
97 \
98     llo
99 var:;@echo '|$(var)|'!,
100               '', "|he   llo|");
101
102 # Savannah #39035: handle whitespace in call
103 run_make_test(q!
104 f = echo $(1)
105 t:; @$(call f,"a \
106             b"); \
107         $(call f,"a \
108             b")
109 !,
110               '', "a b\na b\n");
111
112 # Savannah #38945: handle backslash CRLF
113 # We need our own makefile so we can set binmode
114 my $m1 = get_tmpfile();
115 open(MAKEFILE, "> $m1");
116 binmode(MAKEFILE);
117 print MAKEFILE "FOO = foo \\\r\n";
118 close(MAKEFILE);
119
120 my $m2 = get_tmpfile();
121 open(MAKEFILE, "> $m2");
122 print MAKEFILE "include $m1\ndefine BAR\nall: ; \@echo \$(FOO) bar\nendef\n\$(eval \$(BAR))\n";
123 close(MAKEFILE);
124
125 run_make_with_options($m2, '', get_logfile());
126 compare_output("foo bar\n", get_logfile(1));
127
128
129 1;