summaryrefslogtreecommitdiff
path: root/test cases
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2022-03-28 10:59:01 -0400
committerXavier Claessens <xclaesse@gmail.com>2025-10-29 17:37:55 +0100
commita4444c21f3890b4ae18d128864850062d6472ac6 (patch)
treeab07416960596d2b738eebae9e8f1e100c0f1ce5 /test cases
parentf3aaebde4050c1906d69db20fc9fc2eb5c0c4371 (diff)
downloadmeson-a4444c21f3890b4ae18d128864850062d6472ac6.tar.gz
Add snippets.symbol_visibility_header() method
Defining public API in a cross platform library is painful, especially on Windows. Since every library have to define pretty much the same macros, better do it in Meson.
Diffstat (limited to 'test cases')
-rw-r--r--test cases/snippets/1 symbol visibility header/main-static-only.c3
-rw-r--r--test cases/snippets/1 symbol visibility header/main.c3
-rw-r--r--test cases/snippets/1 symbol visibility header/meson.build13
-rw-r--r--test cases/snippets/1 symbol visibility header/subprojects/sub/meson.build5
-rw-r--r--test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib-static-only.c3
-rw-r--r--test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib-static-only.h3
-rw-r--r--test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib.c3
-rw-r--r--test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib.h3
-rw-r--r--test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/meson.build39
-rw-r--r--test cases/snippets/1 symbol visibility header/test.json15
10 files changed, 90 insertions, 0 deletions
diff --git a/test cases/snippets/1 symbol visibility header/main-static-only.c b/test cases/snippets/1 symbol visibility header/main-static-only.c
new file mode 100644
index 000000000..26f5b060f
--- /dev/null
+++ b/test cases/snippets/1 symbol visibility header/main-static-only.c
@@ -0,0 +1,3 @@
+#include <mylib/lib-static-only.h>
+
+int main(void) { return do_stuff(); }
diff --git a/test cases/snippets/1 symbol visibility header/main.c b/test cases/snippets/1 symbol visibility header/main.c
new file mode 100644
index 000000000..1d32f622e
--- /dev/null
+++ b/test cases/snippets/1 symbol visibility header/main.c
@@ -0,0 +1,3 @@
+#include <mylib/lib.h>
+
+int main(void) { return do_stuff(); }
diff --git a/test cases/snippets/1 symbol visibility header/meson.build b/test cases/snippets/1 symbol visibility header/meson.build
new file mode 100644
index 000000000..9a6c27ae3
--- /dev/null
+++ b/test cases/snippets/1 symbol visibility header/meson.build
@@ -0,0 +1,13 @@
+project('symbol visibility header', 'c')
+
+sta_dep = dependency('mylib-sta', fallback: 'sub')
+exe = executable('exe-sta', 'main.c', dependencies: sta_dep)
+test('test-sta', exe)
+
+sha_dep = dependency('mylib-sha', fallback: 'sub')
+exe = executable('exe-sha', 'main.c', dependencies: sha_dep)
+test('test-sha', exe)
+
+static_only_dep = dependency('static-only', fallback: 'sub')
+exe = executable('exe-static-only', 'main-static-only.c', dependencies: static_only_dep)
+test('test-static-only', exe)
diff --git a/test cases/snippets/1 symbol visibility header/subprojects/sub/meson.build b/test cases/snippets/1 symbol visibility header/subprojects/sub/meson.build
new file mode 100644
index 000000000..83b797019
--- /dev/null
+++ b/test cases/snippets/1 symbol visibility header/subprojects/sub/meson.build
@@ -0,0 +1,5 @@
+project('my lib', 'c')
+
+pkg = import('pkgconfig')
+
+subdir('mylib')
diff --git a/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib-static-only.c b/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib-static-only.c
new file mode 100644
index 000000000..b7662cd94
--- /dev/null
+++ b/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib-static-only.c
@@ -0,0 +1,3 @@
+#include "lib-static-only.h"
+
+int do_stuff(void) { return 0; }
diff --git a/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib-static-only.h b/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib-static-only.h
new file mode 100644
index 000000000..ebe4524a3
--- /dev/null
+++ b/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib-static-only.h
@@ -0,0 +1,3 @@
+#include <mylib/apiconfig-static-only.h>
+
+MY_LIB_API int do_stuff(void);
diff --git a/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib.c b/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib.c
new file mode 100644
index 000000000..117172070
--- /dev/null
+++ b/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib.c
@@ -0,0 +1,3 @@
+#include "lib.h"
+
+int do_stuff(void) { return 0; }
diff --git a/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib.h b/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib.h
new file mode 100644
index 000000000..bea53afb3
--- /dev/null
+++ b/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/lib.h
@@ -0,0 +1,3 @@
+#include <mylib/apiconfig.h>
+
+MY_LIB_API int do_stuff(void);
diff --git a/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/meson.build b/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/meson.build
new file mode 100644
index 000000000..1e7b45e6b
--- /dev/null
+++ b/test cases/snippets/1 symbol visibility header/subprojects/sub/mylib/meson.build
@@ -0,0 +1,39 @@
+snippets = import('snippets')
+
+lib_incdir = include_directories('..')
+lib_args = ['-DMY_LIB_COMPILATION']
+lib_static_args = ['-DMY_LIB_STATIC_COMPILATION']
+
+h = snippets.symbol_visibility_header('apiconfig.h')
+install_headers(h, 'lib.h', subdir: 'mylib')
+mylib = both_libraries('mylib', 'lib.c',
+ include_directories: lib_incdir,
+ gnu_symbol_visibility: 'hidden',
+ c_args: lib_args,
+ c_static_args: lib_static_args,
+ install: true)
+mylib_sta_dep = declare_dependency(link_with: mylib.get_static_lib(),
+ include_directories: lib_incdir,
+ compile_args: lib_static_args)
+mylib_sha_dep = declare_dependency(link_with: mylib.get_shared_lib(),
+ include_directories: lib_incdir)
+meson.override_dependency('mylib-sta', mylib_sta_dep)
+meson.override_dependency('mylib-sha', mylib_sha_dep)
+pkg.generate(mylib,
+ extra_cflags: lib_static_args,
+)
+
+# When using static_only, we don't need lib_static_args because
+# MY_LIB_STATIC_COMPILATION gets defined in the generated header.
+h = snippets.symbol_visibility_header('apiconfig-static-only.h',
+ static_only: true)
+install_headers(h, 'lib-static-only.h', subdir: 'mylib')
+libstaticonly = static_library('static-only', 'lib-static-only.c',
+ include_directories: lib_incdir,
+ gnu_symbol_visibility: 'hidden',
+ c_args: lib_args,
+ install: true)
+static_only_dep = declare_dependency(link_with: libstaticonly,
+ include_directories: lib_incdir)
+meson.override_dependency('static-only', static_only_dep)
+pkg.generate(libstaticonly)
diff --git a/test cases/snippets/1 symbol visibility header/test.json b/test cases/snippets/1 symbol visibility header/test.json
new file mode 100644
index 000000000..0d0be4ec5
--- /dev/null
+++ b/test cases/snippets/1 symbol visibility header/test.json
@@ -0,0 +1,15 @@
+{
+ "installed": [
+ {"type": "file", "file": "usr/include/mylib/apiconfig-static-only.h"},
+ {"type": "file", "file": "usr/include/mylib/apiconfig.h"},
+ {"type": "file", "file": "usr/include/mylib/lib-static-only.h"},
+ {"type": "file", "file": "usr/include/mylib/lib.h"},
+ {"type": "file", "file": "usr/lib/libmylib.a"},
+ {"type": "expr", "file": "usr/lib/?libmylib?so"},
+ {"type": "implib", "file": "usr/lib/libmylib"},
+ {"type": "pdb", "file": "usr/bin/mylib"},
+ {"type": "file", "file": "usr/lib/libstatic-only.a"},
+ {"type": "file", "file": "usr/lib/pkgconfig/mylib.pc"},
+ {"type": "file", "file": "usr/lib/pkgconfig/static-only.pc"}
+ ]
+}