GSL/tests/CMakeLists.txt

171 lines
4.2 KiB
CMake
Raw Normal View History

cmake_minimum_required(VERSION 2.8.7)
2015-08-20 21:09:14 -04:00
project(GSLTests CXX)
2015-08-20 21:09:14 -04:00
Update CMake usage (#493) * Refactor cmake file to have GSL as an interface CMake supports header only libraries as INTERFACE libraries. Using interfaces libraries make is easier for users to use the library because one just need to "link" agaisnt the library and necessary include paths, definitions, flags... will be taken care of. This commit creates a new interface library called GSL. It then add the following things to the GSL library: - compiler flags ex: (-std=c++14) - definitions ex: _SCL_SECURE_NO_WARNINGS - include paths ex: include/gsl - natvis file Another project can now have the GSL project as a git submodule and one only need to add the two following lines to their project to use the GSL. add_subdirectory(GSL) target_link_libraries(<some target> GSL) After cmake 3.8.0 a lot of the logic can be simplified. Right now the cmake file has an if for version checking, but when the minimun required version is 3.8.0 one can just delete the branching and keep the simpler version. * Cut support for c++11 Compiling on GCC6.2 with only the c++11 flag will generate compilation errors. For example some of the errors are related to the use of enable_if_t which is a c++14 feature. To avoid compilation errors this comiit removes c++11 support on linux. * Refactor code that pulls unittest-cpp Two minor changes: - uses cmake to find a proper installation of git (in case user does not have it on the path) - checks for the CMakeLists file instead. This is needed for the build itself and seems like a better way to do the checking * Refactor tests so they show together on VS This commit will make a VS geenrated project to group all tests under GSL_tests * Refactor tests configuration This creates a test configuration interface and add all the previous compiler options to that interface. compiler options are now sorted so it is easier to find them, and also one per line, so that modifications are easier to track from git.
2017-04-25 20:08:36 -04:00
# 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"
)
if(GIT_FOUND)
# add catch
ExternalProject_Add(
catch
PREFIX ${CMAKE_BINARY_DIR}/catch
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_TAG v2.0.1
CMAKE_ARGS ${CATCH_CMAKE_ARGS}
LOG_DOWNLOAD 1
UPDATE_DISCONNECTED 1
)
else()
# assume catch is installed in a system directory
add_custom_target(catch)
endif()
2015-08-20 21:09:14 -04:00
if (MSVC AND (GSL_CXX_STANDARD EQUAL 17))
set(GSL_CPLUSPLUS_OPT -Zc:__cplusplus)
endif()
Update CMake usage (#493) * Refactor cmake file to have GSL as an interface CMake supports header only libraries as INTERFACE libraries. Using interfaces libraries make is easier for users to use the library because one just need to "link" agaisnt the library and necessary include paths, definitions, flags... will be taken care of. This commit creates a new interface library called GSL. It then add the following things to the GSL library: - compiler flags ex: (-std=c++14) - definitions ex: _SCL_SECURE_NO_WARNINGS - include paths ex: include/gsl - natvis file Another project can now have the GSL project as a git submodule and one only need to add the two following lines to their project to use the GSL. add_subdirectory(GSL) target_link_libraries(<some target> GSL) After cmake 3.8.0 a lot of the logic can be simplified. Right now the cmake file has an if for version checking, but when the minimun required version is 3.8.0 one can just delete the branching and keep the simpler version. * Cut support for c++11 Compiling on GCC6.2 with only the c++11 flag will generate compilation errors. For example some of the errors are related to the use of enable_if_t which is a c++14 feature. To avoid compilation errors this comiit removes c++11 support on linux. * Refactor code that pulls unittest-cpp Two minor changes: - uses cmake to find a proper installation of git (in case user does not have it on the path) - checks for the CMakeLists file instead. This is needed for the build itself and seems like a better way to do the checking * Refactor tests so they show together on VS This commit will make a VS geenrated project to group all tests under GSL_tests * Refactor tests configuration This creates a test configuration interface and add all the previous compiler options to that interface. compiler options are now sorted so it is easier to find them, and also one per line, so that modifications are easier to track from git.
2017-04-25 20:08:36 -04:00
# 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
>
${GSL_CPLUSPLUS_OPT}
Update CMake usage (#493) * Refactor cmake file to have GSL as an interface CMake supports header only libraries as INTERFACE libraries. Using interfaces libraries make is easier for users to use the library because one just need to "link" agaisnt the library and necessary include paths, definitions, flags... will be taken care of. This commit creates a new interface library called GSL. It then add the following things to the GSL library: - compiler flags ex: (-std=c++14) - definitions ex: _SCL_SECURE_NO_WARNINGS - include paths ex: include/gsl - natvis file Another project can now have the GSL project as a git submodule and one only need to add the two following lines to their project to use the GSL. add_subdirectory(GSL) target_link_libraries(<some target> GSL) After cmake 3.8.0 a lot of the logic can be simplified. Right now the cmake file has an if for version checking, but when the minimun required version is 3.8.0 one can just delete the branching and keep the simpler version. * Cut support for c++11 Compiling on GCC6.2 with only the c++11 flag will generate compilation errors. For example some of the errors are related to the use of enable_if_t which is a c++14 feature. To avoid compilation errors this comiit removes c++11 support on linux. * Refactor code that pulls unittest-cpp Two minor changes: - uses cmake to find a proper installation of git (in case user does not have it on the path) - checks for the CMakeLists file instead. This is needed for the build itself and seems like a better way to do the checking * Refactor tests so they show together on VS This commit will make a VS geenrated project to group all tests under GSL_tests * Refactor tests configuration This creates a test configuration interface and add all the previous compiler options to that interface. compiler options are now sorted so it is easier to find them, and also one per line, so that modifications are easier to track from git.
2017-04-25 20:08:36 -04:00
$<$<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
)
Update CMake usage (#493) * Refactor cmake file to have GSL as an interface CMake supports header only libraries as INTERFACE libraries. Using interfaces libraries make is easier for users to use the library because one just need to "link" agaisnt the library and necessary include paths, definitions, flags... will be taken care of. This commit creates a new interface library called GSL. It then add the following things to the GSL library: - compiler flags ex: (-std=c++14) - definitions ex: _SCL_SECURE_NO_WARNINGS - include paths ex: include/gsl - natvis file Another project can now have the GSL project as a git submodule and one only need to add the two following lines to their project to use the GSL. add_subdirectory(GSL) target_link_libraries(<some target> GSL) After cmake 3.8.0 a lot of the logic can be simplified. Right now the cmake file has an if for version checking, but when the minimun required version is 3.8.0 one can just delete the branching and keep the simpler version. * Cut support for c++11 Compiling on GCC6.2 with only the c++11 flag will generate compilation errors. For example some of the errors are related to the use of enable_if_t which is a c++14 feature. To avoid compilation errors this comiit removes c++11 support on linux. * Refactor code that pulls unittest-cpp Two minor changes: - uses cmake to find a proper installation of git (in case user does not have it on the path) - checks for the CMakeLists file instead. This is needed for the build itself and seems like a better way to do the checking * Refactor tests so they show together on VS This commit will make a VS geenrated project to group all tests under GSL_tests * Refactor tests configuration This creates a test configuration interface and add all the previous compiler options to that interface. compiler options are now sorted so it is easier to find them, and also one per line, so that modifications are easier to track from git.
2017-04-25 20:08:36 -04:00
# set definitions for tests
target_compile_definitions(gsl_tests_config INTERFACE
GSL_THROW_ON_CONTRACT_VIOLATION
)
2015-08-20 21:09:14 -04:00
# 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)
Update CMake usage (#493) * Refactor cmake file to have GSL as an interface CMake supports header only libraries as INTERFACE libraries. Using interfaces libraries make is easier for users to use the library because one just need to "link" agaisnt the library and necessary include paths, definitions, flags... will be taken care of. This commit creates a new interface library called GSL. It then add the following things to the GSL library: - compiler flags ex: (-std=c++14) - definitions ex: _SCL_SECURE_NO_WARNINGS - include paths ex: include/gsl - natvis file Another project can now have the GSL project as a git submodule and one only need to add the two following lines to their project to use the GSL. add_subdirectory(GSL) target_link_libraries(<some target> GSL) After cmake 3.8.0 a lot of the logic can be simplified. Right now the cmake file has an if for version checking, but when the minimun required version is 3.8.0 one can just delete the branching and keep the simpler version. * Cut support for c++11 Compiling on GCC6.2 with only the c++11 flag will generate compilation errors. For example some of the errors are related to the use of enable_if_t which is a c++14 feature. To avoid compilation errors this comiit removes c++11 support on linux. * Refactor code that pulls unittest-cpp Two minor changes: - uses cmake to find a proper installation of git (in case user does not have it on the path) - checks for the CMakeLists file instead. This is needed for the build itself and seems like a better way to do the checking * Refactor tests so they show together on VS This commit will make a VS geenrated project to group all tests under GSL_tests * Refactor tests configuration This creates a test configuration interface and add all the previous compiler options to that interface. compiler options are now sorted so it is easier to find them, and also one per line, so that modifications are easier to track from git.
2017-04-25 20:08:36 -04:00
target_link_libraries(${name}
GSL
test_catch
Update CMake usage (#493) * Refactor cmake file to have GSL as an interface CMake supports header only libraries as INTERFACE libraries. Using interfaces libraries make is easier for users to use the library because one just need to "link" agaisnt the library and necessary include paths, definitions, flags... will be taken care of. This commit creates a new interface library called GSL. It then add the following things to the GSL library: - compiler flags ex: (-std=c++14) - definitions ex: _SCL_SECURE_NO_WARNINGS - include paths ex: include/gsl - natvis file Another project can now have the GSL project as a git submodule and one only need to add the two following lines to their project to use the GSL. add_subdirectory(GSL) target_link_libraries(<some target> GSL) After cmake 3.8.0 a lot of the logic can be simplified. Right now the cmake file has an if for version checking, but when the minimun required version is 3.8.0 one can just delete the branching and keep the simpler version. * Cut support for c++11 Compiling on GCC6.2 with only the c++11 flag will generate compilation errors. For example some of the errors are related to the use of enable_if_t which is a c++14 feature. To avoid compilation errors this comiit removes c++11 support on linux. * Refactor code that pulls unittest-cpp Two minor changes: - uses cmake to find a proper installation of git (in case user does not have it on the path) - checks for the CMakeLists file instead. This is needed for the build itself and seems like a better way to do the checking * Refactor tests so they show together on VS This commit will make a VS geenrated project to group all tests under GSL_tests * Refactor tests configuration This creates a test configuration interface and add all the previous compiler options to that interface. compiler options are now sorted so it is easier to find them, and also one per line, so that modifications are easier to track from git.
2017-04-25 20:08:36 -04:00
gsl_tests_config
)
add_dependencies(${name} catch)
add_test(
${name}
${name}
)
Update CMake usage (#493) * Refactor cmake file to have GSL as an interface CMake supports header only libraries as INTERFACE libraries. Using interfaces libraries make is easier for users to use the library because one just need to "link" agaisnt the library and necessary include paths, definitions, flags... will be taken care of. This commit creates a new interface library called GSL. It then add the following things to the GSL library: - compiler flags ex: (-std=c++14) - definitions ex: _SCL_SECURE_NO_WARNINGS - include paths ex: include/gsl - natvis file Another project can now have the GSL project as a git submodule and one only need to add the two following lines to their project to use the GSL. add_subdirectory(GSL) target_link_libraries(<some target> GSL) After cmake 3.8.0 a lot of the logic can be simplified. Right now the cmake file has an if for version checking, but when the minimun required version is 3.8.0 one can just delete the branching and keep the simpler version. * Cut support for c++11 Compiling on GCC6.2 with only the c++11 flag will generate compilation errors. For example some of the errors are related to the use of enable_if_t which is a c++14 feature. To avoid compilation errors this comiit removes c++11 support on linux. * Refactor code that pulls unittest-cpp Two minor changes: - uses cmake to find a proper installation of git (in case user does not have it on the path) - checks for the CMakeLists file instead. This is needed for the build itself and seems like a better way to do the checking * Refactor tests so they show together on VS This commit will make a VS geenrated project to group all tests under GSL_tests * Refactor tests configuration This creates a test configuration interface and add all the previous compiler options to that interface. compiler options are now sorted so it is easier to find them, and also one per line, so that modifications are easier to track from git.
2017-04-25 20:08:36 -04:00
# group all tests under GSL_tests
set_property(TARGET ${name} PROPERTY FOLDER "GSL_tests")
endfunction()
2016-02-24 14:26:28 -05:00
add_gsl_test(span_tests)
add_gsl_test(multi_span_tests)
2015-11-24 15:49:03 -05:00
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)
2016-11-17 13:45:06 -05:00
add_gsl_test(algorithm_tests)
# No exception tests
foreach(flag_var
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
STRING (REGEX REPLACE "/EHsc" "" ${flag_var} "${${flag_var}}")
endforeach(flag_var)
# this interface adds compile options to how the tests are run
# please try to keep entries ordered =)
add_library(gsl_tests_config_noexcept INTERFACE)
target_compile_options(gsl_tests_config_noexcept INTERFACE
$<$<CXX_COMPILER_ID:MSVC>:
/D_HAS_EXCEPTIONS=0
/wd4702
/wd4577
/W4
/WX
>
${GSL_CPLUSPLUS_OPT}
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:
-fno-strict-aliasing
-fno-exceptions
-Wall
-Wcast-align
-Wconversion
-Wctor-dtor-privacy
-Werror
-Wextra
-Wno-missing-braces
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wpedantic
-Wshadow
-Wsign-conversion
>
)
# set definitions for tests
target_compile_definitions(gsl_tests_config_noexcept INTERFACE
GSL_TERMINATE_ON_CONTRACT_VIOLATION
)
function(add_gsl_test_noexcept name)
add_executable(${name} ${name}.cpp)
target_link_libraries(${name}
GSL
gsl_tests_config_noexcept
)
add_test(
${name}
${name}
)
# group all tests under GSL_tests_noexcept
set_property(TARGET ${name} PROPERTY FOLDER "GSL_tests_noexcept")
endfunction()
add_gsl_test_noexcept(no_exception_throw_tests)
add_gsl_test_noexcept(no_exception_ensure_tests)