aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/interpreter')
-rw-r--r--mesonbuild/interpreter/interpreter.py9
-rw-r--r--mesonbuild/interpreter/kwargs.py7
-rw-r--r--mesonbuild/interpreter/primitives/array.py14
-rw-r--r--mesonbuild/interpreter/type_checking.py7
4 files changed, 34 insertions, 3 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 730f3d3..2cf5b7a 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -62,6 +62,7 @@ from .type_checking import (
OUTPUT_KW,
DEFAULT_OPTIONS,
DEPENDENCIES_KW,
+ DEPENDENCY_KWS,
DEPENDS_KW,
DEPEND_FILES_KW,
DEPFILE_KW,
@@ -523,6 +524,8 @@ class Interpreter(InterpreterBase, HoldableObject):
self.handle_meson_version(val.value, val)
def get_build_def_files(self) -> mesonlib.OrderedSet[str]:
+ if self.environment.cargo:
+ self.build_def_files.update(self.environment.cargo.get_build_def_files())
return self.build_def_files
def add_build_def_file(self, f: mesonlib.FileOrString) -> None:
@@ -1085,7 +1088,7 @@ class Interpreter(InterpreterBase, HoldableObject):
value_object: T.Optional[options.AnyOptionType]
try:
- optkey = options.OptionKey(optname, self.subproject)
+ optkey = options.OptionKey.from_string(optname).evolve(subproject=self.subproject)
value_object, value = self.coredata.optstore.get_value_object_and_value_for(optkey)
except KeyError:
if self.coredata.optstore.is_base_option(optkey):
@@ -1787,8 +1790,8 @@ class Interpreter(InterpreterBase, HoldableObject):
@disablerIfNotFound
@permittedKwargs(permitted_dependency_kwargs)
@typed_pos_args('dependency', varargs=str, min_varargs=1)
- @typed_kwargs('dependency', DEFAULT_OPTIONS.evolve(since='0.38.0'), allow_unknown=True)
- def func_dependency(self, node: mparser.BaseNode, args: T.Tuple[T.List[str]], kwargs) -> Dependency:
+ @typed_kwargs('dependency', *DEPENDENCY_KWS, allow_unknown=True)
+ def func_dependency(self, node: mparser.BaseNode, args: T.Tuple[T.List[str]], kwargs: kwtypes.FuncDependency) -> Dependency:
# Replace '' by empty list of names
names = [n for n in args[0] if n]
if len(names) > 1:
diff --git a/mesonbuild/interpreter/kwargs.py b/mesonbuild/interpreter/kwargs.py
index d741aab..7dd49a1 100644
--- a/mesonbuild/interpreter/kwargs.py
+++ b/mesonbuild/interpreter/kwargs.py
@@ -363,6 +363,8 @@ class _BuildTarget(_BaseBuildTarget):
d_module_versions: T.List[T.Union[str, int]]
d_unittest: bool
rust_dependency_map: T.Dict[str, str]
+ swift_interoperability_mode: Literal['c', 'cpp']
+ swift_module_name: str
sources: SourcesVarargsType
c_args: T.List[str]
cpp_args: T.List[str]
@@ -486,3 +488,8 @@ class FuncDeclareDependency(TypedDict):
sources: T.List[T.Union[FileOrString, build.GeneratedTypes]]
variables: T.Dict[str, str]
version: T.Optional[str]
+
+
+class FuncDependency(TypedDict):
+
+ default_options: T.Dict[OptionKey, T.Union[str, int, bool, T.List[str]]]
diff --git a/mesonbuild/interpreter/primitives/array.py b/mesonbuild/interpreter/primitives/array.py
index ff520a2..d0a2441 100644
--- a/mesonbuild/interpreter/primitives/array.py
+++ b/mesonbuild/interpreter/primitives/array.py
@@ -97,3 +97,17 @@ class ArrayHolder(ObjectHolder[T.List[TYPE_var]], IterableObject):
return self.held_object[other]
except IndexError:
raise InvalidArguments(f'Index {other} out of bounds of array of size {len(self.held_object)}.')
+
+ @noPosargs
+ @noKwargs
+ @FeatureNew('array.flatten', '1.9.0')
+ @InterpreterObject.method('flatten')
+ def flatten_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> TYPE_var:
+ def flatten(obj: TYPE_var) -> T.Iterable[TYPE_var]:
+ if isinstance(obj, list):
+ for o in obj:
+ yield from flatten(o)
+ else:
+ yield obj
+
+ return list(flatten(self.held_object))
diff --git a/mesonbuild/interpreter/type_checking.py b/mesonbuild/interpreter/type_checking.py
index fbe3e3e..a551d0f 100644
--- a/mesonbuild/interpreter/type_checking.py
+++ b/mesonbuild/interpreter/type_checking.py
@@ -633,6 +633,8 @@ _BUILD_TARGET_KWS: T.List[KwargInfo] = [
default={},
since='1.2.0',
),
+ KwargInfo('swift_interoperability_mode', str, default='c', validator=in_set_validator({'c', 'cpp'}), since='1.9.0'),
+ KwargInfo('swift_module_name', str, default='', since='1.9.0'),
KwargInfo('build_rpath', str, default='', since='0.42.0'),
KwargInfo(
'gnu_symbol_visibility',
@@ -865,3 +867,8 @@ PKGCONFIG_DEFINE_KW: KwargInfo = KwargInfo(
default=[],
convertor=_pkgconfig_define_convertor,
)
+
+
+DEPENDENCY_KWS: T.List[KwargInfo] = [
+ DEFAULT_OPTIONS.evolve(since='0.38.0'),
+]