diff options
| author | Xavier Claessens <xavier.claessens@collabora.com> | 2022-03-28 10:59:01 -0400 |
|---|---|---|
| committer | Xavier Claessens <xclaesse@gmail.com> | 2025-10-29 17:37:55 +0100 |
| commit | a4444c21f3890b4ae18d128864850062d6472ac6 (patch) | |
| tree | ab07416960596d2b738eebae9e8f1e100c0f1ce5 /test cases/snippets | |
| parent | f3aaebde4050c1906d69db20fc9fc2eb5c0c4371 (diff) | |
| download | meson-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/snippets')
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"} + ] +} |
