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