Blame examples/CMakeLists.txt

rpm-build a7f80b
#
rpm-build a7f80b
# Build examples.
rpm-build a7f80b
#
rpm-build a7f80b
# Requires CATCH_BUILD_EXAMPLES to be defined 'true', see ../CMakeLists.txt.
rpm-build a7f80b
#
rpm-build a7f80b
rpm-build a7f80b
cmake_minimum_required( VERSION 3.0 )
rpm-build a7f80b
rpm-build a7f80b
project( CatchExamples CXX )
rpm-build a7f80b
rpm-build a7f80b
# define folders used:
rpm-build a7f80b
rpm-build a7f80b
set( EXAMPLES_DIR ${CATCH_DIR}/examples )
rpm-build a7f80b
set( HEADER_DIR   ${CATCH_DIR}/single_include )
rpm-build a7f80b
rpm-build a7f80b
# single-file sources:
rpm-build a7f80b
rpm-build a7f80b
set( SOURCES_SINGLE_FILE
rpm-build a7f80b
    010-TestCase.cpp
rpm-build a7f80b
)
rpm-build a7f80b
rpm-build a7f80b
# multiple-file modules:
rpm-build a7f80b
rpm-build a7f80b
set( SOURCES_020
rpm-build a7f80b
    020-TestCase-1.cpp
rpm-build a7f80b
    020-TestCase-2.cpp
rpm-build a7f80b
)
rpm-build a7f80b
rpm-build a7f80b
# main for idiomatic test sources:
rpm-build a7f80b
rpm-build a7f80b
set( SOURCES_IDIOMATIC_MAIN
rpm-build a7f80b
    000-CatchMain.cpp
rpm-build a7f80b
)
rpm-build a7f80b
rpm-build a7f80b
# sources to combine with 000-CatchMain.cpp:
rpm-build a7f80b
rpm-build a7f80b
set( SOURCES_IDIOMATIC_TESTS
rpm-build a7f80b
    030-Asn-Require-Check.cpp
rpm-build a7f80b
    100-Fix-Section.cpp
rpm-build a7f80b
    110-Fix-ClassFixture.cpp
rpm-build a7f80b
    120-Bdd-ScenarioGivenWhenThen.cpp
rpm-build a7f80b
    210-Evt-EventListeners.cpp
rpm-build a7f80b
)
rpm-build a7f80b
rpm-build a7f80b
# check if all sources are listed, warn if not:
rpm-build a7f80b
rpm-build a7f80b
set( SOURCES_ALL
rpm-build a7f80b
    ${SOURCES_020}
rpm-build a7f80b
    ${SOURCES_SINGLE_FILE}
rpm-build a7f80b
    ${SOURCES_IDIOMATIC_MAIN}
rpm-build a7f80b
    ${SOURCES_IDIOMATIC_TESTS}
rpm-build a7f80b
)
rpm-build a7f80b
rpm-build a7f80b
foreach( name ${SOURCES_ALL} )
rpm-build a7f80b
    list( APPEND SOURCES_ALL_PATH ${EXAMPLES_DIR}/${name} )
rpm-build a7f80b
endforeach()
rpm-build a7f80b
rpm-build a7f80b
CheckFileList( SOURCES_ALL_PATH ${EXAMPLES_DIR} )
rpm-build a7f80b
rpm-build a7f80b
# create target names:
rpm-build a7f80b
rpm-build a7f80b
string( REPLACE ".cpp" "" BASENAMES_SINGLE_FILE     "${SOURCES_SINGLE_FILE}" )
rpm-build a7f80b
string( REPLACE ".cpp" "" BASENAMES_IDIOMATIC_TESTS "${SOURCES_IDIOMATIC_TESTS}" )
rpm-build a7f80b
rpm-build a7f80b
set( TARGETS_SINGLE_FILE     ${BASENAMES_SINGLE_FILE} )
rpm-build a7f80b
set( TARGETS_IDIOMATIC_TESTS ${BASENAMES_IDIOMATIC_TESTS} )
rpm-build a7f80b
set( TARGETS_ALL             ${TARGETS_SINGLE_FILE} ${TARGETS_IDIOMATIC_TESTS} 020-TestCase CatchMain )
rpm-build a7f80b
rpm-build a7f80b
# define program targets:
rpm-build a7f80b
rpm-build a7f80b
add_library( CatchMain OBJECT ${EXAMPLES_DIR}/${SOURCES_IDIOMATIC_MAIN} ${HEADER_DIR}/catch.hpp )
rpm-build a7f80b
rpm-build a7f80b
add_executable( 020-TestCase ${EXAMPLES_DIR}/020-TestCase-1.cpp ${EXAMPLES_DIR}/020-TestCase-2.cpp ${HEADER_DIR}/catch.hpp )
rpm-build a7f80b
rpm-build a7f80b
foreach( name ${TARGETS_SINGLE_FILE} )
rpm-build a7f80b
    add_executable( ${name} ${EXAMPLES_DIR}/${name}.cpp ${HEADER_DIR}/catch.hpp )
rpm-build a7f80b
endforeach()
rpm-build a7f80b
rpm-build a7f80b
foreach( name ${TARGETS_IDIOMATIC_TESTS} )
rpm-build a7f80b
    add_executable( ${name} ${EXAMPLES_DIR}/${name}.cpp $<TARGET_OBJECTS:CatchMain> ${HEADER_DIR}/catch.hpp )
rpm-build a7f80b
endforeach()
rpm-build a7f80b
rpm-build a7f80b
foreach( name ${TARGETS_ALL} )
rpm-build a7f80b
    target_include_directories( ${name} PRIVATE ${HEADER_DIR} )
rpm-build a7f80b
rpm-build a7f80b
    set_property(TARGET ${name} PROPERTY CXX_STANDARD 11)
rpm-build a7f80b
rpm-build a7f80b
    # Add desired warnings
rpm-build a7f80b
    if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang|AppleClang|GNU" )
rpm-build a7f80b
        target_compile_options( ${name}  PRIVATE -Wall -Wextra -Wunreachable-code )
rpm-build a7f80b
    endif()
rpm-build a7f80b
    # Clang specific warning go here
rpm-build a7f80b
    if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
rpm-build a7f80b
        # Actually keep these
rpm-build a7f80b
        target_compile_options( ${name}  PRIVATE -Wweak-vtables -Wexit-time-destructors -Wglobal-constructors -Wmissing-noreturn )
rpm-build a7f80b
    endif()
rpm-build a7f80b
    if ( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
rpm-build a7f80b
        target_compile_options( ${name}  PRIVATE /W4 /w44265 /WX )
rpm-build a7f80b
    endif()
rpm-build a7f80b
endforeach()