#                                                                    -*-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
if (defined $ERR_read_only_file) {
    touch('file.out');
    chmod(0444, 'file.out');

    run_make_test(q!
define A
a
b
endef
$(file     >     file.out,$(A))
x:;@cat file.out
!,
                  '', "#MAKEFILE#:6: *** open: file.out: $ERR_read_only_file.  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');

# Read an empty file.
touch("file.out");
run_make_test(q!# empty file
X1 := x$(file <file.out)y
x:;@echo '$(X1)'
!,
              '', "xy\n");

unlink('file.out');

# Read a file whose full contents is a newline.
create_file('file.out', "\n");
run_make_test(q!# <nl>
X1 := x$(file <file.out)y
x:;@echo '$(X1)'
!,
              '', "xy\n");

unlink('file.out');

# Read a file which does not end with a newline.
create_file('file.out', "hello");
# echo prints a trailig newline, because run_make_test appends a newline.
run_make_test(q!# hello
X1 := x$(file <file.out)y
x:;@echo $(X1)
!,
              '', "xhelloy\n");

unlink('file.out');

# Read a file which ends with a newline.
create_file('file.out', "hello\n");
# echo prints a trailig newline, because run_make_test appends a newline.
run_make_test(q!# hello<nl>
X1 := x$(file <file.out)y
x:;@echo '$(X1)'
!,
              '', "xhelloy\n");


unlink('file.out');

# Read a file which ends with multiple newlines.
create_file('file.out', "hello\n\n");
run_make_test(q!# hello<nl><nl>
X1 := x$(file <file.out)y
export X1
x:;@echo "$$X1"
!,
              '', "xhello\ny\n");

unlink('file.out');

# Read a file whose contents exceed 200 bytes.
# 200 is the initial size of variable_buffer.
# File bigger than 200 bytes causes a realloc.
# The size of the file in this test not only exceeds 200 bytes, it exceeds 65k.
# Use $(info ...) here to avoid command line limitations

my $s = "hello world, hello world, hello world, hello world, hello world";
my $answer = $s x 2000;
create_file('file.out', $answer);
run_make_test(q!# <hugestring>
X1 := x$(file <file.out)y
x:;@$(info $(X1))
!,
              '', "x${answer}y\n#MAKE#: 'x' is up to date.\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);

# SV 17448: check whitespace
create_file('out1', "1\n");

run_make_test(q!
all:;$(info $(file <  out1  ))
!,
              '', "1\n#MAKE#: 'all' is up to date.");

unlink('out1');

1;
