summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/build.py11
-rw-r--r--test cases/common/253 subproject extracted objects/foo.c11
-rw-r--r--test cases/common/253 subproject extracted objects/meson.build5
-rw-r--r--test cases/common/253 subproject extracted objects/subprojects/myobjects/cpplib.cpp6
-rw-r--r--test cases/common/253 subproject extracted objects/subprojects/myobjects/cpplib.h12
-rw-r--r--test cases/common/253 subproject extracted objects/subprojects/myobjects/meson.build3
-rw-r--r--test cases/common/253 subproject extracted objects/test.json5
7 files changed, 49 insertions, 4 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index c626ce5a0..33d91f35e 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -39,7 +39,7 @@ from .mesonlib import (
MesonBugException
)
from .compilers import (
- is_object, clink_langs, sort_clink, lang_suffixes, all_languages,
+ is_object, clink_langs, sort_clink, all_languages,
is_known_suffix, detect_static_linker
)
from .interpreterbase import FeatureNew, FeatureDeprecated
@@ -950,12 +950,15 @@ class BuildTarget(Target):
for o in self.objects:
if not isinstance(o, ExtractedObjects):
continue
- for s in o.srclist:
+ compsrcs = o.classify_all_sources(o.srclist, [])
+ for comp in compsrcs:
# Don't add Vala sources since that will pull in the Vala
# compiler even though we will never use it since we are
# dealing with compiled C code.
- if not s.endswith(lang_suffixes['vala']):
- sources.append(s)
+ if comp.language == 'vala':
+ continue
+ if comp.language not in self.compilers:
+ self.compilers[comp.language] = comp
if sources:
# For each source, try to add one compiler that can compile it.
#
diff --git a/test cases/common/253 subproject extracted objects/foo.c b/test cases/common/253 subproject extracted objects/foo.c
new file mode 100644
index 000000000..f6c7aebe0
--- /dev/null
+++ b/test cases/common/253 subproject extracted objects/foo.c
@@ -0,0 +1,11 @@
+#if defined _WIN32 || defined __CYGWIN__
+ #define DLL_IMPORT __declspec(dllimport)
+#else
+ #define DLL_IMPORT
+#endif
+
+int DLL_IMPORT cppfunc(void);
+
+int otherfunc(void) {
+ return cppfunc() != 42;
+}
diff --git a/test cases/common/253 subproject extracted objects/meson.build b/test cases/common/253 subproject extracted objects/meson.build
new file mode 100644
index 000000000..bad450fab
--- /dev/null
+++ b/test cases/common/253 subproject extracted objects/meson.build
@@ -0,0 +1,5 @@
+project('link to extracted objects', 'c')
+
+sublib = subproject('myobjects').get_variable('sublib')
+
+mainlib = static_library('foo', 'foo.c', install: true, link_with: sublib)
diff --git a/test cases/common/253 subproject extracted objects/subprojects/myobjects/cpplib.cpp b/test cases/common/253 subproject extracted objects/subprojects/myobjects/cpplib.cpp
new file mode 100644
index 000000000..12ef756c7
--- /dev/null
+++ b/test cases/common/253 subproject extracted objects/subprojects/myobjects/cpplib.cpp
@@ -0,0 +1,6 @@
+#define BUILDING_DLL
+#include "cpplib.h"
+
+extern "C" int DLL_PUBLIC cppfunc(void) {
+ return 42;
+}
diff --git a/test cases/common/253 subproject extracted objects/subprojects/myobjects/cpplib.h b/test cases/common/253 subproject extracted objects/subprojects/myobjects/cpplib.h
new file mode 100644
index 000000000..a1c38b3ba
--- /dev/null
+++ b/test cases/common/253 subproject extracted objects/subprojects/myobjects/cpplib.h
@@ -0,0 +1,12 @@
+/* See http://gcc.gnu.org/wiki/Visibility#How_to_use_the_new_C.2B-.2B-_visibility_support */
+#if defined(_WIN32) || defined(__CYGWIN__)
+ #ifdef BUILDING_DLL
+ #define DLL_PUBLIC __declspec(dllexport)
+ #else
+ #define DLL_PUBLIC __declspec(dllimport)
+ #endif
+#else
+ #define DLL_PUBLIC __attribute__ ((visibility ("default")))
+#endif
+
+extern "C" int DLL_PUBLIC cppfunc(void);
diff --git a/test cases/common/253 subproject extracted objects/subprojects/myobjects/meson.build b/test cases/common/253 subproject extracted objects/subprojects/myobjects/meson.build
new file mode 100644
index 000000000..1c2729bc1
--- /dev/null
+++ b/test cases/common/253 subproject extracted objects/subprojects/myobjects/meson.build
@@ -0,0 +1,3 @@
+project('myobjects', 'cpp')
+
+sublib = static_library('sublib', 'cpplib.cpp')
diff --git a/test cases/common/253 subproject extracted objects/test.json b/test cases/common/253 subproject extracted objects/test.json
new file mode 100644
index 000000000..baa5dfb8b
--- /dev/null
+++ b/test cases/common/253 subproject extracted objects/test.json
@@ -0,0 +1,5 @@
+{
+ "installed": [
+ { "type": "file", "file": "usr/lib/libfoo.a" }
+ ]
+}