diff options
Diffstat (limited to 'interpreter.py')
-rw-r--r-- | interpreter.py | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/interpreter.py b/interpreter.py index 2d86454..5da6d8b 100644 --- a/interpreter.py +++ b/interpreter.py @@ -449,15 +449,22 @@ class GeneratedObjectsHolder(InterpreterObject): self.held_object = held_object class BuildTargetHolder(InterpreterObject): - def __init__(self, target): + def __init__(self, target, interp): super().__init__() self.held_object = target + self.interpreter = interp self.methods.update({'extract_objects' : self.extract_objects_method, - 'extract_all_objects' : self.extract_all_objects_method}) + 'extract_all_objects' : self.extract_all_objects_method, + 'get_id': self.get_id_method, + 'outdir' : self.outdir_method, + }) def is_cross(self): return self.held_object.is_cross() + def outdir_method(self, args, kwargs): + return self.interpreter.backend.get_target_dir(self.held_object) + def extract_objects_method(self, args, kwargs): gobjs = self.held_object.extract_objects(args) return GeneratedObjectsHolder(gobjs) @@ -466,21 +473,24 @@ class BuildTargetHolder(InterpreterObject): gobjs = self.held_object.extract_all_objects() return GeneratedObjectsHolder(gobjs) + def get_id_method(self, args, kwargs): + return self.held_object.get_id() + class ExecutableHolder(BuildTargetHolder): - def __init__(self, target): - super().__init__(target) + def __init__(self, target, interp): + super().__init__(target, interp) class StaticLibraryHolder(BuildTargetHolder): - def __init__(self, target): - super().__init__(target) + def __init__(self, target, interp): + super().__init__(target, interp) class SharedLibraryHolder(BuildTargetHolder): - def __init__(self, target): - super().__init__(target) + def __init__(self, target, interp): + super().__init__(target, interp) class JarHolder(BuildTargetHolder): - def __init__(self, target): - super().__init__(target) + def __init__(self, target, interp): + super().__init__(target, interp) class CustomTargetHolder(InterpreterObject): def __init__(self, object_to_hold): @@ -806,8 +816,9 @@ class MesonMain(InterpreterObject): class Interpreter(): - def __init__(self, build, subproject='', subdir='', subproject_dir='subprojects'): + def __init__(self, build, backend, subproject='', subdir='', subproject_dir='subprojects'): self.build = build + self.backend = backend self.subproject = subproject self.subdir = subdir self.source_root = build.environment.get_source_dir() @@ -1176,7 +1187,7 @@ class Interpreter(): os.makedirs(os.path.join(self.build.environment.get_build_dir(), subdir), exist_ok=True) self.global_args_frozen = True mlog.log('\nExecuting subproject ', mlog.bold(dirname), '.\n', sep='') - subi = Interpreter(self.build, dirname, subdir, self.subproject_dir) + subi = Interpreter(self.build, self.backend, dirname, subdir, self.subproject_dir) subi.subprojects = self.subprojects subi.subproject_stack = self.subproject_stack + [dirname] @@ -1727,7 +1738,7 @@ class Interpreter(): mlog.debug('Unknown target type:', str(targetholder)) raise RuntimeError('Unreachable code') target = targetclass(name, self.subdir, self.subproject, is_cross, sources, objs, self.environment, kwargs) - l = targetholder(target) + l = targetholder(target, self) self.add_target(name, l.held_object) self.global_args_frozen = True return l |