diff options
| author | Dylan Baker <dylan@pnwbakers.com> | 2025-11-12 08:37:58 -0800 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-11-14 08:17:19 -0800 |
| commit | f5d81d071e411618ca0c1ec270565aa6f4b12dbc (patch) | |
| tree | 83dfe3e76016a60f47a72c1ff15a9b80ea91cf84 /mesonbuild/interpreter/interpreter.py | |
| parent | ee76b3c23607596c24584bd63c7b41ee55c33dec (diff) | |
| download | meson-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.py | 20 |
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) |
