diff options
| author | Joel Rosdahl <joel@rosdahl.net> | 2024-12-29 11:08:37 +0100 |
|---|---|---|
| committer | Eli Schwartz <eschwartz93@gmail.com> | 2024-12-31 10:36:11 -0500 |
| commit | 631cce71db8dbae9f2330d48cb429a7ccec77135 (patch) | |
| tree | 7e22a150eac47abe2a471038c5e669cd1daf277e | |
| parent | 3b36cb2c2c5e2978cc38283e4aa5d71ab5da4335 (diff) | |
| download | meson-631cce71db8dbae9f2330d48cb429a7ccec77135.tar.gz | |
Fail gracefully when compiler cache is specified without compiler
With
CC=ccache meson ...
meson crashes with
[...]
File "/usr/lib/python3.10/site-packages/mesonbuild/compilers/detect.py", line 364, in _detect_c_or_cpp_compiler
compiler_name = os.path.basename(compiler[0])
IndexError: list index out of range
Improve this by throwing an EnvironmentException to fail gracefully when
no compiler is specified.
Fixes #9933
Fixes #13589
| -rw-r--r-- | mesonbuild/envconfig.py | 13 | ||||
| -rw-r--r-- | unittests/failuretests.py | 5 |
2 files changed, 13 insertions, 5 deletions
diff --git a/mesonbuild/envconfig.py b/mesonbuild/envconfig.py index 86bad9be2..c99ae4b01 100644 --- a/mesonbuild/envconfig.py +++ b/mesonbuild/envconfig.py @@ -438,16 +438,19 @@ class BinaryTable: @classmethod def parse_entry(cls, entry: T.Union[str, T.List[str]]) -> T.Tuple[T.List[str], T.List[str]]: - compiler = mesonlib.stringlistify(entry) + parts = mesonlib.stringlistify(entry) # Ensure ccache exists and remove it if it doesn't - if compiler[0] == 'ccache': - compiler = compiler[1:] + if parts[0] == 'ccache': + compiler = parts[1:] ccache = cls.detect_ccache() - elif compiler[0] == 'sccache': - compiler = compiler[1:] + elif parts[0] == 'sccache': + compiler = parts[1:] ccache = cls.detect_sccache() else: + compiler = parts ccache = [] + if not compiler: + raise EnvironmentException(f'Compiler cache specified without compiler: {parts[0]}') # Return value has to be a list of compiler 'choices' return compiler, ccache diff --git a/unittests/failuretests.py b/unittests/failuretests.py index 8a802120b..e5a3b35ea 100644 --- a/unittests/failuretests.py +++ b/unittests/failuretests.py @@ -381,3 +381,8 @@ class FailureTests(BasePlatformTests): def test_error_func(self): self.assertMesonRaises("error('a', 'b', ['c', ['d', {'e': 'f'}]], 'g')", r"Problem encountered: a b \['c', \['d', {'e' : 'f'}\]\] g") + + def test_compiler_cache_without_compiler(self): + self.assertMesonRaises('', + 'Compiler cache specified without compiler: ccache', + override_envvars={'CC': 'ccache'}) |
