#                                                                    -*-perl-*-

use warnings;

my $description = "Test that make can execute binaries as well as scripts with"
                 ." various shabangs and without a shbang";
my $details = "The various shells that this test uses are the default"
             ." /bin/sh, \$SHELL and the perl interpreter that is"
             ." executing this test program. The shells are used for the value"
             ." of SHELL inside the test makefile and also as a shbang in the"
             ." executed script. There is also a test which executes a script"
             ." that has no shbang.";

# Only bother with this on UNIX systems
$port_type eq 'UNIX' or return -1;
$^O =~ /cygwin/ and return -1;

my @shbangs = ('', '#!/bin/sh', "#!$perl_name");
my @shells = ('', 'SHELL=/bin/sh');

# Try whatever shell the user has, as long as it's not a C shell.
# The C shell is not usable with make, due to not correctly handling
# file descriptors and possibly other issues.
my $usersh = $origENV{SHELL};
if ($usersh !~ /csh/) {
    push @shbangs, ("#!$usersh");
    push @shells, ("SHELL=$usersh");
}

my $answer = 'hello, world';

# tests [0-11]
# Have a makefile with various SHELL= exec a shell program with varios
# shbangs or without a shbang at all.
my $stem = './exec.cmd';
my $k = 0;
for my $shbang (@shbangs) {
    for my $shell (@shells) {
        my $cmd = $k ? "$stem.$k" : $stem;
        ++$k;
        unlink $cmd;
        open(CMD,"> $cmd");
        print CMD "$shbang\n";
        print CMD "printf \"$answer\\n\";\n";
        close(CMD);
        chmod 0700, $cmd;

        run_make_test("# shbang=$shbang\n# shell=$shell" . q!
all:; @$(CMD)
!, "$shell CMD=$cmd", "$answer\n");

        rmfiles($cmd);
    }
}

# tests [12-14]
# Exec a binary from a makefile that has SHELL=.
for my $shell (@shells) {
    run_make_test(q!
all:; @#PERL# -e 'printf "$(ANSWER)\n"';
!, "$shell ANSWER='$answer'", "$answer\n");
}

# test 15
# Use perl as a shell.
run_make_test(q!
SHELL = #PERL#
.SHELLFLAGS = -e
all:; @printf "$(ANSWER)\n";
!, "ANSWER='$answer'", "$answer\n");

1;
