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

# Reading files
run_make_test(q!
$(file >file.out,A = foo)
X1 := $(file <file.out)
$(file >>file.out,B = bar)
$(eval $(file <file.out))

x:;@echo '$(X1)'; echo '$(A)'; echo '$(B)'
!,
              '', "A = foo\nfoo\nbar\n");

unlink('file.out');

# Reading from non-existent file
run_make_test(q!
X1 := $(file <file.out)
x:;@echo '$(X1)';
!,
              '', "\n");

# Extra arguments in read mode
run_make_test(q!
X1 := $(file <file.out,foo)
x:;@echo '$(X1)';
!,
              '', "#MAKEFILE#:2: *** file: too many arguments.  Stop.\n", 512);


# Missing filename
run_make_test('$(file >)', '',
              "#MAKEFILE#:1: *** file: missing filename.  Stop.\n", 512);

run_make_test('$(file >>)', '',
              "#MAKEFILE#:1: *** file: missing filename.  Stop.\n", 512);

run_make_test('$(file <)', '',
              "#MAKEFILE#:1: *** file: missing filename.  Stop.\n", 512);

# Bad call

run_make_test('$(file foo)', '',
              "#MAKEFILE#:1: *** file: invalid file operation: foo.  Stop.\n", 512);

1;
