@@ -5,16 +5,15 @@ cmake_minimum_required(VERSION 3.14...3.22)
5
5
# Note: update this to your new project's name and version
6
6
project (
7
7
AddBoost.cmake
8
- VERSION 3.0
8
+ VERSION 3.1
9
9
LANGUAGES CXX
10
10
)
11
11
12
12
function (SUBDIRLIST result_var curdir)
13
13
file (
14
14
GLOB children
15
15
RELATIVE ${curdir}
16
- ${curdir} /*
17
- )
16
+ ${curdir} /*)
18
17
set (result "" )
19
18
foreach (child ${children} )
20
19
if (IS_DIRECTORY ${curdir} /${child} )
@@ -23,13 +22,18 @@ function(SUBDIRLIST result_var curdir)
23
22
endforeach ()
24
23
set (${result_var}
25
24
${result}
26
- PARENT_SCOPE
27
- )
25
+ PARENT_SCOPE)
28
26
endfunction ()
29
27
30
28
macro (add_boost TRY_BOOST_VERSION BOOST_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED
31
- BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED
32
- )
29
+ BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED)
30
+ message (
31
+ DEBUG
32
+ "add_boost called with next arguments:
33
+ \$\{\$\{ TRY_BOOST_VERSION\}\} : ${${TRY_BOOST_VERSION} }
34
+ \$\{\$\{ BOOST_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED\}\} : ${${BOOST_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} }
35
+ \$\{\$\{ BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED\}\} : ${${BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} }
36
+ " )
33
37
set (targets_to_link_to "${ARGN} " )
34
38
message (DEBUG "targets_to_link_to: \" ${targets_to_link_to} \" " )
35
39
set (BOOST_INCLUDE_LIBRARIES
@@ -52,13 +56,11 @@ macro(add_boost TRY_BOOST_VERSION BOOST_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED
52
56
set (patches_for_boost "" )
53
57
54
58
file (GLOB global_patches_for_boost CONFIGURE_DEPENDS
55
- "${CMAKE_CURRENT_SOURCE_DIR} /patches/boost/*.patch"
56
- )
59
+ "${CMAKE_CURRENT_SOURCE_DIR} /patches/boost/*.patch" )
57
60
list (APPEND patches_for_boost ${global_patches_for_boost} )
58
61
if (DEFINED BOOST_ADD_MY_PATCHES)
59
62
file (GLOB global_patches_for_boost CONFIGURE_DEPENDS
60
- "${BOOST_ADD_MY_PATCHES} /patches/boost/*.patch"
61
- )
63
+ "${BOOST_ADD_MY_PATCHES} /patches/boost/*.patch" )
62
64
list (APPEND patches_for_boost ${global_patches_for_boost} )
63
65
64
66
endif ()
@@ -67,10 +69,11 @@ macro(add_boost TRY_BOOST_VERSION BOOST_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED
67
69
if (subdirs_boost_patches)
68
70
foreach (subdir ${subdirs_boost_patches} )
69
71
if (${subdir} STREQUAL ${${TRY_BOOST_VERSION} })
70
- file (GLOB_RECURSE patches_with_max_applicable_version_up_to CONFIGURE_DEPENDS
71
- "${CMAKE_CURRENT_SOURCE_DIR} /patches/boost/${subdir} /*.patch"
72
- )
73
- list (APPEND patches_for_boost ${patches_with_max_applicable_version_up_to} )
72
+ file (GLOB_RECURSE patches_with_max_applicable_version_up_to
73
+ CONFIGURE_DEPENDS
74
+ "${CMAKE_CURRENT_SOURCE_DIR} /patches/boost/${subdir} /*.patch" )
75
+ list (APPEND patches_for_boost
76
+ ${patches_with_max_applicable_version_up_to} )
74
77
endif ()
75
78
endforeach ()
76
79
endif ()
@@ -79,49 +82,80 @@ macro(add_boost TRY_BOOST_VERSION BOOST_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED
79
82
if (subdirs_boost_patches)
80
83
foreach (subdir ${subdirs_boost_patches} )
81
84
if (${subdir} STREQUAL ${${TRY_BOOST_VERSION} })
82
- file (GLOB_RECURSE patches_with_max_applicable_version_up_to CONFIGURE_DEPENDS
83
- "${CMAKE_CURRENT_SOURCE_DIR} /patches/boost/${subdir} /*.patch"
84
- )
85
- list (APPEND patches_for_boost ${patches_with_max_applicable_version_up_to} )
85
+ file (GLOB_RECURSE patches_with_max_applicable_version_up_to
86
+ CONFIGURE_DEPENDS
87
+ "${CMAKE_CURRENT_SOURCE_DIR} /patches/boost/${subdir} /*.patch" )
88
+ list (APPEND patches_for_boost
89
+ ${patches_with_max_applicable_version_up_to} )
86
90
endif ()
87
91
endforeach ()
88
92
endif ()
89
93
endif ()
90
94
95
+ string (REPLACE ";" "\; "
96
+ ESCAPED_BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED
97
+ "${${BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} }" )
98
+ message (
99
+ DEBUG
100
+ "\$\{ ESCAPED_BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED\} : ${ESCAPED_BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} "
101
+ )
102
+
91
103
if (DEFINED BOOST_USE_MY_BOOST_DIRECTORY)
92
- CPMAddPackage(
93
- NAME Boost
94
- VERSION ${${TRY_BOOST_VERSION} }
95
- SOURCE_DIR ${BOOST_USE_MY_BOOST_DIRECTORY} PATCHES ${patches_for_boost}
96
- FIND_PACKAGE_ARGUMENTS "COMPONENTS ${${BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} }"
97
- OPTIONS "BOOST_ENABLE_CMAKE ON;BOOST_SKIP_INSTALL_RULES OFF;${BOOST_MY_OPTIONS} "
98
- )
99
- endif ()
100
- if (patches_for_boost AND NOT boost_is_old) # is it 1.80.0 < x < 1.84.0
101
- CPMAddPackage(
102
- NAME Boost
103
- VERSION ${${TRY_BOOST_VERSION} }
104
- URL ${BOOST_URL} PATCHES ${patches_for_boost}
105
- FIND_PACKAGE_ARGUMENTS "COMPONENTS ${${BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} }"
106
- OPTIONS "BOOST_ENABLE_CMAKE ON;BOOST_SKIP_INSTALL_RULES OFF;${BOOST_MY_OPTIONS} "
107
- )
104
+ cpmaddpackage(
105
+ NAME
106
+ Boost
107
+ VERSION
108
+ ${${TRY_BOOST_VERSION} }
109
+ SOURCE_DIR
110
+ ${BOOST_USE_MY_BOOST_DIRECTORY}
111
+ PATCHES
112
+ ${patches_for_boost}
113
+ FIND_PACKAGE_ARGUMENTS
114
+ "COMPONENTS ${ESCAPED_BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} "
115
+ OPTIONS
116
+ "BOOST_ENABLE_CMAKE ON;BOOST_SKIP_INSTALL_RULES OFF;${BOOST_MY_OPTIONS} " )
117
+ elseif (patches_for_boost AND NOT boost_is_old) # is it 1.80.0 < x < 1.84.0
118
+ cpmaddpackage(
119
+ NAME
120
+ Boost
121
+ VERSION
122
+ ${${TRY_BOOST_VERSION} }
123
+ URL
124
+ ${BOOST_URL}
125
+ PATCHES
126
+ ${patches_for_boost}
127
+ FIND_PACKAGE_ARGUMENTS
128
+ "COMPONENTS ${ESCAPED_BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} "
129
+ OPTIONS
130
+ "BOOST_ENABLE_CMAKE ON;BOOST_SKIP_INSTALL_RULES OFF;${BOOST_MY_OPTIONS} " )
108
131
elseif (NOT boost_is_old) # is it 1.85.0+ ?
109
- CPMAddPackage(
110
- NAME Boost
111
- VERSION ${${TRY_BOOST_VERSION} }
112
- URL ${BOOST_URL}
113
- FIND_PACKAGE_ARGUMENTS "COMPONENTS ${${BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} }"
114
- OPTIONS "BOOST_ENABLE_CMAKE ON;BOOST_SKIP_INSTALL_RULES OFF;${BOOST_MY_OPTIONS} "
115
- )
132
+ cpmaddpackage(
133
+ NAME
134
+ Boost
135
+ VERSION
136
+ ${${TRY_BOOST_VERSION} }
137
+ URL
138
+ ${BOOST_URL}
139
+ FIND_PACKAGE_ARGUMENTS
140
+ "COMPONENTS ${ESCAPED_BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} "
141
+ OPTIONS
142
+ "BOOST_ENABLE_CMAKE ON;BOOST_SKIP_INSTALL_RULES OFF;${BOOST_MY_OPTIONS} " )
116
143
else () # is it <1.80.0 ?
117
- CPMAddPackage(
118
- NAME Boost
119
- VERSION ${${TRY_BOOST_VERSION} }
120
- GIT_REPOSITORY "https://github.com/boostorg/boost"
121
- GIT_TAG "boost-${${TRY_BOOST_VERSION} }" PATCHES ${patches_for_boost}
122
- FIND_PACKAGE_ARGUMENTS "COMPONENTS ${${BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} }"
123
- OPTIONS "BOOST_ENABLE_CMAKE ON;BOOST_SKIP_INSTALL_RULES OFF;${BOOST_MY_OPTIONS} "
124
- )
144
+ cpmaddpackage(
145
+ NAME
146
+ Boost
147
+ VERSION
148
+ ${${TRY_BOOST_VERSION} }
149
+ GIT_REPOSITORY
150
+ "https://github.com/boostorg/boost"
151
+ GIT_TAG
152
+ "boost-${${TRY_BOOST_VERSION} }"
153
+ PATCHES
154
+ ${patches_for_boost}
155
+ FIND_PACKAGE_ARGUMENTS
156
+ "COMPONENTS ${ESCAPED_BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} "
157
+ OPTIONS
158
+ "BOOST_ENABLE_CMAKE ON;BOOST_SKIP_INSTALL_RULES OFF;${BOOST_MY_OPTIONS} " )
125
159
endif ()
126
160
127
161
# set(IS_BOOST_LOCAL OFF) endif()
@@ -131,16 +165,26 @@ macro(add_boost TRY_BOOST_VERSION BOOST_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED
131
165
# Link dependencies
132
166
foreach (target IN LISTS targets_to_link_to)
133
167
message (DEBUG "Boost_ADDED is defined : ${Boost_ADDED} " )
168
+ if (NOT DEFINED ADDBOOSTCMAKE_LINK_TYPE)
169
+ get_target_property (type ${target} TYPE )
170
+ if ("${type} " STREQUAL "INTERFACE_LIBRARY" )
171
+ set (ADDBOOSTCMAKE_LINK_TYPE "INTERFACE" )
172
+ else ()
173
+ set (ADDBOOSTCMAKE_LINK_TYPE "PUBLIC" )
174
+ endif ()
175
+ endif ()
134
176
if (Boost_ADDED STREQUAL "" )
135
- target_link_libraries (${target} PUBLIC Boost::boost)
177
+ target_link_libraries (${target} ${ADDBOOSTCMAKE_LINK_TYPE} Boost::boost)
136
178
else ()
137
179
foreach (a_lib ${${BOOST_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} })
138
- target_link_libraries (${target} PUBLIC Boost::${a_lib} )
180
+ target_link_libraries (${target} ${ADDBOOSTCMAKE_LINK_TYPE}
181
+ Boost::${a_lib} )
139
182
endforeach ()
140
183
endif ()
141
184
142
185
foreach (a_lib ${${BOOST_NOT_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED} })
143
- target_link_libraries (${target} PUBLIC Boost::${a_lib} )
186
+ target_link_libraries (${target} ${ADDBOOSTCMAKE_LINK_TYPE}
187
+ Boost::${a_lib} )
144
188
endforeach ()
145
189
endforeach ()
146
190
if (Boost_ADDED STREQUAL "" )
@@ -154,23 +198,16 @@ macro(add_boost TRY_BOOST_VERSION BOOST_HEADER_ONLY_COMPONENTS_THAT_YOU_NEED
154
198
)
155
199
foreach (dep ${BOOST_ALL_DEPENDENCIES} )
156
200
string (APPEND ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS
157
- "boost_${dep} ${${TRY_BOOST_VERSION} };"
158
- )
201
+ "boost_${dep} ${${TRY_BOOST_VERSION} };" )
159
202
endforeach ()
160
203
string (LENGTH "${ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS} "
161
- ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS_LENGTH
162
- )
204
+ ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS_LENGTH)
163
205
math (EXPR ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS_LENGTH
164
- "${ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS_LENGTH} -1" OUTPUT_FORMAT DECIMAL
165
- )
206
+ "${ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS_LENGTH} -1"
207
+ OUTPUT_FORMAT DECIMAL )
166
208
string (SUBSTRING "${ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS} " 0
167
209
${ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS_LENGTH}
168
- ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS
169
- )
170
- message (
171
- DEBUG
172
- "ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS ${ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS_LENGTH} : ${ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS} "
173
- )
210
+ ADDBOOSTCMAKE_PACKAGEPROJECT_INSTALL_TARGETS)
174
211
endif ()
175
212
176
213
message (
0 commit comments