]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/callable_traits/CMakeLists.txt
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / callable_traits / CMakeLists.txt
1
2 # Copyright Louis Dionne 2015
3 # Modified Work Copyright Barrett Adair 2015-2017
4 # Distributed under the Boost Software License, Version 1.0.
5 # (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
6
7 cmake_minimum_required(VERSION 3.0)
8 project(boost_callable_traits CXX)
9 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
10 enable_testing()
11
12 set (CMAKE_CXX_STANDARD ${boost_callable_traits_CXX_STD})
13
14 # Setting up CMake options and compiler flags (more flags can be set on a per-target basis or in subdirectories)
15
16 include(CheckCXXCompilerFlag)
17 macro(boost_callable_traits_append_flag testname flag)
18 check_cxx_compiler_flag(${flag} ${testname})
19 if (${testname})
20 add_compile_options(${flag})
21 endif()
22 endmacro()
23
24 if(NOT MSVC OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
25
26 # enable all warnings and treat them all as errors
27 boost_callable_traits_append_flag(boost_callable_traits_HAS_WERROR -Werror)
28 boost_callable_traits_append_flag(boost_callable_traits_HAS_WX -WX)
29 boost_callable_traits_append_flag(boost_callable_traits_HAS_W -W)
30 boost_callable_traits_append_flag(boost_callable_traits_HAS_WALL -Wall)
31 boost_callable_traits_append_flag(boost_callable_traits_HAS_WEXTRA -Wextra)
32 endif()
33
34 if(MSVC)
35
36 # MSVC/Clang-cl builds need -Qunused-arguments
37 boost_callable_traits_append_flag(boost_callable_traits_HAS_QUNUSED_ARGUMENTS -Qunused-arguments)
38 else()
39
40 # for better template error debugging
41 boost_callable_traits_append_flag(boost_callable_traits_HAS_FTEMPLATE_BACKTRACE_LIMIT -ftemplate-backtrace-limit=0)
42
43 # enforce strict standards compliance
44 boost_callable_traits_append_flag(boost_callable_traits_HAS_PEDANTIC -pedantic)
45
46 # use the most recent C++ standard available
47 boost_callable_traits_append_flag(boost_callable_traits_HAS_STDCXX0x -std=c++0x)
48 boost_callable_traits_append_flag(boost_callable_traits_HAS_STDCXX1y -std=c++1y)
49 boost_callable_traits_append_flag(boost_callable_traits_HAS_STDCXX1z -std=c++1z)
50 boost_callable_traits_append_flag(boost_callable_traits_HAS_STDCXX17 -std=c++17)
51 boost_callable_traits_append_flag(boost_callable_traits_HAS_STDCXX2a -std=c++2a)
52 endif()
53
54 # transactional memory - currently only available in GCC 6 and later
55 if(NOT ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
56 boost_callable_traits_append_flag(boost_callable_traits_HAS_FGNU_TM -fgnu-tm)
57 endif()
58
59 add_library(boost_callable_traits INTERFACE)
60 set_property(TARGET boost_callable_traits PROPERTY EXPORT_NAME callable_traits)
61 add_library(Boost::callable_traits ALIAS boost_callable_traits)
62
63 target_include_directories(boost_callable_traits INTERFACE
64 "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
65 $<INSTALL_INTERFACE:include>)
66
67 if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
68
69 #
70 #find_package(Doxygen)
71 ##find_package(Meta)
72 #find_package(PythonInterp 2.7)
73 #find_package(Ruby 2.1)
74
75 ##############################################################################
76 # boost_callable_traits_target_name_for(<output variable> <source file> [ext])
77 # Returns the target name associated to a source file. If the path of the
78 # source file relative from the root of boost_callable_traits is `path/to/source/file.ext`,
79 # the target name associated to it will be `path.to.source.file`.
80 #
81 # The extension of the file should be specified as a last argument. If no
82 # extension is specified, the `.cpp` extension is assumed.
83 ##############################################################################
84
85 function(boost_callable_traits_target_name_for out file)
86 if (NOT ARGV2)
87 set(_extension ".cpp")
88 else()
89 set(_extension "${ARGV2}")
90 endif()
91
92 file(RELATIVE_PATH _relative ${boost_callable_traits_SOURCE_DIR} ${file})
93 string(REPLACE "${_extension}" "" _name ${_relative})
94 string(REGEX REPLACE "/" "." _name ${_name})
95 set(${out} "${_name}" PARENT_SCOPE)
96 endfunction()
97
98 ##############################################################################
99 # boost_callable_traits_add_test(<name> <command> [<arg>...])
100 # Creates a test called `name`, which runs the given `command` with the given args.
101 ##############################################################################
102
103 function(boost_callable_traits_add_test name)
104 if (boost_callable_traits_ENABLE_MEMCHECK)
105 add_test(${name} ${Valgrind_EXECUTABLE} --leak-check=full --error-exitcode=1 ${ARGN})
106 else()
107 add_test(${name} ${ARGN})
108 endif()
109 endfunction()
110
111 ##############################################################################
112 # Setup the `check` target to build and then run all the tests and examples.
113 ##############################################################################
114
115 add_custom_target(callable_traits_check
116 COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
117 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
118 COMMENT "Build and then run all the tests and examples.")
119 if (NOT TARGET check)
120 add_custom_target(check DEPENDS callable_traits_check)
121 else()
122 add_dependencies(check callable_traits_check)
123 endif()
124
125 add_subdirectory(example)
126 add_subdirectory(test)
127
128 ##############################################################################
129 # Setup the 'install' target and the package config file.
130 ##############################################################################
131 install(TARGETS boost_callable_traits EXPORT CallableTraitsConfig)
132 install(EXPORT CallableTraitsConfig DESTINATION lib/cmake/CallableTraits)
133 install(DIRECTORY include/boost DESTINATION include FILES_MATCHING PATTERN "*.hpp")
134
135 endif()