blob: fc323ce91b7d0b4fce29aa5678efae0e07290196 [file] [log] [blame]
# -*-perl-*-
$description = "Test backslash-newline handling.";
$details = "";
# TEST #1
# -------
# Backslash-newlines in recipes
# These are basic backslash-newlines with no tricks
run_make_test("fast:;\@echo fa\\\nst\n",
'', 'fast');
run_make_test("slow:;\@: no-op; echo sl\\\now\n",
'', 'slow');
run_make_test("dquote:;\@echo \"dqu\\\note\"\n",
'', 'dquote');
run_make_test("squote:;\@echo 'squ\\\note'\n",
'', "squ\\\note");
# Ensure that a leading prefix character is omitted
run_make_test("fast:;\@echo fa\\\n\tst\n",
'', 'fast');
run_make_test("slow:;\@: no-op; echo sl\\\n\tow\n",
'', 'slow');
run_make_test("dquote:;\@echo \"dqu\\\n\tote\"\n",
'', 'dquote');
run_make_test("squote:;\@echo 'squ\\\n\tote'\n",
'', "squ\\\note");
# Ensure that ONLY the leading prefix character is omitted
run_make_test("fast:;\@echo fa\\\n\t st\n",
'', 'fa st');
run_make_test("slow:;\@: no-op; echo sl\\\n\t\tow\n",
'', "sl ow");
run_make_test("dquote:;\@echo \"dqu\\\n\t ote\"\n",
'', 'dqu ote');
run_make_test("squote:;\@echo 'squ\\\n\t\t ote'\n",
'', "squ\\\n\t ote");
# Backslash-newlines in variable values
# Simple
run_make_test(q!
var = he\
llo
var:;@echo '|$(var)|'!,
'', "|he llo|");
# Condense trailing space
run_make_test(q!
var = he \
llo
var:;@echo '|$(var)|'!,
'', "|he llo|");
# Remove leading space
run_make_test(q!
var = he\
llo
var:;@echo '|$(var)|'!,
'', "|he llo|");
# Multiple bs/nl condensed
run_make_test(q!
var = he\
\
\
llo
var:;@echo '|$(var)|'!,
'', "|he llo|");
# POSIX: Preserve trailing space
run_make_test(q!
.POSIX:
x = y
var = he \
llo
var:;@echo '|$(var)|'!,
'', "|he llo|");
# POSIX: One space per bs-nl
run_make_test(q!
.POSIX:
x = y
var = he\
\
\
llo
var:;@echo '|$(var)|'!,
'', "|he llo|");
# Savannah #39035: handle whitespace in call
run_make_test(q!
f = echo $(1)
t:; @$(call f,"a \
b"); \
$(call f,"a \
b")
!,
'', "a b\na b\n");
# Savannah #38945: handle backslash CRLF
# We need our own makefile so we can set binmode
my $m1 = get_tmpfile();
open(MAKEFILE, "> $m1");
binmode(MAKEFILE);
print MAKEFILE "FOO = foo \\\r\n";
close(MAKEFILE);
my $m2 = get_tmpfile();
open(MAKEFILE, "> $m2");
print MAKEFILE "include $m1\ndefine BAR\nall: ; \@echo \$(FOO) bar\nendef\n\$(eval \$(BAR))\n";
close(MAKEFILE);
run_make_with_options($m2, '', get_logfile());
compare_output("foo bar\n", get_logfile(1));
# Test different types of whitespace, and bsnl inside functions
sub xlate
{
$_ = $_[0];
s/\\r/\r/g;
s/\\t/\t/g;
s/\\f/\f/g;
s/\\v/\v/g;
s/\\n/\n/g;
return $_;
}
run_make_test(xlate(q!
$(foreach\r a \t , b\t c \r ,$(info $a \r ) )
all:;@:
!),
'', "b \r \nc \r \n");
run_make_test(xlate(q!
all:;@:$(foreach\r a \t , b\t c \r ,$(info $a \r ) )
!),
'', "b \r \nc \r \n");
run_make_test(xlate(q!
$(foreach \
\r a \t\
, b\t \
c \r ,$(info \
$a \r ) \
)
all:;@:
!),
'', "b \r \nc \r \n");
run_make_test(xlate(q!
all:;@:$(foreach \
\r a \t\
, b\t \
c \r ,$(info \
$a \r ) \
)
!),
'', "b \r \nc \r \n");
run_make_test(xlate(q!
define FOO
$(foreach
\r a \t
, b\t
c \r ,$(info
$a \r )
)
endef
$(FOO)
all:;@:
!),
'', "b \r \nc \r \n");
run_make_test(xlate(q!
define FOO
$(foreach
\r a \t
, b\t
c \r ,$(info
$a \r )
)
endef
all:;@:$(FOO)
!),
'', "b \r \nc \r \n");
# Test variables in recipes that expand to multiple lines
run_make_test(q!
define var
echo foo
echo bar
endef
all:;$(var)
!,
'', "echo foo\nfoo\necho bar\nbar\n");
run_make_test(q!
define var
echo foo
@
echo bar
endef
all:;$(var)
!,
'', "echo foo\nfoo\necho bar\nbar\n");
1;