From 154dc839739909bf889b3f438f43a9ff0e3eb608 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sat, 20 Sep 2014 22:14:38 +0300 Subject: Multiple generated sources in one target now work. --- ninjabackend.py | 30 +++++++++++----------- test cases/common/65 multiple generators/data2.dat | 1 + test cases/common/65 multiple generators/main.cpp | 6 +++++ .../common/65 multiple generators/meson.build | 13 ++++++++++ test cases/common/65 multiple generators/mygen.py | 19 ++++++++++++++ .../common/65 multiple generators/subdir/data.dat | 1 + .../65 multiple generators/subdir/meson.build | 4 +++ 7 files changed, 59 insertions(+), 15 deletions(-) create mode 100644 test cases/common/65 multiple generators/data2.dat create mode 100644 test cases/common/65 multiple generators/main.cpp create mode 100644 test cases/common/65 multiple generators/meson.build create mode 100755 test cases/common/65 multiple generators/mygen.py create mode 100644 test cases/common/65 multiple generators/subdir/data.dat create mode 100644 test cases/common/65 multiple generators/subdir/meson.build diff --git a/ninjabackend.py b/ninjabackend.py index 616041ecc..d9a9b5b63 100644 --- a/ninjabackend.py +++ b/ninjabackend.py @@ -211,22 +211,22 @@ class NinjaBackend(backends.Backend): # people generate files with weird suffixes (.inc, .fh) that they then include # in their source files. header_deps.append(RawFilename(src)) - break # just to cut down on indentation size - for src in gensource.get_outfilelist(): - if self.environment.is_object(src): - obj_list.append(os.path.join(self.get_target_dir(target), target.get_basename() + '.dir', src)) - elif not self.environment.is_header(src): - if is_unity: - if '/' in src: - rel_src = src + else: + for src in gensource.get_outfilelist(): + if self.environment.is_object(src): + obj_list.append(os.path.join(self.get_target_dir(target), target.get_basename() + '.dir', src)) + elif not self.environment.is_header(src): + if is_unity: + if '/' in src: + rel_src = src + else: + rel_src = os.path.join(self.get_target_private_dir(target), src) + unity_deps.append(rel_src) + abs_src = os.path.join(self.environment.get_build_dir(), rel_src) + unity_src.append(abs_src) else: - rel_src = os.path.join(self.get_target_private_dir(target), src) - unity_deps.append(rel_src) - abs_src = os.path.join(self.environment.get_build_dir(), rel_src) - unity_src.append(abs_src) - else: - obj_list.append(self.generate_single_compile(target, outfile, src, True, - header_deps=header_deps)) + obj_list.append(self.generate_single_compile(target, outfile, src, True, + header_deps=header_deps)) src_list = [] for src in gen_src_deps: src_list.append(src) diff --git a/test cases/common/65 multiple generators/data2.dat b/test cases/common/65 multiple generators/data2.dat new file mode 100644 index 000000000..0cfbf0888 --- /dev/null +++ b/test cases/common/65 multiple generators/data2.dat @@ -0,0 +1 @@ +2 diff --git a/test cases/common/65 multiple generators/main.cpp b/test cases/common/65 multiple generators/main.cpp new file mode 100644 index 000000000..527706355 --- /dev/null +++ b/test cases/common/65 multiple generators/main.cpp @@ -0,0 +1,6 @@ +#include"source1.h" +#include"source2.h" + +int main(int argc, char **argv) { + return func1() + func2(); +} diff --git a/test cases/common/65 multiple generators/meson.build b/test cases/common/65 multiple generators/meson.build new file mode 100644 index 000000000..969610be3 --- /dev/null +++ b/test cases/common/65 multiple generators/meson.build @@ -0,0 +1,13 @@ +project('trickier generator', 'cpp') + +comp = find_program('mygen.py') +subdir('subdir') + +generated2 = custom_target('generated2', +output : ['source2.h', 'source2.cpp'], +input : 'data2.dat', +command : [comp, '@INPUT0@', meson.current_build_dir()]) + +exe = executable('prog', 'main.cpp', generated, generated2, +include_directories : include_directories('subdir', '.')) +test('generated test', exe) diff --git a/test cases/common/65 multiple generators/mygen.py b/test cases/common/65 multiple generators/mygen.py new file mode 100755 index 000000000..06fe0321b --- /dev/null +++ b/test cases/common/65 multiple generators/mygen.py @@ -0,0 +1,19 @@ +#!/usr/bin/python3 + +import sys, os + +if len(sys.argv) != 3: + print("You is fail.") + sys.exit(1) + +val = open(sys.argv[1]).read().strip() +outdir = sys.argv[2] + +outhdr = os.path.join(outdir, 'source%s.h' % val) +outsrc = os.path.join(outdir, 'source%s.cpp' % val) + +open(outhdr, 'w').write('int func%s();\n' % val) +open(outsrc, 'w').write('''int func%s() { + return 0; +} +''' % val) \ No newline at end of file diff --git a/test cases/common/65 multiple generators/subdir/data.dat b/test cases/common/65 multiple generators/subdir/data.dat new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/test cases/common/65 multiple generators/subdir/data.dat @@ -0,0 +1 @@ +1 diff --git a/test cases/common/65 multiple generators/subdir/meson.build b/test cases/common/65 multiple generators/subdir/meson.build new file mode 100644 index 000000000..49c62484c --- /dev/null +++ b/test cases/common/65 multiple generators/subdir/meson.build @@ -0,0 +1,4 @@ +generated = custom_target('generated', +output : ['source1.h', 'source1.cpp'], +input : 'data.dat', +command : [comp, '@INPUT0@', meson.current_build_dir()]) -- cgit v1.2.3