File tree Expand file tree Collapse file tree 3 files changed +24
-4
lines changed Expand file tree Collapse file tree 3 files changed +24
-4
lines changed Original file line number Diff line number Diff line change 1
1
cmake_minimum_required (VERSION 3.1 )
2
2
3
+ if (NOT CMAKE_VERSION VERSION_LESS "3.3" )
4
+ # Don't ignore visibility related properties for non-SHARED targets
5
+ cmake_policy (SET CMP0063 NEW )
6
+ endif ()
7
+
3
8
project (Cucumber-Cpp )
4
9
5
10
option (BUILD_SHARED_LIBS "Generate shared libraries" OFF )
Original file line number Diff line number Diff line change @@ -44,18 +44,28 @@ if(CMAKE_EXTRA_GENERATOR OR MSVC_IDE)
44
44
list (APPEND CUKE_SOURCES ${CUKE_HEADERS} )
45
45
endif ()
46
46
47
+ # Library for unit tests relying on internals
48
+ add_library (cucumber-cpp-internal STATIC ${CUKE_SOURCES} )
49
+
47
50
add_library (cucumber-cpp-nomain ${CUKE_SOURCES} )
48
51
add_library (cucumber-cpp ${CUKE_SOURCES} main.cpp )
49
52
50
- set_target_properties (cucumber-cpp cucumber-cpp-nomain PROPERTIES
51
- DEFINE_SYMBOL cucumber_cpp_EXPORTS
53
+ set_target_properties (
54
+ cucumber-cpp-internal
55
+ cucumber-cpp
56
+ cucumber-cpp-nomain
57
+ PROPERTIES
58
+ DEFINE_SYMBOL cucumber_cpp_EXPORTS
59
+ CXX_VISIBILITY_PRESET hidden
60
+ VISIBILITY_INLINES_HIDDEN ON
52
61
)
53
62
54
63
generate_export_header (cucumber-cpp
55
64
EXPORT_FILE_NAME "cucumber-cpp/internal/CukeExport.hpp"
56
65
)
57
66
58
67
foreach (TARGET
68
+ cucumber-cpp-internal
59
69
cucumber-cpp-nomain
60
70
cucumber-cpp
61
71
)
@@ -75,6 +85,11 @@ foreach(TARGET
75
85
json_spirit.header
76
86
${CUKE_EXTRA_PRIVATE_LIBRARIES}
77
87
)
88
+ # Don't export or import symbols for statically linked libraries
89
+ get_property (type TARGET ${TARGET} PROPERTY TYPE )
90
+ if (NOT "${type} " MATCHES "^(SHARED|MODULE)_LIBRARY$" )
91
+ target_compile_definitions (${TARGET} PUBLIC CUCUMBER_CPP_STATIC_DEFINE )
92
+ endif ()
78
93
if (MINGW )
79
94
target_link_libraries (${TARGET}
80
95
PRIVATE
Original file line number Diff line number Diff line change @@ -2,7 +2,7 @@ function(cuke_add_driver_test TEST_FILE)
2
2
get_filename_component (TEST_NAME ${TEST_FILE} NAME )
3
3
message (STATUS "Adding " ${TEST_NAME} )
4
4
add_executable (${TEST_NAME} ${TEST_FILE} .cpp )
5
- target_link_libraries (${TEST_NAME} PRIVATE cucumber-cpp-nomain ${ARGN} )
5
+ target_link_libraries (${TEST_NAME} PRIVATE cucumber-cpp-internal ${ARGN} )
6
6
add_test (NAME ${TEST_NAME} COMMAND ${TEST_NAME} )
7
7
endfunction ()
8
8
@@ -11,7 +11,7 @@ if(TARGET GMock::Main)
11
11
get_filename_component (TEST_NAME ${TEST_FILE} NAME )
12
12
message (STATUS "Adding " ${TEST_NAME} )
13
13
add_executable (${TEST_NAME} ${TEST_FILE} .cpp )
14
- target_link_libraries (${TEST_NAME} PRIVATE cucumber-cpp-nomain ${ARGN} GMock::Main )
14
+ target_link_libraries (${TEST_NAME} PRIVATE cucumber-cpp-internal ${ARGN} GMock::Main )
15
15
gtest_add_tests (${TEST_NAME} "" ${TEST_FILE} .cpp )
16
16
# Run all tests in executable at once too. This ensures that the used fixtures get tested
17
17
# properly too. Additionally gather the output in jUnit compatible output for CI.
You can’t perform that action at this time.
0 commit comments