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 | |
| 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')
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"} + ] +} |
