summaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter/interpreter.py
diff options
context:
space:
mode:
authorFlorian "sp1rit"​ <sp1rit@disroot.org>2025-04-16 22:11:38 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2025-04-17 19:01:22 +0300
commit855cf199fc950de3e764a74e7b545c2213aa601c (patch)
treeaaa1c702e0ed75b1fd40554495d9518036bcd4cd /mesonbuild/interpreter/interpreter.py
parentda28caa63dc855ad897b259e6dbc1615c847fbf8 (diff)
downloadmeson-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.py13
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)