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

summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDimitrij Mijoski2022-09-17 14:58:52 +0200
committerMartin Hořeňovský2022-09-24 15:15:50 +0200
commitc0e582e65955f84312548bcee36b962a013f262f (patch)
tree3b645976db206e81fef51f490faf98c3cf63278c
parent0de60d8e7ead1ddd5ba8c46b901c122eac20bf94 (diff)
downloadcatch3-c0e582e65955f84312548bcee36b962a013f262f.tar.gz
Fix building as shared library with MSVC.
-rw-r--r--CMake/CatchConfigOptions.cmake1
-rw-r--r--src/CMakeLists.txt4
-rw-r--r--src/catch2/catch_tostring.hpp4
-rw-r--r--src/catch2/catch_user_config.hpp.in2
-rw-r--r--src/catch2/internal/catch_compiler_capabilities.hpp10
-rw-r--r--src/catch2/internal/catch_context.hpp4
6 files changed, 22 insertions, 3 deletions
diff --git a/CMake/CatchConfigOptions.cmake b/CMake/CatchConfigOptions.cmake
index a8ae93d4..f8114a04 100644
--- a/CMake/CatchConfigOptions.cmake
+++ b/CMake/CatchConfigOptions.cmake
@@ -67,6 +67,7 @@ set(_OtherConfigOptions
foreach(OptionName ${_OtherConfigOptions})
AddConfigOption(${OptionName})
endforeach()
+set(CATCH_CONFIG_SHARED_LIBRARY ${BUILD_SHARED_LIBS})
set(CATCH_CONFIG_DEFAULT_REPORTER "console" CACHE STRING "Read docs/configuration.md for details. The name of the reporter should be without quotes.")
set(CATCH_CONFIG_CONSOLE_WIDTH "80" CACHE STRING "Read docs/configuration.md for details. Must form a valid integer literal.")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c76a96d5..81480217 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -409,6 +409,10 @@ if (CATCH_BUILD_EXAMPLES OR CATCH_BUILD_EXTRA_TESTS)
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/generated-includes>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
+ target_compile_definitions(Catch2_buildall_interface
+ INTERFACE
+ CATCH_CONFIG_STATIC
+ )
target_compile_features(Catch2_buildall_interface
INTERFACE
cxx_alignas
diff --git a/src/catch2/catch_tostring.hpp b/src/catch2/catch_tostring.hpp
index 964c8a66..235dec3b 100644
--- a/src/catch2/catch_tostring.hpp
+++ b/src/catch2/catch_tostring.hpp
@@ -296,13 +296,13 @@ namespace Catch {
template<>
struct StringMaker<float> {
static std::string convert(float value);
- static int precision;
+ CATCH_EXPORT static int precision;
};
template<>
struct StringMaker<double> {
static std::string convert(double value);
- static int precision;
+ CATCH_EXPORT static int precision;
};
template <typename T>
diff --git a/src/catch2/catch_user_config.hpp.in b/src/catch2/catch_user_config.hpp.in
index 77c94291..f8e03735 100644
--- a/src/catch2/catch_user_config.hpp.in
+++ b/src/catch2/catch_user_config.hpp.in
@@ -181,6 +181,8 @@
#cmakedefine CATCH_CONFIG_PREFIX_ALL
#cmakedefine CATCH_CONFIG_WINDOWS_CRTDBG
+#cmakedefine CATCH_CONFIG_SHARED_LIBRARY
+
// ------
// "Variable" defines, these have actual values
diff --git a/src/catch2/internal/catch_compiler_capabilities.hpp b/src/catch2/internal/catch_compiler_capabilities.hpp
index 9ffae596..f2320e63 100644
--- a/src/catch2/internal/catch_compiler_capabilities.hpp
+++ b/src/catch2/internal/catch_compiler_capabilities.hpp
@@ -382,5 +382,15 @@
# define CATCH_CONFIG_COLOUR_WIN32
#endif
+#if defined( CATCH_CONFIG_SHARED_LIBRARY ) && defined( _MSC_VER ) && \
+ !defined( CATCH_CONFIG_STATIC )
+# ifdef Catch2_EXPORTS
+# define CATCH_EXPORT //__declspec( dllexport ) // not needed
+# else
+# define CATCH_EXPORT __declspec( dllimport )
+# endif
+#else
+# define CATCH_EXPORT
+#endif
#endif // CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED
diff --git a/src/catch2/internal/catch_context.hpp b/src/catch2/internal/catch_context.hpp
index fe129705..53dc29a5 100644
--- a/src/catch2/internal/catch_context.hpp
+++ b/src/catch2/internal/catch_context.hpp
@@ -8,6 +8,8 @@
#ifndef CATCH_CONTEXT_HPP_INCLUDED
#define CATCH_CONTEXT_HPP_INCLUDED
+#include <catch2/internal/catch_compiler_capabilities.hpp>
+
namespace Catch {
class IResultCapture;
@@ -28,7 +30,7 @@ namespace Catch {
virtual void setConfig( IConfig const* config ) = 0;
private:
- static IMutableContext *currentContext;
+ CATCH_EXPORT static IMutableContext* currentContext;
friend IMutableContext& getCurrentMutableContext();
friend void cleanUpContext();
static void createContext();