if(NOT EXISTS "${CLI11_SOURCE_DIR}/extern/googletest/CMakeLists.txt") message(FATAL_ERROR "You have requested tests be built, but googletest is not downloaded. Please run: git submodule update --init") endif() list(APPEND CMAKE_MODULE_PATH "${CLI11_SOURCE_DIR}/cmake") # If submodule is available, add sanitizers # Set SANITIZE_ADDRESS, SANITIZE_MEMORY, SANITIZE_THREAD or SANITIZE_UNDEFINED if(EXISTS "${CLI11_SOURCE_DIR}/extern/sanitizers/cmake/FindSanitizers.cmake") list(APPEND CMAKE_MODULE_PATH "${CLI11_SOURCE_DIR}/extern/sanitizers/cmake") find_package(Sanitizers) if(SANITIZE_ADDRESS) message(STATUS "You might want to use \"${ASan_WRAPPER}\" to run your program") endif() else() macro(add_sanitizers) endmacro() endif() set(GOOGLE_TEST_INDIVIDUAL OFF) include(AddGoogletest) set(CLI11_TESTS HelpersTest IniTest SimpleTest AppTest SetTest TransformTest CreationTest SubcommandTest HelpTest FormatterTest NewParseTest OptionalTest DeprecatedTest StringParseTest TrueFalseTest OptionGroupTest ) if(WIN32) list(APPEND CLI11_TESTS WindowsTest) endif() set(CLI11_MULTIONLY_TESTS TimerTest ) # Only affects current directory, so safe include_directories(${CMAKE_CURRENT_SOURCE_DIR}) foreach(T ${CLI11_TESTS}) add_executable(${T} ${T}.cpp ${CLI11_headers}) add_sanitizers(${T}) target_link_libraries(${T} PUBLIC CLI11 CLI11_warnings) add_gtest(${T}) if(CLI11_SINGLE_FILE AND CLI11_SINGLE_FILE_TESTS) add_executable(${T}_Single ${T}.cpp) target_link_libraries(${T}_Single PUBLIC CLI11_SINGLE) add_gtest(${T}_Single) set_target_properties(${T}_Single PROPERTIES FOLDER "Tests Single File") endif() endforeach() foreach(T ${CLI11_MULTIONLY_TESTS}) add_executable(${T} ${T}.cpp ${CLI11_headers}) add_sanitizers(${T}) target_link_libraries(${T} PUBLIC CLI11) add_gtest(${T}) endforeach() # Add -Wno-deprecated-declarations to DeprecatedTest if(NOT MSVC) target_compile_options(DeprecatedTest PRIVATE -Wno-deprecated-declarations) if(TARGET DeprecatedTest_Single) target_compile_options(DeprecatedTest_Single PRIVATE -Wno-deprecated-declarations) endif() else() target_compile_options(DeprecatedTest PRIVATE "/wd4996") if(TARGET DeprecatedTest_Single) target_compile_options(DeprecatedTest_Single PRIVATE "/wd4996") endif() endif() # Link test (build error if inlines missing) add_library(link_test_1 link_test_1.cpp) target_link_libraries(link_test_1 PUBLIC CLI11) set_target_properties(link_test_1 PROPERTIES FOLDER "Tests") add_executable(link_test_2 link_test_2.cpp) target_link_libraries(link_test_2 PUBLIC CLI11 link_test_1) add_gtest(link_test_2) # Add informational printout # Force this to be in a standard location so CTest can find it add_executable(informational informational.cpp) target_link_libraries(informational PUBLIC CLI11) set_target_properties(informational PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}" RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}" RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}" RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}" ) # Adding this printout to CTest file(WRITE "${PROJECT_BINARY_DIR}/CTestCustom.cmake" "set(CTEST_CUSTOM_PRE_TEST \"${CMAKE_BINARY_DIR}/informational\")" ) # Add boost to test boost::optional if available find_package(Boost 1.61) if(Boost_FOUND) if(TARGET Boost::boost) target_link_libraries(informational PRIVATE Boost::boost) target_link_libraries(OptionalTest PRIVATE Boost::boost) else() target_include_directories(informational PRIVATE ${Boost_INCLUDE_DIRS}) target_include_directories(OptionalTest PRIVATE ${Boost_INCLUDE_DIRS}) endif() target_compile_definitions(informational PRIVATE CLI11_BOOST_OPTIONAL) target_compile_definitions(OptionalTest PRIVATE CLI11_BOOST_OPTIONAL) endif() if(CMAKE_BUILD_TYPE STREQUAL Coverage) include(CodeCoverage) setup_target_for_coverage( NAME CLI11_coverage EXECUTABLE ctest DEPENDENCIES ${CLI11_TESTS} ${CLI11_MULTIONLY_TESTS}) endif()