From e341b1146771aeb654674e7ef6101e67d12f491b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Sat, 30 Nov 2019 17:41:41 +0100 Subject: [PATCH] WIP: CMake changes to build static lib + tests separately --- CMakeLists.txt | 409 ++++++++++++++++++++-------------------- projects/CMakeLists.txt | 11 +- src/CMakeLists.txt | 227 ++++++++++++++++++++++ 3 files changed, 436 insertions(+), 211 deletions(-) create mode 100644 src/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 8aa5b58b..255e52f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,211 +23,214 @@ include(GNUInstallDirs) include(CMakePackageConfigHelpers) include(CTest) -option(CATCH_USE_VALGRIND "Perform SelfTests with Valgrind" OFF) -option(CATCH_BUILD_TESTING "Build SelfTest project" ON) -option(CATCH_BUILD_EXAMPLES "Build documentation examples" OFF) -option(CATCH_BUILD_EXTRA_TESTS "Build extra tests" OFF) -option(CATCH_ENABLE_COVERAGE "Generate coverage for codecov.io" OFF) -option(CATCH_ENABLE_WERROR "Enable all warnings as errors" ON) -option(CATCH_INSTALL_DOCS "Install documentation alongside library" ON) -option(CATCH_INSTALL_HELPERS "Install contrib alongside library" ON) - - -set_property(GLOBAL PROPERTY USE_FOLDERS ON) - -# define some folders +# Basic paths set(CATCH_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(SOURCES_DIR ${CATCH_DIR}/src/catch2) set(SELF_TEST_DIR ${CATCH_DIR}/projects/SelfTest) set(BENCHMARK_DIR ${CATCH_DIR}/projects/Benchmark) -set(HEADER_DIR ${CATCH_DIR}/include) -if(USE_WMAIN) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ENTRY:wmainCRTStartup") -endif() +add_subdirectory(src) +add_subdirectory(projects) -if (BUILD_TESTING AND CATCH_BUILD_TESTING AND NOT_SUBPROJECT) - find_package(PythonInterp) - if (NOT PYTHONINTERP_FOUND) - message(FATAL_ERROR "Python not found, but required for tests") - endif() - add_subdirectory(projects) -endif() - -if(CATCH_BUILD_EXAMPLES) - add_subdirectory(examples) -endif() - -if(CATCH_BUILD_EXTRA_TESTS) - add_subdirectory(projects/ExtraTests) -endif() - -# add catch as a 'linkable' target -add_library(Catch2 INTERFACE) - - - -# depend on some obvious c++11 features so the dependency is transitively added dependents -target_compile_features(Catch2 - INTERFACE - cxx_alignas - cxx_alignof - cxx_attributes - cxx_auto_type - cxx_constexpr - cxx_defaulted_functions - cxx_deleted_functions - cxx_final - cxx_lambdas - cxx_noexcept - cxx_override - cxx_range_for - cxx_rvalue_references - cxx_static_assert - cxx_strong_enums - cxx_trailing_return_types - cxx_unicode_literals - cxx_user_literals - cxx_variadic_macros -) - -target_include_directories(Catch2 - INTERFACE - $ - $ -) - -if (ANDROID) - target_link_libraries(Catch2 INTERFACE log) -endif() - -# provide a namespaced alias for clients to 'link' against if catch is included as a sub-project -add_library(Catch2::Catch2 ALIAS Catch2) - -# Only perform the installation steps when Catch is not being used as -# a subproject via `add_subdirectory`, or the destinations will break, -# see https://github.com/catchorg/Catch2/issues/1373 -if (NOT_SUBPROJECT) - set(CATCH_CMAKE_CONFIG_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Catch2") - - configure_package_config_file( - ${CMAKE_CURRENT_LIST_DIR}/CMake/Catch2Config.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/Catch2Config.cmake - INSTALL_DESTINATION - ${CATCH_CMAKE_CONFIG_DESTINATION} - ) - - - # create and install an export set for catch target as Catch2::Catch - install( - TARGETS - Catch2 - EXPORT - Catch2Targets - DESTINATION - ${CMAKE_INSTALL_LIBDIR} - ) - - - install( - EXPORT - Catch2Targets - NAMESPACE - Catch2:: - DESTINATION - ${CATCH_CMAKE_CONFIG_DESTINATION} - ) - - # By default, FooConfigVersion is tied to architecture that it was - # generated on. Because Catch2 is header-only, it is arch-independent - # and thus Catch2ConfigVersion should not be tied to the architecture - # it was generated on. - # - # CMake does not provide a direct customization point for this in - # `write_basic_package_version_file`, but it can be accomplished - # indirectly by temporarily redefining `CMAKE_SIZEOF_VOID_P` to an - # empty string. Note that just undefining the variable could be - # insufficient in cases where the variable was already in CMake cache - set(CATCH2_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P}) - set(CMAKE_SIZEOF_VOID_P "") - write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/Catch2ConfigVersion.cmake" - COMPATIBILITY - SameMajorVersion - ) - set(CMAKE_SIZEOF_VOID_P ${CATCH2_CMAKE_SIZEOF_VOID_P}) - - install( - DIRECTORY - "single_include/" - DESTINATION - "${CMAKE_INSTALL_INCLUDEDIR}" - ) - - install( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/Catch2Config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/Catch2ConfigVersion.cmake" - DESTINATION - ${CATCH_CMAKE_CONFIG_DESTINATION} - ) - - # Install documentation - if(CATCH_INSTALL_DOCS) - install( - DIRECTORY - docs/ - DESTINATION - "${CMAKE_INSTALL_DOCDIR}" - ) - endif() - - if(CATCH_INSTALL_HELPERS) - # Install CMake scripts - install( - FILES - "contrib/ParseAndAddCatchTests.cmake" - "contrib/Catch.cmake" - "contrib/CatchAddTests.cmake" - DESTINATION - ${CATCH_CMAKE_CONFIG_DESTINATION} - ) - - # Install debugger helpers - install( - FILES - "contrib/gdbinit" - "contrib/lldbinit" - DESTINATION - ${CMAKE_INSTALL_DATAROOTDIR}/Catch2 - ) - endif() - - ## Provide some pkg-config integration - set(PKGCONFIG_INSTALL_DIR - "${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig" - CACHE PATH "Path where catch2.pc is installed" - ) - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/CMake/catch2.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/catch2.pc - @ONLY - ) - install( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/catch2.pc" - DESTINATION - ${PKGCONFIG_INSTALL_DIR} - ) - - # CPack/CMake started taking the package version from project version 3.12 - # So we need to set the version manually for older CMake versions - if(${CMAKE_VERSION} VERSION_LESS "3.12.0") - set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) - endif() - - set(CPACK_PACKAGE_CONTACT "https://github.com/catchorg/Catch2/") - - - include( CPack ) - -endif(NOT_SUBPROJECT) +#option(CATCH_USE_VALGRIND "Perform SelfTests with Valgrind" OFF) +#option(CATCH_BUILD_TESTING "Build SelfTest project" ON) +#option(CATCH_BUILD_EXAMPLES "Build documentation examples" OFF) +#option(CATCH_BUILD_EXTRA_TESTS "Build extra tests" OFF) +#option(CATCH_ENABLE_COVERAGE "Generate coverage for codecov.io" OFF) +#option(CATCH_ENABLE_WERROR "Enable all warnings as errors" ON) +#option(CATCH_INSTALL_DOCS "Install documentation alongside library" ON) +#option(CATCH_INSTALL_HELPERS "Install contrib alongside library" ON) +# +# +#set_property(GLOBAL PROPERTY USE_FOLDERS ON) +# +#if(USE_WMAIN) +# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ENTRY:wmainCRTStartup") +#endif() +# +#if (BUILD_TESTING AND CATCH_BUILD_TESTING AND NOT_SUBPROJECT) +# find_package(PythonInterp) +# if (NOT PYTHONINTERP_FOUND) +# message(FATAL_ERROR "Python not found, but required for tests") +# endif() +# add_subdirectory(projects) +#endif() +# +#if(CATCH_BUILD_EXAMPLES) +# add_subdirectory(examples) +#endif() +# +#if(CATCH_BUILD_EXTRA_TESTS) +# add_subdirectory(projects/ExtraTests) +#endif() +# +## add catch as a 'linkable' target +#add_library(Catch2 INTERFACE) +# +# +# +## depend on some obvious c++11 features so the dependency is transitively added dependents +#target_compile_features(Catch2 +# INTERFACE +# cxx_alignas +# cxx_alignof +# cxx_attributes +# cxx_auto_type +# cxx_constexpr +# cxx_defaulted_functions +# cxx_deleted_functions +# cxx_final +# cxx_lambdas +# cxx_noexcept +# cxx_override +# cxx_range_for +# cxx_rvalue_references +# cxx_static_assert +# cxx_strong_enums +# cxx_trailing_return_types +# cxx_unicode_literals +# cxx_user_literals +# cxx_variadic_macros +#) +# +#target_include_directories(Catch2 +# INTERFACE +# $ +# $ +#) +# +#if (ANDROID) +# target_link_libraries(Catch2 INTERFACE log) +#endif() +# +## provide a namespaced alias for clients to 'link' against if catch is included as a sub-project +#add_library(Catch2::Catch2 ALIAS Catch2) +# +## Only perform the installation steps when Catch is not being used as +## a subproject via `add_subdirectory`, or the destinations will break, +## see https://github.com/catchorg/Catch2/issues/1373 +#if (NOT_SUBPROJECT) +# set(CATCH_CMAKE_CONFIG_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Catch2") +# +# configure_package_config_file( +# ${CMAKE_CURRENT_LIST_DIR}/CMake/Catch2Config.cmake.in +# ${CMAKE_CURRENT_BINARY_DIR}/Catch2Config.cmake +# INSTALL_DESTINATION +# ${CATCH_CMAKE_CONFIG_DESTINATION} +# ) +# +# +# # create and install an export set for catch target as Catch2::Catch +# install( +# TARGETS +# Catch2 +# EXPORT +# Catch2Targets +# DESTINATION +# ${CMAKE_INSTALL_LIBDIR} +# ) +# +# +# install( +# EXPORT +# Catch2Targets +# NAMESPACE +# Catch2:: +# DESTINATION +# ${CATCH_CMAKE_CONFIG_DESTINATION} +# ) +# +# # By default, FooConfigVersion is tied to architecture that it was +# # generated on. Because Catch2 is header-only, it is arch-independent +# # and thus Catch2ConfigVersion should not be tied to the architecture +# # it was generated on. +# # +# # CMake does not provide a direct customization point for this in +# # `write_basic_package_version_file`, but it can be accomplished +# # indirectly by temporarily redefining `CMAKE_SIZEOF_VOID_P` to an +# # empty string. Note that just undefining the variable could be +# # insufficient in cases where the variable was already in CMake cache +# set(CATCH2_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P}) +# set(CMAKE_SIZEOF_VOID_P "") +# write_basic_package_version_file( +# "${CMAKE_CURRENT_BINARY_DIR}/Catch2ConfigVersion.cmake" +# COMPATIBILITY +# SameMajorVersion +# ) +# set(CMAKE_SIZEOF_VOID_P ${CATCH2_CMAKE_SIZEOF_VOID_P}) +# +# install( +# DIRECTORY +# "single_include/" +# DESTINATION +# "${CMAKE_INSTALL_INCLUDEDIR}" +# ) +# +# install( +# FILES +# "${CMAKE_CURRENT_BINARY_DIR}/Catch2Config.cmake" +# "${CMAKE_CURRENT_BINARY_DIR}/Catch2ConfigVersion.cmake" +# DESTINATION +# ${CATCH_CMAKE_CONFIG_DESTINATION} +# ) +# +# # Install documentation +# if(CATCH_INSTALL_DOCS) +# install( +# DIRECTORY +# docs/ +# DESTINATION +# "${CMAKE_INSTALL_DOCDIR}" +# ) +# endif() +# +# if(CATCH_INSTALL_HELPERS) +# # Install CMake scripts +# install( +# FILES +# "contrib/ParseAndAddCatchTests.cmake" +# "contrib/Catch.cmake" +# "contrib/CatchAddTests.cmake" +# DESTINATION +# ${CATCH_CMAKE_CONFIG_DESTINATION} +# ) +# +# # Install debugger helpers +# install( +# FILES +# "contrib/gdbinit" +# "contrib/lldbinit" +# DESTINATION +# ${CMAKE_INSTALL_DATAROOTDIR}/Catch2 +# ) +# endif() +# +# ## Provide some pkg-config integration +# set(PKGCONFIG_INSTALL_DIR +# "${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig" +# CACHE PATH "Path where catch2.pc is installed" +# ) +# configure_file( +# ${CMAKE_CURRENT_SOURCE_DIR}/CMake/catch2.pc.in +# ${CMAKE_CURRENT_BINARY_DIR}/catch2.pc +# @ONLY +# ) +# install( +# FILES +# "${CMAKE_CURRENT_BINARY_DIR}/catch2.pc" +# DESTINATION +# ${PKGCONFIG_INSTALL_DIR} +# ) +# +# # CPack/CMake started taking the package version from project version 3.12 +# # So we need to set the version manually for older CMake versions +# if(${CMAKE_VERSION} VERSION_LESS "3.12.0") +# set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) +# endif() +# +# set(CPACK_PACKAGE_CONTACT "https://github.com/catchorg/Catch2/") +# +# +# include( CPack ) +# +#endif(NOT_SUBPROJECT) diff --git a/projects/CMakeLists.txt b/projects/CMakeLists.txt index ca728604..d01f4375 100644 --- a/projects/CMakeLists.txt +++ b/projects/CMakeLists.txt @@ -69,12 +69,6 @@ set(SURROGATE_SOURCES CheckFileList(SURROGATE_SOURCES ${SELF_TEST_DIR}/SurrogateCpps) -# Please keep these ordered alphabetically -set(TOP_LEVEL_HEADERS - ${HEADER_DIR}/catch.hpp - ) -CheckFileList(TOP_LEVEL_HEADERS ${HEADER_DIR}) - # Please keep these ordered alphabetically set(EXTERNAL_HEADERS ${HEADER_DIR}/external/clara.hpp @@ -84,7 +78,7 @@ CheckFileList(EXTERNAL_HEADERS ${HEADER_DIR}/external) # Please keep these ordered alphabetically set(BENCHMARK_HEADERS - ${HEADER_DIR}/internal/benchmark/catch_benchmark.hpp + ${HEADER_DIR}/internal/benchmark/catch_benchmark.hpp ${HEADER_DIR}/internal/benchmark/catch_chronometer.hpp ${HEADER_DIR}/internal/benchmark/catch_clock.hpp ${HEADER_DIR}/internal/benchmark/catch_constructor.hpp @@ -309,7 +303,8 @@ SOURCE_GROUP("Surrogates" FILES ${SURROGATE_SOURCES}) include(CTest) -add_executable(SelfTest ${TEST_SOURCES} ${IMPL_SOURCES} ${REPORTER_SOURCES} ${SURROGATE_SOURCES} ${HEADERS}) +add_executable(SelfTest ${TEST_SOURCES}) +target_link_libraries(SelfTest PRIVATE Catch2) target_include_directories(SelfTest PRIVATE ${HEADER_DIR}) # It took CMake until 3.8 to abandon the doomed approach of enumerating diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 00000000..8c66ff87 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,227 @@ +include(MiscFunctions) + +# Please keep these ordered alphabetically +set(BENCHMARK_HEADERS + ${SOURCES_DIR}/benchmark/catch_benchmark.hpp + ${SOURCES_DIR}/benchmark/catch_chronometer.hpp + ${SOURCES_DIR}/benchmark/catch_clock.hpp + ${SOURCES_DIR}/benchmark/catch_constructor.hpp + ${SOURCES_DIR}/benchmark/catch_environment.hpp + ${SOURCES_DIR}/benchmark/catch_estimate.hpp + ${SOURCES_DIR}/benchmark/catch_execution_plan.hpp + ${SOURCES_DIR}/benchmark/catch_optimizer.hpp + ${SOURCES_DIR}/benchmark/catch_outlier_classification.hpp + ${SOURCES_DIR}/benchmark/catch_sample_analysis.hpp + ${SOURCES_DIR}/benchmark/detail/catch_analyse.hpp + ${SOURCES_DIR}/benchmark/detail/catch_benchmark_function.hpp + ${SOURCES_DIR}/benchmark/detail/catch_complete_invoke.hpp + ${SOURCES_DIR}/benchmark/detail/catch_estimate_clock.hpp + ${SOURCES_DIR}/benchmark/detail/catch_measure.hpp + ${SOURCES_DIR}/benchmark/detail/catch_repeat.hpp + ${SOURCES_DIR}/benchmark/detail/catch_run_for_at_least.hpp + ${SOURCES_DIR}/benchmark/detail/catch_stats.hpp + ${SOURCES_DIR}/benchmark/detail/catch_timing.hpp +) +set(BENCHMARK_SOURCES + ${SOURCES_DIR}/benchmark/detail/catch_stats.cpp +) + +SOURCE_GROUP("benchmark" FILES ${BENCHMARK_HEADERS} ${BENCHMARK_SOURCES}) + +set(INTERNAL_HEADERS + ${SOURCES_DIR}/catch_approx.h + ${SOURCES_DIR}/catch_assertionhandler.h + ${SOURCES_DIR}/catch_assertioninfo.h + ${SOURCES_DIR}/catch_assertionresult.h + ${SOURCES_DIR}/catch_capture.hpp + ${SOURCES_DIR}/catch_capture_matchers.h + ${SOURCES_DIR}/catch_clara.h + ${SOURCES_DIR}/catch_commandline.h + ${SOURCES_DIR}/catch_common.h + ${SOURCES_DIR}/catch_compiler_capabilities.h + ${SOURCES_DIR}/catch_config.hpp + ${SOURCES_DIR}/catch_console_colour.h + ${SOURCES_DIR}/catch_context.h + ${SOURCES_DIR}/catch_debug_console.h + ${SOURCES_DIR}/catch_debugger.h + ${SOURCES_DIR}/catch_decomposer.h + ${SOURCES_DIR}/catch_default_main.hpp + ${SOURCES_DIR}/catch_enforce.h + ${SOURCES_DIR}/catch_enum_values_registry.h + ${SOURCES_DIR}/catch_errno_guard.h + ${SOURCES_DIR}/catch_exception_translator_registry.h + ${SOURCES_DIR}/catch_external_interfaces.h + ${SOURCES_DIR}/catch_fatal_condition.h + ${SOURCES_DIR}/catch_generators.hpp + ${SOURCES_DIR}/catch_generators_generic.hpp + ${SOURCES_DIR}/catch_generators_specific.hpp + ${SOURCES_DIR}/catch_impl.hpp + ${SOURCES_DIR}/catch_interfaces_capture.h + ${SOURCES_DIR}/catch_interfaces_config.h + ${SOURCES_DIR}/catch_interfaces_enum_values_registry.h + ${SOURCES_DIR}/catch_interfaces_exception.h + ${SOURCES_DIR}/catch_interfaces_registry_hub.h + ${SOURCES_DIR}/catch_interfaces_reporter.h + ${SOURCES_DIR}/catch_interfaces_runner.h + ${SOURCES_DIR}/catch_interfaces_tag_alias_registry.h + ${SOURCES_DIR}/catch_interfaces_testcase.h + ${SOURCES_DIR}/catch_leak_detector.h + ${SOURCES_DIR}/catch_list.h + ${SOURCES_DIR}/catch_matchers.h + ${SOURCES_DIR}/catch_matchers_exception.hpp + ${SOURCES_DIR}/catch_matchers_floating.h + ${SOURCES_DIR}/catch_matchers_generic.hpp + ${SOURCES_DIR}/catch_matchers_string.h + ${SOURCES_DIR}/catch_matchers_vector.h + ${SOURCES_DIR}/catch_message.h + ${SOURCES_DIR}/catch_meta.hpp + ${SOURCES_DIR}/catch_objc.hpp + ${SOURCES_DIR}/catch_objc_arc.hpp + ${SOURCES_DIR}/catch_option.hpp + ${SOURCES_DIR}/catch_output_redirect.h + ${SOURCES_DIR}/catch_platform.h + ${SOURCES_DIR}/catch_polyfills.hpp + ${SOURCES_DIR}/catch_preprocessor.hpp + ${SOURCES_DIR}/catch_random_number_generator.h + ${SOURCES_DIR}/catch_reenable_warnings.h + ${SOURCES_DIR}/catch_reporter_registrars.hpp + ${SOURCES_DIR}/catch_reporter_registry.h + ${SOURCES_DIR}/catch_result_type.h + ${SOURCES_DIR}/catch_run_context.h + ${SOURCES_DIR}/catch_section.h + ${SOURCES_DIR}/catch_section_info.h + ${SOURCES_DIR}/catch_session.h + ${SOURCES_DIR}/catch_singletons.hpp + ${SOURCES_DIR}/catch_startup_exception_registry.h + ${SOURCES_DIR}/catch_stream.h + ${SOURCES_DIR}/catch_stringref.h + ${SOURCES_DIR}/catch_string_manip.h + ${SOURCES_DIR}/catch_suppress_warnings.h + ${SOURCES_DIR}/catch_tag_alias.h + ${SOURCES_DIR}/catch_tag_alias_autoregistrar.h + ${SOURCES_DIR}/catch_tag_alias_registry.h + ${SOURCES_DIR}/catch_test_case_info.h + ${SOURCES_DIR}/catch_test_case_registry_impl.h + ${SOURCES_DIR}/catch_test_case_tracker.h + ${SOURCES_DIR}/catch_test_registry.h + ${SOURCES_DIR}/catch_test_spec.h + ${SOURCES_DIR}/catch_test_spec_parser.h + ${SOURCES_DIR}/catch_text.h + ${SOURCES_DIR}/catch_timer.h + ${SOURCES_DIR}/catch_to_string.hpp + ${SOURCES_DIR}/catch_tostring.h + ${SOURCES_DIR}/catch_totals.h + ${SOURCES_DIR}/catch_uncaught_exceptions.h + ${SOURCES_DIR}/catch_user_interfaces.h + ${SOURCES_DIR}/catch_version.h + ${SOURCES_DIR}/catch_wildcard_pattern.h + ${SOURCES_DIR}/catch_windows_h_proxy.h + ${SOURCES_DIR}/catch_xmlwriter.h +) +set(IMPL_SOURCES + ${SOURCES_DIR}/catch_approx.cpp + ${SOURCES_DIR}/catch_assertionhandler.cpp + ${SOURCES_DIR}/catch_assertionresult.cpp + ${SOURCES_DIR}/catch_capture_matchers.cpp + ${SOURCES_DIR}/catch_commandline.cpp + ${SOURCES_DIR}/catch_common.cpp + ${SOURCES_DIR}/catch_config.cpp + ${SOURCES_DIR}/catch_console_colour.cpp + ${SOURCES_DIR}/catch_context.cpp + ${SOURCES_DIR}/catch_debug_console.cpp + ${SOURCES_DIR}/catch_debugger.cpp + ${SOURCES_DIR}/catch_decomposer.cpp + ${SOURCES_DIR}/catch_enforce.cpp + ${SOURCES_DIR}/catch_enum_values_registry.cpp + ${SOURCES_DIR}/catch_errno_guard.cpp + ${SOURCES_DIR}/catch_exception_translator_registry.cpp + ${SOURCES_DIR}/catch_fatal_condition.cpp + ${SOURCES_DIR}/catch_generators.cpp + ${SOURCES_DIR}/catch_interfaces_capture.cpp + ${SOURCES_DIR}/catch_interfaces_config.cpp + ${SOURCES_DIR}/catch_interfaces_exception.cpp + ${SOURCES_DIR}/catch_interfaces_generatortracker.h + ${SOURCES_DIR}/catch_interfaces_registry_hub.cpp + ${SOURCES_DIR}/catch_interfaces_runner.cpp + ${SOURCES_DIR}/catch_interfaces_testcase.cpp + ${SOURCES_DIR}/catch_list.cpp + ${SOURCES_DIR}/catch_leak_detector.cpp + ${SOURCES_DIR}/catch_matchers.cpp + ${SOURCES_DIR}/catch_matchers_exception.cpp + ${SOURCES_DIR}/catch_matchers_floating.cpp + ${SOURCES_DIR}/catch_matchers_generic.cpp + ${SOURCES_DIR}/catch_matchers_string.cpp + ${SOURCES_DIR}/catch_message.cpp + ${SOURCES_DIR}/catch_output_redirect.cpp + ${SOURCES_DIR}/catch_registry_hub.cpp + ${SOURCES_DIR}/catch_interfaces_reporter.cpp + ${SOURCES_DIR}/catch_polyfills.cpp + ${SOURCES_DIR}/catch_random_number_generator.cpp + ${SOURCES_DIR}/catch_reporter_registry.cpp + ${SOURCES_DIR}/catch_result_type.cpp + ${SOURCES_DIR}/catch_run_context.cpp + ${SOURCES_DIR}/catch_section.cpp + ${SOURCES_DIR}/catch_session.cpp + ${SOURCES_DIR}/catch_singletons.cpp + ${SOURCES_DIR}/catch_startup_exception_registry.cpp + ${SOURCES_DIR}/catch_stream.cpp + ${SOURCES_DIR}/catch_stringref.cpp + ${SOURCES_DIR}/catch_string_manip.cpp + ${SOURCES_DIR}/catch_tag_alias.cpp + ${SOURCES_DIR}/catch_tag_alias_autoregistrar.cpp + ${SOURCES_DIR}/catch_tag_alias_registry.cpp + ${SOURCES_DIR}/catch_test_case_info.cpp + ${SOURCES_DIR}/catch_test_case_registry_impl.cpp + ${SOURCES_DIR}/catch_test_case_tracker.cpp + ${SOURCES_DIR}/catch_test_registry.cpp + ${SOURCES_DIR}/catch_test_spec.cpp + ${SOURCES_DIR}/catch_test_spec_parser.cpp + ${SOURCES_DIR}/catch_timer.cpp + ${SOURCES_DIR}/catch_tostring.cpp + ${SOURCES_DIR}/catch_totals.cpp + ${SOURCES_DIR}/catch_uncaught_exceptions.cpp + ${SOURCES_DIR}/catch_version.cpp + ${SOURCES_DIR}/catch_wildcard_pattern.cpp + ${SOURCES_DIR}/catch_xmlwriter.cpp +) +set(INTERNAL_FILES ${IMPL_SOURCES} ${INTERNAL_HEADERS}) +CheckFileList(INTERNAL_FILES ${SOURCES_DIR}/internal) + +# Please keep these ordered alphabetically +set(REPORTER_HEADERS + ${SOURCES_DIR}/reporters/catch_reporter_automake.hpp + ${SOURCES_DIR}/reporters/catch_reporter_bases.hpp + ${SOURCES_DIR}/reporters/catch_reporter_compact.h + ${SOURCES_DIR}/reporters/catch_reporter_console.h + ${SOURCES_DIR}/reporters/catch_reporter_junit.h + ${SOURCES_DIR}/reporters/catch_reporter_listening.h + ${SOURCES_DIR}/reporters/catch_reporter_tap.hpp + ${SOURCES_DIR}/reporters/catch_reporter_teamcity.hpp + ${SOURCES_DIR}/reporters/catch_reporter_xml.h + ${SOURCES_DIR}/reporters/catch_reporter_sonarqube.hpp +) +set(REPORTER_SOURCES + ${SOURCES_DIR}/reporters/catch_reporter_bases.cpp + ${SOURCES_DIR}/reporters/catch_reporter_compact.cpp + ${SOURCES_DIR}/reporters/catch_reporter_console.cpp + ${SOURCES_DIR}/reporters/catch_reporter_junit.cpp + ${SOURCES_DIR}/reporters/catch_reporter_listening.cpp + ${SOURCES_DIR}/reporters/catch_reporter_xml.cpp +) +set(REPORTER_FILES ${REPORTER_HEADERS} ${REPORTER_SOURCES}) +CheckFileList(REPORTER_FILES ${SOURCES_DIR}/reporters) + +# Fixme: STATIC because for dynamic, we would need to handle visibility +# and I don't want to do the annotations right now +add_library(Catch2 STATIC + ${REPORTER_FILES} + ${INTERNAL_FILES} + ${BENCHMARK_HEADERS} + ${BENCHMARK_SOURCES} +) + +target_include_directories(Catch2 + PUBLIC + $ + $ +)