diff options
-rw-r--r-- | mesonbuild/interpreter/interpreterobjects.py | 21 | ||||
-rw-r--r-- | mesonbuild/interpreterbase.py | 7 | ||||
-rw-r--r-- | mesonbuild/modules/__init__.py | 2 | ||||
-rw-r--r-- | mesonbuild/modules/cmake.py | 14 | ||||
-rw-r--r-- | mesonbuild/modules/dlang.py | 3 | ||||
-rw-r--r-- | mesonbuild/modules/fs.py | 1 | ||||
-rw-r--r-- | mesonbuild/modules/keyval.py | 11 | ||||
-rw-r--r-- | mesonbuild/modules/python.py | 5 | ||||
-rw-r--r-- | mesonbuild/modules/python3.py | 5 | ||||
-rw-r--r-- | mesonbuild/modules/qt.py | 3 | ||||
-rw-r--r-- | mesonbuild/modules/sourceset.py | 5 | ||||
-rw-r--r-- | mesonbuild/modules/unstable_icestorm.py | 19 | ||||
-rw-r--r-- | mesonbuild/modules/unstable_simd.py | 7 |
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): |