mirror of
https://github.com/microsoft/GSL.git
synced 2024-11-03 17:56:43 -05:00
25f913e200
Catch was being installed to the root of the cmake project. This violated the source code tree itself and would not work at all if GSL was being consumed with add_subdirectory. CMake will now install catch to the build tree under /dependencies.
99 lines
2.4 KiB
CMake
99 lines
2.4 KiB
CMake
cmake_minimum_required(VERSION 2.8.7)
|
|
|
|
project(GSLTests CXX)
|
|
|
|
# will make visual studio generated project group files
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
list(APPEND CATCH_CMAKE_ARGS
|
|
"-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/external"
|
|
"-DNO_SELFTEST=true"
|
|
)
|
|
|
|
# add catch
|
|
ExternalProject_Add(
|
|
catch
|
|
PREFIX ${CMAKE_BINARY_DIR}/catch
|
|
GIT_REPOSITORY https://github.com/philsquared/Catch.git
|
|
GIT_TAG v1.9.6
|
|
CMAKE_ARGS ${CATCH_CMAKE_ARGS}
|
|
LOG_DOWNLOAD 1
|
|
UPDATE_DISCONNECTED 1
|
|
)
|
|
|
|
# this interface adds compile options to how the tests are run
|
|
# please try to keep entries ordered =)
|
|
add_library(gsl_tests_config INTERFACE)
|
|
target_compile_options(gsl_tests_config INTERFACE
|
|
$<$<CXX_COMPILER_ID:MSVC>:
|
|
/EHsc
|
|
/W4
|
|
/WX
|
|
>
|
|
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:
|
|
-fno-strict-aliasing
|
|
-Wall
|
|
-Wcast-align
|
|
-Wconversion
|
|
-Wctor-dtor-privacy
|
|
-Werror
|
|
-Wextra
|
|
-Wno-missing-braces
|
|
-Wnon-virtual-dtor
|
|
-Wold-style-cast
|
|
-Woverloaded-virtual
|
|
-Wpedantic
|
|
-Wshadow
|
|
-Wsign-conversion
|
|
>
|
|
)
|
|
|
|
# for tests to find the catch header
|
|
target_include_directories(gsl_tests_config INTERFACE
|
|
${CMAKE_BINARY_DIR}/external/include
|
|
)
|
|
|
|
# set definitions for tests
|
|
target_compile_definitions(gsl_tests_config INTERFACE
|
|
GSL_THROW_ON_CONTRACT_VIOLATION
|
|
)
|
|
|
|
# create the main executable for each test. this reduces the compile time
|
|
# of each test by pre-compiling catch.
|
|
add_library(test_catch STATIC test.cpp)
|
|
target_link_libraries(test_catch
|
|
GSL
|
|
gsl_tests_config
|
|
)
|
|
add_dependencies(test_catch catch)
|
|
set_property(TARGET test_catch PROPERTY FOLDER "GSL_tests")
|
|
|
|
function(add_gsl_test name)
|
|
add_executable(${name} ${name}.cpp)
|
|
target_link_libraries(${name}
|
|
GSL
|
|
test_catch
|
|
gsl_tests_config
|
|
)
|
|
add_dependencies(${name} catch)
|
|
add_test(
|
|
${name}
|
|
${name}
|
|
)
|
|
# group all tests under GSL_tests
|
|
set_property(TARGET ${name} PROPERTY FOLDER "GSL_tests")
|
|
endfunction()
|
|
|
|
add_gsl_test(span_tests)
|
|
add_gsl_test(multi_span_tests)
|
|
add_gsl_test(strided_span_tests)
|
|
add_gsl_test(string_span_tests)
|
|
add_gsl_test(at_tests)
|
|
add_gsl_test(bounds_tests)
|
|
add_gsl_test(notnull_tests)
|
|
add_gsl_test(assertion_tests)
|
|
add_gsl_test(utils_tests)
|
|
add_gsl_test(owner_tests)
|
|
add_gsl_test(byte_tests)
|
|
add_gsl_test(algorithm_tests)
|