diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 07b5c4074..c16b6685f 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -32,6 +32,7 @@ from .modules import ModuleReturnValue import os, sys, shutil, uuid import re +from collections import namedtuple import importlib @@ -980,8 +981,11 @@ class CompilerHolder(InterpreterObject): mlog.log('First supported argument:', mlog.red('None')) return [] -class ModuleState: - pass +ModuleState = namedtuple('ModuleState', [ + 'build_to_src', 'subdir', 'environment', 'project_name', + 'project_version', 'compilers', 'targets', 'data', 'headers', + 'man', 'global_args', 'project_args', 'build_machine', + 'host_machine', 'target_machine']) class ModuleHolder(InterpreterObject): def __init__(self, modname, module, interpreter): @@ -1000,23 +1004,24 @@ class ModuleHolder(InterpreterObject): # 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) - state = ModuleState() - state.build_to_src = os.path.relpath(self.interpreter.environment.get_source_dir(), - self.interpreter.environment.get_build_dir()) - state.subdir = self.interpreter.subdir - state.environment = self.interpreter.environment - state.project_name = self.interpreter.build.project_name - state.project_version = self.interpreter.build.dep_manifest[self.interpreter.active_projectname] - state.compilers = self.interpreter.build.compilers - state.targets = self.interpreter.build.targets - state.data = self.interpreter.build.data - state.headers = self.interpreter.build.get_headers() - state.man = self.interpreter.build.get_man() - state.global_args = self.interpreter.build.global_args - state.project_args = self.interpreter.build.projects_args.get(self.interpreter.subproject, {}) - state.build_machine = self.interpreter.builtin['build_machine'].held_object - state.host_machine = self.interpreter.builtin['host_machine'].held_object - state.target_machine = self.interpreter.builtin['target_machine'].held_object + state = ModuleState( + build_to_src=os.path.relpath(self.interpreter.environment.get_source_dir(), + self.interpreter.environment.get_build_dir()), + subdir=self.interpreter.subdir, + environment=self.interpreter.environment, + project_name=self.interpreter.build.project_name, + project_version=self.interpreter.build.dep_manifest[self.interpreter.active_projectname], + compilers=self.interpreter.build.compilers, + targets=self.interpreter.build.targets, + data=self.interpreter.build.data, + headers=self.interpreter.build.get_headers(), + man=self.interpreter.build.get_man(), + global_args=self.interpreter.build.global_args, + project_args=self.interpreter.build.projects_args.get(self.interpreter.subproject, {}), + build_machine=self.interpreter.builtin['build_machine'].held_object, + host_machine=self.interpreter.builtin['host_machine'].held_object, + target_machine=self.interpreter.builtin['target_machine'].held_object, + ) if self.held_object.is_snippet(method_name): value = fn(self.interpreter, state, args, kwargs) return self.interpreter.holderify(value)