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:
authorhdf89shfdfs <31327577+hdf89shfdfs@users.noreply.github.com>2021-01-04 21:42:33 +0300
committerGitHub <noreply@github.com>2021-01-04 21:42:33 +0300
commiteca0eca6f1ae12c80f73bdfb73bbcf912289fe34 (patch)
treefa75d2b9f5d590f8cdfb462810f867d07d329006
parenta47352cb2a05cc2684877d8a55077d092f20574b (diff)
[cmake] Adding options for INSTALL and TEST (#964)
* [cmake] Adding GSL_INSTALL option Not all consumers of GSL automatically want to have this install logic. It's good practice to gate install logic behind an option. For an example look at magic_enum: https://github.com/Neargye/magic_enum/blob/master/CMakeLists.txt If the client wants to install GSL they still can. But they should ask for it by overriding GSL_INSTALL. * Update cmake/guidelineSupportLibrary.cmake added nl@eof * Update CMakeLists.txt * Update CMakeLists.txt Co-authored-by: Juan Ramos <juanr0911@gmail.com> Co-authored-by: Jordan Maples [MSFT] <49793787+JordanMaples@users.noreply.github.com>
-rw-r--r--CMakeLists.txt63
-rw-r--r--cmake/guidelineSupportLibrary.cmake55
-rw-r--r--tests/CMakeLists.txt4
3 files changed, 74 insertions, 48 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7ad13f7..bb66444 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,10 +3,10 @@ cmake_minimum_required(VERSION 3.1.3...3.16)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
include(guidelineSupportLibrary)
-project(GSL VERSION 3.1.0 LANGUAGES CXX)
-
-# Use GNUInstallDirs to provide the right locations on all platforms
-include(GNUInstallDirs)
+project(GSL
+ VERSION 3.1.0
+ LANGUAGES CXX
+)
# Creates a library GSL which is an interface (header files only)
add_library(GSL INTERFACE)
@@ -25,6 +25,10 @@ if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
set(GSL_STANDALONE_PROJECT ON)
endif()
+### Project options
+option(GSL_INSTALL "Generate and install GSL target" ${GSL_STANDALONE_PROJECT})
+option(GSL_TEST "Build and perform GSL tests" ${GSL_STANDALONE_PROJECT})
+
# This GSL implementation generally assumes a platform that implements C++14 support.
set(gsl_min_cxx_standard "14")
@@ -34,58 +38,21 @@ else()
gsl_client_set_cxx_standard(${gsl_min_cxx_standard})
endif()
-# add include folders to the library and targets that consume it
-# the SYSTEM keyword suppresses warnings for users of the library
-if(GSL_STANDALONE_PROJECT)
- target_include_directories(GSL INTERFACE
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
- )
-else()
- target_include_directories(GSL SYSTEM INTERFACE
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
- )
-endif()
+# Setup the include directory
+gsl_target_include_directories(${GSL_STANDALONE_PROJECT})
# Add natvis file
gsl_add_native_visualizer_support()
-install(TARGETS GSL EXPORT Microsoft.GSLConfig)
-install(
- DIRECTORY include/gsl
- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
-)
-# Make library importable by other projects
-install(EXPORT Microsoft.GSLConfig NAMESPACE Microsoft.GSL:: DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/Microsoft.GSL)
-export(TARGETS GSL NAMESPACE Microsoft.GSL:: FILE Microsoft.GSLConfig.cmake)
+# Add packaging support
+gsl_create_packaging_file()
-# Add find_package() versioning support. The version for
-# generated Microsoft.GSLConfigVersion.cmake will be used from
-# last project() command. The version's compatibility is set between all
-# minor versions (as it was in prev. GSL releases).
-include(CMakePackageConfigHelpers)
-if(${CMAKE_VERSION} VERSION_LESS "3.14.0")
- write_basic_package_version_file(
- ${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake
- COMPATIBILITY SameMajorVersion
- )
-else()
- write_basic_package_version_file(
- ${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake
- COMPATIBILITY SameMajorVersion
- ARCH_INDEPENDENT
- )
+if (GSL_INSTALL)
+ # Setup install/export logic
+ gsl_install_logic()
endif()
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/Microsoft.GSL)
-option(GSL_TEST "Generate tests." ${GSL_STANDALONE_PROJECT})
if (GSL_TEST)
enable_testing()
- if(IOS)
- add_compile_definitions(
- GTEST_HAS_DEATH_TEST=1
- )
- endif()
add_subdirectory(tests)
endif()
diff --git a/cmake/guidelineSupportLibrary.cmake b/cmake/guidelineSupportLibrary.cmake
index 39d8920..2e72100 100644
--- a/cmake/guidelineSupportLibrary.cmake
+++ b/cmake/guidelineSupportLibrary.cmake
@@ -9,6 +9,9 @@ if (DEFINED guideline_support_library_include_guard)
endif()
set(guideline_support_library_include_guard ON)
+# Neccessary for 'write_basic_package_version_file'
+include(CMakePackageConfigHelpers)
+
function(gsl_set_default_cxx_standard min_cxx_standard)
set(GSL_CXX_STANDARD "${min_cxx_standard}" CACHE STRING "Use c++ standard")
@@ -75,3 +78,55 @@ function(gsl_add_native_visualizer_support)
endif()
endif()
endfunction()
+
+function(gsl_target_include_directories is_standalone)
+ # Add include folders to the library and targets that consume it
+ # the SYSTEM keyword suppresses warnings for users of the library
+ if(${is_standalone})
+ target_include_directories(GSL INTERFACE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ )
+ else()
+ target_include_directories(GSL SYSTEM INTERFACE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ )
+ endif()
+endfunction()
+
+function(gsl_install_logic)
+ # Use GNUInstallDirs to provide the right locations on all platforms
+ # NOTE: Including GNUInstallDirs automatically executes logic
+ include(GNUInstallDirs)
+
+ install(TARGETS GSL EXPORT Microsoft.GSLConfig)
+ install(
+ DIRECTORY include/gsl
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ )
+ # Make library importable by other projects
+ install(EXPORT Microsoft.GSLConfig NAMESPACE Microsoft.GSL:: DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/Microsoft.GSL)
+ export(TARGETS GSL NAMESPACE Microsoft.GSL:: FILE Microsoft.GSLConfig.cmake)
+
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/Microsoft.GSL)
+endfunction()
+
+# Add find_package() versioning support. The version for
+# generated Microsoft.GSLConfigVersion.cmake will be used from
+# last project() command. The version's compatibility is set between all
+# minor versions (as it was in prev. GSL releases).
+function(gsl_create_packaging_file)
+ if(${CMAKE_VERSION} VERSION_LESS "3.14.0")
+ write_basic_package_version_file(
+ ${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake
+ COMPATIBILITY SameMajorVersion
+ )
+ else()
+ write_basic_package_version_file(
+ ${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake
+ COMPATIBILITY SameMajorVersion
+ ARCH_INDEPENDENT
+ )
+ endif()
+endfunction()
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 2e7c2dc..1c7b03e 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -10,6 +10,10 @@ find_package(Git REQUIRED QUIET)
# will make visual studio generated project group files
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+if(IOS)
+ add_compile_definitions(GTEST_HAS_DEATH_TEST=1)
+endif()
+
pkg_search_module(GTestMain gtest_main)
if (NOT GTestMain_FOUND)
configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)