| # -*-perl-*- | |
| $description = "The following tests the -i option and the '-' in front of \n" | |
| ."commands to test that make ignores errors in these commands\n" | |
| ."and continues processing."; | |
| $details = "This test runs two makes. The first runs on a target with a \n" | |
| ."command that has a '-' in front of it (and a command that is \n" | |
| ."intended to fail) and then a delete command after that is \n" | |
| ."intended to succeed. If make ignores the failure of the first\n" | |
| ."command as it is supposed to, then the second command should \n" | |
| ."delete a file and this is what we check for. The second make\n" | |
| ."that is run in this test is identical except that the make \n" | |
| ."command is given with the -i option instead of the '-' in \n" | |
| ."front of the command. They should run the same. "; | |
| if ($vos) | |
| { | |
| $rm_command = "delete_file"; | |
| } | |
| else | |
| { | |
| $rm_command = "rm"; | |
| } | |
| open(MAKEFILE,"> $makefile"); | |
| # The Contents of the MAKEFILE ... | |
| print MAKEFILE "clean:\n" | |
| ."\t-$rm_command cleanit\n" | |
| ."\t$rm_command foo\n" | |
| ."clean2: \n" | |
| ."\t$rm_command cleanit\n" | |
| ."\t$rm_command foo\n"; | |
| # END of Contents of MAKEFILE | |
| close(MAKEFILE); | |
| &touch("foo"); | |
| unlink("cleanit"); | |
| $cleanit_error = `sh -c "$rm_command cleanit 2>&1"`; | |
| chomp $cleanit_error; | |
| $delete_error_code = $? >> 8; | |
| # TEST #1 | |
| # ------- | |
| $answer = "$rm_command cleanit | |
| $cleanit_error | |
| $make_name: [$makefile:2: clean] Error $delete_error_code (ignored) | |
| $rm_command foo\n"; | |
| &run_make_with_options($makefile,"",&get_logfile); | |
| # If make acted as planned, it should ignore the error from the first | |
| # command in the target and execute the second which deletes the file "foo" | |
| # This file, therefore, should not exist if the test PASSES. | |
| if (-f "foo") { | |
| $test_passed = 0; | |
| } | |
| # The output for this on VOS is too hard to replicate, so we only check it | |
| # on unix. | |
| if (!$vos) | |
| { | |
| &compare_output($answer,&get_logfile(1)); | |
| } | |
| &touch("foo"); | |
| # TEST #2 | |
| # ------- | |
| $answer = "$rm_command cleanit | |
| $cleanit_error | |
| $make_name: [$makefile:5: clean2] Error $delete_error_code (ignored) | |
| $rm_command foo\n"; | |
| &run_make_with_options($makefile,"clean2 -i",&get_logfile); | |
| if (-f "foo") { | |
| $test_passed = 0; | |
| } | |
| if (!$vos) { | |
| &compare_output($answer,&get_logfile(1)); | |
| } | |
| # Test that error line offset works | |
| run_make_test(q! | |
| all: | |
| @echo hi | |
| @echo there | |
| @exit 1 | |
| !, | |
| '', "hi\nthere\n#MAKE#: *** [#MAKEFILE#:5: all] Error 1", 512); | |
| 1; | |
| ### Local Variables: | |
| ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) | |
| ### End: |