aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2017-04-22 01:00:07 +0530
committerNirbheek Chauhan <nirbheek@centricular.com>2017-04-22 01:00:07 +0530
commit35ffb1a7c262acbcd15e532855471b0cb38379b5 (patch)
treec7589f1214f24537fb254ab7eafb8e803ead8123
parent0ebf79ec8b74c8cbb1ea96fff740a8dfd80340b1 (diff)
downloadmeson-35ffb1a7c262acbcd15e532855471b0cb38379b5.zip
meson-35ffb1a7c262acbcd15e532855471b0cb38379b5.tar.gz
meson-35ffb1a7c262acbcd15e532855471b0cb38379b5.tar.bz2
tests/common/146: Also test against external C++ libs
-rw-r--r--test cases/common/146 C and CPP link/meson.build40
1 files changed, 37 insertions, 3 deletions
diff --git a/test cases/common/146 C and CPP link/meson.build b/test cases/common/146 C and CPP link/meson.build
index 6f68bac..583bd54 100644
--- a/test cases/common/146 C and CPP link/meson.build
+++ b/test cases/common/146 C and CPP link/meson.build
@@ -14,11 +14,45 @@
project('C and C++ static link test', ['c', 'cpp'])
-libcppfoo = static_library('cppfoo', ['foo.cpp', 'foo.hpp'])
-libcfoo = static_library('cfoo', ['foo.c', 'foo.h'])
+libc = static_library('cfoo', ['foo.c', 'foo.h'])
+
+# Test that linking C libs to external static C++ libs uses the C++ linker
+# Since we can't depend on the test system to provide this, we create one
+# ourselves at configure time and then 'find' it with cxx.find_library().
+cxx = meson.get_compiler('cpp')
+
+if cxx.get_id() == 'msvc'
+ compile_cmd = ['/c', '@INPUT@', '/Fo@OUTPUT@']
+ stlib_cmd = ['lib', '/OUT:@OUTPUT@', '@INPUT@']
+else
+ compile_cmd = ['-c', '-fPIC', '@INPUT@', '-o', '@OUTPUT@']
+ stlib_cmd = ['ar', 'csr', '@OUTPUT@', '@INPUT@']
+endif
+
+foo_cpp_o = configure_file(
+ input : 'foo.cpp',
+ output : 'foo.cpp.o',
+ command : cxx.cmd_array() + compile_cmd)
+
+configure_file(
+ input : foo_cpp_o,
+ output : 'libstcppext.a',
+ command : stlib_cmd)
+
+libstcppext = cxx.find_library('stcppext', dirs : meson.current_build_dir())
+
+libfooext = shared_library(
+ 'fooext',
+ ['foobar.c', 'foobar.h'],
+ link_with : libc,
+ dependencies : libstcppext,
+)
+
+# Test that linking C libs to internal static C++ libs uses the C++ linker
+libcpp = static_library('cppfoo', ['foo.cpp', 'foo.hpp'])
libfoo = shared_library(
'foo',
['foobar.c', 'foobar.h'],
- link_with : [libcfoo, libcppfoo],
+ link_with : [libc, libcpp],
)