summaryrefslogtreecommitdiff
path: root/tests/scripts/features/errors
blob: 2cdaf31ded7958f62f2a57358bdb550a76147184 (plain)
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
#                                                                    -*-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) = @_;
    if ($port_type eq 'W32') {
        return (2, "process_begin: CreateProcess(NULL, $cmd $args, ...) failed.\nmake (e=2): The system cannot find the file specified.");
    }

    return (127, "#MAKE#: $cmd: $ERR_no_such_file");
}

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

    run_make_test(q!
PATH := .
all: ; sd
!,
              '', "sd\n#MAKE#: sd: $ERR_exe_dir\n#MAKE#: *** [#MAKEFILE#:3: all] Error 127", 512);

    run_make_test(q!
all: ; ./sd
!,
              '', "./sd\n#MAKE#: ./sd: $ERR_exe_dir\n#MAKE#: *** [#MAKEFILE#:2: all] Error 127", 512);

    rmdir('sd');
}

1;