aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-09-25 19:34:28 +0300
committerGitHub <noreply@github.com>2016-09-25 19:34:28 +0300
commit5fee7331cbb776abe5056ef3c7d89cd01810dd3d (patch)
tree61c8754b9a4e5e28e18f2f83f2d0c2cdba220e1e
parentcb2eff8440ce05ba77e5b02d6ad5afcd9868f04e (diff)
parente23e5c48d7eee9fb519e7a458c18f78389bb0089 (diff)
downloadmeson-5fee7331cbb776abe5056ef3c7d89cd01810dd3d.zip
meson-5fee7331cbb776abe5056ef3c7d89cd01810dd3d.tar.gz
meson-5fee7331cbb776abe5056ef3c7d89cd01810dd3d.tar.bz2
Merge pull request #794 from mesonbuild/allgen
A target that has only generated sources
-rw-r--r--mesonbuild/backend/ninjabackend.py5
-rwxr-xr-xtest cases/common/118 allgenerate/converter.py8
-rw-r--r--test cases/common/118 allgenerate/foobar.cpp.in6
-rw-r--r--test cases/common/118 allgenerate/meson.build20
4 files changed, 38 insertions, 1 deletions
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/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.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<stdio.h>
+
+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..1ec93e6
--- /dev/null
+++ b/test cases/common/118 allgenerate/meson.build
@@ -0,0 +1,20 @@
+# 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@.cpp',
+ arguments : ['@INPUT@', '@OUTPUT@'])
+
+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