diff options
| -rw-r--r-- | mesonbuild/interpreter/interpreter.py | 20 | ||||
| -rw-r--r-- | mesonbuild/interpreter/type_checking.py | 8 |
2 files changed, 16 insertions, 12 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) diff --git a/mesonbuild/interpreter/type_checking.py b/mesonbuild/interpreter/type_checking.py index d0a57f2c9..28280a996 100644 --- a/mesonbuild/interpreter/type_checking.py +++ b/mesonbuild/interpreter/type_checking.py @@ -808,7 +808,7 @@ _DARWIN_VERSIONS_KW: KwargInfo[T.List[T.Union[str, int]]] = KwargInfo( # Arguments exclusive to Executable. These are separated to make integrating # them into build_target easier -_EXCLUSIVE_EXECUTABLE_KWS: T.List[KwargInfo] = [ +EXCLUSIVE_EXECUTABLE_KWS: T.List[KwargInfo] = [ KwargInfo('export_dynamic', (bool, NoneType), since='0.45.0'), KwargInfo('gui_app', (bool, NoneType), deprecated='0.56.0', deprecated_message="Use 'win_subsystem' instead"), KwargInfo( @@ -837,7 +837,7 @@ _EXCLUSIVE_EXECUTABLE_KWS: T.List[KwargInfo] = [ # The total list of arguments used by Executable EXECUTABLE_KWS = [ *_BUILD_TARGET_KWS, - *_EXCLUSIVE_EXECUTABLE_KWS, + *EXCLUSIVE_EXECUTABLE_KWS, _VS_MODULE_DEFS_KW.evolve(since='1.3.0', since_values=None), _JAVA_LANG_KW, ] @@ -877,7 +877,7 @@ _EXCLUSIVE_SHARED_LIB_KWS: T.List[KwargInfo] = [ ] # The total list of arguments used by SharedLibrary -SHARED_LIB_KWS = [ +SHARED_LIB_KWS: T.List[KwargInfo] = [ *_BUILD_TARGET_KWS, *_EXCLUSIVE_SHARED_LIB_KWS, *_EXCLUSIVE_LIB_KWS, @@ -945,7 +945,7 @@ BUILD_TARGET_KWS = [ *_EXCLUSIVE_SHARED_LIB_KWS, *_EXCLUSIVE_SHARED_MOD_KWS, *_EXCLUSIVE_STATIC_LIB_KWS, - *_EXCLUSIVE_EXECUTABLE_KWS, + *EXCLUSIVE_EXECUTABLE_KWS, *_SHARED_STATIC_ARGS, RUST_ABI_KW.evolve(since='1.10.0'), *[a.evolve(deprecated='1.3.0', deprecated_message='The use of "jar" in "build_target()" is deprecated, and this argument is only used by jar()') |
