Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMartin Hořeňovský2022-06-24 16:26:08 +0200
committerMartin Hořeňovský2022-06-24 16:26:12 +0200
commitbea58bf8bbfca887f871c3aa2d720ba62c01f855 (patch)
treee82e1e72735a9b05b36f33d9af4aa2a7307a1da7
parent34d9724058e02c6447fd7fa2a8e4ff7db0d50588 (diff)
downloadcatch3-bea58bf8bbfca887f871c3aa2d720ba62c01f855.tar.gz
Allow building Catch2 as dynamic library
Also have a check that warns users if they try to combined dynamic library with hidden visibility, which we do not support. Closes #2397 Closes #2398
-rw-r--r--src/CMakeLists.txt23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d00d368b..57978ecb 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -285,9 +285,7 @@ set(REPORTER_SOURCES
)
set(REPORTER_FILES ${REPORTER_HEADERS} ${REPORTER_SOURCES})
-# Fixme: STATIC because for dynamic, we would need to handle visibility
-# and I don't want to do the annotations right now
-add_library(Catch2 STATIC
+add_library(Catch2
${REPORTER_FILES}
${INTERNAL_FILES}
${BENCHMARK_HEADERS}
@@ -340,7 +338,7 @@ target_include_directories(Catch2
)
-add_library(Catch2WithMain STATIC
+add_library(Catch2WithMain
${SOURCES_DIR}/internal/catch_main.cpp
)
add_build_reproducibility_settings(Catch2WithMain)
@@ -431,3 +429,20 @@ endif()
list(APPEND CATCH_WARNING_TARGETS Catch2 Catch2WithMain)
set(CATCH_WARNING_TARGETS ${CATCH_WARNING_TARGETS} PARENT_SCOPE)
+
+
+# We still do not support building dynamic library with hidden visibility
+# so we want to check & warn users if they do this. However, we won't abort
+# the configuration step so that we don't have to also provide an override.
+if (BUILD_SHARED_LIBS)
+ get_target_property(_VisPreset Catch2 CXX_VISIBILITY_PRESET)
+ get_target_property(_ExportAll Catch2 WINDOWS_EXPORT_ALL_SYMBOLS)
+ if (MSVC AND NOT _ExportAll
+ OR _VisPreset STREQUAL "hidden")
+
+ message(WARNING
+ "Catch2 does not support being built as a dynamic library with hidden"
+ " visibility. You have to ensure that visibility is handled yourself."
+ )
+ endif()
+endif()