diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2014-05-19 00:59:35 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2014-05-19 00:59:35 +0300 |
commit | 2ecd2ea65a3c3a81e83d298ed815984b4107b9da (patch) | |
tree | 5523c690552a8478cbde77be5d3736aecd33f70b /interpreter.py | |
parent | bc9444e1e0bbdc5d4ac86d678de2c626eac41b78 (diff) | |
download | meson-2ecd2ea65a3c3a81e83d298ed815984b4107b9da.zip meson-2ecd2ea65a3c3a81e83d298ed815984b4107b9da.tar.gz meson-2ecd2ea65a3c3a81e83d298ed815984b4107b9da.tar.bz2 |
Can define custom targets.
Diffstat (limited to 'interpreter.py')
-rw-r--r-- | interpreter.py | 27 |
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) |