|
|
|
@ -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], |
|
|
|
|
) |
|
|
|
|