Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/microsoft/GSL.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt43
-rw-r--r--tests/CMakeLists.txt73
2 files changed, 93 insertions, 23 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4b96546..e4e4e48 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,6 +2,49 @@ cmake_minimum_required(VERSION 2.8.7)
project(GSL CXX)
+# creates a library GSL which is an interface (header files only)
+add_library(GSL INTERFACE)
+
+# when minimum version required is 3.8.0 remove if below
+# both branches do exactly the same thing
+if ( CMAKE_MAJOR_VERSION VERSION_LESS 3.7.9)
+ if (NOT MSVC)
+ include(CheckCXXCompilerFlag)
+ CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
+ if(COMPILER_SUPPORTS_CXX14)
+ target_compile_options(GSL INTERFACE "-std=c++14")
+ else()
+ message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. Please use a different C++ compiler.")
+ endif()
+
+ endif()
+else ()
+ # set the GSL library to be compiled only with c++14
+ target_compile_features(GSL INTERFACE cxx_std_14)
+ # on *nix systems force the use of -std=c++XX instead of -std=gnu++XX (default)
+ set(CMAKE_CXX_EXTENSIONS OFF)
+endif()
+
+# add definitions to the library and targets that consume it
+target_compile_definitions(GSL INTERFACE
+ $<$<CXX_COMPILER_ID:MSVC>:
+ # remove unnecessary warnings about unchecked iterators
+ _SCL_SECURE_NO_WARNINGS
+ >
+)
+
+# add include folders to the library and targets that consume it
+target_include_directories(GSL INTERFACE
+ $<BUILD_INTERFACE:
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ >
+)
+
+# add natvis file to the library so it will automatically be loaded into Visual Studio
+target_sources(GSL INTERFACE
+ ${CMAKE_CURRENT_SOURCE_DIR}/GSL.natvis
+)
+
install(
DIRECTORY include/gsl
DESTINATION include
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index b56cc26..eb08360 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -2,43 +2,70 @@ cmake_minimum_required(VERSION 2.8.7)
project(GSLTests CXX)
-if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/unittest-cpp/tests)
- execute_process(COMMAND git submodule update --init WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
+# will make visual studio generated project group files
+set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+
+if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/unittest-cpp/CMakeLists.txt)
+ find_package(Git)
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} submodule update --init
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ )
endif()
add_subdirectory(unittest-cpp)
-include_directories(
- ../include
+# 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
+ >
+)
+
+# set test to include the unittest-cpp headers
+# this shiuld be removed when UnitTest++ has the proper headers
+target_include_directories(gsl_tests_config INTERFACE
./unittest-cpp
)
-add_definitions(-DGSL_THROW_ON_CONTRACT_VIOLATION)
-
-if(MSVC) # has the support we need
- # remove unnecessary warnings about unchecked iterators
- add_definitions(-D_SCL_SECURE_NO_WARNINGS)
- add_compile_options(/EHsc /W4 /WX)
-else()
- include(CheckCXXCompilerFlag)
- CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
- CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
- if(COMPILER_SUPPORTS_CXX14)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing -std=c++14 -Werror -Wall -Wextra -Wpedantic -Wno-missing-braces -Wconversion -Wsign-conversion -Wctor-dtor-privacy -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Woverloaded-virtual")
- elseif(COMPILER_SUPPORTS_CXX11)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing -std=c++11 -Werror -Wall -Wextra -Wpedantic -Wno-missing-braces -Wconversion -Wsign-conversion -Wctor-dtor-privacy -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Woverloaded-virtual")
- else()
- message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
- endif()
-endif()
+# set definitions for tests
+target_compile_definitions(gsl_tests_config INTERFACE
+ GSL_THROW_ON_CONTRACT_VIOLATION
+)
function(add_gsl_test name)
add_executable(${name} ${name}.cpp)
- target_link_libraries(${name} UnitTest++)
+ target_link_libraries(${name}
+ UnitTest++
+ GSL
+ gsl_tests_config
+ )
add_test(
${name}
${name}
)
+ # group all tests under GSL_tests
+ set_property(TARGET ${name} PROPERTY FOLDER "GSL_tests")
endfunction()
add_gsl_test(span_tests)