aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-02-13 00:00:11 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2018-02-27 20:40:41 +0200
commitcb176e930313ff652c16ee6001720830ea5964ea (patch)
treeb2e562ea3116d5984b6a6680936b3ad22faa28f0
parent36fc65527291553bab6292d4b91208bed5aadda3 (diff)
downloadmeson-cb176e930313ff652c16ee6001720830ea5964ea.zip
meson-cb176e930313ff652c16ee6001720830ea5964ea.tar.gz
meson-cb176e930313ff652c16ee6001720830ea5964ea.tar.bz2
Look up compilers based on sources from deps, too. Closes #2768.
-rw-r--r--mesonbuild/build.py12
-rw-r--r--test cases/common/179 source in dep/bar.cpp5
-rw-r--r--test cases/common/179 source in dep/foo.c3
-rw-r--r--test cases/common/179 source in dep/meson.build6
4 files changed, 23 insertions, 3 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index c5fc7f6..c46a69b 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -365,9 +365,9 @@ class BuildTarget(Target):
# 1. Pre-existing objects provided by the user with the `objects:` kwarg
# 2. Compiled objects created by and extracted from another target
self.process_objectlist(objects)
- self.process_compilers()
self.process_kwargs(kwargs, environment)
self.check_unknown_kwargs(kwargs)
+ self.process_compilers()
if not any([self.sources, self.generated, self.objects, self.link_whole]):
raise InvalidArguments('Build target %s has no sources.' % name)
self.process_compilers_late()
@@ -500,6 +500,13 @@ class BuildTarget(Target):
# which is what we need.
if not is_object(s):
sources.append(s)
+ for d in self.external_deps:
+ if hasattr(d, 'held_object'):
+ d = d.held_object
+ for s in d.sources:
+ if isinstance(s, (str, File)):
+ sources.append(s)
+
# Sources that were used to create our extracted objects
for o in self.objects:
if not isinstance(o, ExtractedObjects):
@@ -690,8 +697,7 @@ just like those detected with the dependency() function.''')
raise InvalidArguments('Arguments to d_import_dirs must be include_directories.')
dfeatures['import_dirs'] = dfeature_import_dirs
if dfeatures:
- if 'd' in self.compilers:
- self.d_features = dfeatures
+ self.d_features = dfeatures
self.link_args = extract_as_list(kwargs, 'link_args')
for i in self.link_args:
diff --git a/test cases/common/179 source in dep/bar.cpp b/test cases/common/179 source in dep/bar.cpp
new file mode 100644
index 0000000..bda8cb6
--- /dev/null
+++ b/test cases/common/179 source in dep/bar.cpp
@@ -0,0 +1,5 @@
+extern "C" int foo();
+
+int main(int, char**) {
+ return foo() != 42;
+}
diff --git a/test cases/common/179 source in dep/foo.c b/test cases/common/179 source in dep/foo.c
new file mode 100644
index 0000000..1ecfa8c
--- /dev/null
+++ b/test cases/common/179 source in dep/foo.c
@@ -0,0 +1,3 @@
+int foo() {
+ return 42;
+}
diff --git a/test cases/common/179 source in dep/meson.build b/test cases/common/179 source in dep/meson.build
new file mode 100644
index 0000000..e2c007e
--- /dev/null
+++ b/test cases/common/179 source in dep/meson.build
@@ -0,0 +1,6 @@
+project('foo', 'c', 'cpp')
+
+dep = declare_dependency(sources : 'foo.c')
+
+executable('bar', 'bar.cpp',
+ dependencies : dep)