|  | # | 
|  | # Build examples. | 
|  | # | 
|  | # Requires CATCH_BUILD_EXAMPLES to be defined 'true', see ../CMakeLists.txt. | 
|  | # | 
|  |  | 
|  | cmake_minimum_required( VERSION 3.0 ) | 
|  |  | 
|  | project( CatchExamples CXX ) | 
|  |  | 
|  | message( STATUS "Examples included" ) | 
|  |  | 
|  | # define folders used: | 
|  |  | 
|  | set( EXAMPLES_DIR ${CATCH_DIR}/examples ) | 
|  | set( HEADER_DIR   ${CATCH_DIR}/single_include ) | 
|  | set( REPORTER_HEADER_DIR ${CATCH_DIR}/include/reporters ) | 
|  |  | 
|  | # single-file sources: | 
|  |  | 
|  | set( SOURCES_SINGLE_FILE | 
|  | 010-TestCase.cpp | 
|  | 231-Cfg-OutputStreams.cpp | 
|  | ) | 
|  |  | 
|  | # multiple-file modules: | 
|  |  | 
|  | set( SOURCES_020 | 
|  | 020-TestCase-1.cpp | 
|  | 020-TestCase-2.cpp | 
|  | ) | 
|  |  | 
|  | # main for idiomatic test sources: | 
|  |  | 
|  | set( SOURCES_IDIOMATIC_MAIN | 
|  | 000-CatchMain.cpp | 
|  | ) | 
|  |  | 
|  | # sources to combine with 000-CatchMain.cpp: | 
|  |  | 
|  | set( SOURCES_IDIOMATIC_TESTS | 
|  | 030-Asn-Require-Check.cpp | 
|  | 100-Fix-Section.cpp | 
|  | 110-Fix-ClassFixture.cpp | 
|  | 120-Bdd-ScenarioGivenWhenThen.cpp | 
|  | 210-Evt-EventListeners.cpp | 
|  | 300-Gen-OwnGenerator.cpp | 
|  | 301-Gen-MapTypeConversion.cpp | 
|  | 310-Gen-VariablesInGenerators.cpp | 
|  | 311-Gen-CustomCapture.cpp | 
|  | ) | 
|  |  | 
|  | # main-s for reporter-specific test sources: | 
|  |  | 
|  | set( SOURCES_REPORTERS_MAIN | 
|  | 200-Rpt-CatchMain.cpp | 
|  | ) | 
|  |  | 
|  | string( REPLACE ".cpp" "" BASENAMES_REPORTERS_MAIN 200-Rpt-CatchMain.cpp ) | 
|  |  | 
|  | set( NAMES_REPORTERS TeamCity ) | 
|  |  | 
|  | foreach( reporter ${NAMES_REPORTERS} ) | 
|  | list( APPEND SOURCES_SPECIFIC_REPORTERS_MAIN ${BASENAMES_REPORTERS_MAIN}${reporter}.cpp ) | 
|  | endforeach() | 
|  |  | 
|  | # sources to combine with 200-Rpt-CatchMain{Reporter}.cpp: | 
|  |  | 
|  | set( SOURCES_REPORTERS_TESTS | 
|  | 207-Rpt-TeamCityReporter.cpp | 
|  | ) | 
|  |  | 
|  | # check if all sources are listed, warn if not: | 
|  |  | 
|  | set( SOURCES_ALL | 
|  | ${SOURCES_020} | 
|  | ${SOURCES_SINGLE_FILE} | 
|  | ${SOURCES_IDIOMATIC_MAIN} | 
|  | ${SOURCES_IDIOMATIC_TESTS} | 
|  | ${SOURCES_REPORTERS_MAIN} | 
|  | ${SOURCES_REPORTERS_TESTS} | 
|  | ) | 
|  |  | 
|  | foreach( name ${SOURCES_ALL} ) | 
|  | list( APPEND SOURCES_ALL_PATH ${EXAMPLES_DIR}/${name} ) | 
|  | endforeach() | 
|  |  | 
|  | CheckFileList( SOURCES_ALL_PATH ${EXAMPLES_DIR} ) | 
|  |  | 
|  | # create target names: | 
|  |  | 
|  | string( REPLACE ".cpp" "" BASENAMES_SINGLE_FILE     "${SOURCES_SINGLE_FILE}" ) | 
|  | string( REPLACE ".cpp" "" BASENAMES_IDIOMATIC_TESTS "${SOURCES_IDIOMATIC_TESTS}" ) | 
|  | string( REPLACE ".cpp" "" BASENAMES_REPORTERS_TESTS "${SOURCES_REPORTERS_TESTS}" ) | 
|  | string( REPLACE ".cpp" "" BASENAMES_REPORTERS_MAIN  "${SOURCES_REPORTERS_MAIN}" ) | 
|  |  | 
|  | set( TARGETS_SINGLE_FILE     ${BASENAMES_SINGLE_FILE} ) | 
|  | set( TARGETS_IDIOMATIC_TESTS ${BASENAMES_IDIOMATIC_TESTS} ) | 
|  | set( TARGETS_REPORTERS_TESTS ${BASENAMES_REPORTERS_TESTS} ) | 
|  | set( TARGETS_REPORTERS_MAIN  ${BASENAMES_REPORTERS_MAIN} ) | 
|  |  | 
|  | set( TARGETS_ALL | 
|  | ${TARGETS_SINGLE_FILE} | 
|  | 020-TestCase | 
|  | ${TARGETS_IDIOMATIC_TESTS} CatchMain | 
|  | ${TARGETS_REPORTERS_TESTS} CatchMainTeamCity | 
|  | ) | 
|  |  | 
|  | # define program targets: | 
|  |  | 
|  | add_library( CatchMain         OBJECT ${EXAMPLES_DIR}/${SOURCES_IDIOMATIC_MAIN} ${HEADER_DIR}/catch2/catch.hpp ) | 
|  | #add_library( CatchMainAutomake OBJECT ${EXAMPLES_DIR}/200-Rpt-CatchMain.cpp ${HEADER_DIR}/catch2/catch.hpp ) | 
|  | #add_library( CatchMainTap      OBJECT ${EXAMPLES_DIR}/200-Rpt-CatchMain.cpp ${HEADER_DIR}/catch2/catch.hpp ) | 
|  | add_library( CatchMainTeamCity OBJECT ${EXAMPLES_DIR}/200-Rpt-CatchMain.cpp ${HEADER_DIR}/catch2/catch.hpp ) | 
|  |  | 
|  | #target_compile_definitions( CatchMainAutomake PRIVATE CATCH_EXAMPLE_RPT_1=\"include/reporters/catch_reporter_automake.hpp\" ) | 
|  | #target_compile_definitions( CatchMainTap      PRIVATE CATCH_EXAMPLE_RPT_1=\"include/reporters/catch_reporter_tap.hpp\" ) | 
|  | target_compile_definitions( CatchMainTeamCity PRIVATE CATCH_EXAMPLE_RPT_1=\"include/reporters/catch_reporter_teamcity.hpp\" ) | 
|  |  | 
|  | foreach( name ${TARGETS_SINGLE_FILE} ) | 
|  | add_executable( ${name} ${EXAMPLES_DIR}/${name}.cpp ${HEADER_DIR}/catch2/catch.hpp ) | 
|  | endforeach() | 
|  |  | 
|  | foreach( name ${TARGETS_IDIOMATIC_TESTS} ) | 
|  | add_executable( ${name} ${EXAMPLES_DIR}/${name}.cpp $<TARGET_OBJECTS:CatchMain> ${HEADER_DIR}/catch2/catch.hpp ) | 
|  | endforeach() | 
|  |  | 
|  | add_executable( 020-TestCase ${EXAMPLES_DIR}/020-TestCase-1.cpp ${EXAMPLES_DIR}/020-TestCase-2.cpp ${HEADER_DIR}/catch2/catch.hpp ) | 
|  |  | 
|  | #add_executable( 207-Rpt-AutomakeReporter ${EXAMPLES_DIR}/207-Rpt-AutomakeReporter.cpp $<TARGET_OBJECTS:CatchMainAutomake> ${HEADER_DIR}/catch2/catch.hpp ) | 
|  | #add_executable( 207-Rpt-TapReporter      ${EXAMPLES_DIR}/207-Rpt-TapReporter.cpp      $<TARGET_OBJECTS:CatchMainTap>      ${HEADER_DIR}/catch2/catch.hpp ) | 
|  | add_executable( 207-Rpt-TeamCityReporter ${EXAMPLES_DIR}/207-Rpt-TeamCityReporter.cpp $<TARGET_OBJECTS:CatchMainTeamCity> ${HEADER_DIR}/catch2/catch.hpp ) | 
|  |  | 
|  | #foreach( name ${TARGETS_REPORTERS_TESTS} ) | 
|  | #    add_executable( ${name} ${EXAMPLES_DIR}/${name}.cpp $<TARGET_OBJECTS:CatchMain> ${HEADER_DIR}/catch2/catch.hpp ) | 
|  | #endforeach() | 
|  |  | 
|  | foreach( name ${TARGETS_ALL} ) | 
|  | target_include_directories( ${name} PRIVATE ${HEADER_DIR} ${CATCH_DIR} ) | 
|  |  | 
|  | set_property(TARGET ${name} PROPERTY CXX_STANDARD 11) | 
|  | set_property(TARGET ${name} PROPERTY CXX_EXTENSIONS OFF) | 
|  |  | 
|  | # Add desired warnings | 
|  | if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang|AppleClang|GNU" ) | 
|  | target_compile_options( ${name}  PRIVATE -Wall -Wextra -Wunreachable-code ) | 
|  | endif() | 
|  | # Clang specific warning go here | 
|  | if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" ) | 
|  | # Actually keep these | 
|  | target_compile_options( ${name}  PRIVATE -Wweak-vtables -Wexit-time-destructors -Wglobal-constructors -Wmissing-noreturn ) | 
|  | endif() | 
|  | if ( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" ) | 
|  | target_compile_options( ${name}  PRIVATE /W4 /w44265 /WX ) | 
|  | endif() | 
|  | endforeach() | 
|  |  |