diff options
| author | Jonathon Anderson <anderson.jonathonm@gmail.com> | 2024-07-12 21:55:58 -0500 |
|---|---|---|
| committer | Eli Schwartz <eschwartz93@gmail.com> | 2024-07-15 15:11:20 -0400 |
| commit | 066cf804bb3981db64043dc5f3f03a9d493d27d6 (patch) | |
| tree | 8449df6680fb14fd4cf53fd6f3ad29f97124687a | |
| parent | 6165db80bb0d014d9d1fc0d3f8a9d78e92492b94 (diff) | |
| download | meson-066cf804bb3981db64043dc5f3f03a9d493d27d6.tar.gz | |
tests: Extend cmake test with -Wl,--version-script
This tests that CMake link flags marked as PRIVATE are not propagated
through the generated Meson dependency. -Wl,--version-script is used as
the "poison" here, the build ultimately fails if it appears in the
shared_library() link command.
| -rw-r--r-- | test cases/cmake/2 advanced/main3.cpp | 6 | ||||
| -rw-r--r-- | test cases/cmake/2 advanced/meson.build | 2 | ||||
| -rw-r--r-- | test cases/cmake/2 advanced/slib.cpp | 14 | ||||
| -rw-r--r-- | test cases/cmake/2 advanced/subprojects/cmMod/CMakeLists.txt | 7 | ||||
| -rw-r--r-- | test cases/cmake/2 advanced/subprojects/cmMod/vers.map | 7 |
5 files changed, 36 insertions, 0 deletions
diff --git a/test cases/cmake/2 advanced/main3.cpp b/test cases/cmake/2 advanced/main3.cpp new file mode 100644 index 000000000..a82c9bd1d --- /dev/null +++ b/test cases/cmake/2 advanced/main3.cpp @@ -0,0 +1,6 @@ +extern void slib(); + +int main() { + slib(); + return 0; +} diff --git a/test cases/cmake/2 advanced/meson.build b/test cases/cmake/2 advanced/meson.build index b301bfe42..39da0c6ad 100644 --- a/test cases/cmake/2 advanced/meson.build +++ b/test cases/cmake/2 advanced/meson.build @@ -15,6 +15,8 @@ sub_sta = sub_pro.dependency('cmModLibStatic') # Build some files exe1 = executable('main1', ['main.cpp'], dependencies: [sub_dep]) exe2 = executable('main2', ['main.cpp'], dependencies: [sub_sta]) +slib = shared_library('slib', ['slib.cpp'], dependencies: [sub_dep]) +exe3 = executable('main3', ['main3.cpp'], link_with: slib) test('test1', exe1) test('test2', exe2) diff --git a/test cases/cmake/2 advanced/slib.cpp b/test cases/cmake/2 advanced/slib.cpp new file mode 100644 index 000000000..a3395e5e1 --- /dev/null +++ b/test cases/cmake/2 advanced/slib.cpp @@ -0,0 +1,14 @@ +#include <iostream> +#include <cmMod.hpp> +#include "config.h" + +#if CONFIG_OPT != 42 +#error "Invalid value of CONFIG_OPT" +#endif + +using namespace std; + +void slib(void) { + cmModClass obj("Hello from lib"); + cout << obj.getStr() << endl; +} diff --git a/test cases/cmake/2 advanced/subprojects/cmMod/CMakeLists.txt b/test cases/cmake/2 advanced/subprojects/cmMod/CMakeLists.txt index 075011749..7af9e6b97 100644 --- a/test cases/cmake/2 advanced/subprojects/cmMod/CMakeLists.txt +++ b/test cases/cmake/2 advanced/subprojects/cmMod/CMakeLists.txt @@ -17,6 +17,13 @@ generate_export_header(cmModLib) set_target_properties(cmModLib PROPERTIES VERSION 1.0.1) +include(CheckLinkerFlag) +check_linker_flag(CXX "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/vers.map" HAS_VER_SCRIPT) +if(HAS_VER_SCRIPT) + target_link_options(cmModLib PRIVATE + "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/vers.map") +endif() + add_executable(testEXE main.cpp "${CMAKE_CURRENT_BINARY_DIR}/config.h") target_link_libraries(cmModLib ZLIB::ZLIB) diff --git a/test cases/cmake/2 advanced/subprojects/cmMod/vers.map b/test cases/cmake/2 advanced/subprojects/cmMod/vers.map new file mode 100644 index 000000000..316d05254 --- /dev/null +++ b/test cases/cmake/2 advanced/subprojects/cmMod/vers.map @@ -0,0 +1,7 @@ +{ + global: + extern "C++" { + cmModClass::*; + }; + local: *; +}; |
