diff options
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r-- | mesonbuild/interpreter.py | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 382c04c..bfc1453 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -355,23 +355,27 @@ class BuildMachine(InterpreterObject): def __init__(self, compilers): self.compilers = compilers InterpreterObject.__init__(self) - self.methods.update({'system': self.system_method, - 'cpu_family': self.cpu_family_method, - 'cpu': self.cpu_method, - 'endian': self.endian_method, - }) + self.held_object = environment.MachineInfo(environment.detect_system(), + environment.detect_cpu_family(self.compilers), + environment.detect_cpu(self.compilers), + sys.byteorder) + self.methods.update({'system' : self.system_method, + 'cpu_family' : self.cpu_family_method, + 'cpu' : self.cpu_method, + 'endian' : self.endian_method, + }) def cpu_family_method(self, args, kwargs): - return environment.detect_cpu_family(self.compilers) + return self.held_object.cpu_family def cpu_method(self, args, kwargs): - return environment.detect_cpu(self.compilers) + return self.held_object.cpu def system_method(self, args, kwargs): - return environment.detect_system() + return self.held_object.system def endian_method(self, args, kwargs): - return sys.byteorder + return self.held_object.endian # This class will provide both host_machine and # target_machine @@ -384,23 +388,27 @@ class CrossMachineInfo(InterpreterObject): 'Machine info is currently {}\n'.format(cross_info) + 'but is missing {}.'.format(minimum_cross_info - set(cross_info))) self.info = cross_info - self.methods.update({'system': self.system_method, - 'cpu': self.cpu_method, - 'cpu_family': self.cpu_family_method, - 'endian': self.endian_method, - }) + self.held_object = environment.MachineInfo(cross_info['system'], + cross_info['cpu_family'], + cross_info['cpu'], + cross_info['endian']) + self.methods.update({'system' : self.system_method, + 'cpu' : self.cpu_method, + 'cpu_family' : self.cpu_family_method, + 'endian' : self.endian_method, + }) - def system_method(self, args, kwargs): - return self.info['system'] + def cpu_family_method(self, args, kwargs): + return self.held_object.cpu_family def cpu_method(self, args, kwargs): - return self.info['cpu'] + return self.held_object.cpu - def cpu_family_method(self, args, kwargs): - return self.info['cpu_family'] + def system_method(self, args, kwargs): + return self.held_object.system def endian_method(self, args, kwargs): - return self.info['endian'] + return self.held_object.endian class IncludeDirsHolder(InterpreterObject): def __init__(self, idobj): @@ -1000,6 +1008,10 @@ class ModuleHolder(InterpreterObject): 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.interpreter = self.interpreter value = fn(state, args, kwargs) if num_targets != len(self.interpreter.build.targets): raise InterpreterException('Extension module altered internal state illegally.') @@ -1283,6 +1295,8 @@ class Interpreter(InterpreterBase): # FIXME: This is special cased and not ideal: # The first source is our new VapiTarget, the rest are deps self.process_new_values(v.sources[0]) + elif hasattr(v, 'held_object'): + pass else: raise InterpreterException('Module returned a value of unknown type.') |