summaryrefslogtreecommitdiffstats
path: root/test cases/common/55 exe static shared
diff options
context:
space:
mode:
Diffstat (limited to 'test cases/common/55 exe static shared')
-rw-r--r--test cases/common/55 exe static shared/meson.build15
-rw-r--r--test cases/common/55 exe static shared/prog.c10
-rw-r--r--test cases/common/55 exe static shared/shlib2.c8
-rw-r--r--test cases/common/55 exe static shared/stat.c7
-rw-r--r--test cases/common/55 exe static shared/stat2.c3
-rw-r--r--test cases/common/55 exe static shared/subdir/exports.h12
-rw-r--r--test cases/common/55 exe static shared/subdir/meson.build1
-rw-r--r--test cases/common/55 exe static shared/subdir/shlib.c5
8 files changed, 61 insertions, 0 deletions
diff --git a/test cases/common/55 exe static shared/meson.build b/test cases/common/55 exe static shared/meson.build
new file mode 100644
index 0000000..69ede5e
--- /dev/null
+++ b/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/test cases/common/55 exe static shared/prog.c b/test cases/common/55 exe static shared/prog.c
new file mode 100644
index 0000000..6dba60d
--- /dev/null
+++ b/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/test cases/common/55 exe static shared/shlib2.c b/test cases/common/55 exe static shared/shlib2.c
new file mode 100644
index 0000000..12bc913
--- /dev/null
+++ b/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/test cases/common/55 exe static shared/stat.c b/test cases/common/55 exe static shared/stat.c
new file mode 100644
index 0000000..eddc4d8
--- /dev/null
+++ b/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/test cases/common/55 exe static shared/stat2.c b/test cases/common/55 exe static shared/stat2.c
new file mode 100644
index 0000000..4abb49f
--- /dev/null
+++ b/test cases/common/55 exe static shared/stat2.c
@@ -0,0 +1,3 @@
+int statlibfunc2(void) {
+ return 18;
+}
diff --git a/test cases/common/55 exe static shared/subdir/exports.h b/test cases/common/55 exe static shared/subdir/exports.h
new file mode 100644
index 0000000..c89ccb2
--- /dev/null
+++ b/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/test cases/common/55 exe static shared/subdir/meson.build b/test cases/common/55 exe static shared/subdir/meson.build
new file mode 100644
index 0000000..2b7393b
--- /dev/null
+++ b/test cases/common/55 exe static shared/subdir/meson.build
@@ -0,0 +1 @@
+shlib = shared_library('shar', 'shlib.c')
diff --git a/test cases/common/55 exe static shared/subdir/shlib.c b/test cases/common/55 exe static shared/subdir/shlib.c
new file mode 100644
index 0000000..dd9c6b2
--- /dev/null
+++ b/test cases/common/55 exe static shared/subdir/shlib.c
@@ -0,0 +1,5 @@
+#include "exports.h"
+
+int DLL_PUBLIC shlibfunc(void) {
+ return 42;
+}