1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
# -*-perl-*-
$description = "Test ignored failures in recipe command lines";
run_make_test(qq!
one:
\t-exit 1
\texit 0
two:
\texit 1
\texit 0
!,
"one", "exit 1\n#MAKE#: [#MAKEFILE#:3: one] Error 1 (ignored)\nexit 0\n");
# TEST #1
# -------
run_make_test(undef, " -i two",
"exit 1\n#MAKE#: [#MAKEFILE#:6: two] Error 1 (ignored)\nexit 0\n");
# TEST #2
# -------
# Test that error line offset works
run_make_test(qq!
all:
\t\@echo hi
\t\@echo there
\t\@exit 1
!,
'', "hi\nthere\n#MAKE#: *** [#MAKEFILE#:5: all] Error 1", 512);
# Windows error look completely different :-/
sub errors_getinfo
{
my ($cmd, $args, $err) = @_;
if ($port_type eq 'W32') {
return (2, "process_begin: CreateProcess(NULL, $cmd$args, ...) failed.\nmake (e=2): The system cannot find the file specified.");
}
if (!$err) { $err = $ERR_no_such_file; }
return (127, "#MAKE#: $cmd: $err");
}
# TEST #3
# -------
# Try failing due to unknown command
my $unk = './foobarbazbozblat';
unlink($unk);
my ($ernum, $erstr) = errors_getinfo($unk, " xx yy");
run_make_test(qq!
one: ; -$unk xx yy
!, 'one',
"$unk xx yy\n$erstr\n#MAKE#: [#MAKEFILE#:2: one] Error $ernum (ignored)\n");
# TEST #4
# -------
($ernum, $erstr) = errors_getinfo($unk, " aa bb");
run_make_test(qq!
two: ; $unk aa bb
!, 'two -i',
"$unk aa bb\n$erstr\n#MAKE#: [#MAKEFILE#:2: two] Error $ernum (ignored)\n");
# TEST #5
# -------
run_make_test(undef, 'two',
"$unk aa bb\n$erstr\n#MAKE#: *** [#MAKEFILE#:2: two] Error $ernum\n", 512);
# SV #56918 : Test the unknown command as the second recipe line
($ernum, $erstr) = errors_getinfo($unk, " qq rr");
run_make_test(qq!
three:
\t\@echo one
\t$unk qq rr
!, 'three',
"one\n$unk qq rr\n$erstr\n#MAKE#: *** [#MAKEFILE#:4: three] Error $ernum\n", 512);
# Try failing due to non-executable file
if ($ERR_nonexe_file) {
my $noexe = './barfooblatboz';
touch($noexe);
run_make_test(qq!
one: ; -$noexe xx yy
two: ; $noexe aa bb
!,
'one', "$noexe xx yy\n#MAKE#: $noexe: $ERR_nonexe_file\n#MAKE#: [#MAKEFILE#:2: one] Error 127 (ignored)\n");
unlink($noexe);
}
# Try failing by "running" a directory
if ($ERR_exe_dir) {
mkdir('sd', 0775) or print "mkdir: sd: $!\n";
($ernum, $erstr) = errors_getinfo('sd', '', $ERR_exe_dir);
run_make_test(q!
PATH := .
all: ; sd
!,
'', "sd\n$erstr\n#MAKE#: *** [#MAKEFILE#:3: all] Error $ernum", 512);
if ($port_type eq 'W32') {
$ernum = 5;
$erstr = "process_begin: CreateProcess(NULL, ./sd, ...) failed.\nmake (e=5): Access is denied.";
} else {
$ernum = 127;
$erstr = "#MAKE#: ./sd: $ERR_exe_dir";
}
run_make_test(q!
all: ; ./sd
!,
'', "./sd\n$erstr\n#MAKE#: *** [#MAKEFILE#:2: all] Error $ernum", 512);
rmdir('sd');
}
1;
|