@@ -2,93 +2,93 @@ option(BUILD_TESTS "Controls whether to build the tests as part of the main buil
22
33enable_testing ()
44
5- foreach (scope GLOBAL DIRECTORY )
5+ foreach (scope GLOBAL DIRECTORY )
66 define_property (${scope} PROPERTY "ENABLE_TESTS" INHERITED
7- BRIEF_DOCS "Enable tests"
8- FULL_DOCS "Enable tests"
9- )
10- endforeach ()
7+ BRIEF_DOCS "Enable tests"
8+ FULL_DOCS "Enable tests"
9+ )
10+ endforeach ()
1111option (CMAKE_ENABLE_TESTS "Enable tests" ON )
1212set_property (GLOBAL PROPERTY ENABLE_TESTS ${CMAKE_ENABLE_TESTS} )
1313
1414include (ProcessorCount)
1515processorcount(_cm_ctest_parallel_level)
1616set (CTEST_PARALLEL_LEVEL ${_cm_ctest_parallel_level} CACHE STRING "CTest parallel level" )
1717
18- if (NOT TARGET check)
18+ if (NOT TARGET check)
1919 add_custom_target (check COMMAND ${CMAKE_CTEST_COMMAND} --output -on -failure -C ${CMAKE_CFG_INTDIR} -j ${CTEST_PARALLEL_LEVEL} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
20- endif ()
20+ endif ()
2121
2222
23- if (NOT TARGET tests)
23+ if (NOT TARGET tests)
2424 add_custom_target (tests COMMENT "Build all tests." )
2525 add_dependencies (check tests)
26- endif ()
26+ endif ()
2727
28- if (NOT TARGET check-${PROJECT_NAME} )
28+ if (NOT TARGET check-${PROJECT_NAME} )
2929 add_custom_target (check-${PROJECT_NAME} COMMAND ${CMAKE_CTEST_COMMAND} -L ${PROJECT_NAME} --output -on -failure -C ${CMAKE_CFG_INTDIR} -j ${CTEST_PARALLEL_LEVEL} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
30- endif ()
30+ endif ()
3131
32- if (NOT TARGET tests-${PROJECT_NAME} )
32+ if (NOT TARGET tests-${PROJECT_NAME} )
3333 add_custom_target (tests-${PROJECT_NAME} COMMENT "Build all tests for ${PROJECT_NAME} ." )
3434 add_dependencies (check-${PROJECT_NAME} tests-${PROJECT_NAME} )
35- endif ()
35+ endif ()
3636
3737function (cm_mark_as_test)
38- foreach (TEST_TARGET ${ARGN} )
39- if (NOT BUILD_TESTS)
38+ foreach (TEST_TARGET ${ARGN} )
39+ if (NOT BUILD_TESTS)
4040 get_target_property (TEST_TARGET_TYPE ${TEST_TARGET} TYPE )
4141 # We can onle use EXCLUDE_FROM_ALL on build targets
42- if (NOT "${TEST_TARGET_TYPE} " STREQUAL "INTERFACE_LIBRARY" )
42+ if (NOT "${TEST_TARGET_TYPE} " STREQUAL "INTERFACE_LIBRARY" )
4343 set_target_properties (${TEST_TARGET}
44- PROPERTIES EXCLUDE_FROM_ALL TRUE
45- )
46- endif ()
47- endif ()
44+ PROPERTIES EXCLUDE_FROM_ALL TRUE
45+ )
46+ endif ()
47+ endif ()
4848 add_dependencies (tests ${TEST_TARGET} )
4949 add_dependencies (tests-${PROJECT_NAME} ${TEST_TARGET} )
50- endforeach ()
50+ endforeach ()
5151endfunction (cm_mark_as_test)
5252
5353
5454function (cm_create_internal_targets)
55- if (NOT TARGET _cm_internal_tests-${PROJECT_NAME} )
55+ if (NOT TARGET _cm_internal_tests-${PROJECT_NAME} )
5656 file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /_cm_internal_tests-${PROJECT_NAME} .cpp "" )
5757 add_library (_cm_internal_tests-${PROJECT_NAME} STATIC ${CMAKE_CURRENT_BINARY_DIR} /_cm_internal_tests-${PROJECT_NAME} .cpp)
5858 cm_mark_as_test(_cm_internal_tests-${PROJECT_NAME} )
59- endif ()
59+ endif ()
6060endfunction ()
6161
62- foreach (scope DIRECTORY TARGET )
62+ foreach (scope DIRECTORY TARGET )
6363 define_property (${scope} PROPERTY "BCM_TEST_DEPENDENCIES" INHERITED
64- BRIEF_DOCS "Default test dependencies"
65- FULL_DOCS "Default test dependencies"
66- )
67- endforeach ()
64+ BRIEF_DOCS "Default test dependencies"
65+ FULL_DOCS "Default test dependencies"
66+ )
67+ endforeach ()
6868
6969function (cm_test_link_libraries)
7070 cm_create_internal_targets()
71- if (BUILD_TESTS)
71+ if (BUILD_TESTS)
7272 set_property (DIRECTORY APPEND PROPERTY BCM_TEST_DEPENDENCIES ${ARGN} )
7373 target_link_libraries (_cm_internal_tests-${PROJECT_NAME} ${ARGN} )
74- else ()
75- foreach (TARGET ${ARGN} )
76- if (TARGET ${TARGET} )
74+ else ()
75+ foreach (TARGET ${ARGN} )
76+ if (TARGET ${TARGET} )
7777 set_property (DIRECTORY APPEND PROPERTY BCM_TEST_DEPENDENCIES ${TARGET} )
7878 target_link_libraries (_cm_internal_tests-${PROJECT_NAME} ${TARGET} )
79- elseif (${TARGET} MATCHES "::" )
79+ elseif (${TARGET} MATCHES "::" )
8080 cm_shadow_exists(HAS_TARGET ${TARGET} )
8181 set_property (DIRECTORY APPEND PROPERTY BCM_TEST_DEPENDENCIES $<${HAS_TARGET} :${TARGET} >)
8282 target_link_libraries (_cm_internal_tests-${PROJECT_NAME} $<${HAS_TARGET} :${TARGET} >)
83- else ()
83+ else ()
8484 set_property (DIRECTORY APPEND PROPERTY BCM_TEST_DEPENDENCIES ${TARGET} )
8585 target_link_libraries (_cm_internal_tests-${PROJECT_NAME} ${TARGET} )
86- endif ()
87- if (BUILD_SHARED_LIBS )
86+ endif ()
87+ if (BUILD_SHARED_LIBS )
8888 target_compile_definitions (_cm_internal_tests-${PROJECT_NAME} PRIVATE -DBOOST_TEST_DYN_LINK=1 -DBOOST_TEST_NO_AUTO_LINK=1)
89- endif ()
90- endforeach ()
91- endif ()
89+ endif ()
90+ endforeach ()
91+ endif ()
9292endfunction ()
9393
9494function (cm_target_link_test_libs TARGET )
@@ -102,42 +102,50 @@ endfunction()
102102
103103function (cm_test)
104104 set (options COMPILE_ONLY WILL_FAIL NO_TEST_LIBS)
105- set (oneValueArgs NAME )
105+ set (oneValueArgs NAME SOURCES_PREFIX )
106106 set (multiValueArgs SOURCES CONTENT ARGS)
107107
108108 cmake_parse_arguments (PARSE "${options} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
109109
110- if (PARSE_UNPARSED_ARGUMENTS)
110+ if (PARSE_UNPARSED_ARGUMENTS)
111111 message (FATAL_ERROR "Unknown keywords given to cm_test(): \" ${PARSE_UNPARSED_ARGUMENTS} \" " )
112- endif ()
112+ endif ()
113113
114114 set (SOURCES ${PARSE_SOURCES} )
115115
116- if (PARSE_NAME)
116+ if (PARSE_NAME)
117117 set (TEST_NAME ${PARSE_NAME} )
118- else ()
118+ else ()
119119 string (MAKE_C_IDENTIFIER "${PROJECT_NAME} _${SOURCES} _test" TEST_NAME)
120- endif ()
120+ endif ()
121121
122- if (PARSE_CONTENT)
122+ if (PARSE_CONTENT)
123123 file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /generated -${TEST_NAME} .cpp "${PARSE_CONTENT} " )
124124 set (SOURCES ${CMAKE_CURRENT_BINARY_DIR} /generated -${TEST_NAME} .cpp)
125- endif ()
125+ endif ()
126126
127- if (PARSE_COMPILE_ONLY)
127+ if (PARSE_COMPILE_ONLY)
128128 add_library (${TEST_NAME} STATIC EXCLUDE_FROM_ALL ${SOURCES} )
129129 add_test (NAME ${TEST_NAME}
130- COMMAND ${CMAKE_COMMAND} --build . --target ${TEST_NAME} --config $<CONFIGURATION >
131- WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
132- target_include_directories (${TEST_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR} )
130+ COMMAND ${CMAKE_COMMAND} --build . --target ${TEST_NAME} --config $<CONFIGURATION >
131+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
132+ if (PARSE_SOURCES_PREFIX)
133+ target_include_directories (${TEST_NAME} PRIVATE ${PARSE_SOURCES_PREFIX} )
134+ else ()
135+ target_include_directories (${TEST_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR} )
136+ endif ()
133137
134138 # set_tests_properties(${TEST_NAME} PROPERTIES RESOURCE_LOCK cm_test_compile_only)
135- else ()
139+ else ()
136140 add_executable (${TEST_NAME} ${SOURCES} )
137141 cm_mark_as_test(${TEST_NAME} )
138- target_include_directories (${TEST_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR} )
139- if (WIN32 )
140- foreach (CONFIG ${CMAKE_CONFIGURATION_TYPES} "" )
142+ if (PARSE_SOURCES_PREFIX)
143+ target_include_directories (${TEST_NAME} PRIVATE ${PARSE_SOURCES_PREFIX} )
144+ else ()
145+ target_include_directories (${TEST_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR} )
146+ endif ()
147+ if (WIN32 )
148+ foreach (CONFIG ${CMAKE_CONFIGURATION_TYPES} "" )
141149 file (GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /${TEST_NAME} -test -run-${CONFIG} .cmake CONTENT "
142150include(\" ${CMAKE_BINARY_DIR} /cm_set_rpath-$<CONFIG>.cmake\" )
143151if(CMAKE_CROSSCOMPILING)
@@ -157,24 +165,24 @@ if(NOT RESULT EQUAL 0)
157165 message(FATAL_ERROR \" Test failed\" )
158166endif()
159167" CONDITION $<CONFIG:${CONFIG} >)
160- endforeach ()
168+ endforeach ()
161169 add_test (NAME ${TEST_NAME} COMMAND ${CMAKE_COMMAND} -DCMAKE_CROSSCOMPILING=${CMAKE_CROSSCOMPILING} -P ${CMAKE_CURRENT_BINARY_DIR} /${TEST_NAME} -test -run-$<CONFIG>.cmake)
162- else ()
170+ else ()
163171 add_test (NAME ${TEST_NAME} COMMAND ${TEST_NAME} ${PARSE_ARGS} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
164- endif ()
165- endif ()
172+ endif ()
173+ endif ()
166174
167- if (BUILD_SHARED_LIBS )
175+ if (BUILD_SHARED_LIBS )
168176 target_compile_definitions (${TEST_NAME} PRIVATE -DBOOST_TEST_DYN_LINK=1 -DBOOST_TEST_NO_AUTO_LINK=1)
169- endif ()
177+ endif ()
170178
171- if (PARSE_WILL_FAIL)
179+ if (PARSE_WILL_FAIL)
172180 set_tests_properties (${TEST_NAME} PROPERTIES WILL_FAIL TRUE )
173- endif ()
181+ endif ()
174182 set_tests_properties (${TEST_NAME} PROPERTIES LABELS ${PROJECT_NAME} )
175- if (NOT PARSE_NO_TEST_LIBS)
183+ if (NOT PARSE_NO_TEST_LIBS)
176184 cm_target_link_test_libs(${TEST_NAME} )
177- endif ()
185+ endif ()
178186endfunction (cm_test)
179187
180188function (cm_test_header)
@@ -184,40 +192,41 @@ function(cm_test_header)
184192
185193 cmake_parse_arguments (PARSE "${options} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
186194
187- if (PARSE_UNPARSED_ARGUMENTS)
195+ if (PARSE_UNPARSED_ARGUMENTS)
188196 message (FATAL_ERROR "Unknown keywords given to cm_test_header(): \" ${PARSE_UNPARSED_ARGUMENTS} \" " )
189- endif ()
197+ endif ()
190198
191- if (PARSE_NAME)
199+ if (PARSE_NAME)
192200 set (TEST_NAME ${PARSE_NAME} )
193- else ()
201+ else ()
194202 string (MAKE_C_IDENTIFIER "${PROJECT_NAME} _${PARSE_HEADER} _header_test" TEST_NAME)
195- endif ()
203+ endif ()
196204
197- if (PARSE_STATIC)
205+ if (PARSE_STATIC)
198206 file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /header-main-include -${TEST_NAME} .cpp
199- "#include <${PARSE_HEADER} >\n int main() {}\n "
200- )
207+ "#include <${PARSE_HEADER} >\n int main() {}\n "
208+ )
201209 file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /header-static -include -${TEST_NAME} .cpp
202- "#include <${PARSE_HEADER} >\n "
203- )
210+ "#include <${PARSE_HEADER} >\n "
211+ )
204212 cm_test(NAME ${TEST_NAME} SOURCES
205- ${CMAKE_CURRENT_BINARY_DIR} /header-main-include -${TEST_NAME} .cpp
206- ${CMAKE_CURRENT_BINARY_DIR} /header-static -include -${TEST_NAME} .cpp
207- )
208- else ()
213+ ${CMAKE_CURRENT_BINARY_DIR} /header-main-include -${TEST_NAME} .cpp
214+ ${CMAKE_CURRENT_BINARY_DIR} /header-static -include -${TEST_NAME} .cpp
215+ )
216+ else ()
209217 cm_test(NAME ${TEST_NAME} CONTENT
210- "#include <${PARSE_HEADER} >\n int main() {}\n "
211- )
212- endif ()
218+ "#include <${PARSE_HEADER} >\n int main() {}\n "
219+ )
220+ endif ()
213221 set_tests_properties (${TEST_NAME} PROPERTIES LABELS ${PROJECT_NAME} )
214222endfunction (cm_test_header)
215223
216224macro (cm_add_test_subdirectory)
217225 get_directory_property (_enable_tests_property ENABLE_TESTS)
218226 get_property (_enable_tests_global_property GLOBAL PROPERTY ENABLE_TESTS)
219227 string (TOUPPER "${_enable_tests_property} " _enable_tests_property_upper)
220- if (_enable_tests_property_upper STREQUAL "OFF" OR _enable_tests_property_upper EQUAL 1)
228+ if (_enable_tests_property_upper STREQUAL "OFF" OR _enable_tests_property_upper EQUAL 1)
229+ set (CURRENT_SOURCES_DIR ${CURRENT_SOURCES_DIR} /test )
221230 add_subdirectory (${ARGN} )
222- endif ()
231+ endif ()
223232endmacro ()
0 commit comments