mirror of
https://https.git.savannah.gnu.org/git/make.git
synced 2026-01-29 19:04:18 +00:00
When using Perl's backticks make sure that the path to the command invoked is quoted. On Windows, in particular, paths to commands such as diff, etc. may contain whitespace.
118 lines
2.8 KiB
Perl
118 lines
2.8 KiB
Perl
# -*-perl-*-
|
|
|
|
$description = "Test the behaviour of the .POSIX target.";
|
|
|
|
$details = "";
|
|
|
|
|
|
# Ensure turning on .POSIX enables the -e flag for the shell
|
|
|
|
run_make_test(q!
|
|
.POSIX:
|
|
all: ; @#HELPER# -q fail 1; #HELPER# out hello
|
|
!,
|
|
'', "#MAKE#: *** [#MAKEFILE#:3: all] Error 1\n", 512);
|
|
|
|
# But explicit settings must still take precedence
|
|
|
|
run_make_test(q!
|
|
.POSIX:
|
|
all: ; @-#HELPER# -q fail 1; #HELPER# out hello
|
|
.SHELLFLAGS = -c
|
|
!,
|
|
'', "hello");
|
|
|
|
run_make_test(q!
|
|
.POSIX:
|
|
all: ; @-#HELPER# -q fail 1; #HELPER# out hello
|
|
all: .SHELLFLAGS = -c
|
|
!,
|
|
'', "hello");
|
|
|
|
# SV 63667: We shouldn't add -e to sh if errors are ignored
|
|
|
|
run_make_test(q!
|
|
.POSIX:
|
|
all: ; @-#HELPER# -q fail 1; #HELPER# out hello
|
|
!,
|
|
'', "hello\n");
|
|
|
|
# SV 64085: Also don't add -e if -i or .IGNORE is used
|
|
|
|
run_make_test(q!
|
|
.POSIX:
|
|
all: ; @#HELPER# -q fail 1; #HELPER# out hello
|
|
!,
|
|
'-i', "hello\n");
|
|
|
|
run_make_test(q!
|
|
.POSIX:
|
|
.IGNORE:
|
|
all: ; @#HELPER# -q fail 1; #HELPER# out hello
|
|
!,
|
|
'', "hello\n");
|
|
|
|
run_make_test(q!
|
|
.POSIX:
|
|
.IGNORE: all
|
|
all: ; @#HELPER# -q fail 1; #HELPER# out hello
|
|
!,
|
|
'', "hello\n");
|
|
|
|
# But explicit settings must still take precedence
|
|
|
|
run_make_test(q!
|
|
.POSIX:
|
|
all: ; @-#HELPER# -q fail 1; #HELPER# out hello
|
|
.SHELLFLAGS = -ec
|
|
!,
|
|
'', "#MAKE#: [#MAKEFILE#:3: all] Error 1 (ignored)\n");
|
|
|
|
run_make_test(q!
|
|
.POSIX:
|
|
all: ; @-#HELPER# -q fail 1; #HELPER# out hello
|
|
all: .SHELLFLAGS = -ec
|
|
!,
|
|
'', "#MAKE#: [#MAKEFILE#:3: all] Error 1 (ignored)\n");
|
|
|
|
# User settings must override .POSIX
|
|
# In the standard .POSIX must be the first thing in the makefile
|
|
# but we relax that rule in GNU Make.
|
|
|
|
# Different versions of sh generate different output for -x so check it
|
|
my $script = subst_make_string('#HELPER# -q fail 1; true');
|
|
my $flags = '-xc';
|
|
my $out = `"$sh_name" $flags '$script' 2>&1`;
|
|
|
|
run_make_test(qq!
|
|
.SHELLFLAGS = $flags
|
|
.POSIX:
|
|
all: ; \@$script
|
|
!,
|
|
'', $out);
|
|
|
|
# Test the default value of various POSIX-specific variables
|
|
my %POSIX = (AR => 'ar', ARFLAGS => '-rv',
|
|
YACC => 'yacc', YFLAGS => '',
|
|
LEX => 'lex', LFLAGS => '',
|
|
LDFLAGS => '',
|
|
CC => 'c99', CFLAGS => '-O1',
|
|
FC => 'fort77', FFLAGS => '-O1',
|
|
SCCSFLAGS => '', SCCSGETFLAGS => '-s');
|
|
my $make = join('', map { "\t\@echo '$_=\$($_)'\n" } sort keys %POSIX);
|
|
my $r = join('', map { "$_=$POSIX{$_}\n"} sort keys %POSIX);
|
|
run_make_test(qq!
|
|
.POSIX:
|
|
all:
|
|
$make
|
|
!,
|
|
'', $r);
|
|
|
|
# Make sure that local settings take precedence
|
|
%ENV = (%ENV, map { $_ => "xx-$_" } keys %POSIX);
|
|
$r = join('', map { "$_=xx-$_\n"} sort keys %POSIX);
|
|
run_make_test(undef, '', $r);
|
|
|
|
# This tells the test driver that the perl test script executed properly.
|
|
1;
|