diff options
Diffstat (limited to 'meson/test cases/common/55 exe static shared')
8 files changed, 61 insertions, 0 deletions
diff --git a/meson/test cases/common/55 exe static shared/meson.build b/meson/test cases/common/55 exe static shared/meson.build new file mode 100644 index 000000000..69ede5e87 --- /dev/null +++ b/meson/test cases/common/55 exe static shared/meson.build @@ -0,0 +1,15 @@ +project('statchain', 'c') + +subdir('subdir') +# Test that -fPIC in c_args is also accepted (on platforms where it's permitted) +picflag = [] +if not ['darwin', 'windows'].contains(host_machine.system()) + picflag = ['-fPIC'] +endif +statlib2 = static_library('stat2', 'stat2.c', c_args : picflag, pic : false) +# Test that pic is needed for both direct and indirect static library +# dependencies of shared libraries (on Linux and BSD) +statlib = static_library('stat', 'stat.c', link_with : [shlib, statlib2], pic : true) +shlib2 = shared_library('shr2', 'shlib2.c', link_with : statlib) +exe = executable('prog', 'prog.c', link_with : shlib2) +test('runtest', exe) diff --git a/meson/test cases/common/55 exe static shared/prog.c b/meson/test cases/common/55 exe static shared/prog.c new file mode 100644 index 000000000..6dba60d7c --- /dev/null +++ b/meson/test cases/common/55 exe static shared/prog.c @@ -0,0 +1,10 @@ +int shlibfunc2(void); +int statlibfunc(void); + +int main(void) { + if (statlibfunc() != 42) + return 1; + if (shlibfunc2() != 24) + return 1; + return 0; +} diff --git a/meson/test cases/common/55 exe static shared/shlib2.c b/meson/test cases/common/55 exe static shared/shlib2.c new file mode 100644 index 000000000..12bc913d7 --- /dev/null +++ b/meson/test cases/common/55 exe static shared/shlib2.c @@ -0,0 +1,8 @@ +#include "subdir/exports.h" + +int statlibfunc(void); +int statlibfunc2(void); + +int DLL_PUBLIC shlibfunc2(void) { + return statlibfunc() - statlibfunc2(); +} diff --git a/meson/test cases/common/55 exe static shared/stat.c b/meson/test cases/common/55 exe static shared/stat.c new file mode 100644 index 000000000..eddc4d816 --- /dev/null +++ b/meson/test cases/common/55 exe static shared/stat.c @@ -0,0 +1,7 @@ +#include "subdir/exports.h" + +int shlibfunc(void); + +int DLL_PUBLIC statlibfunc(void) { + return shlibfunc(); +} diff --git a/meson/test cases/common/55 exe static shared/stat2.c b/meson/test cases/common/55 exe static shared/stat2.c new file mode 100644 index 000000000..4abb49ffd --- /dev/null +++ b/meson/test cases/common/55 exe static shared/stat2.c @@ -0,0 +1,3 @@ +int statlibfunc2(void) { + return 18; +} diff --git a/meson/test cases/common/55 exe static shared/subdir/exports.h b/meson/test cases/common/55 exe static shared/subdir/exports.h new file mode 100644 index 000000000..c89ccb23b --- /dev/null +++ b/meson/test cases/common/55 exe static shared/subdir/exports.h @@ -0,0 +1,12 @@ +#pragma once + +#if defined _WIN32 || defined __CYGWIN__ + #define DLL_PUBLIC __declspec(dllexport) +#else + #if defined __GNUC__ + #define DLL_PUBLIC __attribute__ ((visibility("default"))) + #else + #pragma message ("Compiler does not support symbol visibility.") + #define DLL_PUBLIC + #endif +#endif diff --git a/meson/test cases/common/55 exe static shared/subdir/meson.build b/meson/test cases/common/55 exe static shared/subdir/meson.build new file mode 100644 index 000000000..2b7393b4e --- /dev/null +++ b/meson/test cases/common/55 exe static shared/subdir/meson.build @@ -0,0 +1 @@ +shlib = shared_library('shar', 'shlib.c') diff --git a/meson/test cases/common/55 exe static shared/subdir/shlib.c b/meson/test cases/common/55 exe static shared/subdir/shlib.c new file mode 100644 index 000000000..dd9c6b2db --- /dev/null +++ b/meson/test cases/common/55 exe static shared/subdir/shlib.c @@ -0,0 +1,5 @@ +#include "exports.h" + +int DLL_PUBLIC shlibfunc(void) { + return 42; +} |