diff options
-rw-r--r-- | mesonbuild/environment.py | 2 | ||||
-rwxr-xr-x | run_unittests.py | 19 |
2 files changed, 19 insertions, 2 deletions
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index 858d31d..0c9a2f3 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -608,6 +608,7 @@ class Environment: p, out, err = Popen_safe(compiler + arg) except OSError as e: popen_exceptions[' '.join(compiler + arg)] = e + continue version = search_version(out) if 'Free Software Foundation' in out: defines = self.get_gnu_compiler_defines(compiler) @@ -634,6 +635,7 @@ class Environment: p, out, err = Popen_safe(compiler + arg) except OSError as e: popen_exceptions[' '.join(compiler + arg)] = e + continue version = search_version(out) if 'Free Software Foundation' in out: defines = self.get_gnu_compiler_defines(compiler) diff --git a/run_unittests.py b/run_unittests.py index cf229da..61ee770 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -37,7 +37,7 @@ from mesonbuild.interpreter import ObjectHolder from mesonbuild.mesonlib import is_linux, is_windows, is_osx, is_cygwin, windows_proof_rmtree from mesonbuild.mesonlib import python_command, meson_command, version_compare from mesonbuild.environment import Environment -from mesonbuild.dependencies import DependencyException +from mesonbuild.mesonlib import MesonException, EnvironmentException from mesonbuild.dependencies import PkgConfigDependency, ExternalProgram from run_tests import exe_suffix, get_fake_options @@ -1744,7 +1744,7 @@ class FailureTests(BasePlatformTests): f.write(contents) # Force tracebacks so we can detect them properly os.environ['MESON_FORCE_BACKTRACE'] = '1' - with self.assertRaisesRegex(DependencyException, match, msg=contents): + with self.assertRaisesRegex(MesonException, match, msg=contents): # Must run in-process or we'll get a generic CalledProcessError self.init(self.srcdir, extra_args=extra_args, inprocess=True) @@ -1865,6 +1865,21 @@ class FailureTests(BasePlatformTests): out, r'In subproject one: Unknown command line options: "one:two"') + def test_objc_cpp_detection(self): + ''' + Test that when we can't detect objc or objcpp, we fail gracefully. + ''' + env = Environment('', self.builddir, self.meson_command, + get_fake_options(self.prefix), []) + try: + objc = env.detect_objc_compiler(False) + objcpp = env.detect_objcpp_compiler(False) + except EnvironmentException: + code = "add_languages('objc')\nadd_languages('objcpp')" + self.assertMesonRaises(code, "Unknown compiler") + return + raise unittest.SkipTest("objc and objcpp found, can't test detection failure") + class WindowsTests(BasePlatformTests): ''' |