mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-17 03:02:24 +01:00
162 lines
7.3 KiB
CMake
162 lines
7.3 KiB
CMake
cmake_minimum_required(VERSION 2.8)
|
|
|
|
project(Catch)
|
|
|
|
# define some folders
|
|
get_filename_component(CATCH_DIR "${CMAKE_CURRENT_SOURCE_DIR}" PATH)
|
|
get_filename_component(CATCH_DIR "${CATCH_DIR}" PATH)
|
|
set(SELF_TEST_DIR ${CATCH_DIR}/projects/SelfTest)
|
|
|
|
# checks that the given hard-coded list contains all headers and sources in the given folder
|
|
function(CheckFileList HARD_CODED_LIST_VAR RELATIVE_FOLDER)
|
|
set(MESSAGE " should be added to the variable ${HARD_CODED_LIST_VAR}")
|
|
set(MESSAGE "${MESSAGE} in ${CMAKE_CURRENT_LIST_FILE}\n")
|
|
file(GLOB GLOBBED_LIST "${CATCH_DIR}/${RELATIVE_FOLDER}/*.cpp"
|
|
"${CATCH_DIR}/${RELATIVE_FOLDER}/*.hpp"
|
|
"${CATCH_DIR}/${RELATIVE_FOLDER}/*.h")
|
|
list(REMOVE_ITEM GLOBBED_LIST ${${HARD_CODED_LIST_VAR}})
|
|
foreach(EXTRA_ITEM ${GLOBBED_LIST})
|
|
string(REPLACE "${CATCH_DIR}/" "" RELATIVE_FILE_NAME "${EXTRA_ITEM}")
|
|
message(AUTHOR_WARNING "The file \"${RELATIVE_FILE_NAME}\"${MESSAGE}")
|
|
endforeach()
|
|
endfunction()
|
|
|
|
# define the sources of Catch
|
|
set(CATCH_HEADERS
|
|
"${CATCH_DIR}/include/catch.hpp"
|
|
"${CATCH_DIR}/include/catch_runner.hpp"
|
|
"${CATCH_DIR}/include/catch_with_main.hpp"
|
|
)
|
|
source_group("include" FILES ${CATCH_HEADERS})
|
|
CheckFileList(CATCH_HEADERS "include")
|
|
|
|
set(CATCH_INTERNAL_HEADERS
|
|
"${CATCH_DIR}/include/internal/catch_approx.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_assertionresult.h"
|
|
"${CATCH_DIR}/include/internal/catch_assertionresult.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_capture.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_commandline.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_common.h"
|
|
"${CATCH_DIR}/include/internal/catch_compiler_capabilities.h"
|
|
"${CATCH_DIR}/include/internal/catch_config.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_console_colour.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_console_colour_impl.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_context.h"
|
|
"${CATCH_DIR}/include/internal/catch_context_impl.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_debugger.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_default_main.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_evaluate.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_exception_translator_registry.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_expressionresult_builder.h"
|
|
"${CATCH_DIR}/include/internal/catch_expressionresult_builder.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_expression_decomposer.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_expression_lhs.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_generators.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_generators_impl.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_impl.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_interfaces_capture.h"
|
|
"${CATCH_DIR}/include/internal/catch_interfaces_config.h"
|
|
"${CATCH_DIR}/include/internal/catch_interfaces_exception.h"
|
|
"${CATCH_DIR}/include/internal/catch_interfaces_generators.h"
|
|
"${CATCH_DIR}/include/internal/catch_interfaces_registry_hub.h"
|
|
"${CATCH_DIR}/include/internal/catch_interfaces_reporter.h"
|
|
"${CATCH_DIR}/include/internal/catch_interfaces_runner.h"
|
|
"${CATCH_DIR}/include/internal/catch_interfaces_testcase.h"
|
|
"${CATCH_DIR}/include/internal/catch_legacy_reporter_adapter.h"
|
|
"${CATCH_DIR}/include/internal/catch_legacy_reporter_adapter.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_list.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_matchers.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_message.h"
|
|
"${CATCH_DIR}/include/internal/catch_message.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_notimplemented_exception.h"
|
|
"${CATCH_DIR}/include/internal/catch_notimplemented_exception.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_objc.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_objc_arc.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_option.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_platform.h"
|
|
"${CATCH_DIR}/include/internal/catch_ptr.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_registry_hub.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_reporter_registrars.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_reporter_registry.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_result_type.h"
|
|
"${CATCH_DIR}/include/internal/catch_runner_impl.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_section.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_section_info.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_sfinae.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_stream.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_streambuf.h"
|
|
"${CATCH_DIR}/include/internal/catch_tags.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_test_case_info.h"
|
|
"${CATCH_DIR}/include/internal/catch_test_case_info.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_test_case_registry_impl.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_test_case_tracker.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_test_registry.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_test_spec.h"
|
|
"${CATCH_DIR}/include/internal/catch_text.h"
|
|
"${CATCH_DIR}/include/internal/catch_text.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_timer.h"
|
|
"${CATCH_DIR}/include/internal/catch_timer.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_tostring.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_totals.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_version.h"
|
|
"${CATCH_DIR}/include/internal/catch_version.hpp"
|
|
"${CATCH_DIR}/include/internal/catch_xmlwriter.hpp"
|
|
"${CATCH_DIR}/include/internal/clara.h"
|
|
)
|
|
source_group("include\\internal" FILES ${CATCH_INTERNAL_HEADERS})
|
|
CheckFileList(CATCH_INTERNAL_HEADERS "include/internal")
|
|
|
|
set(CATCH_REPORTERS_HEADERS
|
|
"${CATCH_DIR}/include/reporters/catch_reporter_console.hpp"
|
|
"${CATCH_DIR}/include/reporters/catch_reporter_junit.hpp"
|
|
"${CATCH_DIR}/include/reporters/catch_reporter_xml.hpp"
|
|
)
|
|
source_group("include\\reporters" FILES ${CATCH_REPORTERS_HEADERS})
|
|
CheckFileList(CATCH_REPORTERS_HEADERS "include/reporters")
|
|
|
|
set(CATCH_SINGLE_INCLUDE "${CATCH_DIR}/single_include/catch.hpp")
|
|
source_group("single_include" FILES ${CATCH_SINGLE_INCLUDE})
|
|
CheckFileList(CATCH_SINGLE_INCLUDE "single_include")
|
|
|
|
# define the sources of the self test
|
|
set(TEST_SOURCES
|
|
"${SELF_TEST_DIR}/ApproxTests.cpp"
|
|
"${SELF_TEST_DIR}/BDDTests.cpp"
|
|
"${SELF_TEST_DIR}/catch_self_test.cpp"
|
|
"${SELF_TEST_DIR}/catch_self_test.hpp"
|
|
"${SELF_TEST_DIR}/ClassTests.cpp"
|
|
"${SELF_TEST_DIR}/CmdLineTests.cpp"
|
|
"${SELF_TEST_DIR}/ConditionTests.cpp"
|
|
"${SELF_TEST_DIR}/ExceptionTests.cpp"
|
|
"${SELF_TEST_DIR}/GeneratorTests.cpp"
|
|
"${SELF_TEST_DIR}/MessageTests.cpp"
|
|
"${SELF_TEST_DIR}/MiscTests.cpp"
|
|
"${SELF_TEST_DIR}/SectionTrackerTests.cpp"
|
|
"${SELF_TEST_DIR}/TestMain.cpp"
|
|
"${SELF_TEST_DIR}/TrickyTests.cpp"
|
|
"${SELF_TEST_DIR}/VariadicMacrosTests.cpp"
|
|
)
|
|
CheckFileList(TEST_SOURCES "projects/SelfTest")
|
|
|
|
# add custom targets comprising Catch header files
|
|
add_custom_target(Catch SOURCES
|
|
${CATCH_HEADERS}
|
|
${CATCH_INTERNAL_HEADERS}
|
|
${CATCH_REPORTERS_HEADERS}
|
|
${CATCH_SINGLE_INCLUDE}
|
|
)
|
|
|
|
# configure the test executable
|
|
include_directories(${CATCH_DIR}/include)
|
|
add_executable(SelfTest ${TEST_SOURCES})
|
|
|
|
# configure unit tests via CTest
|
|
enable_testing()
|
|
add_test(NAME RunTests COMMAND SelfTest)
|
|
|
|
add_test(NAME ListTests COMMAND SelfTest --list-tests)
|
|
set_tests_properties(ListTests PROPERTIES PASS_REGULAR_EXPRESSION "[0-9]+ test cases")
|
|
|
|
add_test(NAME ListTags COMMAND SelfTest --list-tags)
|
|
set_tests_properties(ListTags PROPERTIES PASS_REGULAR_EXPRESSION "[0-9]+ tags")
|