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

my $usersh = $origENV{SHELL};
my $answer = 'hello, world';

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

# 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\n# $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;
