diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2017-09-25 13:46:07 -0700 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2017-09-27 22:01:24 +0300 |
commit | dda5e8cadbfdeee3267b1a0943c014e06bcd0100 (patch) | |
tree | 049a70c550729d722e23c67d8312c2eaa820da6f /mesonbuild/interpreter.py | |
parent | dfc2b75ee2dba3245ac23bb3d7f0156e47773ed5 (diff) | |
download | meson-dda5e8cadbfdeee3267b1a0943c014e06bcd0100.zip meson-dda5e8cadbfdeee3267b1a0943c014e06bcd0100.tar.gz meson-dda5e8cadbfdeee3267b1a0943c014e06bcd0100.tar.bz2 |
Allow CustomTarget's to be indexed
This allows a CustomTarget to be indexed, and the resulting indexed
value (a CustomTargetIndex type), to be used as a source in other
targets. This will confer a dependency on the original target, but only
inserts the source file returning by index the original target's
outputs. This can allow a CustomTarget that creates both a header and a
code file to have it's outputs split, for example.
Fixes #1470
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r-- | mesonbuild/interpreter.py | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 2148bed..012370d 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -566,6 +566,11 @@ class JarHolder(BuildTargetHolder): def __init__(self, target, interp): super().__init__(target, interp) +class CustomTargetIndexHolder(InterpreterObject): + def __init__(self, object_to_hold): + super().__init__() + self.held_object = object_to_hold + class CustomTargetHolder(TargetHolder): def __init__(self, object_to_hold, interp): super().__init__() @@ -582,6 +587,15 @@ class CustomTargetHolder(TargetHolder): def full_path_method(self, args, kwargs): return self.interpreter.backend.get_target_filename_abs(self.held_object) + def __getitem__(self, index): + return CustomTargetIndexHolder(self.held_object[index]) + + def __setitem__(self, index, value): + raise InterpreterException('Cannot set a member of a CustomTarget') + + def __delitem__(self, index): + raise InterpreterException('Cannot delete a member of a CustomTarget') + class RunTargetHolder(InterpreterObject): def __init__(self, name, command, args, dependencies, subdir): super().__init__() @@ -2774,7 +2788,7 @@ different subdirectory. results = [] for s in sources: if isinstance(s, (mesonlib.File, GeneratedListHolder, - CustomTargetHolder)): + CustomTargetHolder, CustomTargetIndexHolder)): pass elif isinstance(s, str): s = mesonlib.File.from_source_file(self.environment.source_dir, self.subdir, s) |