#                                                              -*-mode: perl-*-

$description = "Test handling of temporary file created from stdin.";

# These tests rely on the test_driver checking for leftover temporary content

create_file('input.mk', "world:=1\n");
create_file('bye.mk', "moon:=2\n");

# sv 62118,62145.
# Test that makes leaves no temp file when make code is piped to stdin and -v,
# -h or an invalid option is specified.
my @opts = ('-v', '-h', '--nosuchopt');
my @exit_codes = (0, 0, 512);
for my $i (0 .. $#opts) {
    close(STDIN);
    open(STDIN, "<", 'input.mk') || die "$0: cannot open input.mk for reading: $!";
    run_make_test(q!
all:; $(info hello world)
!,
                  "$opts[$i] -f-", "/uilt for /", $exit_codes[$i]);
}

# sv 62118,62145.
# Test that a stdin temp file is removed.
close(STDIN);
open(STDIN, "<", 'input.mk') || die "$0: cannot open input.mk for reading: $!";
run_make_test(q!
all:; $(info world=$(world))
!,
              '-f-', "world=1\n#MAKE#: 'all' is up to date.\n");

# sv 62118,62145.
# Test that a stdin temp file is removed, even when make re-execs.
# Also test that make honors TMPDIR to create the temp file.
# Ensure touching bye.mk causes re-exec.
&utouch(-600, 'bye.mk');
close(STDIN);
open(STDIN, "<", 'input.mk') || die "$0: cannot open input.mk for reading: $!";
run_make_test(q!
include bye.mk
all:; $(info hello)
$(MAKE_RESTARTS)bye.mk: force; touch $@
force:
!,
              '-R --debug=b -f-', "/Re-executing.+?--temp-stdin=\Q$temppath\E/");

if ($port_type eq 'UNIX') {
# sv 62118,62145.
# Test that a stdin temp file is removed, when execvp fails to re-exec make.
# In order to cause execvp to fail, copy the tested make binary to the temp
# directory and take away the 'x' bit.
use File::Spec;
use File::Copy;

my $makecopy = File::Spec->catfile($TEMPDIR, "make");
copy("$mkpath", $makecopy);
# Set file mode bits, because perl copy won't.
chmod 0750, $makecopy;

my @make_orig = @make_command;
@make_command = ($makecopy);

# Ensure touching bye.mk causes re-exec.
&utouch(-600, 'bye.mk');
close(STDIN);
open(STDIN, "<", 'input.mk') || die "$0: cannot open input.mk for reading: $!";
run_make_test("
include bye.mk
all:; \$(info hello)
\$(MAKE_RESTARTS)bye.mk: force; touch \$@ && chmod -x $makecopy
force:
",
              "-f-", "touch bye.mk && chmod -x $makecopy\nmake: $makecopy: $ERR_nonexe_file\n", 32512);

@make_command = @make_orig;
unlink($makecopy);
}

close(STDIN);
unlink('input.mk', 'bye.mk');

# This tells the test driver that the perl test script executed properly.
1;
