diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2014-07-26 19:15:46 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2014-07-26 19:15:46 +0300 |
commit | fdbc45eb7f9fae0c48c12498ac62d84c352b0d4d (patch) | |
tree | a20059ec248cb3795d7688b4a09a143e255a8cd0 | |
parent | 01f8a1455e227fa78b8415d5d8aafcfe38911e8e (diff) | |
download | meson-fdbc45eb7f9fae0c48c12498ac62d84c352b0d4d.zip meson-fdbc45eb7f9fae0c48c12498ac62d84c352b0d4d.tar.gz meson-fdbc45eb7f9fae0c48c12498ac62d84c352b0d4d.tar.bz2 |
Can specify individual files from rules that generate multiple outputs.
-rw-r--r-- | ninjabackend.py | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/ninjabackend.py b/ninjabackend.py index 1d72387..a824e0c 100644 --- a/ninjabackend.py +++ b/ninjabackend.py @@ -20,7 +20,7 @@ import dependencies from meson_install import InstallData from build import InvalidArguments from coredata import MesonException -import os, sys, shutil, pickle +import os, sys, shutil, pickle, re if environment.is_windows(): quote_char = '"' @@ -769,6 +769,20 @@ class NinjaBackend(backends.Backend): self.generate_pch_rule_for(langname, compiler, qstr, True, outfile) outfile.write('\n') + def replace_outputs(self, args, private_dir, output_list): + newargs = [] + regex = re.compile('@OUTPUT(\d+)@') + for arg in args: + m = regex.search(arg) + while m is not None: + index = int(m.group(1)) + src = '@OUTPUT%d@' % index + arg = arg.replace(src, os.path.join(private_dir, output_list[index])) + m = regex.search(arg) + newargs.append(arg) + return newargs + + def generate_custom_generator_rules(self, target, outfile): for genlist in target.get_generated_sources(): generator = genlist.get_generator() @@ -788,8 +802,8 @@ class NinjaBackend(backends.Backend): exe_file = exe.get_command() base_args = generator.get_arglist() for i in range(len(infilelist)): - if len(infilelist) == len(outfilelist): - sole_output = os.path.join(self.get_target_private_dir(target), outfilelist[i]) + if len(generator.outputs) == 1: + sole_output = os.path.join(self.get_target_private_dir(target), outfilelist[0]) else: sole_output = '' curfile = infilelist[i] @@ -798,6 +812,7 @@ class NinjaBackend(backends.Backend): outfiles = [os.path.join(self.get_target_private_dir(target), of) for of in outfiles] args = [x.replace("@INPUT@", infilename).replace('@OUTPUT@', sole_output)\ for x in base_args] + args = self.replace_outputs(args, self.get_target_private_dir(target), outfilelist) args = [x.replace("@SOURCE_DIR@", self.environment.get_source_dir()).replace("@BUILD_DIR@", self.get_target_private_dir(target)) for x in args] cmdlist = [exe_file] + args |