Commit de28d11f7c9959aa59617b9ce2315b35434658ae
Committed by
GitHub
1 parent
a55a7fc0
tests: support external Catch2 (#653)
Showing
2 changed files
with
37 additions
and
16 deletions
tests/CMakeLists.txt
| ... | ... | @@ -63,23 +63,33 @@ endif() |
| 63 | 63 | |
| 64 | 64 | set(CLI11_MULTIONLY_TESTS TimerTest) |
| 65 | 65 | |
| 66 | -add_library(catch_main main.cpp) | |
| 66 | +add_library(catch_main main.cpp catch.hpp) | |
| 67 | 67 | target_include_directories(catch_main PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") |
| 68 | 68 | |
| 69 | -# Currently a required download; could be make to look for existing Catch2, but | |
| 70 | -# that would require changing the includes. FetchContent would be better, but | |
| 71 | -# requires newer CMake. | |
| 72 | - | |
| 73 | -set(url https://github.com/philsquared/Catch/releases/download/v2.13.6/catch.hpp) | |
| 74 | -file( | |
| 75 | - DOWNLOAD ${url} "${CMAKE_CURRENT_BINARY_DIR}/catch.hpp" | |
| 76 | - STATUS status | |
| 77 | - EXPECTED_HASH SHA256=681e7505a50887c9085539e5135794fc8f66d8e5de28eadf13a30978627b0f47) | |
| 78 | -list(GET status 0 error) | |
| 79 | -if(error) | |
| 80 | - message(FATAL_ERROR "Could not download ${url}") | |
| 69 | +find_package(Catch2 CONFIG) | |
| 70 | + | |
| 71 | +if(Catch2_FOUND) | |
| 72 | + if(NOT TARGET Catch2::Catch2) | |
| 73 | + message(FATAL_ERROR "Found Catch2 at ${Catch2_DIR} but targets are missing.") | |
| 74 | + endif() | |
| 75 | + message(STATUS "Found Catch2") | |
| 76 | + target_link_libraries(catch_main PUBLIC Catch2::Catch2) | |
| 77 | +else() | |
| 78 | + message(STATUS "Downloading Catch2") | |
| 79 | + | |
| 80 | + # FetchContent would be better, but requires newer CMake. | |
| 81 | + file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/catch2") | |
| 82 | + set(url https://github.com/philsquared/Catch/releases/download/v2.13.7/catch.hpp) | |
| 83 | + file( | |
| 84 | + DOWNLOAD ${url} "${CMAKE_CURRENT_BINARY_DIR}/catch2/catch.hpp" | |
| 85 | + STATUS status | |
| 86 | + EXPECTED_HASH SHA256=ea379c4a3cb5799027b1eb451163dff065a3d641aaba23bf4e24ee6b536bd9bc) | |
| 87 | + list(GET status 0 error) | |
| 88 | + if(error) | |
| 89 | + message(FATAL_ERROR "Could not download ${url}, and Catch2 not found on your system.") | |
| 90 | + endif() | |
| 91 | + target_include_directories(catch_main PUBLIC "${CMAKE_CURRENT_BINARY_DIR}") | |
| 81 | 92 | endif() |
| 82 | -target_include_directories(catch_main PUBLIC "${CMAKE_CURRENT_BINARY_DIR}") | |
| 83 | 93 | |
| 84 | 94 | # Target must already exist |
| 85 | 95 | macro(add_catch_test TESTNAME) |
| ... | ... | @@ -174,8 +184,6 @@ file(WRITE "${PROJECT_BINARY_DIR}/CTestCustom.cmake" |
| 174 | 184 | target_compile_definitions(informational PRIVATE ${boost-optional-def}) |
| 175 | 185 | target_compile_definitions(OptionalTest PRIVATE ${boost-optional-def}) |
| 176 | 186 | |
| 177 | -message(STATUS "Boost libs=${Boost_INCLUDE_DIRS}") | |
| 178 | - | |
| 179 | 187 | if(TARGET Boost::boost) |
| 180 | 188 | message(STATUS "including boost target") |
| 181 | 189 | target_link_libraries(informational PRIVATE Boost::boost) |
| ... | ... | @@ -185,6 +193,7 @@ if(TARGET Boost::boost) |
| 185 | 193 | target_link_libraries(OptionalTest_Single PRIVATE Boost::boost) |
| 186 | 194 | target_link_libraries(BoostOptionTypeTest_Single PRIVATE Boost::boost) |
| 187 | 195 | endif() |
| 196 | + message(STATUS "Boost libs=${Boost_INCLUDE_DIRS}") | |
| 188 | 197 | elseif(BOOST_FOUND) |
| 189 | 198 | message(STATUS "no boost target") |
| 190 | 199 | target_include_directories(informational PRIVATE ${Boost_INCLUDE_DIRS}) |
| ... | ... | @@ -194,6 +203,9 @@ elseif(BOOST_FOUND) |
| 194 | 203 | target_include_directories(OptionalTest_Single PRIVATE ${Boost_INCLUDE_DIRS}) |
| 195 | 204 | target_include_directories(BoostOptionTypeTest_Single PRIVATE ${Boost_INCLUDE_DIRS}) |
| 196 | 205 | endif() |
| 206 | + message(STATUS "Boost libs=${Boost_INCLUDE_DIRS}") | |
| 207 | +else() | |
| 208 | + message(STATUS "Boost not found, not adding boost tests") | |
| 197 | 209 | endif() |
| 198 | 210 | |
| 199 | 211 | if(CMAKE_BUILD_TYPE STREQUAL Coverage) | ... | ... |
tests/catch.hpp
0 → 100644