comparison Resources/CMake/BoostConfiguration.cmake @ 2367:2aff870c2c58

refactoring of BoostConfiguration.cmake
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 22 Aug 2017 17:32:13 +0200
parents 26f3a346226f
children 5998f81bfbd1
comparison
equal deleted inserted replaced
2366:26f3a346226f 2367:2aff870c2c58
5 5
6 set(BOOST_STATIC 0) 6 set(BOOST_STATIC 0)
7 #set(Boost_DEBUG 1) 7 #set(Boost_DEBUG 1)
8 #set(Boost_USE_STATIC_LIBS ON) 8 #set(Boost_USE_STATIC_LIBS ON)
9 9
10 if (ENABLE_LOCALE)
11 list(APPEND ORTHANC_BOOST_COMPONENTS locale)
12 endif()
13
10 find_package(Boost 14 find_package(Boost
11 COMPONENTS filesystem thread system date_time regex locale ${ORTHANC_BOOST_COMPONENTS}) 15 COMPONENTS filesystem thread system date_time regex ${ORTHANC_BOOST_COMPONENTS})
12 16
13 if (NOT Boost_FOUND) 17 if (NOT Boost_FOUND)
14 message(FATAL_ERROR "Unable to locate Boost on this system") 18 message(FATAL_ERROR "Unable to locate Boost on this system")
15 endif() 19 endif()
16 20
25 -DBOOST_HAS_FILESYSTEM_V3=1 29 -DBOOST_HAS_FILESYSTEM_V3=1
26 -DBOOST_FILESYSTEM_VERSION=3 30 -DBOOST_FILESYSTEM_VERSION=3
27 ) 31 )
28 endif() 32 endif()
29 33
30 #if (${Boost_VERSION} LESS 104800)
31 # boost::locale is only available from 1.48.00
32 #message("Too old version of Boost (${Boost_LIB_VERSION}): Building the static version")
33 # set(BOOST_STATIC 1)
34 #endif()
35
36 include_directories(${Boost_INCLUDE_DIRS}) 34 include_directories(${Boost_INCLUDE_DIRS})
37 link_libraries(${Boost_LIBRARIES}) 35 link_libraries(${Boost_LIBRARIES})
38 endif() 36 endif()
39 37
40 38
41 if (BOOST_STATIC) 39 if (BOOST_STATIC)
42 # Parameters for Boost 1.64.0 40 ##
41 ## Parameters for static compilation of Boost
42 ##
43
43 set(BOOST_NAME boost_1_64_0) 44 set(BOOST_NAME boost_1_64_0)
44 set(BOOST_BCP_SUFFIX bcpdigest-1.3.0) 45 set(BOOST_BCP_SUFFIX bcpdigest-1.3.0)
45 set(BOOST_MD5 "ecb266cf46adcc7f695ad12685871174") 46 set(BOOST_MD5 "ecb266cf46adcc7f695ad12685871174")
46 set(BOOST_URL "http://www.orthanc-server.com/downloads/third-party/${BOOST_NAME}_${BOOST_BCP_SUFFIX}.tar.gz") 47 set(BOOST_URL "http://www.orthanc-server.com/downloads/third-party/${BOOST_NAME}_${BOOST_BCP_SUFFIX}.tar.gz")
47 set(BOOST_FILESYSTEM_SOURCES_DIR "${BOOST_NAME}/libs/filesystem/src") 48 set(BOOST_FILESYSTEM_SOURCES_DIR "${BOOST_NAME}/libs/filesystem/src")
48 set(BOOST_SOURCES_DIR ${CMAKE_BINARY_DIR}/${BOOST_NAME}) 49 set(BOOST_SOURCES_DIR ${CMAKE_BINARY_DIR}/${BOOST_NAME})
49 50
50 DownloadPackage(${BOOST_MD5} ${BOOST_URL} "${BOOST_SOURCES_DIR}") 51 DownloadPackage(${BOOST_MD5} ${BOOST_URL} "${BOOST_SOURCES_DIR}")
51 52
52 set(BOOST_SOURCES) 53
53 54 ##
54 if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR 55 ## Generic configuration of Boost
55 ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR 56 ##
56 ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" OR 57
57 ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD" OR 58 if (CMAKE_COMPILER_IS_GNUCXX)
58 ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD" OR 59 add_definitions(-isystem ${BOOST_SOURCES_DIR})
59 ${CMAKE_SYSTEM_NAME} STREQUAL "PNaCl" OR 60 endif()
60 ${CMAKE_SYSTEM_NAME} STREQUAL "NaCl32" OR 61
61 ${CMAKE_SYSTEM_NAME} STREQUAL "NaCl64") 62 include_directories(
63 ${BOOST_SOURCES_DIR}
64 )
65
66 add_definitions(
67 # Static build of Boost
68 -DBOOST_ALL_NO_LIB
69 -DBOOST_ALL_NOLIB
70 -DBOOST_DATE_TIME_NO_LIB
71 -DBOOST_THREAD_BUILD_LIB
72 -DBOOST_PROGRAM_OPTIONS_NO_LIB
73 -DBOOST_REGEX_NO_LIB
74 -DBOOST_SYSTEM_NO_LIB
75 -DBOOST_LOCALE_NO_LIB
76 )
77
78
79 ##
80 ## Configuration of Boost core
81 ##
82
83 set(BOOST_SOURCES
84 ${BOOST_SOURCES_DIR}/libs/system/src/error_code.cpp
85 )
86
87 if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR
88 CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR
89 CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR
90 CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD" OR
91 CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR
92 CMAKE_SYSTEM_NAME STREQUAL "PNaCl" OR
93 CMAKE_SYSTEM_NAME STREQUAL "NaCl32" OR
94 CMAKE_SYSTEM_NAME STREQUAL "NaCl64")
62 list(APPEND BOOST_SOURCES 95 list(APPEND BOOST_SOURCES
63 ${BOOST_SOURCES_DIR}/libs/atomic/src/lockpool.cpp 96 ${BOOST_SOURCES_DIR}/libs/atomic/src/lockpool.cpp
64 ${BOOST_SOURCES_DIR}/libs/thread/src/pthread/once.cpp 97 ${BOOST_SOURCES_DIR}/libs/thread/src/pthread/once.cpp
65 ${BOOST_SOURCES_DIR}/libs/thread/src/pthread/thread.cpp 98 ${BOOST_SOURCES_DIR}/libs/thread/src/pthread/thread.cpp
66 ) 99 )
67 add_definitions(
68 -DBOOST_LOCALE_NO_WINAPI_BACKEND=1
69 -DBOOST_LOCALE_NO_STD_BACKEND=1
70 )
71 100
72 if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase" OR 101 if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase" OR
73 ${CMAKE_SYSTEM_NAME} STREQUAL "PNaCl" OR 102 CMAKE_SYSTEM_NAME STREQUAL "PNaCl" OR
74 ${CMAKE_SYSTEM_NAME} STREQUAL "NaCl32" OR 103 CMAKE_SYSTEM_NAME STREQUAL "NaCl32" OR
75 ${CMAKE_SYSTEM_NAME} STREQUAL "NaCl64") 104 CMAKE_SYSTEM_NAME STREQUAL "NaCl64")
76 add_definitions(-DBOOST_HAS_SCHED_YIELD=1) 105 add_definitions(-DBOOST_HAS_SCHED_YIELD=1)
77 endif() 106 endif()
78 107
79 elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") 108 elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
80 list(APPEND BOOST_SOURCES 109 list(APPEND BOOST_SOURCES
81 ${BOOST_SOURCES_DIR}/libs/thread/src/win32/tss_dll.cpp 110 ${BOOST_SOURCES_DIR}/libs/thread/src/win32/tss_dll.cpp
82 ${BOOST_SOURCES_DIR}/libs/thread/src/win32/thread.cpp 111 ${BOOST_SOURCES_DIR}/libs/thread/src/win32/thread.cpp
83 ${BOOST_SOURCES_DIR}/libs/thread/src/win32/tss_pe.cpp 112 ${BOOST_SOURCES_DIR}/libs/thread/src/win32/tss_pe.cpp
84 ${BOOST_FILESYSTEM_SOURCES_DIR}/windows_file_codecvt.cpp 113 )
85 ) 114
86 115 elseif (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
87 add_definitions(
88 -DBOOST_LOCALE_NO_POSIX_BACKEND=1
89 -DBOOST_LOCALE_NO_STD_BACKEND=1
90 )
91
92 elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten")
93 add_definitions(
94 -DBOOST_LOCALE_NO_POSIX_BACKEND=1
95 -DBOOST_LOCALE_NO_STD_BACKEND=1
96 )
97 116
98 else() 117 else()
99 message(FATAL_ERROR "Support your platform here") 118 message(FATAL_ERROR "Support your platform here")
100 endif() 119 endif()
101 120
102 if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR 121
103 ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD") 122 ##
104 list(APPEND BOOST_SOURCES 123 ## Configuration of boost::regex
105 ${BOOST_SOURCES_DIR}/libs/filesystem/src/utf8_codecvt_facet.cpp 124 ##
106 ) 125
107 endif()
108
109 aux_source_directory(${BOOST_SOURCES_DIR}/libs/regex/src BOOST_REGEX_SOURCES) 126 aux_source_directory(${BOOST_SOURCES_DIR}/libs/regex/src BOOST_REGEX_SOURCES)
110 127
111 list(APPEND BOOST_SOURCES 128 list(APPEND BOOST_SOURCES
112 ${BOOST_REGEX_SOURCES} 129 ${BOOST_REGEX_SOURCES}
130 )
131
132
133 ##
134 ## Configuration of boost::datetime
135 ##
136
137 list(APPEND BOOST_SOURCES
113 ${BOOST_SOURCES_DIR}/libs/date_time/src/gregorian/greg_month.cpp 138 ${BOOST_SOURCES_DIR}/libs/date_time/src/gregorian/greg_month.cpp
114 ${BOOST_SOURCES_DIR}/libs/system/src/error_code.cpp 139 )
115 ) 140
116 141
117 if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten") 142 ##
118 list(APPEND BOOST_SOURCES 143 ## Configuration of boost::filesystem
119 ${BOOST_SOURCES_DIR}/libs/locale/src/encoding/codepage.cpp 144 ##
120 ) 145
121 endif() 146 if (CMAKE_SYSTEM_NAME STREQUAL "PNaCl" OR
122 147 CMAKE_SYSTEM_NAME STREQUAL "NaCl32" OR
123 if (${CMAKE_SYSTEM_NAME} STREQUAL "PNaCl" OR 148 CMAKE_SYSTEM_NAME STREQUAL "NaCl64")
124 ${CMAKE_SYSTEM_NAME} STREQUAL "NaCl32" OR
125 ${CMAKE_SYSTEM_NAME} STREQUAL "NaCl64")
126 # boost::filesystem is not available on PNaCl 149 # boost::filesystem is not available on PNaCl
127 add_definitions( 150 add_definitions(
128 -DBOOST_HAS_FILESYSTEM_V3=0 151 -DBOOST_HAS_FILESYSTEM_V3=0
129 -D__INTEGRITY=1 152 -D__INTEGRITY=1
130 ) 153 )
131 else() 154 else()
132 add_definitions( 155 add_definitions(
133 -DBOOST_HAS_FILESYSTEM_V3=1 156 -DBOOST_HAS_FILESYSTEM_V3=1
134 ) 157 )
135 list(APPEND BOOST_SOURCES 158 list(APPEND BOOST_SOURCES
136 ${BOOST_FILESYSTEM_SOURCES_DIR}/codecvt_error_category.cpp
137 ${BOOST_FILESYSTEM_SOURCES_DIR}/operations.cpp 159 ${BOOST_FILESYSTEM_SOURCES_DIR}/operations.cpp
138 ${BOOST_FILESYSTEM_SOURCES_DIR}/path.cpp 160 ${BOOST_FILESYSTEM_SOURCES_DIR}/path.cpp
139 ${BOOST_FILESYSTEM_SOURCES_DIR}/path_traits.cpp 161 ${BOOST_FILESYSTEM_SOURCES_DIR}/path_traits.cpp
140 ) 162 )
141 endif() 163 endif()
142 164
143 if (USE_BOOST_LOCALE_BACKEND) 165
144 if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR 166 ##
145 ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR 167 ## Configuration of boost::locale
146 ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" OR 168 ##
147 ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD" OR 169
148 ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD" OR 170 if (NOT ENABLE_LOCALE)
149 ${CMAKE_SYSTEM_NAME} STREQUAL "PNaCl" OR 171 message("boost::locale is disabled")
150 ${CMAKE_SYSTEM_NAME} STREQUAL "NaCl32" OR 172 else()
151 ${CMAKE_SYSTEM_NAME} STREQUAL "NaCl64") 173 list(APPEND BOOST_SOURCES
152 list(APPEND BOOST_SOURCES
153 ${BOOST_SOURCES_DIR}/libs/locale/src/posix/codecvt.cpp
154 ${BOOST_SOURCES_DIR}/libs/locale/src/posix/collate.cpp
155 ${BOOST_SOURCES_DIR}/libs/locale/src/posix/converter.cpp
156 ${BOOST_SOURCES_DIR}/libs/locale/src/posix/numeric.cpp
157 ${BOOST_SOURCES_DIR}/libs/locale/src/posix/posix_backend.cpp
158 )
159 elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
160 list(APPEND BOOST_SOURCES
161 ${BOOST_SOURCES_DIR}/libs/locale/src/win32/collate.cpp
162 ${BOOST_SOURCES_DIR}/libs/locale/src/win32/converter.cpp
163 ${BOOST_SOURCES_DIR}/libs/locale/src/win32/lcid.cpp
164 ${BOOST_SOURCES_DIR}/libs/locale/src/win32/numeric.cpp
165 ${BOOST_SOURCES_DIR}/libs/locale/src/win32/win_backend.cpp
166 )
167 else()
168 message(FATAL_ERROR "Support your platform here")
169 endif()
170
171 list(APPEND BOOST_SOURCES
172 ${BOOST_REGEX_SOURCES}
173 ${BOOST_SOURCES_DIR}/libs/date_time/src/gregorian/greg_month.cpp
174 ${BOOST_SOURCES_DIR}/libs/system/src/error_code.cpp
175
176 ${BOOST_FILESYSTEM_SOURCES_DIR}/codecvt_error_category.cpp 174 ${BOOST_FILESYSTEM_SOURCES_DIR}/codecvt_error_category.cpp
177 ${BOOST_FILESYSTEM_SOURCES_DIR}/operations.cpp
178 ${BOOST_FILESYSTEM_SOURCES_DIR}/path.cpp
179 ${BOOST_FILESYSTEM_SOURCES_DIR}/path_traits.cpp
180
181 ${BOOST_SOURCES_DIR}/libs/locale/src/shared/generator.cpp 175 ${BOOST_SOURCES_DIR}/libs/locale/src/shared/generator.cpp
182 ${BOOST_SOURCES_DIR}/libs/locale/src/shared/date_time.cpp 176 ${BOOST_SOURCES_DIR}/libs/locale/src/shared/date_time.cpp
183 ${BOOST_SOURCES_DIR}/libs/locale/src/shared/formatting.cpp 177 ${BOOST_SOURCES_DIR}/libs/locale/src/shared/formatting.cpp
184 ${BOOST_SOURCES_DIR}/libs/locale/src/shared/ids.cpp 178 ${BOOST_SOURCES_DIR}/libs/locale/src/shared/ids.cpp
185 ${BOOST_SOURCES_DIR}/libs/locale/src/shared/localization_backend.cpp 179 ${BOOST_SOURCES_DIR}/libs/locale/src/shared/localization_backend.cpp
189 ${BOOST_SOURCES_DIR}/libs/locale/src/util/default_locale.cpp 183 ${BOOST_SOURCES_DIR}/libs/locale/src/util/default_locale.cpp
190 ${BOOST_SOURCES_DIR}/libs/locale/src/util/gregorian.cpp 184 ${BOOST_SOURCES_DIR}/libs/locale/src/util/gregorian.cpp
191 ${BOOST_SOURCES_DIR}/libs/locale/src/util/info.cpp 185 ${BOOST_SOURCES_DIR}/libs/locale/src/util/info.cpp
192 ${BOOST_SOURCES_DIR}/libs/locale/src/util/locale_data.cpp 186 ${BOOST_SOURCES_DIR}/libs/locale/src/util/locale_data.cpp
193 ) 187 )
194 endif() 188
195 189 if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR
196 add_definitions( 190 CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR
197 # Static build of Boost 191 CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR
198 -DBOOST_ALL_NO_LIB 192 CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD" OR
199 -DBOOST_ALL_NOLIB 193 CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR
200 -DBOOST_DATE_TIME_NO_LIB 194 CMAKE_SYSTEM_NAME STREQUAL "PNaCl" OR
201 -DBOOST_THREAD_BUILD_LIB 195 CMAKE_SYSTEM_NAME STREQUAL "NaCl32" OR
202 -DBOOST_PROGRAM_OPTIONS_NO_LIB 196 CMAKE_SYSTEM_NAME STREQUAL "NaCl64")
203 -DBOOST_REGEX_NO_LIB 197 list(APPEND BOOST_SOURCES
204 -DBOOST_SYSTEM_NO_LIB 198 ${BOOST_SOURCES_DIR}/libs/locale/src/encoding/codepage.cpp
205 -DBOOST_LOCALE_NO_LIB 199 ${BOOST_SOURCES_DIR}/libs/locale/src/posix/codecvt.cpp
206 -DBOOST_HAS_LOCALE=1 200 ${BOOST_SOURCES_DIR}/libs/locale/src/posix/collate.cpp
207 ) 201 ${BOOST_SOURCES_DIR}/libs/locale/src/posix/converter.cpp
208 202 ${BOOST_SOURCES_DIR}/libs/locale/src/posix/numeric.cpp
209 if (CMAKE_COMPILER_IS_GNUCXX) 203 ${BOOST_SOURCES_DIR}/libs/locale/src/posix/posix_backend.cpp
210 add_definitions(-isystem ${BOOST_SOURCES_DIR}) 204 )
211 endif() 205
212 206 add_definitions(
213 include_directories( 207 -DBOOST_LOCALE_WITH_ICONV=1
214 ${BOOST_SOURCES_DIR} 208 -DBOOST_LOCALE_NO_WINAPI_BACKEND=1
215 ) 209 -DBOOST_LOCALE_NO_STD_BACKEND=1
216 210 )
211
212 elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows")
213 list(APPEND BOOST_SOURCES
214 ${BOOST_FILESYSTEM_SOURCES_DIR}/windows_file_codecvt.cpp
215 ${BOOST_SOURCES_DIR}/libs/locale/src/encoding/codepage.cpp
216 ${BOOST_SOURCES_DIR}/libs/locale/src/win32/collate.cpp
217 ${BOOST_SOURCES_DIR}/libs/locale/src/win32/converter.cpp
218 ${BOOST_SOURCES_DIR}/libs/locale/src/win32/lcid.cpp
219 ${BOOST_SOURCES_DIR}/libs/locale/src/win32/numeric.cpp
220 ${BOOST_SOURCES_DIR}/libs/locale/src/win32/win_backend.cpp
221 )
222
223 add_definitions(
224 -DBOOST_LOCALE_NO_POSIX_BACKEND=1
225 -DBOOST_LOCALE_NO_STD_BACKEND=1
226 )
227
228 # Starting with release 0.8.2, Orthanc statically links against
229 # libiconv, even on Windows. Indeed, the "WCONV" library of
230 # Windows XP seems not to support properly several codepages
231 # (notably "Latin3", "Hebrew", and "Arabic").
232
233 if (USE_BOOST_ICONV)
234 add_definitions(-DBOOST_LOCALE_WITH_ICONV=1)
235 else()
236 add_definitions(-DBOOST_LOCALE_WITH_WCONV=1)
237 endif()
238
239 elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR
240 CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
241 list(APPEND BOOST_SOURCES
242 ${BOOST_SOURCES_DIR}/libs/filesystem/src/utf8_codecvt_facet.cpp
243 ${BOOST_SOURCES_DIR}/libs/locale/src/encoding/codepage.cpp
244 )
245
246 add_definitions(
247 -DBOOST_LOCALE_WITH_ICONV=1
248 )
249
250 elseif (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
251 add_definitions(
252 -DBOOST_LOCALE_WITH_ICONV=1
253 -DBOOST_LOCALE_NO_POSIX_BACKEND=1
254 -DBOOST_LOCALE_NO_STD_BACKEND=1
255 )
256
257 else()
258 message(FATAL_ERROR "Support your platform here")
259 endif()
260 endif()
261
262
217 source_group(ThirdParty\\boost REGULAR_EXPRESSION ${BOOST_SOURCES_DIR}/.*) 263 source_group(ThirdParty\\boost REGULAR_EXPRESSION ${BOOST_SOURCES_DIR}/.*)
218 264
219 else()
220 add_definitions(
221 -DBOOST_HAS_LOCALE=1
222 )
223 endif() 265 endif()
224
225
226 add_definitions(
227 -DBOOST_HAS_DATE_TIME=1
228 -DBOOST_HAS_REGEX=1
229 )