#                                                                    -*-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));


1;
