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

1;
