#                                                                    -*-perl-*-

$description = 'Test the $(file ...) function.';

# Test > and >>
run_make_test(q!
define A
a
b
endef
B = c d
$(file >file.out,$(A))
$(foreach L,$(B),$(file >>     file.out,$L))
x:;@echo hi; cat file.out
!,
              '', "hi\na\nb\nc\nd");

unlink('file.out');

# Test >> to a non-existent file
run_make_test(q!
define A
a
b
endef
$(file     >>     file.out,$(A))
x:;@cat file.out
!,
              '', "a\nb");

unlink('file.out');

# Test > with no content
run_make_test(q!
$(file >4touch)
.PHONY:x
x:;@cat 4touch
!,
              '', '');

# Test >> with no content
run_make_test(q!
$(file >>4touch)
.PHONY:x
x:;@cat 4touch
!,
              '', '');
unlink('4touch');

# Test > to a read-only file
touch('file.out');
chmod(0444, 'file.out');

# Find the error that will be printed
# This seems complicated, but we need the message from the C locale
my $loc = undef;
if ($has_POSIX) {
    $loc = POSIX::setlocale(POSIX::LC_MESSAGES);
    POSIX::setlocale(POSIX::LC_MESSAGES, 'C');
}
my $e;
open(my $F, '>', 'file.out') and die "Opened read-only file!\n";
$e = "$!";
$loc and POSIX::setlocale(POSIX::LC_MESSAGES, $loc);

run_make_test(q!
define A
a
b
endef
$(file     >     file.out,$(A))
x:;@cat file.out
!,
              '', "#MAKEFILE#:6: *** open: file.out: $e.  Stop.",
              512);

unlink('file.out');

# Use variables for operator and filename
run_make_test(q!
define A
a
b
endef
OP = >
FN = file.out
$(file     $(OP)     $(FN),$(A))
x:;@cat file.out
!,
              '', "a\nb");

unlink('file.out');

# Don't add newlines if one already exists
run_make_test(q!
define A
a
b

endef
$(file >file.out,$(A))
x:;@cat file.out
!,
              '', "a\nb");

unlink('file.out');

# Empty text
run_make_test(q!
$(file >file.out,)
$(file >>file.out,)
x:;@cat file.out
!,
              '', "\n\n");

unlink('file.out');

1;
