]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/opentelemetry-cpp/third_party/ms-gsl/CMakeLists.txt
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / third_party / ms-gsl / CMakeLists.txt
CommitLineData
1e59de90
TL
1cmake_minimum_required(VERSION 3.1.3...3.16)
2
3project(GSL VERSION 3.1.0 LANGUAGES CXX)
4
5include(ExternalProject)
6find_package(Git)
7
8# Use GNUInstallDirs to provide the right locations on all platforms
9include(GNUInstallDirs)
10
11# creates a library GSL which is an interface (header files only)
12add_library(GSL INTERFACE)
13
14# determine whether this is a standalone project or included by other projects
15set(GSL_STANDALONE_PROJECT OFF)
16if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
17 set(GSL_STANDALONE_PROJECT ON)
18endif ()
19
20set(GSL_CXX_STANDARD "14" CACHE STRING "Use c++ standard")
21set(GSL_CXX_STD "cxx_std_${GSL_CXX_STANDARD}")
22
23if (MSVC)
24 set(GSL_CXX_STD_OPT "-std:c++${GSL_CXX_STANDARD}")
25else()
26 set(GSL_CXX_STD_OPT "-std=c++${GSL_CXX_STANDARD}")
27endif()
28
29# when minimum version required is 3.8.0 remove if below
30# both branches do exactly the same thing
31if (CMAKE_VERSION VERSION_LESS 3.7.9)
32 include(CheckCXXCompilerFlag)
33 CHECK_CXX_COMPILER_FLAG("${GSL_CXX_STD_OPT}" COMPILER_SUPPORTS_CXX_STANDARD)
34
35 if(COMPILER_SUPPORTS_CXX_STANDARD)
36 target_compile_options(GSL INTERFACE "${GSL_CXX_STD_OPT}")
37 else()
38 message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no c++${GSL_CXX_STANDARD} support. Please use a different C++ compiler.")
39 endif()
40else ()
41 target_compile_features(GSL INTERFACE "${GSL_CXX_STD}")
42 # on *nix systems force the use of -std=c++XX instead of -std=gnu++XX (default)
43 set(CMAKE_CXX_EXTENSIONS OFF)
44endif()
45
46# add definitions to the library and targets that consume it
47target_compile_definitions(GSL INTERFACE
48 $<$<CXX_COMPILER_ID:MSVC>:
49 # remove unnecessary warnings about unchecked iterators
50 _SCL_SECURE_NO_WARNINGS
51 # remove deprecation warnings about std::uncaught_exception() (from catch)
52 _SILENCE_CXX17_UNCAUGHT_EXCEPTION_DEPRECATION_WARNING
53 >
54)
55
56# add include folders to the library and targets that consume it
57# the SYSTEM keyword suppresses warnings for users of the library
58if(GSL_STANDALONE_PROJECT)
59 target_include_directories(GSL INTERFACE
60 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
61 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
62 )
63else()
64 target_include_directories(GSL SYSTEM INTERFACE
65 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
66 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
67 )
68endif()
69
70
71if (CMAKE_VERSION VERSION_GREATER 3.7.8)
72 if (MSVC_IDE)
73 option(GSL_VS_ADD_NATIVE_VISUALIZERS "Configure project to use Visual Studio native visualizers" TRUE)
74 else()
75 set(GSL_VS_ADD_NATIVE_VISUALIZERS FALSE CACHE INTERNAL "Native visualizers are Visual Studio extension" FORCE)
76 endif()
77
78 # add natvis file to the library so it will automatically be loaded into Visual Studio
79 if(GSL_VS_ADD_NATIVE_VISUALIZERS)
80 target_sources(GSL INTERFACE
81 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/GSL.natvis>
82 )
83 endif()
84endif()
85
86install(TARGETS GSL EXPORT Microsoft.GSLConfig)
87install(
88 DIRECTORY include/gsl
89 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
90)
91# Make library importable by other projects
92install(EXPORT Microsoft.GSLConfig NAMESPACE Microsoft.GSL:: DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/Microsoft.GSL)
93export(TARGETS GSL NAMESPACE Microsoft.GSL:: FILE Microsoft.GSLConfig.cmake)
94
95# Add find_package() versioning support. The version for
96# generated Microsoft.GSLConfigVersion.cmake will be used from
97# last project() command. The version's compatibility is set between all
98# minor versions (as it was in prev. GSL releases).
99include(CMakePackageConfigHelpers)
100if(${CMAKE_VERSION} VERSION_LESS "3.14.0")
101 write_basic_package_version_file(
102 ${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake
103 COMPATIBILITY SameMajorVersion
104 )
105else()
106 write_basic_package_version_file(
107 ${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake
108 COMPATIBILITY SameMajorVersion
109 ARCH_INDEPENDENT
110 )
111endif()
112install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/Microsoft.GSL)
113
114# Add Microsoft.GSL::GSL alias for GSL so that dependents can be agnostic about
115# whether GSL was added via `add_subdirectory` or `find_package`
116add_library(Microsoft.GSL::GSL ALIAS GSL)
117
118option(GSL_TEST "Generate tests." ${GSL_STANDALONE_PROJECT})
119if (GSL_TEST)
120 enable_testing()
121 if(IOS)
122 add_compile_definitions(
123 GTEST_HAS_DEATH_TEST=1
124 )
125 endif()
126 add_subdirectory(tests)
127endif ()