From 5f6c9d628df72f43b15412bbb91e110d4881023e Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sat, 17 Sep 2016 22:07:41 +0300 Subject: A target where all sources are generated. --- test cases/common/118 allgenerate/converter.py | 8 ++++++++ test cases/common/118 allgenerate/foobar.c.in | 6 ++++++ test cases/common/118 allgenerate/meson.build | 11 +++++++++++ 3 files changed, 25 insertions(+) create mode 100755 test cases/common/118 allgenerate/converter.py create mode 100644 test cases/common/118 allgenerate/foobar.c.in create mode 100644 test cases/common/118 allgenerate/meson.build diff --git a/test cases/common/118 allgenerate/converter.py b/test cases/common/118 allgenerate/converter.py new file mode 100755 index 0000000..f8e2ca0 --- /dev/null +++ b/test cases/common/118 allgenerate/converter.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python3 + +import sys + +ifile = sys.argv[1] +ofile = sys.argv[2] + +open(ofile, 'w').write(open(ifile).read()) diff --git a/test cases/common/118 allgenerate/foobar.c.in b/test cases/common/118 allgenerate/foobar.c.in new file mode 100644 index 0000000..c64f3b5 --- /dev/null +++ b/test cases/common/118 allgenerate/foobar.c.in @@ -0,0 +1,6 @@ +#include + +int main(int argc, char **argv) { + printf("I am a program.\n"); + return 0; +} diff --git a/test cases/common/118 allgenerate/meson.build b/test cases/common/118 allgenerate/meson.build new file mode 100644 index 0000000..98ecabf --- /dev/null +++ b/test cases/common/118 allgenerate/meson.build @@ -0,0 +1,11 @@ +project('all sources generated', 'cpp') + +comp = find_program('converter.py') + +c = custom_target('outputfile', + input : 'foobar.c.in', + output : 'foobar.cpp', + command : [comp, '@INPUT@', '@OUTPUT@'], +) + +prog = executable('genexe', c) -- cgit v1.1 From 5f90aac4edd89953c3a4d9941165556dba59b2a1 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sat, 17 Sep 2016 22:12:24 +0300 Subject: With a generator. --- test cases/common/118 allgenerate/meson.build | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test cases/common/118 allgenerate/meson.build b/test cases/common/118 allgenerate/meson.build index 98ecabf..93428d6 100644 --- a/test cases/common/118 allgenerate/meson.build +++ b/test cases/common/118 allgenerate/meson.build @@ -1,11 +1,11 @@ -project('all sources generated', 'cpp') +project('all sources generated', 'c') comp = find_program('converter.py') -c = custom_target('outputfile', - input : 'foobar.c.in', - output : 'foobar.cpp', - command : [comp, '@INPUT@', '@OUTPUT@'], -) +g = generator(comp, + output : '@BASENAME@.c', + arguments : ['@INPUT@', '@OUTPUT@']) + +c = g.process('foobar.c.in') prog = executable('genexe', c) -- cgit v1.1 From e23e5c48d7eee9fb519e7a458c18f78389bb0089 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sat, 17 Sep 2016 22:31:03 +0300 Subject: Use custom target outputs to determine linker. Closes #786. --- mesonbuild/backend/ninjabackend.py | 5 ++++- test cases/common/118 allgenerate/foobar.c.in | 6 ------ test cases/common/118 allgenerate/foobar.cpp.in | 6 ++++++ test cases/common/118 allgenerate/meson.build | 15 ++++++++++++--- 4 files changed, 22 insertions(+), 10 deletions(-) delete mode 100644 test cases/common/118 allgenerate/foobar.c.in create mode 100644 test cases/common/118 allgenerate/foobar.cpp.in diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index db9e1b0..251f7ee 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -264,10 +264,12 @@ int dummy; unity_src = [] unity_deps = [] # Generated sources that must be built before compiling a Unity target. header_deps += self.get_generated_headers(target) + generator_output_sources = [] # Needed to determine the linker for gensource in target.get_generated_sources(): if isinstance(gensource, build.CustomTarget): for src in gensource.output: src = os.path.join(self.get_target_dir(gensource), src) + generator_output_sources.append(src) if self.environment.is_source(src) and not self.environment.is_header(src): if is_unity: unity_deps.append(os.path.join(self.environment.get_build_dir(), RawFilename(src))) @@ -285,6 +287,7 @@ int dummy; header_deps.append(RawFilename(src)) else: for src in gensource.get_outfilelist(): + generator_output_sources.append(src) if self.environment.is_object(src): obj_list.append(os.path.join(self.get_target_private_dir(target), src)) elif not self.environment.is_header(src): @@ -330,7 +333,7 @@ int dummy; if is_unity: for src in self.generate_unity_files(target, unity_src): obj_list.append(self.generate_single_compile(target, outfile, src, True, unity_deps + header_deps)) - linker = self.determine_linker(target, src_list) + linker = self.determine_linker(target, src_list + generator_output_sources) elem = self.generate_link(target, outfile, outname, obj_list, linker, pch_objects) self.generate_shlib_aliases(target, self.get_target_dir(target)) elem.write(outfile) diff --git a/test cases/common/118 allgenerate/foobar.c.in b/test cases/common/118 allgenerate/foobar.c.in deleted file mode 100644 index c64f3b5..0000000 --- a/test cases/common/118 allgenerate/foobar.c.in +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int main(int argc, char **argv) { - printf("I am a program.\n"); - return 0; -} diff --git a/test cases/common/118 allgenerate/foobar.cpp.in b/test cases/common/118 allgenerate/foobar.cpp.in new file mode 100644 index 0000000..c64f3b5 --- /dev/null +++ b/test cases/common/118 allgenerate/foobar.cpp.in @@ -0,0 +1,6 @@ +#include + +int main(int argc, char **argv) { + printf("I am a program.\n"); + return 0; +} diff --git a/test cases/common/118 allgenerate/meson.build b/test cases/common/118 allgenerate/meson.build index 93428d6..1ec93e6 100644 --- a/test cases/common/118 allgenerate/meson.build +++ b/test cases/common/118 allgenerate/meson.build @@ -1,11 +1,20 @@ -project('all sources generated', 'c') +# Must have two languages here to exercise linker language +# selection bug +project('all sources generated', 'c', 'cpp') comp = find_program('converter.py') g = generator(comp, - output : '@BASENAME@.c', + output : '@BASENAME@.cpp', arguments : ['@INPUT@', '@OUTPUT@']) -c = g.process('foobar.c.in') +c = g.process('foobar.cpp.in') prog = executable('genexe', c) + +c2 = custom_target('c2gen', + output : 'c2gen.cpp', + input : 'foobar.cpp.in', + command : [comp, '@INPUT@', '@OUTPUT@']) + +prog2 = executable('genexe2', c2) \ No newline at end of file -- cgit v1.1