aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/modules/sourceset.py
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2021-03-03 12:48:30 -0500
committerXavier Claessens <xclaesse@gmail.com>2021-05-28 15:17:10 -0400
commit3340284805b96a4b9b62405f626020276341944c (patch)
tree83ff4cbaed7db7d89360eedbfa63930c2e0c68a6 /mesonbuild/modules/sourceset.py
parent723c5227a471aff3a1a5a3bc481984c99bf592aa (diff)
downloadmeson-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.py46
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)