aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
Diffstat (limited to 'interpreter.py')
-rw-r--r--interpreter.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/interpreter.py b/interpreter.py
index f732923..03ee59d 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -372,6 +372,17 @@ class JarHolder(BuildTargetHolder):
def __init__(self, name, subdir, is_cross, sources, objects, environment, kwargs):
super().__init__(build.Jar, name, subdir, is_cross, sources, objects, environment, kwargs)
+class CustomTargetHolder(InterpreterObject):
+ def __init__(self, name, subdir, kwargs):
+ self.held_object = build.CustomTarget(name, subdir, kwargs)
+
+ def is_cross(self):
+ return self.held_object.is_cross()
+
+ def extract_objects_method(self, args, kwargs):
+ gobjs = self.held_object.extract_objects(args)
+ return GeneratedObjectsHolder(gobjs)
+
class Test(InterpreterObject):
def __init__(self, name, exe, is_parallel, cmd_args, env):
InterpreterObject.__init__(self)
@@ -647,6 +658,7 @@ class Interpreter():
'static_library' : self.func_static_lib,
'shared_library' : self.func_shared_lib,
'jar' : self.func_jar,
+ 'custom_target' : self.func_custom_target,
'generator' : self.func_generator,
'test' : self.func_test,
'headers' : self.func_headers,
@@ -1007,6 +1019,21 @@ class Interpreter():
def func_jar(self, node, args, kwargs):
return self.build_target(node, args, kwargs, JarHolder)
+
+ def func_custom_target(self, node, args, kwargs):
+ if len(args) != 1:
+ raise InterpreterException('Incorrect number of arguments')
+ name = args[0]
+ if not isinstance(name, str):
+ raise InterpreterException('Argument must be a string.')
+ if name in coredata.forbidden_target_names:
+ raise InvalidArguments('Target name "%s" is reserved for Meson\'s internal use. Please rename.'\
+ % name)
+ if name in self.build.targets:
+ raise InvalidCode('Tried to create target "%s", but a target of that name already exists.' % name)
+ tg = CustomTargetHolder(name, self.subdir, kwargs)
+ self.build.targets[name] = tg.held_object
+ return tg
def func_generator(self, node, args, kwargs):
gen = GeneratorHolder(args, kwargs)