diff options
-rw-r--r-- | mesonbuild/interpreter.py | 6 | ||||
-rwxr-xr-x | run_unittests.py | 10 | ||||
-rw-r--r-- | test cases/unit/21 exit status/meson.build | 2 |
3 files changed, 18 insertions, 0 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index c2c4fe3..076ba7d 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -1470,6 +1470,7 @@ class Interpreter(InterpreterBase): 'disabler': self.func_disabler, 'environment': self.func_environment, 'error': self.func_error, + 'exception': self.func_exception, 'executable': self.func_executable, 'generator': self.func_generator, 'gettext': self.func_gettext, @@ -1983,6 +1984,11 @@ to directly access options of other subprojects.''') self.validate_arguments(args, 1, [str]) raise InterpreterException('Error encountered: ' + args[0]) + @noKwargs + def func_exception(self, node, args, kwargs): + self.validate_arguments(args, 0, []) + raise Exception() + def detect_compilers(self, lang, need_cross_compiler): cross_comp = None if lang == 'c': diff --git a/run_unittests.py b/run_unittests.py index 103847a..a520ad2 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -1933,6 +1933,16 @@ class FailureTests(BasePlatformTests): self.assertRegex(out, r'Also couldn\'t find a fallback subproject in ' '.*subprojects.*failingsubproj.*for the dependency.*somedep') + def test_exception_exit_status(self): + ''' + Test exit status on python exception + ''' + tdir = os.path.join(self.unit_test_dir, '21 exit status') + with self.assertRaises(subprocess.CalledProcessError) as cm: + self.init(tdir, inprocess=False) + self.assertEqual(cm.exception.returncode, 2) + self.wipe() + class WindowsTests(BasePlatformTests): ''' diff --git a/test cases/unit/21 exit status/meson.build b/test cases/unit/21 exit status/meson.build new file mode 100644 index 0000000..4f5485b --- /dev/null +++ b/test cases/unit/21 exit status/meson.build @@ -0,0 +1,2 @@ +project('exit status') +exception() |