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