summaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2025-06-30 13:45:57 -0700
committerDylan Baker <dylan@pnwbakers.com>2025-12-05 08:13:08 -0800
commitf6918fe65c8b9526bc359bea8a6e8517b39b4ec5 (patch)
treec8be5e054ecfa81dbcbe0350cab03e49328233b5 /mesonbuild/interpreter
parent79854e4b8d09744acbe2f2d2c0d43a88b9ab1dcc (diff)
downloadmeson-f6918fe65c8b9526bc359bea8a6e8517b39b4ec5.tar.gz
mesonmain: mark getting a language from another subproject as broken
Currently, you can call `meson.get_compiler('c')`, if you haven't initialized 'c' for your project, but a super-project has initialized it. This happens because we check the wrong set of compilers (the global list vs the per-subproject one). Because of how fragile this is, we can mark it as broken an move on.
Diffstat (limited to 'mesonbuild/interpreter')
-rw-r--r--mesonbuild/interpreter/mesonmain.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/mesonbuild/interpreter/mesonmain.py b/mesonbuild/interpreter/mesonmain.py
index 067d5ffb3..7c3789f65 100644
--- a/mesonbuild/interpreter/mesonmain.py
+++ b/mesonbuild/interpreter/mesonmain.py
@@ -16,7 +16,7 @@ from ..mesonlib import MachineChoice
from ..options import OptionKey
from ..programs import OverrideProgram, ExternalProgram
from ..interpreter.type_checking import ENV_KW, ENV_METHOD_KW, ENV_SEPARATOR_KW, env_convertor_with_method
-from ..interpreterbase import (MesonInterpreterObject, FeatureNew, FeatureDeprecated,
+from ..interpreterbase import (MesonInterpreterObject, FeatureNew, FeatureDeprecated, FeatureBroken,
typed_pos_args, noArgsFlattening, noPosargs, noKwargs,
typed_kwargs, KwargInfo, InterpreterException, InterpreterObject)
from .primitives import MesonVersionString
@@ -285,13 +285,19 @@ class MesonMain(MesonInterpreterObject):
@typed_kwargs('meson.get_compiler', NATIVE_KW)
@InterpreterObject.method('get_compiler')
def get_compiler_method(self, args: T.Tuple[str], kwargs: 'NativeKW') -> 'Compiler':
- cname = args[0]
+ lang = args[0]
for_machine = kwargs['native']
- clist = self.interpreter.coredata.compilers[for_machine]
try:
- return clist[cname]
+ return self.interpreter.compilers[for_machine][lang]
except KeyError:
- raise InterpreterException(f'Tried to access compiler for language "{cname}", not specified for {for_machine.get_lower_case_name()} machine.')
+ try:
+ comp = self.interpreter.coredata.compilers[for_machine][lang]
+ except KeyError:
+ raise InterpreterException(f'Tried to access compiler for language "{lang}", not specified for {for_machine.get_lower_case_name()} machine.')
+
+ FeatureBroken.single_use('Using `meson.get_compiler()` for languages only initialized in another subproject', '1.11.0', self.subproject,
+ 'This is extremely fragile, as your project likely cannot be used outside of your environment.')
+ return comp
@noPosargs
@noKwargs