aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend/ninjabackend.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2020-04-13 21:17:56 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2020-05-10 19:03:42 +0300
commit3a4a94d28d47bd142a27e53a5a0670fcf1dae5c4 (patch)
tree7ad17c5aa2fad8290734869d29dc962675ecaebb /mesonbuild/backend/ninjabackend.py
parent8c144adc7a32f23e63eb85b989739adf476d04b4 (diff)
downloadmeson-gentarget.zip
meson-gentarget.tar.gz
meson-gentarget.tar.bz2
Add just enough backend to make the simple case work.gentarget
Diffstat (limited to 'mesonbuild/backend/ninjabackend.py')
-rw-r--r--mesonbuild/backend/ninjabackend.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 9b895c9..b79c8eb 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -483,8 +483,13 @@ int dummy;
def generate_target(self, target):
if isinstance(target, build.CustomTarget):
self.generate_custom_target(target)
+ return
if isinstance(target, build.RunTarget):
self.generate_run_target(target)
+ return
+ if isinstance(target, build.GeneratorTarget):
+ self.generate_generatortarget_target(target)
+ return
name = target.get_id()
if name in self.processed_targets:
return
@@ -705,6 +710,35 @@ int dummy;
self.add_build(elem)
self.processed_targets[target.get_id()] = True
+ def generate_generatortarget_target(self, target):
+ '''Brought to you by the department of redundancy department.'''
+ self.processed_targets[target.get_id()] = True
+ assert(target.output.owning_gentarget is target)
+ genlist = target.output
+ generator = target.generator
+ assert(generator is genlist.get_generator())
+ # FIXME. start simple, add multiple outputs later.
+ assert(len(genlist.get_outputs()) == len(genlist.get_inputs()))
+ # A generatortarget is special compared to other target types.
+ # Its output goes to a named subdirectory in the build dir
+ # that can contain an arbitrary number of files and subdirs.
+ output_subdir = os.path.join(target.subdir, target.name)
+ for input in genlist.get_inputs():
+ ifile_str = input.rel_to_builddir(self.build_to_src)
+ cmd = generator.get_exe().get_command() + generator.get_arglist(ifile_str)
+ outputs = os.path.join(output_subdir, genlist.get_outputs_for(input)[0])
+ e = NinjaBuildElement(self.all_outputs, outputs, 'CUSTOM_COMMAND', ifile_str)
+ # HACK, just to get something working.
+ cmd2 = []
+ for c in cmd:
+ if c == '@INPUT@':
+ c = ifile_str
+ if c == '@OUTPUT@':
+ c = outputs
+ cmd2.append(c)
+ e.add_item('COMMAND', cmd2)
+ self.add_build(e)
+
def build_run_target_name(self, target):
if target.subproject != '':
subproject_prefix = '{}@@'.format(target.subproject)