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