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