aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/modules/cmake.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/cmake.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/cmake.py')
-rw-r--r--mesonbuild/modules/cmake.py56
1 files changed, 26 insertions, 30 deletions
diff --git a/mesonbuild/modules/cmake.py b/mesonbuild/modules/cmake.py
index bef7a00..048b59e 100644
--- a/mesonbuild/modules/cmake.py
+++ b/mesonbuild/modules/cmake.py
@@ -16,16 +16,12 @@ import os, os.path, pathlib
import shutil
import typing as T
-from . import ExtensionModule, ModuleReturnValue
+from . import ExtensionModule, ModuleReturnValue, ModuleObject
from .. import build, mesonlib, mlog
from ..cmake import SingleTargetOptions, TargetOptions, cmake_defines_to_args
from ..interpreter import ConfigurationDataHolder, SubprojectHolder, DependencyHolder
from ..interpreterbase import (
- InterpreterException,
- InterpreterObject,
- ObjectHolder,
-
FeatureNew,
FeatureNewKwargs,
FeatureDeprecatedKwargs,
@@ -72,12 +68,12 @@ endmacro()
####################################################################################
'''
-class CMakeSubprojectHolder(InterpreterObject, ObjectHolder):
+class CMakeSubproject(ModuleObject):
def __init__(self, subp, pv):
assert(isinstance(subp, SubprojectHolder))
assert(hasattr(subp, 'cm_interpreter'))
- InterpreterObject.__init__(self)
- ObjectHolder.__init__(self, subp, pv)
+ super().__init__()
+ self.subp = subp
self.methods.update({'get_variable': self.get_variable,
'dependency': self.dependency,
'include_directories': self.include_directories,
@@ -92,7 +88,7 @@ class CMakeSubprojectHolder(InterpreterObject, ObjectHolder):
raise InterpreterException('Exactly one argument is required.')
tgt = args[0]
- res = self.held_object.cm_interpreter.target_info(tgt)
+ res = self.subp.cm_interpreter.target_info(tgt)
if res is None:
raise InterpreterException(f'The CMake target {tgt} does not exist\n' +
' Use the following command in your meson.build to list all available targets:\n\n' +
@@ -104,15 +100,15 @@ class CMakeSubprojectHolder(InterpreterObject, ObjectHolder):
@noKwargs
@stringArgs
- def get_variable(self, args, kwargs):
- return self.held_object.get_variable_method(args, kwargs)
+ def get_variable(self, state, args, kwargs):
+ return self.subp.get_variable_method(args, kwargs)
@FeatureNewKwargs('dependency', '0.56.0', ['include_type'])
@permittedKwargs({'include_type'})
@stringArgs
- def dependency(self, args, kwargs):
+ def dependency(self, state, args, kwargs):
info = self._args_to_info(args)
- orig = self.get_variable([info['dep']], {})
+ orig = self.get_variable(state, [info['dep']], {})
assert isinstance(orig, DependencyHolder)
actual = orig.include_type_method([], {})
if 'include_type' in kwargs and kwargs['include_type'] != actual:
@@ -122,35 +118,35 @@ class CMakeSubprojectHolder(InterpreterObject, ObjectHolder):
@noKwargs
@stringArgs
- def include_directories(self, args, kwargs):
+ def include_directories(self, state, args, kwargs):
info = self._args_to_info(args)
- return self.get_variable([info['inc']], kwargs)
+ return self.get_variable(state, [info['inc']], kwargs)
@noKwargs
@stringArgs
- def target(self, args, kwargs):
+ def target(self, state, args, kwargs):
info = self._args_to_info(args)
- return self.get_variable([info['tgt']], kwargs)
+ return self.get_variable(state, [info['tgt']], kwargs)
@noKwargs
@stringArgs
- def target_type(self, args, kwargs):
+ def target_type(self, state, args, kwargs):
info = self._args_to_info(args)
return info['func']
@noPosargs
@noKwargs
- def target_list(self, args, kwargs):
- return self.held_object.cm_interpreter.target_list()
+ def target_list(self, state, args, kwargs):
+ return self.subp.cm_interpreter.target_list()
@noPosargs
@noKwargs
@FeatureNew('CMakeSubproject.found()', '0.53.2')
- def found_method(self, args, kwargs):
- return self.held_object is not None
+ def found_method(self, state, args, kwargs):
+ return self.subp is not None
-class CMakeSubprojectOptions(InterpreterObject):
+class CMakeSubprojectOptions(ModuleObject):
def __init__(self) -> None:
super().__init__()
self.cmake_options = [] # type: T.List[str]
@@ -173,39 +169,39 @@ class CMakeSubprojectOptions(InterpreterObject):
return self.target_options.global_options
@noKwargs
- def add_cmake_defines(self, args, kwargs) -> None:
+ def add_cmake_defines(self, state, args, kwargs) -> None:
self.cmake_options += cmake_defines_to_args(args)
@stringArgs
@permittedKwargs({'target'})
- def set_override_option(self, args, kwargs) -> None:
+ def set_override_option(self, state, args, kwargs) -> None:
if len(args) != 2:
raise InvalidArguments('set_override_option takes exactly 2 positional arguments')
self._get_opts(kwargs).set_opt(args[0], args[1])
@permittedKwargs({'target'})
- def set_install(self, args, kwargs) -> None:
+ def set_install(self, state, args, kwargs) -> None:
if len(args) != 1 or not isinstance(args[0], bool):
raise InvalidArguments('set_install takes exactly 1 boolean argument')
self._get_opts(kwargs).set_install(args[0])
@stringArgs
@permittedKwargs({'target'})
- def append_compile_args(self, args, kwargs) -> None:
+ def append_compile_args(self, state, args, kwargs) -> None:
if len(args) < 2:
raise InvalidArguments('append_compile_args takes at least 2 positional arguments')
self._get_opts(kwargs).append_args(args[0], args[1:])
@stringArgs
@permittedKwargs({'target'})
- def append_link_args(self, args, kwargs) -> None:
+ def append_link_args(self, state, args, kwargs) -> None:
if not args:
raise InvalidArguments('append_link_args takes at least 1 positional argument')
self._get_opts(kwargs).append_link_args(args)
@noPosargs
@noKwargs
- def clear(self, args, kwargs) -> None:
+ def clear(self, state, args, kwargs) -> None:
self.cmake_options.clear()
self.target_options = TargetOptions()
@@ -389,7 +385,7 @@ class CmakeModule(ExtensionModule):
subp = self.interpreter.do_subproject(dirname, 'cmake', kwargs)
if not subp.held_object:
return subp
- return CMakeSubprojectHolder(subp, dirname)
+ return CMakeSubproject(subp, dirname)
@FeatureNew('subproject_options', '0.55.0')
@noKwargs