Parsing C++ with regex in CMake is error prone and regularly leads to silently
dropped (not run) test cases.
Going forward the function `catch_discover_tests` from `contrib/CMake.cmake`
should be used.
For more information see https://github.com/catchorg/Catch2/issues/2092#issuecomment-747342765
Set `_CATCH_DISCOVER_TESTS_SCRIPT` helper variable globally. Otherwise in a
scoped call (like `add_subdirectory()`) the variable gets lost. This lost
variable results in a post build error with not much information to lead to the
root of the problem.
This enables the usage of the helper script with the following example structure
- CMakeLists.txt (project root with `add_subdirectory(external/catch2)`
- external/catch2
- CMakeLists.txt (contents listed below)
- contrib/Catch.cmake
- contrib/CatchAddTests.cmake
- catch2/catch.hpp
- tests
- CMakeLists.txt (add tests with `catch_discover_tests(${PROJECT_NAME})`)
contents of project specific helper `external/catch2/CMakeLists.txt`
```cmake
cmake_minimum_required (VERSION 3.1...${CMAKE_VERSION})
project(Catch2 LANGUAGES CXX VERSION 2.13.3)
add_library(Catch2 INTERFACE)
target_include_directories(Catch2
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
)
# provide a namespaced alias for clients to 'link' against if catch is included as a sub-project
add_library(Catch2::Catch2 ALIAS Catch2)
include(contrib/Catch.cmake)
```
CMake 3.19 introduces new add_test() behavior guarded with the policy
CMP0110.
See: https://cmake.org/cmake/help/latest/policy/CMP0110.html
Update the helper script ParseAndAddCatchTests to consider the policy and
handle the test case name accordingly.
With CMake 3.18.0 the `add_test(NAME)` handling changed. The escaped
double quotes confuse the new call. Work around this upstream change.
fixes: https://github.com/catchorg/Catch2/issues/1984
When PARSE_CATCH_TESTS_ADD_TARGET_IN_TEST_NAME is enabled the cmake helper script fails to extract the testcase name if a whitespace is before the name string. Use regex to consider and remove this whitespace.
fix by Mike-Devel
fixes: https://github.com/catchorg/Catch2/issues/1493