diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2023-04-24 22:42:09 -0400 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2023-09-22 15:50:26 -0400 |
commit | 49e7e3b9ccba7f9b0a135188f892b37d4e52cafc (patch) | |
tree | c2d7cce36113bc1fae778b3a55823672ee28e99f /mesonbuild/interpreter | |
parent | c0da998afa7466d58c12d8a54baf09d09ae3225e (diff) | |
download | meson-49e7e3b9ccba7f9b0a135188f892b37d4e52cafc.zip meson-49e7e3b9ccba7f9b0a135188f892b37d4e52cafc.tar.gz meson-49e7e3b9ccba7f9b0a135188f892b37d4e52cafc.tar.bz2 |
Allow to fallback to cmake subproject
The method can be overridden by setting the `method` key in the wrap
file and always defaults to 'meson'. cmake.subproject() is still needed
in case specific cmake options need to be passed.
This also makes it easier to extend to other methods in the future e.g.
cargo.
Diffstat (limited to 'mesonbuild/interpreter')
-rw-r--r-- | mesonbuild/interpreter/dependencyfallbacks.py | 2 | ||||
-rw-r--r-- | mesonbuild/interpreter/interpreter.py | 14 |
2 files changed, 7 insertions, 9 deletions
diff --git a/mesonbuild/interpreter/dependencyfallbacks.py b/mesonbuild/interpreter/dependencyfallbacks.py index 7ef1527..eca6a2c 100644 --- a/mesonbuild/interpreter/dependencyfallbacks.py +++ b/mesonbuild/interpreter/dependencyfallbacks.py @@ -127,7 +127,7 @@ class DependencyFallbacksHolder(MesonInterpreterObject): func_kwargs.setdefault('version', []) if 'default_options' in kwargs and isinstance(kwargs['default_options'], str): func_kwargs['default_options'] = listify(kwargs['default_options']) - self.interpreter.do_subproject(subp_name, 'meson', func_kwargs) + self.interpreter.do_subproject(subp_name, func_kwargs) return self._get_subproject_dep(subp_name, varname, kwargs) def _get_subproject(self, subp_name: str) -> T.Optional[SubprojectHolder]: diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index a5c8a5a..e0c17e6 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -116,8 +116,6 @@ import copy if T.TYPE_CHECKING: import argparse - from typing_extensions import Literal - from . import kwargs as kwtypes from ..backend.backends import Backend from ..interpreterbase.baseobjects import InterpreterObject, TYPE_var, TYPE_kwargs @@ -868,7 +866,7 @@ class Interpreter(InterpreterBase, HoldableObject): 'options': None, 'cmake_options': [], } - return self.do_subproject(args[0], 'meson', kw) + return self.do_subproject(args[0], kw) def disabled_subproject(self, subp_name: str, disabled_feature: T.Optional[str] = None, exception: T.Optional[Exception] = None) -> SubprojectHolder: @@ -877,7 +875,7 @@ class Interpreter(InterpreterBase, HoldableObject): self.subprojects[subp_name] = sub return sub - def do_subproject(self, subp_name: str, method: Literal['meson', 'cmake'], kwargs: kwtypes.DoSubproject) -> SubprojectHolder: + def do_subproject(self, subp_name: str, kwargs: kwtypes.DoSubproject, force_method: T.Optional[wrap.Method] = None) -> SubprojectHolder: disabled, required, feature = extract_required_kwarg(kwargs, self.subproject) if disabled: mlog.log('Subproject', mlog.bold(subp_name), ':', 'skipped: feature', mlog.bold(feature), 'disabled') @@ -913,7 +911,7 @@ class Interpreter(InterpreterBase, HoldableObject): r = self.environment.wrap_resolver try: - subdir = r.resolve(subp_name, method) + subdir, method = r.resolve(subp_name, force_method) except wrap.WrapException as e: if not required: mlog.log(e) @@ -1009,8 +1007,8 @@ class Interpreter(InterpreterBase, HoldableObject): prefix = self.coredata.options[OptionKey('prefix')].value from ..modules.cmake import CMakeSubprojectOptions - options = kwargs['options'] or CMakeSubprojectOptions() - cmake_options = kwargs['cmake_options'] + options.cmake_options + options = kwargs.get('options') or CMakeSubprojectOptions() + cmake_options = kwargs.get('cmake_options', []) + options.cmake_options cm_int = CMakeInterpreter(new_build, Path(subdir), Path(subdir_abs), Path(prefix), new_build.environment, self.backend) cm_int.initialise(cmake_options) cm_int.analyse() @@ -1734,7 +1732,7 @@ class Interpreter(InterpreterBase, HoldableObject): 'cmake_options': [], 'options': None, } - self.do_subproject(fallback, 'meson', sp_kwargs) + self.do_subproject(fallback, sp_kwargs) return self.program_from_overrides(args, extra_info) @typed_pos_args('find_program', varargs=(str, mesonlib.File), min_varargs=1) |