aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter/interpreter.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/interpreter/interpreter.py')
-rw-r--r--mesonbuild/interpreter/interpreter.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 1f9a99a..523b3e7 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -408,6 +408,7 @@ class Interpreter(InterpreterBase, HoldableObject):
'join_paths': self.func_join_paths,
'library': self.func_library,
'message': self.func_message,
+ 'opaque_target': self.func_opaque_target,
'option': self.func_option,
'project': self.func_project,
'range': self.func_range,
@@ -1984,6 +1985,24 @@ class Interpreter(InterpreterBase, HoldableObject):
self.add_target(tg.name, tg)
return tg
+ def func_opaque_target(self, node: mparser.FunctionNode, args: T.Tuple[str],
+ kwargs: 'kwtypes.OpaqueTarget') -> build.CustomTarget:
+ if len(args) != 1:
+ raise InterpreterException('Opaque_target takes exactly one positional argument.')
+ opaque_data = mesonlib.get_opaque_data(self.subproject, args[0])
+ kwargs['output'] = opaque_data.stamp
+ kwargs['depfile'] = opaque_data.dep
+ integration_args = ['--stamp=@OUTPUT@',
+ '--dep=@DEPFILE@',
+ '--scratch=' + opaque_data.scratch,
+ '--out=' + opaque_data.out,
+ '--']
+ kwargs['command'] = listify(kwargs['command']) + integration_args + kwargs['args']
+ del kwargs['args']
+ ct = self.func_custom_target(node, args, kwargs)
+ ct.is_opaque = True
+ return ct
+
@typed_pos_args('run_target', str)
@typed_kwargs(
'run_target',