catch2/projects/CMake/CMakeLists.txt

162 lines
7.3 KiB
CMake
Raw Normal View History

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
2013-08-05 12:57:29 +02:00
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")