summaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter/interpreter.py
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2025-11-12 08:37:58 -0800
committerDylan Baker <dylan@pnwbakers.com>2025-11-14 08:17:19 -0800
commitf5d81d071e411618ca0c1ec270565aa6f4b12dbc (patch)
tree83dfe3e76016a60f47a72c1ff15a9b80ea91cf84 /mesonbuild/interpreter/interpreter.py
parentee76b3c23607596c24584bd63c7b41ee55c33dec (diff)
downloadmeson-f5d81d071e411618ca0c1ec270565aa6f4b12dbc.tar.gz
interpreter: Robustly covert executable arguments to shared_library arguments
This extends the code that strips executable keyword arguments to also default populate shared_library exclusive arguments. Fixes: #15238
Diffstat (limited to 'mesonbuild/interpreter/interpreter.py')
-rw-r--r--mesonbuild/interpreter/interpreter.py20
1 files changed, 12 insertions, 8 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index a3cdde04a..f3382d20e 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -54,7 +54,7 @@ from .type_checking import (
CT_BUILD_BY_DEFAULT,
CT_INPUT_KW,
CT_INSTALL_DIR_KW,
- _EXCLUSIVE_EXECUTABLE_KWS,
+ EXCLUSIVE_EXECUTABLE_KWS,
EXECUTABLE_KWS,
JAR_KWS,
LIBRARY_KWS,
@@ -1813,22 +1813,26 @@ class Interpreter(InterpreterBase, HoldableObject):
def func_disabler(self, node, args, kwargs):
return Disabler()
- def _strip_exe_specific_kwargs(self, kwargs: kwtypes.Executable) -> kwtypes._BuildTarget:
- kwargs = kwargs.copy()
- for exe_kwarg in _EXCLUSIVE_EXECUTABLE_KWS:
- del kwargs[exe_kwarg.name]
- return kwargs
+ def _exe_to_shlib_kwargs(self, kwargs: kwtypes.Executable) -> kwtypes.SharedLibrary:
+ nkwargs = T.cast('kwtypes.SharedLibrary', kwargs.copy())
+ for exe_kwarg in EXCLUSIVE_EXECUTABLE_KWS:
+ del nkwargs[exe_kwarg.name] # type: ignore[misc]
+ for sh_kwarg in SHARED_LIB_KWS:
+ nkwargs.setdefault(sh_kwarg.name, sh_kwarg.default) # type: ignore[misc]
+ nkwargs['rust_abi'] = None
+ nkwargs['rust_crate_type'] = 'cdylib'
+ return nkwargs
@permittedKwargs(build.known_exe_kwargs)
@typed_pos_args('executable', str, varargs=SOURCES_VARARGS)
@typed_kwargs('executable', *EXECUTABLE_KWS, allow_unknown=True)
def func_executable(self, node: mparser.BaseNode,
args: T.Tuple[str, SourcesVarargsType],
- kwargs: kwtypes.Executable) -> build.Executable:
+ kwargs: kwtypes.Executable) -> T.Union[build.Executable, build.SharedLibrary]:
for_machine = kwargs['native']
m = self.environment.machines[for_machine]
if m.is_android() and kwargs.get('android_exe_type') == 'application':
- holder = self.build_target(node, args, self._strip_exe_specific_kwargs(kwargs), build.SharedLibrary)
+ holder = self.build_target(node, args, self._exe_to_shlib_kwargs(kwargs), build.SharedLibrary)
holder.shared_library_only = True
return holder
return self.build_target(node, args, kwargs, build.Executable)