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

# Single quotes don't behave the same in Windows
if ($port_type ne 'W32') {
    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');

# Single quotes don't behave the same in Windows
if ($port_type ne 'W32') {
    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:
var = he  \
llo
var:;@echo '|$(var)|'!,
              '', "|he   llo|");

# POSIX: One space per bs-nl
run_make_test(q!
.POSIX:
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/\\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;
