diff options
| author | Florian "sp1rit" <sp1rit@disroot.org> | 2025-04-16 22:11:38 +0200 |
|---|---|---|
| committer | Jussi Pakkanen <jpakkane@gmail.com> | 2025-04-17 19:01:22 +0300 |
| commit | 855cf199fc950de3e764a74e7b545c2213aa601c (patch) | |
| tree | aaa1c702e0ed75b1fd40554495d9518036bcd4cd /mesonbuild/interpreter/interpreter.py | |
| parent | da28caa63dc855ad897b259e6dbc1615c847fbf8 (diff) | |
| download | meson-855cf199fc950de3e764a74e7b545c2213aa601c.tar.gz | |
android: Added android_exe_type kwargs to executable
By setting android_exe_type to `application`, the executable gets
actually built as a shared library instead of an executable. This makes
it possible to use an application within an android application process.
mesonbuild#13758
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/7555/
Diffstat (limited to 'mesonbuild/interpreter/interpreter.py')
| -rw-r--r-- | mesonbuild/interpreter/interpreter.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index 2cd272db3..d3bf86df3 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -54,6 +54,7 @@ from .type_checking import ( CT_BUILD_BY_DEFAULT, CT_INPUT_KW, CT_INSTALL_DIR_KW, + _EXCLUSIVE_EXECUTABLE_KWS, EXECUTABLE_KWS, JAR_KWS, LIBRARY_KWS, @@ -1816,12 +1817,24 @@ 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 + @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: + 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.shared_library_only = True + return holder return self.build_target(node, args, kwargs, build.Executable) @permittedKwargs(build.known_stlib_kwargs) |
