diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2021-03-03 12:48:30 -0500 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2021-05-28 15:17:10 -0400 |
commit | 3340284805b96a4b9b62405f626020276341944c (patch) | |
tree | 83ff4cbaed7db7d89360eedbfa63930c2e0c68a6 /mesonbuild/modules/sourceset.py | |
parent | 723c5227a471aff3a1a5a3bc481984c99bf592aa (diff) | |
download | meson-3340284805b96a4b9b62405f626020276341944c.zip meson-3340284805b96a4b9b62405f626020276341944c.tar.gz meson-3340284805b96a4b9b62405f626020276341944c.tar.bz2 |
modules: Stop using InterpreterObject
Custom objects returned by modules must be subclass of ModuleObject and
have the state argument in its methods.
Add MutableModuleObject base class for objects that needs to be deep
copied on assignation.
Diffstat (limited to 'mesonbuild/modules/sourceset.py')
-rw-r--r-- | mesonbuild/modules/sourceset.py | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/mesonbuild/modules/sourceset.py b/mesonbuild/modules/sourceset.py index 73cfbe1..1340959 100644 --- a/mesonbuild/modules/sourceset.py +++ b/mesonbuild/modules/sourceset.py @@ -15,10 +15,9 @@ from collections import namedtuple from .. import mesonlib from ..mesonlib import listify, OrderedSet -from . import ExtensionModule +from . import ExtensionModule, ModuleObject, MutableModuleObject from ..interpreterbase import ( noPosargs, noKwargs, permittedKwargs, - InterpreterObject, MutableInterpreterObject, ObjectHolder, InterpreterException, InvalidArguments, InvalidCode, FeatureNew, ) from ..interpreter import ( @@ -29,10 +28,10 @@ from ..interpreter import ( SourceSetRule = namedtuple('SourceSetRule', 'keys sources if_false sourcesets dependencies extra_deps') SourceFiles = namedtuple('SourceFiles', 'sources dependencies') -class SourceSetHolder(MutableInterpreterObject, ObjectHolder): +class SourceSet(MutableModuleObject): def __init__(self, interpreter): - MutableInterpreterObject.__init__(self) - ObjectHolder.__init__(self, list()) + super().__init__() + self.rules = [] self.subproject = interpreter.subproject self.environment = interpreter.environment self.subdir = interpreter.subdir @@ -77,7 +76,7 @@ class SourceSetHolder(MutableInterpreterObject, ObjectHolder): return keys, deps @permittedKwargs(['when', 'if_false', 'if_true']) - def add_method(self, args, kwargs): + def add_method(self, state, args, kwargs): if self.frozen: raise InvalidCode('Tried to use \'add\' after querying the source set') when = listify(kwargs.get('when', [])) @@ -90,10 +89,10 @@ class SourceSetHolder(MutableInterpreterObject, ObjectHolder): keys, dependencies = self.check_conditions(when) sources, extra_deps = self.check_source_files(if_true, True) if_false, _ = self.check_source_files(if_false, False) - self.held_object.append(SourceSetRule(keys, sources, if_false, [], dependencies, extra_deps)) + self.rules.append(SourceSetRule(keys, sources, if_false, [], dependencies, extra_deps)) @permittedKwargs(['when', 'if_true']) - def add_all_method(self, args, kwargs): + def add_all_method(self, state, args, kwargs): if self.frozen: raise InvalidCode('Tried to use \'add_all\' after querying the source set') when = listify(kwargs.get('when', [])) @@ -102,17 +101,18 @@ class SourceSetHolder(MutableInterpreterObject, ObjectHolder): if_true = args elif args: raise InterpreterException('add_all called with both positional and keyword arguments') + if_true = mesonlib.unholder(if_true) keys, dependencies = self.check_conditions(when) for s in if_true: - if not isinstance(s, SourceSetHolder): + if not isinstance(s, SourceSet): raise InvalidCode('Arguments to \'add_all\' after the first must be source sets') s.frozen = True - self.held_object.append(SourceSetRule(keys, [], [], if_true, dependencies, [])) + self.rules.append(SourceSetRule(keys, [], [], if_true, dependencies, [])) def collect(self, enabled_fn, all_sources, into=None): if not into: into = SourceFiles(OrderedSet(), OrderedSet()) - for entry in self.held_object: + for entry in self.rules: if all(x.found() for x in entry.dependencies) and \ all(enabled_fn(key) for key in entry.keys): into.sources.update(entry.sources) @@ -127,7 +127,7 @@ class SourceSetHolder(MutableInterpreterObject, ObjectHolder): @noKwargs @noPosargs - def all_sources_method(self, args, kwargs): + def all_sources_method(self, state, args, kwargs): self.frozen = True files = self.collect(lambda x: True, True) return list(files.sources) @@ -135,13 +135,13 @@ class SourceSetHolder(MutableInterpreterObject, ObjectHolder): @noKwargs @noPosargs @FeatureNew('source_set.all_dependencies() method', '0.52.0') - def all_dependencies_method(self, args, kwargs): + def all_dependencies_method(self, state, args, kwargs): self.frozen = True files = self.collect(lambda x: True, True) return list(files.dependencies) @permittedKwargs(['strict']) - def apply_method(self, args, kwargs): + def apply_method(self, state, args, kwargs): if len(args) != 1: raise InterpreterException('Apply takes exactly one argument') config_data = args[0] @@ -163,13 +163,13 @@ class SourceSetHolder(MutableInterpreterObject, ObjectHolder): return config_cache[key] files = self.collect(_get_from_config_data, False) - res = SourceFilesHolder(files) + res = SourceFilesObject(files) return res -class SourceFilesHolder(InterpreterObject, ObjectHolder): +class SourceFilesObject(ModuleObject): def __init__(self, files): - InterpreterObject.__init__(self) - ObjectHolder.__init__(self, files) + super().__init__() + self.files = files self.methods.update({ 'sources': self.sources_method, 'dependencies': self.dependencies_method, @@ -177,13 +177,13 @@ class SourceFilesHolder(InterpreterObject, ObjectHolder): @noPosargs @noKwargs - def sources_method(self, args, kwargs): - return list(self.held_object.sources) + def sources_method(self, state, args, kwargs): + return list(self.files.sources) @noPosargs @noKwargs - def dependencies_method(self, args, kwargs): - return list(self.held_object.dependencies) + def dependencies_method(self, state, args, kwargs): + return list(self.files.dependencies) class SourceSetModule(ExtensionModule): @FeatureNew('SourceSet module', '0.51.0') @@ -193,7 +193,7 @@ class SourceSetModule(ExtensionModule): @noKwargs @noPosargs def source_set(self, state, args, kwargs): - return SourceSetHolder(self.interpreter) + return SourceSet(self.interpreter) def initialize(*args, **kwargs): return SourceSetModule(*args, **kwargs) |