aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/interpreter/interpreterobjects.py21
-rw-r--r--mesonbuild/interpreterbase.py7
-rw-r--r--mesonbuild/modules/__init__.py2
-rw-r--r--mesonbuild/modules/cmake.py14
-rw-r--r--mesonbuild/modules/dlang.py3
-rw-r--r--mesonbuild/modules/fs.py1
-rw-r--r--mesonbuild/modules/keyval.py11
-rw-r--r--mesonbuild/modules/python.py5
-rw-r--r--mesonbuild/modules/python3.py5
-rw-r--r--mesonbuild/modules/qt.py3
-rw-r--r--mesonbuild/modules/sourceset.py5
-rw-r--r--mesonbuild/modules/unstable_icestorm.py19
-rw-r--r--mesonbuild/modules/unstable_simd.py7
13 files changed, 38 insertions, 65 deletions
diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py
index 10e681a..1c64f5b 100644
--- a/mesonbuild/interpreter/interpreterobjects.py
+++ b/mesonbuild/interpreter/interpreterobjects.py
@@ -10,7 +10,7 @@ from .. import coredata
from .. import build
from .. import mlog
-from ..modules import ModuleReturnValue, ModuleObject, ModuleState
+from ..modules import ModuleReturnValue, ModuleObject, ModuleState, ExtensionModule
from ..backend.backends import TestProtocol
from ..interpreterbase import (InterpreterObject, ObjectHolder, MutableInterpreterObject,
FeatureNewKwargs, FeatureNew, FeatureDeprecated,
@@ -802,19 +802,12 @@ class ModuleObjectHolder(InterpreterObject, ObjectHolder['ModuleObject']):
# so we have to ensure they use the current interpreter and not the one
# that first imported that module, otherwise it will use outdated
# overrides.
- modobj.interpreter = self.interpreter
- if method_name in modobj.snippets:
- ret = method(self.interpreter, state, args, kwargs)
- else:
- # This is not 100% reliable but we can't use hash()
- # because the Build object contains dicts and lists.
- num_targets = len(self.interpreter.build.targets)
- ret = method(state, args, kwargs)
- if num_targets != len(self.interpreter.build.targets):
- raise InterpreterException('Extension module altered internal state illegally.')
- if isinstance(ret, ModuleReturnValue):
- self.interpreter.process_new_values(ret.new_objects)
- ret = ret.return_value
+ if isinstance(modobj, ExtensionModule):
+ modobj.interpreter = self.interpreter
+ ret = method(state, args, kwargs)
+ if isinstance(ret, ModuleReturnValue):
+ self.interpreter.process_new_values(ret.new_objects)
+ ret = ret.return_value
return self.interpreter.holderify(ret)
_Target = T.TypeVar('_Target', bound=build.Target)
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py
index a364510..41732d6 100644
--- a/mesonbuild/interpreterbase.py
+++ b/mesonbuild/interpreterbase.py
@@ -140,13 +140,6 @@ def _get_callee_args(wrapped_args: T.Sequence[T.Any], want_subproject: bool = Fa
subproject = s.subproject
else:
subproject = wrapped_args[1].subproject
- elif n == 5:
- # Module snippets have 5 args: self, interpreter, state, args, kwargs
- node = wrapped_args[2].current_node
- args = wrapped_args[3]
- kwargs = wrapped_args[4]
- if want_subproject:
- subproject = wrapped_args[2].subproject
else:
raise AssertionError(f'Unknown args: {wrapped_args!r}')
# Sometimes interpreter methods are called internally with None instead of
diff --git a/mesonbuild/modules/__init__.py b/mesonbuild/modules/__init__.py
index c097029..f73a50b 100644
--- a/mesonbuild/modules/__init__.py
+++ b/mesonbuild/modules/__init__.py
@@ -91,8 +91,6 @@ class ModuleObject:
# FIXME: Port all modules to stop using self.interpreter and use API on
# ModuleState instead.
self.interpreter = interpreter
- # FIXME: Port all modules to remove snippets methods.
- self.snippets: T.Set[str] = set()
# FIXME: Port all modules to use ModuleObject directly.
class ExtensionModule(ModuleObject):
diff --git a/mesonbuild/modules/cmake.py b/mesonbuild/modules/cmake.py
index ee09359..bef7a00 100644
--- a/mesonbuild/modules/cmake.py
+++ b/mesonbuild/modules/cmake.py
@@ -216,8 +216,6 @@ class CmakeModule(ExtensionModule):
def __init__(self, interpreter):
super().__init__(interpreter)
- self.snippets.add('configure_package_config_file')
- self.snippets.add('subproject')
def detect_voidp_size(self, env):
compilers = env.coredata.compilers.host
@@ -318,7 +316,7 @@ class CmakeModule(ExtensionModule):
mesonlib.replace_if_different(outfile, outfile_tmp)
@permittedKwargs({'input', 'name', 'install_dir', 'configuration'})
- def configure_package_config_file(self, interpreter, state, args, kwargs):
+ def configure_package_config_file(self, state, args, kwargs):
if args:
raise mesonlib.MesonException('configure_package_config_file takes only keyword arguments.')
@@ -369,11 +367,11 @@ class CmakeModule(ExtensionModule):
conf.mark_used()
conffile = os.path.normpath(inputfile.relative_name())
- if conffile not in interpreter.build_def_files:
- interpreter.build_def_files.append(conffile)
+ if conffile not in self.interpreter.build_def_files:
+ self.interpreter.build_def_files.append(conffile)
res = build.Data([mesonlib.File(True, ofile_path, ofile_fname)], install_dir, None, state.subproject)
- interpreter.build.data.append(res)
+ self.interpreter.build.data.append(res)
return res
@@ -382,13 +380,13 @@ class CmakeModule(ExtensionModule):
@FeatureDeprecatedKwargs('subproject', '0.55.0', ['cmake_options'])
@permittedKwargs({'cmake_options', 'required', 'options'})
@stringArgs
- def subproject(self, interpreter, state, args, kwargs):
+ def subproject(self, state, args, kwargs):
if len(args) != 1:
raise InterpreterException('Subproject takes exactly one argument')
if 'cmake_options' in kwargs and 'options' in kwargs:
raise InterpreterException('"options" cannot be used together with "cmake_options"')
dirname = args[0]
- subp = interpreter.do_subproject(dirname, 'cmake', kwargs)
+ subp = self.interpreter.do_subproject(dirname, 'cmake', kwargs)
if not subp.held_object:
return subp
return CMakeSubprojectHolder(subp, dirname)
diff --git a/mesonbuild/modules/dlang.py b/mesonbuild/modules/dlang.py
index f2633cb..1dcf5e2 100644
--- a/mesonbuild/modules/dlang.py
+++ b/mesonbuild/modules/dlang.py
@@ -36,7 +36,6 @@ class DlangModule(ExtensionModule):
def __init__(self, interpreter):
super().__init__(interpreter)
- self.snippets.add('generate_dub_file')
def _init_dub(self):
if DlangModule.class_dubbin is None:
@@ -55,7 +54,7 @@ class DlangModule(ExtensionModule):
if not self.dubbin:
raise MesonException('DUB not found.')
- def generate_dub_file(self, interpreter, state, args, kwargs):
+ def generate_dub_file(self, state, args, kwargs):
if not DlangModule.init_dub:
self._init_dub()
diff --git a/mesonbuild/modules/fs.py b/mesonbuild/modules/fs.py
index 004fd13..d79b726 100644
--- a/mesonbuild/modules/fs.py
+++ b/mesonbuild/modules/fs.py
@@ -37,7 +37,6 @@ class FSModule(ExtensionModule):
def __init__(self, interpreter: 'Interpreter') -> None:
super().__init__(interpreter)
- self.snippets.add('generate_dub_file')
def _absolute_dir(self, state: 'ModuleState', arg: 'FileOrString') -> Path:
"""
diff --git a/mesonbuild/modules/keyval.py b/mesonbuild/modules/keyval.py
index 5fc4d52..8e43491 100644
--- a/mesonbuild/modules/keyval.py
+++ b/mesonbuild/modules/keyval.py
@@ -25,7 +25,6 @@ class KeyvalModule(ExtensionModule):
@FeatureNew('Keyval Module', '0.55.0')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- self.snippets.add('load')
def _load_file(self, path_to_config):
result = dict()
@@ -47,7 +46,7 @@ class KeyvalModule(ExtensionModule):
return result
@noKwargs
- def load(self, interpreter, state, args, kwargs):
+ def load(self, state, args, kwargs):
sources = typeslistify(args, (str, mesonlib.File))
if len(sources) != 1:
raise InvalidCode('load takes only one file input.')
@@ -56,12 +55,12 @@ class KeyvalModule(ExtensionModule):
is_built = False
if isinstance(s, mesonlib.File):
is_built = is_built or s.is_built
- s = s.absolute_path(interpreter.environment.source_dir, interpreter.environment.build_dir)
+ s = s.absolute_path(self.interpreter.environment.source_dir, self.interpreter.environment.build_dir)
else:
- s = os.path.join(interpreter.environment.source_dir, s)
+ s = os.path.join(self.interpreter.environment.source_dir, s)
- if s not in interpreter.build_def_files and not is_built:
- interpreter.build_def_files.append(s)
+ if s not in self.interpreter.build_def_files and not is_built:
+ self.interpreter.build_def_files.append(s)
return self._load_file(s)
diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py
index 2bd354f..1efebf8 100644
--- a/mesonbuild/modules/python.py
+++ b/mesonbuild/modules/python.py
@@ -473,7 +473,6 @@ class PythonModule(ExtensionModule):
@FeatureNew('Python Module', '0.46.0')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- self.snippets.add('find_installation')
# https://www.python.org/dev/peps/pep-0397/
def _get_win_pythonpath(self, name_or_path):
@@ -502,7 +501,7 @@ class PythonModule(ExtensionModule):
@FeatureNewKwargs('python.find_installation', '0.51.0', ['modules'])
@disablerIfNotFound
@permittedKwargs({'required', 'modules'})
- def find_installation(self, interpreter, state, args, kwargs):
+ def find_installation(self, state, args, kwargs):
feature_check = FeatureNew('Passing "feature" option to find_installation', '0.48.0')
disabled, required, feature = extract_required_kwarg(kwargs, state.subproject, feature_check)
want_modules = mesonlib.extract_as_list(kwargs, 'modules') # type: T.List[str]
@@ -587,7 +586,7 @@ class PythonModule(ExtensionModule):
mlog.debug(stderr)
if isinstance(info, dict) and 'version' in info and self._check_version(name_or_path, info['version']):
- res = PythonInstallation(interpreter, python, info)
+ res = PythonInstallation(self.interpreter, python, info)
else:
res = ExternalProgramHolder(NonExistingExternalProgram(), state.subproject)
if required:
diff --git a/mesonbuild/modules/python3.py b/mesonbuild/modules/python3.py
index e7a2bb3..4dbb9b5 100644
--- a/mesonbuild/modules/python3.py
+++ b/mesonbuild/modules/python3.py
@@ -26,10 +26,9 @@ class Python3Module(ExtensionModule):
@FeatureDeprecated('python3 module', '0.48.0')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- self.snippets.add('extension_module')
@permittedKwargs(known_shmod_kwargs)
- def extension_module(self, interpreter, state, args, kwargs):
+ def extension_module(self, state, args, kwargs):
if 'name_prefix' in kwargs:
raise mesonlib.MesonException('Name_prefix is set automatically, specifying it is forbidden.')
if 'name_suffix' in kwargs:
@@ -45,7 +44,7 @@ class Python3Module(ExtensionModule):
suffix = []
kwargs['name_prefix'] = ''
kwargs['name_suffix'] = suffix
- return interpreter.func_shared_module(None, args, kwargs)
+ return self.interpreter.func_shared_module(None, args, kwargs)
@noKwargs
def find_python(self, state, args, kwargs):
diff --git a/mesonbuild/modules/qt.py b/mesonbuild/modules/qt.py
index 1bf0099..7455e8e 100644
--- a/mesonbuild/modules/qt.py
+++ b/mesonbuild/modules/qt.py
@@ -41,7 +41,6 @@ class QtBaseModule(ExtensionModule):
def __init__(self, interpreter: 'Interpreter', qt_version=5):
ExtensionModule.__init__(self, interpreter)
- self.snippets.add('has_tools')
self.qt_version = qt_version
self.moc: 'ExternalProgram' = NonExistingExternalProgram('moc')
self.uic: 'ExternalProgram' = NonExistingExternalProgram('uic')
@@ -170,7 +169,7 @@ class QtBaseModule(ExtensionModule):
@noPosargs
@permittedKwargs({'method', 'required'})
@FeatureNew('qt.has_tools', '0.54.0')
- def has_tools(self, interpreter, state, args, kwargs):
+ def has_tools(self, state, args, kwargs):
method = kwargs.get('method', 'auto')
disabled, required, feature = extract_required_kwarg(kwargs, state.subproject, default=False)
if disabled:
diff --git a/mesonbuild/modules/sourceset.py b/mesonbuild/modules/sourceset.py
index 15257e7..73cfbe1 100644
--- a/mesonbuild/modules/sourceset.py
+++ b/mesonbuild/modules/sourceset.py
@@ -189,12 +189,11 @@ class SourceSetModule(ExtensionModule):
@FeatureNew('SourceSet module', '0.51.0')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- self.snippets.add('source_set')
@noKwargs
@noPosargs
- def source_set(self, interpreter, state, args, kwargs):
- return SourceSetHolder(interpreter)
+ def source_set(self, state, args, kwargs):
+ return SourceSetHolder(self.interpreter)
def initialize(*args, **kwargs):
return SourceSetModule(*args, **kwargs)
diff --git a/mesonbuild/modules/unstable_icestorm.py b/mesonbuild/modules/unstable_icestorm.py
index 268c394..8746870 100644
--- a/mesonbuild/modules/unstable_icestorm.py
+++ b/mesonbuild/modules/unstable_icestorm.py
@@ -23,7 +23,6 @@ class IceStormModule(ExtensionModule):
@FeatureNew('FPGA/Icestorm Module', '0.45.0')
def __init__(self, interpreter):
super().__init__(interpreter)
- self.snippets.add('project')
self.yosys_bin = None
def detect_binaries(self, interpreter):
@@ -33,9 +32,9 @@ class IceStormModule(ExtensionModule):
self.iceprog_bin = interpreter.find_program_impl(['iceprog'])
self.icetime_bin = interpreter.find_program_impl(['icetime'])
- def project(self, interpreter, state, args, kwargs):
+ def project(self, state, args, kwargs):
if not self.yosys_bin:
- self.detect_binaries(interpreter)
+ self.detect_binaries(self.interpreter)
if not args:
raise mesonlib.MesonException('Project requires at least one argument, which is the project name.')
proj_name = args[0]
@@ -45,11 +44,11 @@ class IceStormModule(ExtensionModule):
kwarg_sources = kwargs.get('sources', [])
if not isinstance(kwarg_sources, list):
kwarg_sources = [kwarg_sources]
- all_sources = interpreter.source_strings_to_files(flatten(arg_sources + kwarg_sources))
+ all_sources = self.interpreter.source_strings_to_files(flatten(arg_sources + kwarg_sources))
if 'constraint_file' not in kwargs:
raise mesonlib.MesonException('Constraint file not specified.')
- constraint_file = interpreter.source_strings_to_files(kwargs['constraint_file'])
+ constraint_file = self.interpreter.source_strings_to_files(kwargs['constraint_file'])
if len(constraint_file) != 1:
raise mesonlib.MesonException('Constraint file must contain one and only one entry.')
blif_name = proj_name + '_blif'
@@ -61,26 +60,26 @@ class IceStormModule(ExtensionModule):
time_name = proj_name + '-time'
upload_name = proj_name + '-upload'
- blif_target = interpreter.func_custom_target(None, [blif_name], {
+ blif_target = self.interpreter.func_custom_target(None, [blif_name], {
'input': all_sources,
'output': blif_fname,
'command': [self.yosys_bin, '-q', '-p', 'synth_ice40 -blif @OUTPUT@', '@INPUT@']})
- asc_target = interpreter.func_custom_target(None, [asc_name], {
+ asc_target = self.interpreter.func_custom_target(None, [asc_name], {
'input': blif_target,
'output': asc_fname,
'command': [self.arachne_bin, '-q', '-d', '1k', '-p', constraint_file, '@INPUT@', '-o', '@OUTPUT@']})
- bin_target = interpreter.func_custom_target(None, [bin_name], {
+ bin_target = self.interpreter.func_custom_target(None, [bin_name], {
'input': asc_target,
'output': bin_fname,
'command': [self.icepack_bin, '@INPUT@', '@OUTPUT@'],
'build_by_default': True})
- interpreter.func_run_target(None, [upload_name], {
+ self.interpreter.func_run_target(None, [upload_name], {
'command': [self.iceprog_bin, bin_target]})
- interpreter.func_run_target(None, [time_name], {
+ self.interpreter.func_run_target(None, [time_name], {
'command': [self.icetime_bin, bin_target]})
def initialize(*args, **kwargs):
diff --git a/mesonbuild/modules/unstable_simd.py b/mesonbuild/modules/unstable_simd.py
index 4c066fb..5f8edfd 100644
--- a/mesonbuild/modules/unstable_simd.py
+++ b/mesonbuild/modules/unstable_simd.py
@@ -23,7 +23,6 @@ class SimdModule(ExtensionModule):
@FeatureNew('SIMD module', '0.42.0')
def __init__(self, interpreter):
super().__init__(interpreter)
- self.snippets.add('check')
# FIXME add Altivec and AVX512.
self.isets = ('mmx',
'sse',
@@ -37,7 +36,7 @@ class SimdModule(ExtensionModule):
'neon',
)
- def check(self, interpreter, state, args, kwargs):
+ def check(self, state, args, kwargs):
result = []
if len(args) != 1:
raise mesonlib.MesonException('Check requires one argument, a name prefix for checks.')
@@ -55,7 +54,7 @@ class SimdModule(ExtensionModule):
compiler = kwargs['compiler'].compiler
if not isinstance(compiler, compilers.compilers.Compiler):
raise mesonlib.MesonException('Compiler argument must be a compiler object.')
- cdata = interpreter.func_configuration_data(None, [], {})
+ cdata = self.interpreter.func_configuration_data(None, [], {})
conf = cdata.held_object
for iset in self.isets:
if iset not in kwargs:
@@ -79,7 +78,7 @@ class SimdModule(ExtensionModule):
old_lang_args = mesonlib.extract_as_list(lib_kwargs, langarg_key)
all_lang_args = old_lang_args + args
lib_kwargs[langarg_key] = all_lang_args
- result.append(interpreter.func_static_lib(None, [libname], lib_kwargs))
+ result.append(self.interpreter.func_static_lib(None, [libname], lib_kwargs))
return [result, cdata]
def initialize(*args, **kwargs):