blob: f65a49398765309cf923ace5d4d6f5756de5bb14 [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2# file Copyright.txt or https://cmake.org/licensing for details.
3
4#.rst:
5# FindBoost
6# ---------
7#
8# Find Boost include dirs and libraries
9#
10# Use this module by invoking find_package with the form::
11#
12# find_package(Boost
Matthew Bentham0af44602018-09-07 10:40:55 +010013# [version] [EXACT] # Minimum or EXACT version e.g. 1.67.0
telsoa014fcda012018-03-09 14:13:49 +000014# [REQUIRED] # Fail with error if Boost is not found
15# [COMPONENTS <libs>...] # Boost libraries by their canonical name
Matthew Bentham0af44602018-09-07 10:40:55 +010016# # e.g. "date_time" for "libboost_date_time"
17# [OPTIONAL_COMPONENTS <libs>...]
18# # Optional Boost libraries by their canonical name)
telsoa014fcda012018-03-09 14:13:49 +000019# ) # e.g. "date_time" for "libboost_date_time"
20#
21# This module finds headers and requested component libraries OR a CMake
22# package configuration file provided by a "Boost CMake" build. For the
23# latter case skip to the "Boost CMake" section below. For the former
24# case results are reported in variables::
25#
26# Boost_FOUND - True if headers and requested libraries were found
27# Boost_INCLUDE_DIRS - Boost include directories
28# Boost_LIBRARY_DIRS - Link directories for Boost libraries
29# Boost_LIBRARIES - Boost component libraries to be linked
30# Boost_<C>_FOUND - True if component <C> was found (<C> is upper-case)
31# Boost_<C>_LIBRARY - Libraries to link for component <C> (may include
32# target_link_libraries debug/optimized keywords)
33# Boost_VERSION - BOOST_VERSION value from boost/version.hpp
34# Boost_LIB_VERSION - Version string appended to library filenames
35# Boost_MAJOR_VERSION - Boost major version number (X in X.y.z)
36# Boost_MINOR_VERSION - Boost minor version number (Y in x.Y.z)
37# Boost_SUBMINOR_VERSION - Boost subminor version number (Z in x.y.Z)
38# Boost_LIB_DIAGNOSTIC_DEFINITIONS (Windows)
39# - Pass to add_definitions() to have diagnostic
40# information about Boost's automatic linking
41# displayed during compilation
42#
Matthew Bentham0af44602018-09-07 10:40:55 +010043# Note that Boost Python components require a Python version suffix
44# (Boost 1.67 and later), e.g. ``python36`` or ``python27`` for the
45# versions built against Python 3.6 and 2.7, respectively. This also
46# applies to additional components using Python including
47# ``mpi_python`` and ``numpy``. Earlier Boost releases may use
48# distribution-specific suffixes such as ``2``, ``3`` or ``2.7``.
49# These may also be used as suffixes, but note that they are not
50# portable.
51#
telsoa014fcda012018-03-09 14:13:49 +000052# This module reads hints about search locations from variables::
53#
54# BOOST_ROOT - Preferred installation prefix
55# (or BOOSTROOT)
56# BOOST_INCLUDEDIR - Preferred include directory e.g. <prefix>/include
57# BOOST_LIBRARYDIR - Preferred library directory e.g. <prefix>/lib
58# Boost_NO_SYSTEM_PATHS - Set to ON to disable searching in locations not
59# specified by these hint variables. Default is OFF.
60# Boost_ADDITIONAL_VERSIONS
61# - List of Boost versions not known to this module
62# (Boost install locations may contain the version)
63#
64# and saves search results persistently in CMake cache entries::
65#
66# Boost_INCLUDE_DIR - Directory containing Boost headers
67# Boost_LIBRARY_DIR_RELEASE - Directory containing release Boost libraries
68# Boost_LIBRARY_DIR_DEBUG - Directory containing debug Boost libraries
69# Boost_<C>_LIBRARY_DEBUG - Component <C> library debug variant
70# Boost_<C>_LIBRARY_RELEASE - Component <C> library release variant
71#
72# The following :prop_tgt:`IMPORTED` targets are also defined::
73#
74# Boost::boost - Target for header-only dependencies
75# (Boost include directory)
76# Boost::<C> - Target for specific component dependency
77# (shared or static library); <C> is lower-
78# case
79# Boost::diagnostic_definitions - interface target to enable diagnostic
80# information about Boost's automatic linking
81# during compilation (adds BOOST_LIB_DIAGNOSTIC)
82# Boost::disable_autolinking - interface target to disable automatic
83# linking with MSVC (adds BOOST_ALL_NO_LIB)
84# Boost::dynamic_linking - interface target to enable dynamic linking
85# linking with MSVC (adds BOOST_ALL_DYN_LINK)
86#
87# Implicit dependencies such as Boost::filesystem requiring
88# Boost::system will be automatically detected and satisfied, even
89# if system is not specified when using find_package and if
90# Boost::system is not added to target_link_libraries. If using
Matthew Bentham0af44602018-09-07 10:40:55 +010091# Boost::thread, then Threads::Threads will also be added automatically.
telsoa014fcda012018-03-09 14:13:49 +000092#
93# It is important to note that the imported targets behave differently
94# than variables created by this module: multiple calls to
95# find_package(Boost) in the same directory or sub-directories with
96# different options (e.g. static or shared) will not override the
97# values of the targets created by the first call.
98#
99# Users may set these hints or results as cache entries. Projects
100# should not read these entries directly but instead use the above
101# result variables. Note that some hint names start in upper-case
102# "BOOST". One may specify these as environment variables if they are
103# not specified as CMake variables or cache entries.
104#
105# This module first searches for the Boost header files using the above
106# hint variables (excluding BOOST_LIBRARYDIR) and saves the result in
107# Boost_INCLUDE_DIR. Then it searches for requested component libraries
108# using the above hints (excluding BOOST_INCLUDEDIR and
109# Boost_ADDITIONAL_VERSIONS), "lib" directories near Boost_INCLUDE_DIR,
110# and the library name configuration settings below. It saves the
111# library directories in Boost_LIBRARY_DIR_DEBUG and
112# Boost_LIBRARY_DIR_RELEASE and individual library
113# locations in Boost_<C>_LIBRARY_DEBUG and Boost_<C>_LIBRARY_RELEASE.
114# When one changes settings used by previous searches in the same build
115# tree (excluding environment variables) this module discards previous
116# search results affected by the changes and searches again.
117#
118# Boost libraries come in many variants encoded in their file name.
119# Users or projects may tell this module which variant to find by
120# setting variables::
121#
Matthew Bentham0af44602018-09-07 10:40:55 +0100122# Boost_USE_DEBUG_LIBS - Set to ON or OFF to specify whether to search
123# and use the debug libraries. Default is ON.
124# Boost_USE_RELEASE_LIBS - Set to ON or OFF to specify whether to search
125# and use the release libraries. Default is ON.
telsoa014fcda012018-03-09 14:13:49 +0000126# Boost_USE_MULTITHREADED - Set to OFF to use the non-multithreaded
127# libraries ('mt' tag). Default is ON.
128# Boost_USE_STATIC_LIBS - Set to ON to force the use of the static
129# libraries. Default is OFF.
130# Boost_USE_STATIC_RUNTIME - Set to ON or OFF to specify whether to use
131# libraries linked statically to the C++ runtime
132# ('s' tag). Default is platform dependent.
133# Boost_USE_DEBUG_RUNTIME - Set to ON or OFF to specify whether to use
134# libraries linked to the MS debug C++ runtime
135# ('g' tag). Default is ON.
136# Boost_USE_DEBUG_PYTHON - Set to ON to use libraries compiled with a
137# debug Python build ('y' tag). Default is OFF.
138# Boost_USE_STLPORT - Set to ON to use libraries compiled with
139# STLPort ('p' tag). Default is OFF.
140# Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
141# - Set to ON to use libraries compiled with
142# STLPort deprecated "native iostreams"
143# ('n' tag). Default is OFF.
144# Boost_COMPILER - Set to the compiler-specific library suffix
145# (e.g. "-gcc43"). Default is auto-computed
146# for the C++ compiler in use. A list may be
147# used if multiple compatible suffixes should
148# be tested for, in decreasing order of
149# preference.
150# Boost_THREADAPI - Suffix for "thread" component library name,
151# such as "pthread" or "win32". Names with
152# and without this suffix will both be tried.
153# Boost_NAMESPACE - Alternate namespace used to build boost with
154# e.g. if set to "myboost", will search for
155# myboost_thread instead of boost_thread.
156#
157# Other variables one may set to control this module are::
158#
159# Boost_DEBUG - Set to ON to enable debug output from FindBoost.
160# Please enable this before filing any bug report.
161# Boost_DETAILED_FAILURE_MSG
162# - Set to ON to add detailed information to the
163# failure message even when the REQUIRED option
164# is not given to the find_package call.
165# Boost_REALPATH - Set to ON to resolve symlinks for discovered
166# libraries to assist with packaging. For example,
167# the "system" component library may be resolved to
Matthew Bentham0af44602018-09-07 10:40:55 +0100168# "/usr/lib/libboost_system.so.1.67.0" instead of
telsoa014fcda012018-03-09 14:13:49 +0000169# "/usr/lib/libboost_system.so". This does not
170# affect linking and should not be enabled unless
171# the user needs this information.
172# Boost_LIBRARY_DIR - Default value for Boost_LIBRARY_DIR_RELEASE and
173# Boost_LIBRARY_DIR_DEBUG.
174#
175# On Visual Studio and Borland compilers Boost headers request automatic
176# linking to corresponding libraries. This requires matching libraries
177# to be linked explicitly or available in the link library search path.
178# In this case setting Boost_USE_STATIC_LIBS to OFF may not achieve
179# dynamic linking. Boost automatic linking typically requests static
180# libraries with a few exceptions (such as Boost.Python). Use::
181#
182# add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
183#
184# to ask Boost to report information about automatic linking requests.
185#
186# Example to find Boost headers only::
187#
188# find_package(Boost 1.36.0)
189# if(Boost_FOUND)
190# include_directories(${Boost_INCLUDE_DIRS})
191# add_executable(foo foo.cc)
192# endif()
193#
194# Example to find Boost libraries and use imported targets::
195#
196# find_package(Boost 1.56 REQUIRED COMPONENTS
197# date_time filesystem iostreams)
198# add_executable(foo foo.cc)
199# target_link_libraries(foo Boost::date_time Boost::filesystem
200# Boost::iostreams)
201#
Matthew Bentham0af44602018-09-07 10:40:55 +0100202# Example to find Boost Python 3.6 libraries and use imported targets::
telsoa014fcda012018-03-09 14:13:49 +0000203#
Matthew Bentham0af44602018-09-07 10:40:55 +0100204# find_package(Boost 1.67 REQUIRED COMPONENTS
205# python36 numpy36)
206# add_executable(foo foo.cc)
207# target_link_libraries(foo Boost::python36 Boost::numpy36)
208#
209# Example to find Boost headers and some *static* (release only) libraries::
210#
211# set(Boost_USE_STATIC_LIBS ON) # only find static libs
212# set(Boost_USE_DEBUG_LIBS OFF) # ignore debug libs and
213# set(Boost_USE_RELEASE_LIBS ON) # only find release libs
telsoa014fcda012018-03-09 14:13:49 +0000214# set(Boost_USE_MULTITHREADED ON)
215# set(Boost_USE_STATIC_RUNTIME OFF)
Matthew Bentham0af44602018-09-07 10:40:55 +0100216# find_package(Boost 1.66.0 COMPONENTS date_time filesystem system ...)
telsoa014fcda012018-03-09 14:13:49 +0000217# if(Boost_FOUND)
218# include_directories(${Boost_INCLUDE_DIRS})
219# add_executable(foo foo.cc)
220# target_link_libraries(foo ${Boost_LIBRARIES})
221# endif()
222#
223# Boost CMake
224# ^^^^^^^^^^^
225#
226# If Boost was built using the boost-cmake project it provides a package
227# configuration file for use with find_package's Config mode. This
228# module looks for the package configuration file called
229# BoostConfig.cmake or boost-config.cmake and stores the result in cache
230# entry "Boost_DIR". If found, the package configuration file is loaded
231# and this module returns with no further action. See documentation of
232# the Boost CMake package configuration for details on what it provides.
233#
234# Set Boost_NO_BOOST_CMAKE to ON to disable the search for boost-cmake.
235
Matthew Bentham0af44602018-09-07 10:40:55 +0100236# Save project's policies
237cmake_policy(PUSH)
238cmake_policy(SET CMP0057 NEW) # if IN_LIST
239
telsoa014fcda012018-03-09 14:13:49 +0000240#-------------------------------------------------------------------------------
241# Before we go searching, check whether boost-cmake is available, unless the
242# user specifically asked NOT to search for boost-cmake.
243#
244# If Boost_DIR is set, this behaves as any find_package call would. If not,
245# it looks at BOOST_ROOT and BOOSTROOT to find Boost.
246#
247if (NOT Boost_NO_BOOST_CMAKE)
248 # If Boost_DIR is not set, look for BOOSTROOT and BOOST_ROOT as alternatives,
249 # since these are more conventional for Boost.
250 if ("$ENV{Boost_DIR}" STREQUAL "")
251 if (NOT "$ENV{BOOST_ROOT}" STREQUAL "")
252 set(ENV{Boost_DIR} $ENV{BOOST_ROOT})
253 elseif (NOT "$ENV{BOOSTROOT}" STREQUAL "")
254 set(ENV{Boost_DIR} $ENV{BOOSTROOT})
255 endif()
256 endif()
257
258 # Do the same find_package call but look specifically for the CMake version.
259 # Note that args are passed in the Boost_FIND_xxxxx variables, so there is no
260 # need to delegate them to this find_package call.
261 find_package(Boost QUIET NO_MODULE)
262 mark_as_advanced(Boost_DIR)
263
264 # If we found boost-cmake, then we're done. Print out what we found.
265 # Otherwise let the rest of the module try to find it.
266 if (Boost_FOUND)
Matthew Bentham0af44602018-09-07 10:40:55 +0100267 message(STATUS "Boost ${Boost_FIND_VERSION} found.")
telsoa014fcda012018-03-09 14:13:49 +0000268 if (Boost_FIND_COMPONENTS)
Matthew Bentham0af44602018-09-07 10:40:55 +0100269 message(STATUS "Found Boost components:\n ${Boost_FIND_COMPONENTS}")
telsoa014fcda012018-03-09 14:13:49 +0000270 endif()
Matthew Bentham0af44602018-09-07 10:40:55 +0100271 # Restore project's policies
272 cmake_policy(POP)
telsoa014fcda012018-03-09 14:13:49 +0000273 return()
274 endif()
275endif()
276
277
278#-------------------------------------------------------------------------------
279# FindBoost functions & macros
280#
281
282############################################
283#
284# Check the existence of the libraries.
285#
286############################################
287# This macro was taken directly from the FindQt4.cmake file that is included
288# with the CMake distribution. This is NOT my work. All work was done by the
289# original authors of the FindQt4.cmake file. Only minor modifications were
290# made to remove references to Qt and make this file more generally applicable
291# And ELSE/ENDIF pairs were removed for readability.
292#########################################################################
293
294macro(_Boost_ADJUST_LIB_VARS basename)
295 if(Boost_INCLUDE_DIR )
296 if(Boost_${basename}_LIBRARY_DEBUG AND Boost_${basename}_LIBRARY_RELEASE)
Matthew Bentham0af44602018-09-07 10:40:55 +0100297 # if the generator is multi-config or if CMAKE_BUILD_TYPE is set for
298 # single-config generators, set optimized and debug libraries
299 get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
300 if(_isMultiConfig OR CMAKE_BUILD_TYPE)
telsoa014fcda012018-03-09 14:13:49 +0000301 set(Boost_${basename}_LIBRARY optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
302 else()
Matthew Bentham0af44602018-09-07 10:40:55 +0100303 # For single-config generators where CMAKE_BUILD_TYPE has no value,
304 # just use the release libraries
telsoa014fcda012018-03-09 14:13:49 +0000305 set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} )
306 endif()
307 # FIXME: This probably should be set for both cases
308 set(Boost_${basename}_LIBRARIES optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
309 endif()
310
311 # if only the release version was found, set the debug variable also to the release version
312 if(Boost_${basename}_LIBRARY_RELEASE AND NOT Boost_${basename}_LIBRARY_DEBUG)
313 set(Boost_${basename}_LIBRARY_DEBUG ${Boost_${basename}_LIBRARY_RELEASE})
314 set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE})
315 set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_RELEASE})
316 endif()
317
318 # if only the debug version was found, set the release variable also to the debug version
319 if(Boost_${basename}_LIBRARY_DEBUG AND NOT Boost_${basename}_LIBRARY_RELEASE)
320 set(Boost_${basename}_LIBRARY_RELEASE ${Boost_${basename}_LIBRARY_DEBUG})
321 set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_DEBUG})
322 set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_DEBUG})
323 endif()
324
325 # If the debug & release library ends up being the same, omit the keywords
Matthew Bentham0af44602018-09-07 10:40:55 +0100326 if("${Boost_${basename}_LIBRARY_RELEASE}" STREQUAL "${Boost_${basename}_LIBRARY_DEBUG}")
telsoa014fcda012018-03-09 14:13:49 +0000327 set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} )
328 set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_RELEASE} )
329 endif()
330
331 if(Boost_${basename}_LIBRARY AND Boost_${basename}_HEADER)
332 set(Boost_${basename}_FOUND ON)
Matthew Bentham0af44602018-09-07 10:40:55 +0100333 if("x${basename}" STREQUAL "xTHREAD" AND NOT TARGET Threads::Threads)
334 string(APPEND Boost_ERROR_REASON_THREAD " (missing dependency: Threads)")
335 set(Boost_THREAD_FOUND OFF)
336 endif()
telsoa014fcda012018-03-09 14:13:49 +0000337 endif()
338
339 endif()
340 # Make variables changeable to the advanced user
341 mark_as_advanced(
342 Boost_${basename}_LIBRARY_RELEASE
343 Boost_${basename}_LIBRARY_DEBUG
344 )
345endmacro()
346
347# Detect changes in used variables.
348# Compares the current variable value with the last one.
349# In short form:
350# v != v_LAST -> CHANGED = 1
351# v is defined, v_LAST not -> CHANGED = 1
352# v is not defined, but v_LAST is -> CHANGED = 1
353# otherwise -> CHANGED = 0
354# CHANGED is returned in variable named ${changed_var}
355macro(_Boost_CHANGE_DETECT changed_var)
356 set(${changed_var} 0)
357 foreach(v ${ARGN})
358 if(DEFINED _Boost_COMPONENTS_SEARCHED)
359 if(${v})
360 if(_${v}_LAST)
361 string(COMPARE NOTEQUAL "${${v}}" "${_${v}_LAST}" _${v}_CHANGED)
362 else()
363 set(_${v}_CHANGED 1)
364 endif()
365 elseif(_${v}_LAST)
366 set(_${v}_CHANGED 1)
367 endif()
368 if(_${v}_CHANGED)
369 set(${changed_var} 1)
370 endif()
371 else()
372 set(_${v}_CHANGED 0)
373 endif()
374 endforeach()
375endmacro()
376
377#
378# Find the given library (var).
379# Use 'build_type' to support different lib paths for RELEASE or DEBUG builds
380#
381macro(_Boost_FIND_LIBRARY var build_type)
382
383 find_library(${var} ${ARGN})
384
385 if(${var})
386 # If this is the first library found then save Boost_LIBRARY_DIR_[RELEASE,DEBUG].
387 if(NOT Boost_LIBRARY_DIR_${build_type})
388 get_filename_component(_dir "${${var}}" PATH)
389 set(Boost_LIBRARY_DIR_${build_type} "${_dir}" CACHE PATH "Boost library directory ${build_type}" FORCE)
390 endif()
391 elseif(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
392 # Try component-specific hints but do not save Boost_LIBRARY_DIR_[RELEASE,DEBUG].
393 find_library(${var} HINTS ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT} ${ARGN})
394 endif()
395
396 # If Boost_LIBRARY_DIR_[RELEASE,DEBUG] is known then search only there.
397 if(Boost_LIBRARY_DIR_${build_type})
398 set(_boost_LIBRARY_SEARCH_DIRS_${build_type} ${Boost_LIBRARY_DIR_${build_type}} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
399 if(Boost_DEBUG)
400 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
401 " Boost_LIBRARY_DIR_${build_type} = ${Boost_LIBRARY_DIR_${build_type}}"
402 " _boost_LIBRARY_SEARCH_DIRS_${build_type} = ${_boost_LIBRARY_SEARCH_DIRS_${build_type}}")
403 endif()
404 endif()
405endmacro()
406
407#-------------------------------------------------------------------------------
408
409#
410# Runs compiler with "-dumpversion" and parses major/minor
411# version with a regex.
412#
413function(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION)
Matthew Bentham0af44602018-09-07 10:40:55 +0100414 string(REGEX REPLACE "([0-9]+)\\.([0-9]+)(\\.[0-9]+)?" "\\1\\2"
415 _boost_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION})
telsoa014fcda012018-03-09 14:13:49 +0000416
417 set(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE)
418endfunction()
419
420#
421# Take a list of libraries with "thread" in it
422# and prepend duplicates with "thread_${Boost_THREADAPI}"
423# at the front of the list
424#
425function(_Boost_PREPEND_LIST_WITH_THREADAPI _output)
426 set(_orig_libnames ${ARGN})
427 string(REPLACE "thread" "thread_${Boost_THREADAPI}" _threadapi_libnames "${_orig_libnames}")
428 set(${_output} ${_threadapi_libnames} ${_orig_libnames} PARENT_SCOPE)
429endfunction()
430
431#
432# If a library is found, replace its cache entry with its REALPATH
433#
434function(_Boost_SWAP_WITH_REALPATH _library _docstring)
435 if(${_library})
436 get_filename_component(_boost_filepathreal ${${_library}} REALPATH)
437 unset(${_library} CACHE)
438 set(${_library} ${_boost_filepathreal} CACHE FILEPATH "${_docstring}")
439 endif()
440endfunction()
441
442function(_Boost_CHECK_SPELLING _var)
443 if(${_var})
444 string(TOUPPER ${_var} _var_UC)
445 message(FATAL_ERROR "ERROR: ${_var} is not the correct spelling. The proper spelling is ${_var_UC}.")
446 endif()
447endfunction()
448
449# Guesses Boost's compiler prefix used in built library names
450# Returns the guess by setting the variable pointed to by _ret
451function(_Boost_GUESS_COMPILER_PREFIX _ret)
Matthew Bentham0af44602018-09-07 10:40:55 +0100452 if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntel")
telsoa014fcda012018-03-09 14:13:49 +0000453 if(WIN32)
454 set (_boost_COMPILER "-iw")
455 else()
456 set (_boost_COMPILER "-il")
457 endif()
458 elseif (GHSMULTI)
459 set(_boost_COMPILER "-ghs")
460 elseif("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
Matthew Bentham0af44602018-09-07 10:40:55 +0100461 if(MSVC_TOOLSET_VERSION GREATER_EQUAL 141)
telsoa014fcda012018-03-09 14:13:49 +0000462 set(_boost_COMPILER "-vc141;-vc140")
Matthew Bentham0af44602018-09-07 10:40:55 +0100463 elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 80)
464 set(_boost_COMPILER "-vc${MSVC_TOOLSET_VERSION}")
telsoa014fcda012018-03-09 14:13:49 +0000465 elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.10)
466 set(_boost_COMPILER "-vc71")
467 elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13) # Good luck!
468 set(_boost_COMPILER "-vc7") # yes, this is correct
469 else() # VS 6.0 Good luck!
470 set(_boost_COMPILER "-vc6") # yes, this is correct
471 endif()
472 elseif (BORLAND)
473 set(_boost_COMPILER "-bcb")
474 elseif(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
475 set(_boost_COMPILER "-sw")
476 elseif(CMAKE_CXX_COMPILER_ID STREQUAL "XL")
477 set(_boost_COMPILER "-xlc")
478 elseif (MINGW)
479 if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34)
480 set(_boost_COMPILER "-mgw") # no GCC version encoding prior to 1.34
481 else()
482 _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION)
483 set(_boost_COMPILER "-mgw${_boost_COMPILER_VERSION}")
484 endif()
485 elseif (UNIX)
486 if (CMAKE_COMPILER_IS_GNUCXX)
487 if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34)
488 set(_boost_COMPILER "-gcc") # no GCC version encoding prior to 1.34
489 else()
490 _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION)
491 # Determine which version of GCC we have.
492 if(APPLE)
493 if(Boost_MINOR_VERSION)
494 if(${Boost_MINOR_VERSION} GREATER 35)
495 # In Boost 1.36.0 and newer, the mangled compiler name used
496 # on Mac OS X/Darwin is "xgcc".
497 set(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}")
498 else()
499 # In Boost <= 1.35.0, there is no mangled compiler name for
500 # the Mac OS X/Darwin version of GCC.
501 set(_boost_COMPILER "")
502 endif()
503 else()
504 # We don't know the Boost version, so assume it's
505 # pre-1.36.0.
506 set(_boost_COMPILER "")
507 endif()
508 else()
509 set(_boost_COMPILER "-gcc${_boost_COMPILER_VERSION}")
510 endif()
511 endif()
512 endif ()
513 else()
514 # TODO at least Boost_DEBUG here?
515 set(_boost_COMPILER "")
516 endif()
517 set(${_ret} ${_boost_COMPILER} PARENT_SCOPE)
518endfunction()
519
520#
521# Get component dependencies. Requires the dependencies to have been
522# defined for the Boost release version.
523#
524# component - the component to check
525# _ret - list of library dependencies
526#
527function(_Boost_COMPONENT_DEPENDENCIES component _ret)
528 # Note: to add a new Boost release, run
529 #
530 # % cmake -DBOOST_DIR=/path/to/boost/source -P Utilities/Scripts/BoostScanDeps.cmake
531 #
532 # The output may be added in a new block below. If it's the same as
533 # the previous release, simply update the version range of the block
534 # for the previous release. Also check if any new components have
535 # been added, and add any new components to
536 # _Boost_COMPONENT_HEADERS.
537 #
538 # This information was originally generated by running
539 # BoostScanDeps.cmake against every boost release to date supported
540 # by FindBoost:
541 #
542 # % for version in /path/to/boost/sources/*
543 # do
544 # cmake -DBOOST_DIR=$version -P Utilities/Scripts/BoostScanDeps.cmake
545 # done
546 #
547 # The output was then updated by search and replace with these regexes:
548 #
549 # - Strip message(STATUS) prefix dashes
550 # s;^-- ;;
551 # - Indent
552 # s;^set(; set(;;
553 # - Add conditionals
554 # s;Scanning /path/to/boost/sources/boost_\(.*\)_\(.*\)_\(.*); elseif(NOT Boost_VERSION VERSION_LESS \10\20\3 AND Boost_VERSION VERSION_LESS xxxx);
555 #
556 # This results in the logic seen below, but will require the xxxx
557 # replacing with the following Boost release version (or the next
558 # minor version to be released, e.g. 1.59 was the latest at the time
559 # of writing, making 1.60 the next, so 106000 is the needed version
560 # number). Identical consecutive releases were then merged together
561 # by updating the end range of the first block and removing the
562 # following redundant blocks.
563 #
564 # Running the script against all historical releases should be
565 # required only if the BoostScanDeps.cmake script logic is changed.
566 # The addition of a new release should only require it to be run
567 # against the new release.
Matthew Bentham0af44602018-09-07 10:40:55 +0100568
569 # Handle Python version suffixes
570 if(component MATCHES "^(python|mpi_python|numpy)([0-9][0-9]?|[0-9]\\.[0-9])\$")
571 set(component "${CMAKE_MATCH_1}")
572 set(component_python_version "${CMAKE_MATCH_2}")
573 endif()
574
telsoa014fcda012018-03-09 14:13:49 +0000575 set(_Boost_IMPORTED_TARGETS TRUE)
Matthew Bentham0af44602018-09-07 10:40:55 +0100576 if(Boost_VERSION VERSION_LESS 103300)
577 message(WARNING "Imported targets and dependency information not available for Boost version ${Boost_VERSION} (all versions older than 1.33)")
578 set(_Boost_IMPORTED_TARGETS FALSE)
579 elseif(NOT Boost_VERSION VERSION_LESS 103300 AND Boost_VERSION VERSION_LESS 103500)
telsoa014fcda012018-03-09 14:13:49 +0000580 set(_Boost_IOSTREAMS_DEPENDENCIES regex thread)
581 set(_Boost_REGEX_DEPENDENCIES thread)
582 set(_Boost_WAVE_DEPENDENCIES filesystem thread)
583 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
584 elseif(NOT Boost_VERSION VERSION_LESS 103500 AND Boost_VERSION VERSION_LESS 103600)
585 set(_Boost_FILESYSTEM_DEPENDENCIES system)
586 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
587 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100588 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000589 set(_Boost_WAVE_DEPENDENCIES filesystem system thread)
590 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
591 elseif(NOT Boost_VERSION VERSION_LESS 103600 AND Boost_VERSION VERSION_LESS 103800)
592 set(_Boost_FILESYSTEM_DEPENDENCIES system)
593 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
594 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l)
595 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100596 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000597 set(_Boost_WAVE_DEPENDENCIES filesystem system thread)
598 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
599 elseif(NOT Boost_VERSION VERSION_LESS 103800 AND Boost_VERSION VERSION_LESS 104300)
600 set(_Boost_FILESYSTEM_DEPENDENCIES system)
601 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
602 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l)
603 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100604 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000605 set(_Boost_THREAD_DEPENDENCIES date_time)
606 set(_Boost_WAVE_DEPENDENCIES filesystem system thread date_time)
607 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
608 elseif(NOT Boost_VERSION VERSION_LESS 104300 AND Boost_VERSION VERSION_LESS 104400)
609 set(_Boost_FILESYSTEM_DEPENDENCIES system)
610 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
611 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
612 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100613 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000614 set(_Boost_THREAD_DEPENDENCIES date_time)
615 set(_Boost_WAVE_DEPENDENCIES filesystem system thread date_time)
616 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
617 elseif(NOT Boost_VERSION VERSION_LESS 104400 AND Boost_VERSION VERSION_LESS 104500)
618 set(_Boost_FILESYSTEM_DEPENDENCIES system)
619 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
620 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random serialization)
621 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100622 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000623 set(_Boost_THREAD_DEPENDENCIES date_time)
624 set(_Boost_WAVE_DEPENDENCIES serialization filesystem system thread date_time)
625 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
626 elseif(NOT Boost_VERSION VERSION_LESS 104500 AND Boost_VERSION VERSION_LESS 104700)
627 set(_Boost_FILESYSTEM_DEPENDENCIES system)
628 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
629 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
630 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100631 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000632 set(_Boost_THREAD_DEPENDENCIES date_time)
633 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
634 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
635 elseif(NOT Boost_VERSION VERSION_LESS 104700 AND Boost_VERSION VERSION_LESS 104800)
636 set(_Boost_CHRONO_DEPENDENCIES system)
637 set(_Boost_FILESYSTEM_DEPENDENCIES system)
638 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
639 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
640 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100641 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000642 set(_Boost_THREAD_DEPENDENCIES date_time)
643 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
644 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
645 elseif(NOT Boost_VERSION VERSION_LESS 104800 AND Boost_VERSION VERSION_LESS 105000)
646 set(_Boost_CHRONO_DEPENDENCIES system)
647 set(_Boost_FILESYSTEM_DEPENDENCIES system)
648 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
649 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
650 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100651 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000652 set(_Boost_THREAD_DEPENDENCIES date_time)
653 set(_Boost_TIMER_DEPENDENCIES chrono system)
654 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
655 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
656 elseif(NOT Boost_VERSION VERSION_LESS 105000 AND Boost_VERSION VERSION_LESS 105300)
657 set(_Boost_CHRONO_DEPENDENCIES system)
658 set(_Boost_FILESYSTEM_DEPENDENCIES system)
659 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
660 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
661 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100662 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000663 set(_Boost_THREAD_DEPENDENCIES chrono system date_time)
664 set(_Boost_TIMER_DEPENDENCIES chrono system)
665 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time)
666 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
667 elseif(NOT Boost_VERSION VERSION_LESS 105300 AND Boost_VERSION VERSION_LESS 105400)
668 set(_Boost_ATOMIC_DEPENDENCIES thread chrono system date_time)
669 set(_Boost_CHRONO_DEPENDENCIES system)
670 set(_Boost_FILESYSTEM_DEPENDENCIES system)
671 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
672 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
673 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100674 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000675 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
676 set(_Boost_TIMER_DEPENDENCIES chrono system)
677 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time)
678 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
679 elseif(NOT Boost_VERSION VERSION_LESS 105400 AND Boost_VERSION VERSION_LESS 105500)
680 set(_Boost_ATOMIC_DEPENDENCIES thread chrono system date_time)
681 set(_Boost_CHRONO_DEPENDENCIES system)
682 set(_Boost_FILESYSTEM_DEPENDENCIES system)
683 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
684 set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
685 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
686 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100687 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000688 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
689 set(_Boost_TIMER_DEPENDENCIES chrono system)
690 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
691 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
692 elseif(NOT Boost_VERSION VERSION_LESS 105500 AND Boost_VERSION VERSION_LESS 105600)
693 set(_Boost_CHRONO_DEPENDENCIES system)
694 set(_Boost_COROUTINE_DEPENDENCIES context system)
695 set(_Boost_FILESYSTEM_DEPENDENCIES system)
696 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
697 set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
698 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
699 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100700 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000701 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
702 set(_Boost_TIMER_DEPENDENCIES chrono system)
703 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
704 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
705 elseif(NOT Boost_VERSION VERSION_LESS 105600 AND Boost_VERSION VERSION_LESS 105900)
706 set(_Boost_CHRONO_DEPENDENCIES system)
707 set(_Boost_COROUTINE_DEPENDENCIES context system)
708 set(_Boost_FILESYSTEM_DEPENDENCIES system)
709 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
710 set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
711 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
712 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100713 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000714 set(_Boost_RANDOM_DEPENDENCIES system)
715 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
716 set(_Boost_TIMER_DEPENDENCIES chrono system)
717 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
718 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
719 elseif(NOT Boost_VERSION VERSION_LESS 105900 AND Boost_VERSION VERSION_LESS 106000)
720 set(_Boost_CHRONO_DEPENDENCIES system)
721 set(_Boost_COROUTINE_DEPENDENCIES context system)
722 set(_Boost_FILESYSTEM_DEPENDENCIES system)
723 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
724 set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono atomic)
725 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
726 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100727 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000728 set(_Boost_RANDOM_DEPENDENCIES system)
729 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
730 set(_Boost_TIMER_DEPENDENCIES chrono system)
731 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
732 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
733 elseif(NOT Boost_VERSION VERSION_LESS 106000 AND Boost_VERSION VERSION_LESS 106100)
734 set(_Boost_CHRONO_DEPENDENCIES system)
735 set(_Boost_COROUTINE_DEPENDENCIES context system)
736 set(_Boost_FILESYSTEM_DEPENDENCIES system)
737 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
738 set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
739 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
740 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100741 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000742 set(_Boost_RANDOM_DEPENDENCIES system)
743 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
744 set(_Boost_TIMER_DEPENDENCIES chrono system)
745 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
746 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
747 elseif(NOT Boost_VERSION VERSION_LESS 106100 AND Boost_VERSION VERSION_LESS 106200)
748 set(_Boost_CHRONO_DEPENDENCIES system)
749 set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
750 set(_Boost_COROUTINE_DEPENDENCIES context system)
751 set(_Boost_FILESYSTEM_DEPENDENCIES system)
752 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
753 set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
754 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
755 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100756 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000757 set(_Boost_RANDOM_DEPENDENCIES system)
758 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
759 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
760 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
761 elseif(NOT Boost_VERSION VERSION_LESS 106200 AND Boost_VERSION VERSION_LESS 106300)
762 set(_Boost_CHRONO_DEPENDENCIES system)
763 set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
764 set(_Boost_COROUTINE_DEPENDENCIES context system)
765 set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
766 set(_Boost_FILESYSTEM_DEPENDENCIES system)
767 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
768 set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
769 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
770 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100771 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000772 set(_Boost_RANDOM_DEPENDENCIES system)
773 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
774 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
775 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
776 elseif(NOT Boost_VERSION VERSION_LESS 106300 AND Boost_VERSION VERSION_LESS 106500)
777 set(_Boost_CHRONO_DEPENDENCIES system)
778 set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
779 set(_Boost_COROUTINE_DEPENDENCIES context system)
780 set(_Boost_COROUTINE2_DEPENDENCIES context fiber thread chrono system date_time)
781 set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
782 set(_Boost_FILESYSTEM_DEPENDENCIES system)
783 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
784 set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
785 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
786 set(_Boost_MPI_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100787 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
telsoa014fcda012018-03-09 14:13:49 +0000788 set(_Boost_RANDOM_DEPENDENCIES system)
789 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
790 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
791 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
Matthew Bentham0af44602018-09-07 10:40:55 +0100792 elseif(NOT Boost_VERSION VERSION_LESS 106500 AND Boost_VERSION VERSION_LESS 106700)
793 set(_Boost_CHRONO_DEPENDENCIES system)
794 set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
795 set(_Boost_COROUTINE_DEPENDENCIES context system)
796 set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
797 set(_Boost_FILESYSTEM_DEPENDENCIES system)
798 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
799 set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
800 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
801 set(_Boost_MPI_DEPENDENCIES serialization)
802 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
803 set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
804 set(_Boost_RANDOM_DEPENDENCIES system)
805 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
806 set(_Boost_TIMER_DEPENDENCIES chrono system)
807 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
808 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
809 elseif(NOT Boost_VERSION VERSION_LESS 106700 AND Boost_VERSION VERSION_LESS 106800)
810 set(_Boost_CHRONO_DEPENDENCIES system)
811 set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
812 set(_Boost_COROUTINE_DEPENDENCIES context system)
813 set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
814 set(_Boost_FILESYSTEM_DEPENDENCIES system)
815 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
816 set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
817 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
818 set(_Boost_MPI_DEPENDENCIES serialization)
819 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
820 set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
821 set(_Boost_RANDOM_DEPENDENCIES system)
822 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
823 set(_Boost_TIMER_DEPENDENCIES chrono system)
824 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
825 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
telsoa014fcda012018-03-09 14:13:49 +0000826 else()
Matthew Bentham0af44602018-09-07 10:40:55 +0100827 if(NOT Boost_VERSION VERSION_LESS 106800)
828 set(_Boost_CHRONO_DEPENDENCIES system)
829 set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
830 set(_Boost_CONTRACT_DEPENDENCIES thread chrono system date_time)
831 set(_Boost_COROUTINE_DEPENDENCIES context system)
832 set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
833 set(_Boost_FILESYSTEM_DEPENDENCIES system)
834 set(_Boost_IOSTREAMS_DEPENDENCIES regex)
835 set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
836 set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
837 set(_Boost_MPI_DEPENDENCIES serialization)
838 set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
839 set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
840 set(_Boost_RANDOM_DEPENDENCIES system)
841 set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
842 set(_Boost_TIMER_DEPENDENCIES chrono system)
843 set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
844 set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
845 endif()
846 if(NOT Boost_VERSION VERSION_LESS 106900)
847 message(WARNING "New Boost version may have incorrect or missing dependencies and imported targets")
848 endif()
telsoa014fcda012018-03-09 14:13:49 +0000849 endif()
850
851 string(TOUPPER ${component} uppercomponent)
852 set(${_ret} ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
853 set(_Boost_IMPORTED_TARGETS ${_Boost_IMPORTED_TARGETS} PARENT_SCOPE)
854
855 string(REGEX REPLACE ";" " " _boost_DEPS_STRING "${_Boost_${uppercomponent}_DEPENDENCIES}")
856 if (NOT _boost_DEPS_STRING)
857 set(_boost_DEPS_STRING "(none)")
858 endif()
859 # message(STATUS "Dependencies for Boost::${component}: ${_boost_DEPS_STRING}")
860endfunction()
861
862#
863# Get component headers. This is the primary header (or headers) for
864# a given component, and is used to check that the headers are present
865# as well as the library itself as an extra sanity check of the build
866# environment.
867#
868# component - the component to check
869# _hdrs
870#
871function(_Boost_COMPONENT_HEADERS component _hdrs)
Matthew Bentham0af44602018-09-07 10:40:55 +0100872 # Handle Python version suffixes
873 if(component MATCHES "^(python|mpi_python|numpy)([0-9][0-9]?|[0-9]\\.[0-9])\$")
874 set(component "${CMAKE_MATCH_1}")
875 set(component_python_version "${CMAKE_MATCH_2}")
876 endif()
877
telsoa014fcda012018-03-09 14:13:49 +0000878 # Note: new boost components will require adding here. The header
879 # must be present in all versions of Boost providing a library.
880 set(_Boost_ATOMIC_HEADERS "boost/atomic.hpp")
881 set(_Boost_CHRONO_HEADERS "boost/chrono.hpp")
882 set(_Boost_CONTAINER_HEADERS "boost/container/container_fwd.hpp")
Matthew Bentham0af44602018-09-07 10:40:55 +0100883 set(_Boost_CONTRACT_HEADERS "boost/contract.hpp")
884 if(Boost_VERSION VERSION_LESS 106100)
885 set(_Boost_CONTEXT_HEADERS "boost/context/all.hpp")
886 else()
887 set(_Boost_CONTEXT_HEADERS "boost/context/detail/fcontext.hpp")
888 endif()
telsoa014fcda012018-03-09 14:13:49 +0000889 set(_Boost_COROUTINE_HEADERS "boost/coroutine/all.hpp")
telsoa014fcda012018-03-09 14:13:49 +0000890 set(_Boost_DATE_TIME_HEADERS "boost/date_time/date.hpp")
Matthew Bentham0af44602018-09-07 10:40:55 +0100891 set(_Boost_EXCEPTION_HEADERS "boost/exception/exception.hpp")
telsoa014fcda012018-03-09 14:13:49 +0000892 set(_Boost_FIBER_HEADERS "boost/fiber/all.hpp")
893 set(_Boost_FILESYSTEM_HEADERS "boost/filesystem/path.hpp")
894 set(_Boost_GRAPH_HEADERS "boost/graph/adjacency_list.hpp")
895 set(_Boost_GRAPH_PARALLEL_HEADERS "boost/graph/adjacency_list.hpp")
896 set(_Boost_IOSTREAMS_HEADERS "boost/iostreams/stream.hpp")
897 set(_Boost_LOCALE_HEADERS "boost/locale.hpp")
898 set(_Boost_LOG_HEADERS "boost/log/core.hpp")
899 set(_Boost_LOG_SETUP_HEADERS "boost/log/detail/setup_config.hpp")
900 set(_Boost_MATH_HEADERS "boost/math_fwd.hpp")
901 set(_Boost_MATH_C99_HEADERS "boost/math/tr1.hpp")
902 set(_Boost_MATH_C99F_HEADERS "boost/math/tr1.hpp")
903 set(_Boost_MATH_C99L_HEADERS "boost/math/tr1.hpp")
904 set(_Boost_MATH_TR1_HEADERS "boost/math/tr1.hpp")
905 set(_Boost_MATH_TR1F_HEADERS "boost/math/tr1.hpp")
906 set(_Boost_MATH_TR1L_HEADERS "boost/math/tr1.hpp")
907 set(_Boost_MPI_HEADERS "boost/mpi.hpp")
908 set(_Boost_MPI_PYTHON_HEADERS "boost/mpi/python/config.hpp")
Matthew Bentham0af44602018-09-07 10:40:55 +0100909 set(_Boost_NUMPY_HEADERS "boost/python/numpy.hpp")
telsoa014fcda012018-03-09 14:13:49 +0000910 set(_Boost_PRG_EXEC_MONITOR_HEADERS "boost/test/prg_exec_monitor.hpp")
911 set(_Boost_PROGRAM_OPTIONS_HEADERS "boost/program_options.hpp")
912 set(_Boost_PYTHON_HEADERS "boost/python.hpp")
913 set(_Boost_RANDOM_HEADERS "boost/random.hpp")
914 set(_Boost_REGEX_HEADERS "boost/regex.hpp")
915 set(_Boost_SERIALIZATION_HEADERS "boost/serialization/serialization.hpp")
916 set(_Boost_SIGNALS_HEADERS "boost/signals.hpp")
917 set(_Boost_SYSTEM_HEADERS "boost/system/config.hpp")
918 set(_Boost_TEST_EXEC_MONITOR_HEADERS "boost/test/test_exec_monitor.hpp")
919 set(_Boost_THREAD_HEADERS "boost/thread.hpp")
920 set(_Boost_TIMER_HEADERS "boost/timer.hpp")
921 set(_Boost_TYPE_ERASURE_HEADERS "boost/type_erasure/config.hpp")
922 set(_Boost_UNIT_TEST_FRAMEWORK_HEADERS "boost/test/framework.hpp")
923 set(_Boost_WAVE_HEADERS "boost/wave.hpp")
924 set(_Boost_WSERIALIZATION_HEADERS "boost/archive/text_wiarchive.hpp")
925 if(WIN32)
926 set(_Boost_BZIP2_HEADERS "boost/iostreams/filter/bzip2.hpp")
927 set(_Boost_ZLIB_HEADERS "boost/iostreams/filter/zlib.hpp")
928 endif()
929
930 string(TOUPPER ${component} uppercomponent)
931 set(${_hdrs} ${_Boost_${uppercomponent}_HEADERS} PARENT_SCOPE)
932
933 string(REGEX REPLACE ";" " " _boost_HDRS_STRING "${_Boost_${uppercomponent}_HEADERS}")
934 if (NOT _boost_HDRS_STRING)
935 set(_boost_HDRS_STRING "(none)")
936 endif()
937 # message(STATUS "Headers for Boost::${component}: ${_boost_HDRS_STRING}")
938endfunction()
939
940#
941# Determine if any missing dependencies require adding to the component list.
942#
943# Sets _Boost_${COMPONENT}_DEPENDENCIES for each required component,
944# plus _Boost_IMPORTED_TARGETS (TRUE if imported targets should be
945# defined; FALSE if dependency information is unavailable).
946#
947# componentvar - the component list variable name
948# extravar - the indirect dependency list variable name
949#
950#
951function(_Boost_MISSING_DEPENDENCIES componentvar extravar)
952 # _boost_unprocessed_components - list of components requiring processing
953 # _boost_processed_components - components already processed (or currently being processed)
954 # _boost_new_components - new components discovered for future processing
955 #
956 list(APPEND _boost_unprocessed_components ${${componentvar}})
957
958 while(_boost_unprocessed_components)
959 list(APPEND _boost_processed_components ${_boost_unprocessed_components})
960 foreach(component ${_boost_unprocessed_components})
961 string(TOUPPER ${component} uppercomponent)
Matthew Bentham0af44602018-09-07 10:40:55 +0100962 set(${_ret} ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
telsoa014fcda012018-03-09 14:13:49 +0000963 _Boost_COMPONENT_DEPENDENCIES("${component}" _Boost_${uppercomponent}_DEPENDENCIES)
964 set(_Boost_${uppercomponent}_DEPENDENCIES ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
965 set(_Boost_IMPORTED_TARGETS ${_Boost_IMPORTED_TARGETS} PARENT_SCOPE)
966 foreach(componentdep ${_Boost_${uppercomponent}_DEPENDENCIES})
Matthew Bentham0af44602018-09-07 10:40:55 +0100967 if (NOT ("${componentdep}" IN_LIST _boost_processed_components OR "${componentdep}" IN_LIST _boost_new_components))
telsoa014fcda012018-03-09 14:13:49 +0000968 list(APPEND _boost_new_components ${componentdep})
969 endif()
970 endforeach()
971 endforeach()
972 set(_boost_unprocessed_components ${_boost_new_components})
973 unset(_boost_new_components)
974 endwhile()
975 set(_boost_extra_components ${_boost_processed_components})
976 if(_boost_extra_components AND ${componentvar})
977 list(REMOVE_ITEM _boost_extra_components ${${componentvar}})
978 endif()
979 set(${componentvar} ${_boost_processed_components} PARENT_SCOPE)
980 set(${extravar} ${_boost_extra_components} PARENT_SCOPE)
981endfunction()
982
983#
Matthew Bentham0af44602018-09-07 10:40:55 +0100984# Some boost libraries may require particular set of compler features.
985# The very first one was `boost::fiber` introduced in Boost 1.62.
986# One can check required compiler features of it in
987# `${Boost_ROOT}/libs/fiber/build/Jamfile.v2`.
988#
989function(_Boost_COMPILER_FEATURES component _ret)
990 # Boost >= 1.62 and < 1.67
991 if(NOT Boost_VERSION VERSION_LESS 106200 AND Boost_VERSION VERSION_LESS 106700)
992 set(_Boost_FIBER_COMPILER_FEATURES
993 cxx_alias_templates
994 cxx_auto_type
995 cxx_constexpr
996 cxx_defaulted_functions
997 cxx_final
998 cxx_lambdas
999 cxx_noexcept
1000 cxx_nullptr
1001 cxx_rvalue_references
1002 cxx_thread_local
1003 cxx_variadic_templates
1004 )
1005 endif()
1006 string(TOUPPER ${component} uppercomponent)
1007 set(${_ret} ${_Boost_${uppercomponent}_COMPILER_FEATURES} PARENT_SCOPE)
1008endfunction()
1009
1010#
telsoa014fcda012018-03-09 14:13:49 +00001011# Update library search directory hint variable with paths used by prebuilt boost binaries.
1012#
1013# Prebuilt windows binaries (https://sourceforge.net/projects/boost/files/boost-binaries/)
1014# have library directories named using MSVC compiler version and architecture.
1015# This function would append corresponding directories if MSVC is a current compiler,
1016# so having `BOOST_ROOT` would be enough to specify to find everything.
1017#
Matthew Bentham0af44602018-09-07 10:40:55 +01001018function(_Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS componentlibvar basedir)
telsoa014fcda012018-03-09 14:13:49 +00001019 if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
1020 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
1021 set(_arch_suffix 64)
1022 else()
1023 set(_arch_suffix 32)
1024 endif()
Matthew Bentham0af44602018-09-07 10:40:55 +01001025 if(MSVC_TOOLSET_VERSION GREATER_EQUAL 141)
telsoa014fcda012018-03-09 14:13:49 +00001026 list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-14.1)
1027 list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-14.0)
Matthew Bentham0af44602018-09-07 10:40:55 +01001028 elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 80)
1029 math(EXPR _toolset_major_version "${MSVC_TOOLSET_VERSION} / 10")
1030 list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-${_toolset_major_version}.0)
telsoa014fcda012018-03-09 14:13:49 +00001031 endif()
Matthew Bentham0af44602018-09-07 10:40:55 +01001032 set(${componentlibvar} ${${componentlibvar}} PARENT_SCOPE)
telsoa014fcda012018-03-09 14:13:49 +00001033 endif()
Matthew Bentham0af44602018-09-07 10:40:55 +01001034endfunction()
telsoa014fcda012018-03-09 14:13:49 +00001035
1036#
1037# End functions/macros
1038#
1039#-------------------------------------------------------------------------------
1040
1041#-------------------------------------------------------------------------------
1042# main.
1043#-------------------------------------------------------------------------------
1044
1045
1046# If the user sets Boost_LIBRARY_DIR, use it as the default for both
1047# configurations.
1048if(NOT Boost_LIBRARY_DIR_RELEASE AND Boost_LIBRARY_DIR)
1049 set(Boost_LIBRARY_DIR_RELEASE "${Boost_LIBRARY_DIR}")
1050endif()
1051if(NOT Boost_LIBRARY_DIR_DEBUG AND Boost_LIBRARY_DIR)
1052 set(Boost_LIBRARY_DIR_DEBUG "${Boost_LIBRARY_DIR}")
1053endif()
1054
Matthew Bentham0af44602018-09-07 10:40:55 +01001055if(NOT DEFINED Boost_USE_DEBUG_LIBS)
1056 set(Boost_USE_DEBUG_LIBS TRUE)
1057endif()
1058if(NOT DEFINED Boost_USE_RELEASE_LIBS)
1059 set(Boost_USE_RELEASE_LIBS TRUE)
1060endif()
telsoa014fcda012018-03-09 14:13:49 +00001061if(NOT DEFINED Boost_USE_MULTITHREADED)
Matthew Bentham0af44602018-09-07 10:40:55 +01001062 set(Boost_USE_MULTITHREADED TRUE)
telsoa014fcda012018-03-09 14:13:49 +00001063endif()
1064if(NOT DEFINED Boost_USE_DEBUG_RUNTIME)
1065 set(Boost_USE_DEBUG_RUNTIME TRUE)
1066endif()
1067
1068# Check the version of Boost against the requested version.
1069if(Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR)
1070 message(SEND_ERROR "When requesting a specific version of Boost, you must provide at least the major and minor version numbers, e.g., 1.34")
1071endif()
1072
1073if(Boost_FIND_VERSION_EXACT)
1074 # The version may appear in a directory with or without the patch
1075 # level, even when the patch level is non-zero.
1076 set(_boost_TEST_VERSIONS
1077 "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}.${Boost_FIND_VERSION_PATCH}"
1078 "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
1079else()
1080 # The user has not requested an exact version. Among known
1081 # versions, find those that are acceptable to the user request.
1082 #
1083 # Note: When adding a new Boost release, also update the dependency
1084 # information in _Boost_COMPONENT_DEPENDENCIES and
1085 # _Boost_COMPONENT_HEADERS. See the instructions at the top of
1086 # _Boost_COMPONENT_DEPENDENCIES.
1087 set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
Matthew Bentham0af44602018-09-07 10:40:55 +01001088 "1.68.0" "1.68" "1.67.0" "1.67" "1.66.0" "1.66" "1.65.1" "1.65.0" "1.65"
telsoa014fcda012018-03-09 14:13:49 +00001089 "1.64.0" "1.64" "1.63.0" "1.63" "1.62.0" "1.62" "1.61.0" "1.61" "1.60.0" "1.60"
1090 "1.59.0" "1.59" "1.58.0" "1.58" "1.57.0" "1.57" "1.56.0" "1.56" "1.55.0" "1.55"
1091 "1.54.0" "1.54" "1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51"
1092 "1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1"
1093 "1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42"
1094 "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37"
1095 "1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0"
1096 "1.34" "1.33.1" "1.33.0" "1.33")
1097
1098 set(_boost_TEST_VERSIONS)
1099 if(Boost_FIND_VERSION)
1100 set(_Boost_FIND_VERSION_SHORT "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
1101 # Select acceptable versions.
1102 foreach(version ${_Boost_KNOWN_VERSIONS})
1103 if(NOT "${version}" VERSION_LESS "${Boost_FIND_VERSION}")
1104 # This version is high enough.
1105 list(APPEND _boost_TEST_VERSIONS "${version}")
1106 elseif("${version}.99" VERSION_EQUAL "${_Boost_FIND_VERSION_SHORT}.99")
1107 # This version is a short-form for the requested version with
1108 # the patch level dropped.
1109 list(APPEND _boost_TEST_VERSIONS "${version}")
1110 endif()
1111 endforeach()
1112 else()
1113 # Any version is acceptable.
1114 set(_boost_TEST_VERSIONS "${_Boost_KNOWN_VERSIONS}")
1115 endif()
1116endif()
1117
1118# The reason that we failed to find Boost. This will be set to a
1119# user-friendly message when we fail to find some necessary piece of
1120# Boost.
1121set(Boost_ERROR_REASON)
1122
1123if(Boost_DEBUG)
1124 # Output some of their choices
1125 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1126 "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}")
1127 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1128 "Boost_USE_MULTITHREADED = ${Boost_USE_MULTITHREADED}")
1129 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1130 "Boost_USE_STATIC_LIBS = ${Boost_USE_STATIC_LIBS}")
1131 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1132 "Boost_USE_STATIC_RUNTIME = ${Boost_USE_STATIC_RUNTIME}")
1133 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1134 "Boost_ADDITIONAL_VERSIONS = ${Boost_ADDITIONAL_VERSIONS}")
1135 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1136 "Boost_NO_SYSTEM_PATHS = ${Boost_NO_SYSTEM_PATHS}")
1137endif()
1138
1139# Supply Boost_LIB_DIAGNOSTIC_DEFINITIONS as a convenience target. It
1140# will only contain any interface definitions on WIN32, but is created
1141# on all platforms to keep end user code free from platform dependent
1142# code. Also provide convenience targets to disable autolinking and
1143# enable dynamic linking.
1144if(NOT TARGET Boost::diagnostic_definitions)
1145 add_library(Boost::diagnostic_definitions INTERFACE IMPORTED)
1146 add_library(Boost::disable_autolinking INTERFACE IMPORTED)
1147 add_library(Boost::dynamic_linking INTERFACE IMPORTED)
1148endif()
1149if(WIN32)
1150 # In windows, automatic linking is performed, so you do not have
1151 # to specify the libraries. If you are linking to a dynamic
1152 # runtime, then you can choose to link to either a static or a
1153 # dynamic Boost library, the default is to do a static link. You
1154 # can alter this for a specific library "whatever" by defining
1155 # BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to be
1156 # linked dynamically. Alternatively you can force all Boost
1157 # libraries to dynamic link by defining BOOST_ALL_DYN_LINK.
1158
1159 # This feature can be disabled for Boost library "whatever" by
1160 # defining BOOST_WHATEVER_NO_LIB, or for all of Boost by defining
1161 # BOOST_ALL_NO_LIB.
1162
1163 # If you want to observe which libraries are being linked against
1164 # then defining BOOST_LIB_DIAGNOSTIC will cause the auto-linking
1165 # code to emit a #pragma message each time a library is selected
1166 # for linking.
1167 set(Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC")
1168 set_target_properties(Boost::diagnostic_definitions PROPERTIES
1169 INTERFACE_COMPILE_DEFINITIONS "BOOST_LIB_DIAGNOSTIC")
1170 set_target_properties(Boost::disable_autolinking PROPERTIES
1171 INTERFACE_COMPILE_DEFINITIONS "BOOST_ALL_NO_LIB")
1172 set_target_properties(Boost::dynamic_linking PROPERTIES
1173 INTERFACE_COMPILE_DEFINITIONS "BOOST_ALL_DYN_LINK")
1174endif()
1175
1176_Boost_CHECK_SPELLING(Boost_ROOT)
1177_Boost_CHECK_SPELLING(Boost_LIBRARYDIR)
1178_Boost_CHECK_SPELLING(Boost_INCLUDEDIR)
1179
1180# Collect environment variable inputs as hints. Do not consider changes.
1181foreach(v BOOSTROOT BOOST_ROOT BOOST_INCLUDEDIR BOOST_LIBRARYDIR)
1182 set(_env $ENV{${v}})
1183 if(_env)
1184 file(TO_CMAKE_PATH "${_env}" _ENV_${v})
1185 else()
1186 set(_ENV_${v} "")
1187 endif()
1188endforeach()
1189if(NOT _ENV_BOOST_ROOT AND _ENV_BOOSTROOT)
1190 set(_ENV_BOOST_ROOT "${_ENV_BOOSTROOT}")
1191endif()
1192
1193# Collect inputs and cached results. Detect changes since the last run.
1194if(NOT BOOST_ROOT AND BOOSTROOT)
1195 set(BOOST_ROOT "${BOOSTROOT}")
1196endif()
1197set(_Boost_VARS_DIR
1198 BOOST_ROOT
1199 Boost_NO_SYSTEM_PATHS
1200 )
1201
1202if(Boost_DEBUG)
1203 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1204 "Declared as CMake or Environmental Variables:")
1205 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1206 " BOOST_ROOT = ${BOOST_ROOT}")
1207 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1208 " BOOST_INCLUDEDIR = ${BOOST_INCLUDEDIR}")
1209 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1210 " BOOST_LIBRARYDIR = ${BOOST_LIBRARYDIR}")
1211 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1212 "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}")
1213endif()
1214
1215# ------------------------------------------------------------------------
1216# Search for Boost include DIR
1217# ------------------------------------------------------------------------
1218
1219set(_Boost_VARS_INC BOOST_INCLUDEDIR Boost_INCLUDE_DIR Boost_ADDITIONAL_VERSIONS)
1220_Boost_CHANGE_DETECT(_Boost_CHANGE_INCDIR ${_Boost_VARS_DIR} ${_Boost_VARS_INC})
1221# Clear Boost_INCLUDE_DIR if it did not change but other input affecting the
1222# location did. We will find a new one based on the new inputs.
1223if(_Boost_CHANGE_INCDIR AND NOT _Boost_INCLUDE_DIR_CHANGED)
1224 unset(Boost_INCLUDE_DIR CACHE)
1225endif()
1226
1227if(NOT Boost_INCLUDE_DIR)
1228 set(_boost_INCLUDE_SEARCH_DIRS "")
1229 if(BOOST_INCLUDEDIR)
1230 list(APPEND _boost_INCLUDE_SEARCH_DIRS ${BOOST_INCLUDEDIR})
1231 elseif(_ENV_BOOST_INCLUDEDIR)
1232 list(APPEND _boost_INCLUDE_SEARCH_DIRS ${_ENV_BOOST_INCLUDEDIR})
1233 endif()
1234
1235 if( BOOST_ROOT )
1236 list(APPEND _boost_INCLUDE_SEARCH_DIRS ${BOOST_ROOT}/include ${BOOST_ROOT})
1237 elseif( _ENV_BOOST_ROOT )
1238 list(APPEND _boost_INCLUDE_SEARCH_DIRS ${_ENV_BOOST_ROOT}/include ${_ENV_BOOST_ROOT})
1239 endif()
1240
1241 if( Boost_NO_SYSTEM_PATHS)
1242 list(APPEND _boost_INCLUDE_SEARCH_DIRS NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH)
1243 else()
1244 if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
1245 foreach(ver ${_Boost_KNOWN_VERSIONS})
1246 string(REPLACE "." "_" ver "${ver}")
1247 list(APPEND _boost_INCLUDE_SEARCH_DIRS PATHS "C:/local/boost_${ver}")
1248 endforeach()
1249 endif()
1250 list(APPEND _boost_INCLUDE_SEARCH_DIRS PATHS
1251 C:/boost/include
1252 C:/boost
1253 /sw/local/include
1254 )
1255 endif()
1256
1257 # Try to find Boost by stepping backwards through the Boost versions
1258 # we know about.
1259 # Build a list of path suffixes for each version.
1260 set(_boost_PATH_SUFFIXES)
1261 foreach(_boost_VER ${_boost_TEST_VERSIONS})
1262 # Add in a path suffix, based on the required version, ideally
1263 # we could read this from version.hpp, but for that to work we'd
1264 # need to know the include dir already
1265 set(_boost_BOOSTIFIED_VERSION)
1266
1267 # Transform 1.35 => 1_35 and 1.36.0 => 1_36_0
1268 if(_boost_VER MATCHES "([0-9]+)\\.([0-9]+)\\.([0-9]+)")
1269 set(_boost_BOOSTIFIED_VERSION
1270 "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}_${CMAKE_MATCH_3}")
1271 elseif(_boost_VER MATCHES "([0-9]+)\\.([0-9]+)")
1272 set(_boost_BOOSTIFIED_VERSION
1273 "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}")
1274 endif()
1275
1276 list(APPEND _boost_PATH_SUFFIXES
1277 "boost-${_boost_BOOSTIFIED_VERSION}"
1278 "boost_${_boost_BOOSTIFIED_VERSION}"
1279 "boost/boost-${_boost_BOOSTIFIED_VERSION}"
1280 "boost/boost_${_boost_BOOSTIFIED_VERSION}"
1281 )
1282
1283 endforeach()
1284
1285 if(Boost_DEBUG)
1286 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1287 "Include debugging info:")
1288 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1289 " _boost_INCLUDE_SEARCH_DIRS = ${_boost_INCLUDE_SEARCH_DIRS}")
1290 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1291 " _boost_PATH_SUFFIXES = ${_boost_PATH_SUFFIXES}")
1292 endif()
1293
1294 # Look for a standard boost header file.
1295 find_path(Boost_INCLUDE_DIR
1296 NAMES boost/config.hpp
1297 HINTS ${_boost_INCLUDE_SEARCH_DIRS}
1298 PATH_SUFFIXES ${_boost_PATH_SUFFIXES}
1299 )
1300endif()
1301
1302# ------------------------------------------------------------------------
1303# Extract version information from version.hpp
1304# ------------------------------------------------------------------------
1305
1306# Set Boost_FOUND based only on header location and version.
1307# It will be updated below for component libraries.
1308if(Boost_INCLUDE_DIR)
1309 if(Boost_DEBUG)
1310 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1311 "location of version.hpp: ${Boost_INCLUDE_DIR}/boost/version.hpp")
1312 endif()
1313
1314 # Extract Boost_VERSION and Boost_LIB_VERSION from version.hpp
1315 set(Boost_VERSION 0)
1316 set(Boost_LIB_VERSION "")
1317 file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")
1318 set(_Boost_VERSION_REGEX "([0-9]+)")
1319 set(_Boost_LIB_VERSION_REGEX "\"([0-9_]+)\"")
1320 foreach(v VERSION LIB_VERSION)
1321 if("${_boost_VERSION_HPP_CONTENTS}" MATCHES "#define BOOST_${v} ${_Boost_${v}_REGEX}")
1322 set(Boost_${v} "${CMAKE_MATCH_1}")
1323 endif()
1324 endforeach()
1325 unset(_boost_VERSION_HPP_CONTENTS)
1326
1327 math(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000")
1328 math(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000")
1329 math(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100")
1330
1331 string(APPEND Boost_ERROR_REASON
1332 "Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}\nBoost include path: ${Boost_INCLUDE_DIR}")
1333 if(Boost_DEBUG)
1334 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1335 "version.hpp reveals boost "
1336 "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}")
1337 endif()
1338
1339 if(Boost_FIND_VERSION)
1340 # Set Boost_FOUND based on requested version.
1341 set(_Boost_VERSION "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}")
1342 if("${_Boost_VERSION}" VERSION_LESS "${Boost_FIND_VERSION}")
1343 set(Boost_FOUND 0)
1344 set(_Boost_VERSION_AGE "old")
1345 elseif(Boost_FIND_VERSION_EXACT AND
1346 NOT "${_Boost_VERSION}" VERSION_EQUAL "${Boost_FIND_VERSION}")
1347 set(Boost_FOUND 0)
1348 set(_Boost_VERSION_AGE "new")
1349 else()
1350 set(Boost_FOUND 1)
1351 endif()
1352 if(NOT Boost_FOUND)
1353 # State that we found a version of Boost that is too new or too old.
1354 string(APPEND Boost_ERROR_REASON
1355 "\nDetected version of Boost is too ${_Boost_VERSION_AGE}. Requested version was ${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
1356 if (Boost_FIND_VERSION_PATCH)
1357 string(APPEND Boost_ERROR_REASON
1358 ".${Boost_FIND_VERSION_PATCH}")
1359 endif ()
1360 if (NOT Boost_FIND_VERSION_EXACT)
1361 string(APPEND Boost_ERROR_REASON " (or newer)")
1362 endif ()
1363 string(APPEND Boost_ERROR_REASON ".")
1364 endif ()
1365 else()
1366 # Caller will accept any Boost version.
1367 set(Boost_FOUND 1)
1368 endif()
1369else()
1370 set(Boost_FOUND 0)
1371 string(APPEND Boost_ERROR_REASON
1372 "Unable to find the Boost header files. Please set BOOST_ROOT to the root directory containing Boost or BOOST_INCLUDEDIR to the directory containing Boost's headers.")
1373endif()
1374
1375# ------------------------------------------------------------------------
1376# Prefix initialization
1377# ------------------------------------------------------------------------
1378
1379set(Boost_LIB_PREFIX "")
1380if ( (GHSMULTI AND Boost_USE_STATIC_LIBS) OR
1381 (WIN32 AND Boost_USE_STATIC_LIBS AND NOT CYGWIN) )
1382 set(Boost_LIB_PREFIX "lib")
1383endif()
1384
1385if ( NOT Boost_NAMESPACE )
1386 set(Boost_NAMESPACE "boost")
1387endif()
1388
1389# ------------------------------------------------------------------------
1390# Suffix initialization and compiler suffix detection.
1391# ------------------------------------------------------------------------
1392
1393set(_Boost_VARS_NAME
1394 Boost_NAMESPACE
1395 Boost_COMPILER
1396 Boost_THREADAPI
1397 Boost_USE_DEBUG_PYTHON
1398 Boost_USE_MULTITHREADED
1399 Boost_USE_STATIC_LIBS
1400 Boost_USE_STATIC_RUNTIME
1401 Boost_USE_STLPORT
1402 Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
1403 )
1404_Boost_CHANGE_DETECT(_Boost_CHANGE_LIBNAME ${_Boost_VARS_NAME})
1405
1406# Setting some more suffixes for the library
1407if (Boost_COMPILER)
1408 set(_boost_COMPILER ${Boost_COMPILER})
1409 if(Boost_DEBUG)
1410 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1411 "using user-specified Boost_COMPILER = ${_boost_COMPILER}")
1412 endif()
1413else()
1414 # Attempt to guess the compiler suffix
1415 # NOTE: this is not perfect yet, if you experience any issues
1416 # please report them and use the Boost_COMPILER variable
1417 # to work around the problems.
1418 _Boost_GUESS_COMPILER_PREFIX(_boost_COMPILER)
1419 if(Boost_DEBUG)
1420 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1421 "guessed _boost_COMPILER = ${_boost_COMPILER}")
1422 endif()
1423endif()
1424
1425set (_boost_MULTITHREADED "-mt")
1426if( NOT Boost_USE_MULTITHREADED )
1427 set (_boost_MULTITHREADED "")
1428endif()
1429if(Boost_DEBUG)
1430 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1431 "_boost_MULTITHREADED = ${_boost_MULTITHREADED}")
1432endif()
1433
1434#======================
Matthew Bentham0af44602018-09-07 10:40:55 +01001435# Systematically build up the Boost ABI tag for the 'tagged' and 'versioned' layouts
1436# http://boost.org/doc/libs/1_66_0/more/getting_started/windows.html#library-naming
1437# http://boost.org/doc/libs/1_66_0/boost/config/auto_link.hpp
1438# http://boost.org/doc/libs/1_66_0/tools/build/src/tools/common.jam
1439# http://boost.org/doc/libs/1_66_0/boostcpp.jam
telsoa014fcda012018-03-09 14:13:49 +00001440set( _boost_RELEASE_ABI_TAG "-")
1441set( _boost_DEBUG_ABI_TAG "-")
1442# Key Use this library when:
1443# s linking statically to the C++ standard library and
1444# compiler runtime support libraries.
1445if(Boost_USE_STATIC_RUNTIME)
1446 set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}s")
1447 set( _boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}s")
1448endif()
1449# g using debug versions of the standard and runtime
1450# support libraries
1451if(WIN32 AND Boost_USE_DEBUG_RUNTIME)
1452 if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC"
Matthew Bentham0af44602018-09-07 10:40:55 +01001453 OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang"
1454 OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntel")
telsoa014fcda012018-03-09 14:13:49 +00001455 string(APPEND _boost_DEBUG_ABI_TAG "g")
1456 endif()
1457endif()
1458# y using special debug build of python
1459if(Boost_USE_DEBUG_PYTHON)
1460 string(APPEND _boost_DEBUG_ABI_TAG "y")
1461endif()
1462# d using a debug version of your code
1463string(APPEND _boost_DEBUG_ABI_TAG "d")
1464# p using the STLport standard library rather than the
1465# default one supplied with your compiler
1466if(Boost_USE_STLPORT)
1467 string(APPEND _boost_RELEASE_ABI_TAG "p")
1468 string(APPEND _boost_DEBUG_ABI_TAG "p")
1469endif()
1470# n using the STLport deprecated "native iostreams" feature
Matthew Bentham0af44602018-09-07 10:40:55 +01001471# removed from the documentation in 1.43.0 but still present in
1472# boost/config/auto_link.hpp
telsoa014fcda012018-03-09 14:13:49 +00001473if(Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS)
1474 string(APPEND _boost_RELEASE_ABI_TAG "n")
1475 string(APPEND _boost_DEBUG_ABI_TAG "n")
1476endif()
1477
Matthew Bentham0af44602018-09-07 10:40:55 +01001478# -x86 Architecture and address model tag
1479# First character is the architecture, then word-size, either 32 or 64
1480# Only used in 'versioned' layout, added in Boost 1.66.0
1481set(_boost_ARCHITECTURE_TAG "")
1482# {CMAKE_CXX_COMPILER_ARCHITECTURE_ID} is not currently set for all compilers
1483if(NOT "x${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "x" AND NOT Boost_VERSION VERSION_LESS 106600)
1484 string(APPEND _boost_ARCHITECTURE_TAG "-")
1485 # This needs to be kept in-sync with the section of CMakePlatformId.h.in
1486 # inside 'defined(_WIN32) && defined(_MSC_VER)'
1487 if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "IA64")
1488 string(APPEND _boost_ARCHITECTURE_TAG "i")
1489 elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "X86"
1490 OR CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "x64")
1491 string(APPEND _boost_ARCHITECTURE_TAG "x")
1492 elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "^ARM")
1493 string(APPEND _boost_ARCHITECTURE_TAG "a")
1494 elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "MIPS")
1495 string(APPEND _boost_ARCHITECTURE_TAG "m")
1496 endif()
1497
1498 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
1499 string(APPEND _boost_ARCHITECTURE_TAG "64")
1500 else()
1501 string(APPEND _boost_ARCHITECTURE_TAG "32")
1502 endif()
1503endif()
1504
telsoa014fcda012018-03-09 14:13:49 +00001505if(Boost_DEBUG)
1506 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1507 "_boost_RELEASE_ABI_TAG = ${_boost_RELEASE_ABI_TAG}")
1508 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1509 "_boost_DEBUG_ABI_TAG = ${_boost_DEBUG_ABI_TAG}")
1510endif()
1511
1512# ------------------------------------------------------------------------
1513# Begin finding boost libraries
1514# ------------------------------------------------------------------------
1515
1516set(_Boost_VARS_LIB "")
1517foreach(c DEBUG RELEASE)
1518 set(_Boost_VARS_LIB_${c} BOOST_LIBRARYDIR Boost_LIBRARY_DIR_${c})
1519 list(APPEND _Boost_VARS_LIB ${_Boost_VARS_LIB_${c}})
1520 _Boost_CHANGE_DETECT(_Boost_CHANGE_LIBDIR_${c} ${_Boost_VARS_DIR} ${_Boost_VARS_LIB_${c}} Boost_INCLUDE_DIR)
1521 # Clear Boost_LIBRARY_DIR_${c} if it did not change but other input affecting the
1522 # location did. We will find a new one based on the new inputs.
1523 if(_Boost_CHANGE_LIBDIR_${c} AND NOT _Boost_LIBRARY_DIR_${c}_CHANGED)
1524 unset(Boost_LIBRARY_DIR_${c} CACHE)
1525 endif()
1526
1527 # If Boost_LIBRARY_DIR_[RELEASE,DEBUG] is set, prefer its value.
1528 if(Boost_LIBRARY_DIR_${c})
1529 set(_boost_LIBRARY_SEARCH_DIRS_${c} ${Boost_LIBRARY_DIR_${c}} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
1530 else()
1531 set(_boost_LIBRARY_SEARCH_DIRS_${c} "")
1532 if(BOOST_LIBRARYDIR)
1533 list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${BOOST_LIBRARYDIR})
1534 elseif(_ENV_BOOST_LIBRARYDIR)
1535 list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${_ENV_BOOST_LIBRARYDIR})
1536 endif()
1537
1538 if(BOOST_ROOT)
1539 list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${BOOST_ROOT}/lib ${BOOST_ROOT}/stage/lib)
1540 _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${BOOST_ROOT}")
1541 elseif(_ENV_BOOST_ROOT)
1542 list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${_ENV_BOOST_ROOT}/lib ${_ENV_BOOST_ROOT}/stage/lib)
1543 _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${_ENV_BOOST_ROOT}")
1544 endif()
1545
1546 list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c}
1547 ${Boost_INCLUDE_DIR}/lib
1548 ${Boost_INCLUDE_DIR}/../lib
1549 ${Boost_INCLUDE_DIR}/stage/lib
1550 )
1551 _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${Boost_INCLUDE_DIR}/..")
Matthew Bentham0af44602018-09-07 10:40:55 +01001552 _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${Boost_INCLUDE_DIR}")
telsoa014fcda012018-03-09 14:13:49 +00001553 if( Boost_NO_SYSTEM_PATHS )
1554 list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH)
1555 else()
1556 foreach(ver ${_Boost_KNOWN_VERSIONS})
1557 string(REPLACE "." "_" ver "${ver}")
1558 _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "C:/local/boost_${ver}")
1559 endforeach()
1560 _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "C:/boost")
1561 list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} PATHS
1562 C:/boost/lib
1563 C:/boost
1564 /sw/local/lib
1565 )
1566 endif()
1567 endif()
1568endforeach()
1569
1570if(Boost_DEBUG)
1571 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1572 "_boost_LIBRARY_SEARCH_DIRS_RELEASE = ${_boost_LIBRARY_SEARCH_DIRS_RELEASE}"
1573 "_boost_LIBRARY_SEARCH_DIRS_DEBUG = ${_boost_LIBRARY_SEARCH_DIRS_DEBUG}")
1574endif()
1575
1576# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
1577if( Boost_USE_STATIC_LIBS )
1578 set( _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
1579 if(WIN32)
1580 list(INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 .lib .a)
1581 else()
1582 set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
1583 endif()
1584endif()
1585
1586# We want to use the tag inline below without risking double dashes
1587if(_boost_RELEASE_ABI_TAG)
1588 if(${_boost_RELEASE_ABI_TAG} STREQUAL "-")
1589 set(_boost_RELEASE_ABI_TAG "")
1590 endif()
1591endif()
1592if(_boost_DEBUG_ABI_TAG)
1593 if(${_boost_DEBUG_ABI_TAG} STREQUAL "-")
1594 set(_boost_DEBUG_ABI_TAG "")
1595 endif()
1596endif()
1597
1598# The previous behavior of FindBoost when Boost_USE_STATIC_LIBS was enabled
1599# on WIN32 was to:
1600# 1. Search for static libs compiled against a SHARED C++ standard runtime library (use if found)
1601# 2. Search for static libs compiled against a STATIC C++ standard runtime library (use if found)
1602# We maintain this behavior since changing it could break people's builds.
1603# To disable the ambiguous behavior, the user need only
1604# set Boost_USE_STATIC_RUNTIME either ON or OFF.
1605set(_boost_STATIC_RUNTIME_WORKAROUND false)
1606if(WIN32 AND Boost_USE_STATIC_LIBS)
1607 if(NOT DEFINED Boost_USE_STATIC_RUNTIME)
1608 set(_boost_STATIC_RUNTIME_WORKAROUND TRUE)
1609 endif()
1610endif()
1611
1612# On versions < 1.35, remove the System library from the considered list
1613# since it wasn't added until 1.35.
1614if(Boost_VERSION AND Boost_FIND_COMPONENTS)
1615 if(Boost_VERSION LESS 103500)
1616 list(REMOVE_ITEM Boost_FIND_COMPONENTS system)
1617 endif()
1618endif()
1619
1620# Additional components may be required via component dependencies.
1621# Add any missing components to the list.
1622_Boost_MISSING_DEPENDENCIES(Boost_FIND_COMPONENTS _Boost_EXTRA_FIND_COMPONENTS)
1623
1624# If thread is required, get the thread libs as a dependency
Matthew Bentham0af44602018-09-07 10:40:55 +01001625if("thread" IN_LIST Boost_FIND_COMPONENTS)
1626 if(Boost_FIND_QUIETLY)
1627 set(_Boost_find_quiet QUIET)
1628 else()
1629 set(_Boost_find_quiet "")
1630 endif()
1631 find_package(Threads ${_Boost_find_quiet})
1632 unset(_Boost_find_quiet)
telsoa014fcda012018-03-09 14:13:49 +00001633endif()
1634
1635# If the user changed any of our control inputs flush previous results.
1636if(_Boost_CHANGE_LIBDIR_DEBUG OR _Boost_CHANGE_LIBDIR_RELEASE OR _Boost_CHANGE_LIBNAME)
1637 foreach(COMPONENT ${_Boost_COMPONENTS_SEARCHED})
1638 string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
1639 foreach(c DEBUG RELEASE)
1640 set(_var Boost_${UPPERCOMPONENT}_LIBRARY_${c})
1641 unset(${_var} CACHE)
1642 set(${_var} "${_var}-NOTFOUND")
1643 endforeach()
1644 endforeach()
1645 set(_Boost_COMPONENTS_SEARCHED "")
1646endif()
1647
1648foreach(COMPONENT ${Boost_FIND_COMPONENTS})
1649 string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
1650
1651 set( _boost_docstring_release "Boost ${COMPONENT} library (release)")
1652 set( _boost_docstring_debug "Boost ${COMPONENT} library (debug)")
1653
1654 # Compute component-specific hints.
1655 set(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT "")
1656 if(${COMPONENT} STREQUAL "mpi" OR ${COMPONENT} STREQUAL "mpi_python" OR
1657 ${COMPONENT} STREQUAL "graph_parallel")
1658 foreach(lib ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES})
1659 if(IS_ABSOLUTE "${lib}")
1660 get_filename_component(libdir "${lib}" PATH)
1661 string(REPLACE "\\" "/" libdir "${libdir}")
1662 list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT ${libdir})
1663 endif()
1664 endforeach()
1665 endif()
1666
Matthew Bentham0af44602018-09-07 10:40:55 +01001667 # Handle Python version suffixes
1668 unset(COMPONENT_PYTHON_VERSION_MAJOR)
1669 unset(COMPONENT_PYTHON_VERSION_MINOR)
1670 if(${COMPONENT} MATCHES "^(python|mpi_python|numpy)([0-9])\$")
1671 set(COMPONENT_UNVERSIONED "${CMAKE_MATCH_1}")
1672 set(COMPONENT_PYTHON_VERSION_MAJOR "${CMAKE_MATCH_2}")
1673 elseif(${COMPONENT} MATCHES "^(python|mpi_python|numpy)([0-9])\\.?([0-9])\$")
1674 set(COMPONENT_UNVERSIONED "${CMAKE_MATCH_1}")
1675 set(COMPONENT_PYTHON_VERSION_MAJOR "${CMAKE_MATCH_2}")
1676 set(COMPONENT_PYTHON_VERSION_MINOR "${CMAKE_MATCH_3}")
1677 endif()
1678
1679 unset(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
1680 if (COMPONENT_PYTHON_VERSION_MINOR)
1681 # Boost >= 1.67
1682 list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
1683 # Debian/Ubuntu (Some versions omit the 2 and/or 3 from the suffix)
1684 list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}-py${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
1685 list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-py${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
1686 # Gentoo
1687 list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
1688 # RPMs
1689 list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
1690 endif()
1691 if (COMPONENT_PYTHON_VERSION_MAJOR AND NOT COMPONENT_PYTHON_VERSION_MINOR)
1692 # Boost < 1.67
1693 list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}")
1694 endif()
1695
telsoa014fcda012018-03-09 14:13:49 +00001696 # Consolidate and report component-specific hints.
Matthew Bentham0af44602018-09-07 10:40:55 +01001697 if(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
1698 list(REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
1699 if(Boost_DEBUG)
1700 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1701 "Component-specific library search names for ${COMPONENT_NAME}: "
1702 "${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME}")
1703 endif()
1704 endif()
telsoa014fcda012018-03-09 14:13:49 +00001705 if(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
1706 list(REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
1707 if(Boost_DEBUG)
1708 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1709 "Component-specific library search paths for ${COMPONENT}: "
1710 "${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT}")
1711 endif()
1712 endif()
1713
1714 #
1715 # Find headers
1716 #
1717 _Boost_COMPONENT_HEADERS("${COMPONENT}" Boost_${UPPERCOMPONENT}_HEADER_NAME)
1718 # Look for a standard boost header file.
1719 if(Boost_${UPPERCOMPONENT}_HEADER_NAME)
1720 if(EXISTS "${Boost_INCLUDE_DIR}/${Boost_${UPPERCOMPONENT}_HEADER_NAME}")
1721 set(Boost_${UPPERCOMPONENT}_HEADER ON)
1722 else()
1723 set(Boost_${UPPERCOMPONENT}_HEADER OFF)
1724 endif()
1725 else()
1726 set(Boost_${UPPERCOMPONENT}_HEADER ON)
1727 message(WARNING "No header defined for ${COMPONENT}; skipping header check")
1728 endif()
1729
1730 #
1731 # Find RELEASE libraries
1732 #
1733 unset(_boost_RELEASE_NAMES)
Matthew Bentham0af44602018-09-07 10:40:55 +01001734 foreach(component IN LISTS _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME COMPONENT)
telsoa014fcda012018-03-09 14:13:49 +00001735 foreach(compiler IN LISTS _boost_COMPILER)
1736 list(APPEND _boost_RELEASE_NAMES
Matthew Bentham0af44602018-09-07 10:40:55 +01001737 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
1738 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG} )
telsoa014fcda012018-03-09 14:13:49 +00001739 endforeach()
1740 list(APPEND _boost_RELEASE_NAMES
Matthew Bentham0af44602018-09-07 10:40:55 +01001741 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
1742 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}
1743 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component} )
1744 if(_boost_STATIC_RUNTIME_WORKAROUND)
1745 set(_boost_RELEASE_STATIC_ABI_TAG "-s${_boost_RELEASE_ABI_TAG}")
1746 foreach(compiler IN LISTS _boost_COMPILER)
1747 list(APPEND _boost_RELEASE_NAMES
1748 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
1749 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} )
1750 endforeach()
1751 list(APPEND _boost_RELEASE_NAMES
1752 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
1753 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} )
1754 endif()
1755 endforeach()
telsoa014fcda012018-03-09 14:13:49 +00001756 if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
Matthew Bentham0af44602018-09-07 10:40:55 +01001757 _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_RELEASE_NAMES ${_boost_RELEASE_NAMES})
telsoa014fcda012018-03-09 14:13:49 +00001758 endif()
1759 if(Boost_DEBUG)
1760 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1761 "Searching for ${UPPERCOMPONENT}_LIBRARY_RELEASE: ${_boost_RELEASE_NAMES}")
1762 endif()
1763
1764 # if Boost_LIBRARY_DIR_RELEASE is not defined,
1765 # but Boost_LIBRARY_DIR_DEBUG is, look there first for RELEASE libs
1766 if(NOT Boost_LIBRARY_DIR_RELEASE AND Boost_LIBRARY_DIR_DEBUG)
1767 list(INSERT _boost_LIBRARY_SEARCH_DIRS_RELEASE 0 ${Boost_LIBRARY_DIR_DEBUG})
1768 endif()
1769
1770 # Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
1771 string(REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS_RELEASE}")
1772
Matthew Bentham0af44602018-09-07 10:40:55 +01001773 if(Boost_USE_RELEASE_LIBS)
1774 _Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE RELEASE
1775 NAMES ${_boost_RELEASE_NAMES}
1776 HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
1777 NAMES_PER_DIR
1778 DOC "${_boost_docstring_release}"
1779 )
1780 endif()
telsoa014fcda012018-03-09 14:13:49 +00001781
1782 #
1783 # Find DEBUG libraries
1784 #
1785 unset(_boost_DEBUG_NAMES)
Matthew Bentham0af44602018-09-07 10:40:55 +01001786 foreach(component IN LISTS _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME COMPONENT)
telsoa014fcda012018-03-09 14:13:49 +00001787 foreach(compiler IN LISTS _boost_COMPILER)
1788 list(APPEND _boost_DEBUG_NAMES
Matthew Bentham0af44602018-09-07 10:40:55 +01001789 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
1790 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG} )
telsoa014fcda012018-03-09 14:13:49 +00001791 endforeach()
1792 list(APPEND _boost_DEBUG_NAMES
Matthew Bentham0af44602018-09-07 10:40:55 +01001793 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
1794 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
1795 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}
1796 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component} )
1797 if(_boost_STATIC_RUNTIME_WORKAROUND)
1798 set(_boost_DEBUG_STATIC_ABI_TAG "-s${_boost_DEBUG_ABI_TAG}")
1799 foreach(compiler IN LISTS _boost_COMPILER)
1800 list(APPEND _boost_DEBUG_NAMES
1801 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
1802 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} )
1803 endforeach()
1804 list(APPEND _boost_DEBUG_NAMES
1805 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
1806 ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} )
1807 endif()
1808 endforeach()
telsoa014fcda012018-03-09 14:13:49 +00001809 if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
1810 _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_DEBUG_NAMES ${_boost_DEBUG_NAMES})
1811 endif()
1812 if(Boost_DEBUG)
1813 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
1814 "Searching for ${UPPERCOMPONENT}_LIBRARY_DEBUG: ${_boost_DEBUG_NAMES}")
1815 endif()
1816
1817 # if Boost_LIBRARY_DIR_DEBUG is not defined,
1818 # but Boost_LIBRARY_DIR_RELEASE is, look there first for DEBUG libs
1819 if(NOT Boost_LIBRARY_DIR_DEBUG AND Boost_LIBRARY_DIR_RELEASE)
1820 list(INSERT _boost_LIBRARY_SEARCH_DIRS_DEBUG 0 ${Boost_LIBRARY_DIR_RELEASE})
1821 endif()
1822
1823 # Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
1824 string(REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS_DEBUG}")
1825
Matthew Bentham0af44602018-09-07 10:40:55 +01001826 if(Boost_USE_DEBUG_LIBS)
1827 _Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG DEBUG
1828 NAMES ${_boost_DEBUG_NAMES}
1829 HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
1830 NAMES_PER_DIR
1831 DOC "${_boost_docstring_debug}"
1832 )
1833 endif ()
telsoa014fcda012018-03-09 14:13:49 +00001834
1835 if(Boost_REALPATH)
1836 _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "${_boost_docstring_release}")
1837 _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG "${_boost_docstring_debug}" )
1838 endif()
1839
1840 _Boost_ADJUST_LIB_VARS(${UPPERCOMPONENT})
1841
Matthew Bentham0af44602018-09-07 10:40:55 +01001842 # Check if component requires some compiler features
1843 _Boost_COMPILER_FEATURES(${COMPONENT} _Boost_${UPPERCOMPONENT}_COMPILER_FEATURES)
1844
telsoa014fcda012018-03-09 14:13:49 +00001845endforeach()
1846
1847# Restore the original find library ordering
1848if( Boost_USE_STATIC_LIBS )
1849 set(CMAKE_FIND_LIBRARY_SUFFIXES ${_boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
1850endif()
1851
1852# ------------------------------------------------------------------------
1853# End finding boost libraries
1854# ------------------------------------------------------------------------
1855
1856set(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR})
1857set(Boost_LIBRARY_DIRS)
1858if(Boost_LIBRARY_DIR_RELEASE)
1859 list(APPEND Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIR_RELEASE})
1860endif()
1861if(Boost_LIBRARY_DIR_DEBUG)
1862 list(APPEND Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIR_DEBUG})
1863endif()
1864if(Boost_LIBRARY_DIRS)
1865 list(REMOVE_DUPLICATES Boost_LIBRARY_DIRS)
1866endif()
1867
1868# The above setting of Boost_FOUND was based only on the header files.
1869# Update it for the requested component libraries.
1870if(Boost_FOUND)
1871 # The headers were found. Check for requested component libs.
1872 set(_boost_CHECKED_COMPONENT FALSE)
1873 set(_Boost_MISSING_COMPONENTS "")
1874 foreach(COMPONENT ${Boost_FIND_COMPONENTS})
Matthew Bentham0af44602018-09-07 10:40:55 +01001875 string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
telsoa014fcda012018-03-09 14:13:49 +00001876 set(_boost_CHECKED_COMPONENT TRUE)
Matthew Bentham0af44602018-09-07 10:40:55 +01001877 if(NOT Boost_${UPPERCOMPONENT}_FOUND AND Boost_FIND_REQUIRED_${COMPONENT})
telsoa014fcda012018-03-09 14:13:49 +00001878 list(APPEND _Boost_MISSING_COMPONENTS ${COMPONENT})
1879 endif()
1880 endforeach()
1881 if(_Boost_MISSING_COMPONENTS AND _Boost_EXTRA_FIND_COMPONENTS)
1882 # Optional indirect dependencies are not counted as missing.
1883 list(REMOVE_ITEM _Boost_MISSING_COMPONENTS ${_Boost_EXTRA_FIND_COMPONENTS})
1884 endif()
1885
1886 if(Boost_DEBUG)
1887 message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] Boost_FOUND = ${Boost_FOUND}")
1888 endif()
1889
1890 if (_Boost_MISSING_COMPONENTS)
1891 set(Boost_FOUND 0)
1892 # We were unable to find some libraries, so generate a sensible
1893 # error message that lists the libraries we were unable to find.
1894 string(APPEND Boost_ERROR_REASON
1895 "\nCould not find the following")
1896 if(Boost_USE_STATIC_LIBS)
1897 string(APPEND Boost_ERROR_REASON " static")
1898 endif()
1899 string(APPEND Boost_ERROR_REASON
1900 " Boost libraries:\n")
1901 foreach(COMPONENT ${_Boost_MISSING_COMPONENTS})
Matthew Bentham0af44602018-09-07 10:40:55 +01001902 string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
telsoa014fcda012018-03-09 14:13:49 +00001903 string(APPEND Boost_ERROR_REASON
Matthew Bentham0af44602018-09-07 10:40:55 +01001904 " ${Boost_NAMESPACE}_${COMPONENT}${Boost_ERROR_REASON_${UPPERCOMPONENT}}\n")
telsoa014fcda012018-03-09 14:13:49 +00001905 endforeach()
1906
1907 list(LENGTH Boost_FIND_COMPONENTS Boost_NUM_COMPONENTS_WANTED)
1908 list(LENGTH _Boost_MISSING_COMPONENTS Boost_NUM_MISSING_COMPONENTS)
1909 if (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS})
1910 string(APPEND Boost_ERROR_REASON
1911 "No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.")
1912 else ()
1913 string(APPEND Boost_ERROR_REASON
1914 "Some (but not all) of the required Boost libraries were found. You may need to install these additional Boost libraries. Alternatively, set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.")
1915 endif ()
1916 endif ()
1917
1918 if( NOT Boost_LIBRARY_DIRS AND NOT _boost_CHECKED_COMPONENT )
1919 # Compatibility Code for backwards compatibility with CMake
1920 # 2.4's FindBoost module.
1921
1922 # Look for the boost library path.
1923 # Note that the user may not have installed any libraries
1924 # so it is quite possible the Boost_LIBRARY_DIRS may not exist.
1925 set(_boost_LIB_DIR ${Boost_INCLUDE_DIR})
1926
1927 if("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+")
1928 get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
1929 endif()
1930
1931 if("${_boost_LIB_DIR}" MATCHES "/include$")
1932 # Strip off the trailing "/include" in the path.
1933 get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
1934 endif()
1935
1936 if(EXISTS "${_boost_LIB_DIR}/lib")
1937 string(APPEND _boost_LIB_DIR /lib)
1938 elseif(EXISTS "${_boost_LIB_DIR}/stage/lib")
1939 string(APPEND _boost_LIB_DIR "/stage/lib")
1940 else()
1941 set(_boost_LIB_DIR "")
1942 endif()
1943
1944 if(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}")
1945 set(Boost_LIBRARY_DIRS ${_boost_LIB_DIR})
1946 endif()
1947
1948 endif()
1949else()
1950 # Boost headers were not found so no components were found.
1951 foreach(COMPONENT ${Boost_FIND_COMPONENTS})
1952 string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
1953 set(Boost_${UPPERCOMPONENT}_FOUND 0)
1954 endforeach()
1955endif()
1956
1957# ------------------------------------------------------------------------
1958# Add imported targets
1959# ------------------------------------------------------------------------
1960
1961if(Boost_FOUND)
1962 # For header-only libraries
1963 if(NOT TARGET Boost::boost)
1964 add_library(Boost::boost INTERFACE IMPORTED)
1965 if(Boost_INCLUDE_DIRS)
1966 set_target_properties(Boost::boost PROPERTIES
1967 INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}")
1968 endif()
1969 endif()
1970
1971 foreach(COMPONENT ${Boost_FIND_COMPONENTS})
1972 if(_Boost_IMPORTED_TARGETS AND NOT TARGET Boost::${COMPONENT})
1973 string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
1974 if(Boost_${UPPERCOMPONENT}_FOUND)
1975 if(Boost_USE_STATIC_LIBS)
1976 add_library(Boost::${COMPONENT} STATIC IMPORTED)
1977 else()
1978 # Even if Boost_USE_STATIC_LIBS is OFF, we might have static
1979 # libraries as a result.
1980 add_library(Boost::${COMPONENT} UNKNOWN IMPORTED)
1981 endif()
1982 if(Boost_INCLUDE_DIRS)
1983 set_target_properties(Boost::${COMPONENT} PROPERTIES
1984 INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}")
1985 endif()
1986 if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY}")
1987 set_target_properties(Boost::${COMPONENT} PROPERTIES
1988 IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
1989 IMPORTED_LOCATION "${Boost_${UPPERCOMPONENT}_LIBRARY}")
1990 endif()
1991 if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE}")
1992 set_property(TARGET Boost::${COMPONENT} APPEND PROPERTY
1993 IMPORTED_CONFIGURATIONS RELEASE)
1994 set_target_properties(Boost::${COMPONENT} PROPERTIES
1995 IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
1996 IMPORTED_LOCATION_RELEASE "${Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE}")
1997 endif()
1998 if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG}")
1999 set_property(TARGET Boost::${COMPONENT} APPEND PROPERTY
2000 IMPORTED_CONFIGURATIONS DEBUG)
2001 set_target_properties(Boost::${COMPONENT} PROPERTIES
2002 IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
2003 IMPORTED_LOCATION_DEBUG "${Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG}")
2004 endif()
2005 if(_Boost_${UPPERCOMPONENT}_DEPENDENCIES)
2006 unset(_Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES)
2007 foreach(dep ${_Boost_${UPPERCOMPONENT}_DEPENDENCIES})
2008 list(APPEND _Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES Boost::${dep})
2009 endforeach()
2010 if(COMPONENT STREQUAL "thread")
2011 list(APPEND _Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES Threads::Threads)
2012 endif()
2013 set_target_properties(Boost::${COMPONENT} PROPERTIES
2014 INTERFACE_LINK_LIBRARIES "${_Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES}")
2015 endif()
Matthew Bentham0af44602018-09-07 10:40:55 +01002016 if(_Boost_${UPPERCOMPONENT}_COMPILER_FEATURES)
2017 set_target_properties(Boost::${COMPONENT} PROPERTIES
2018 INTERFACE_COMPILE_FEATURES "${_Boost_${UPPERCOMPONENT}_COMPILER_FEATURES}")
2019 endif()
telsoa014fcda012018-03-09 14:13:49 +00002020 endif()
2021 endif()
2022 endforeach()
2023endif()
2024
2025# ------------------------------------------------------------------------
2026# Notification to end user about what was found
2027# ------------------------------------------------------------------------
2028
2029set(Boost_LIBRARIES "")
2030if(Boost_FOUND)
2031 if(NOT Boost_FIND_QUIETLY)
2032 message(STATUS "Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}")
2033 if(Boost_FIND_COMPONENTS)
2034 message(STATUS "Found the following Boost libraries:")
2035 endif()
2036 endif()
2037 foreach( COMPONENT ${Boost_FIND_COMPONENTS} )
2038 string( TOUPPER ${COMPONENT} UPPERCOMPONENT )
2039 if( Boost_${UPPERCOMPONENT}_FOUND )
2040 if(NOT Boost_FIND_QUIETLY)
2041 message (STATUS " ${COMPONENT}")
2042 endif()
2043 list(APPEND Boost_LIBRARIES ${Boost_${UPPERCOMPONENT}_LIBRARY})
2044 endif()
2045 endforeach()
2046else()
2047 if(Boost_FIND_REQUIRED)
2048 message(SEND_ERROR "Unable to find the requested Boost libraries.\n${Boost_ERROR_REASON}")
2049 else()
2050 if(NOT Boost_FIND_QUIETLY)
2051 # we opt not to automatically output Boost_ERROR_REASON here as
2052 # it could be quite lengthy and somewhat imposing in its requests
2053 # Since Boost is not always a required dependency we'll leave this
2054 # up to the end-user.
2055 if(Boost_DEBUG OR Boost_DETAILED_FAILURE_MSG)
2056 message(STATUS "Could NOT find Boost\n${Boost_ERROR_REASON}")
2057 else()
2058 message(STATUS "Could NOT find Boost")
2059 endif()
2060 endif()
2061 endif()
2062endif()
2063
2064# Configure display of cache entries in GUI.
2065foreach(v BOOSTROOT BOOST_ROOT ${_Boost_VARS_INC} ${_Boost_VARS_LIB})
2066 get_property(_type CACHE ${v} PROPERTY TYPE)
2067 if(_type)
2068 set_property(CACHE ${v} PROPERTY ADVANCED 1)
2069 if("x${_type}" STREQUAL "xUNINITIALIZED")
2070 if("x${v}" STREQUAL "xBoost_ADDITIONAL_VERSIONS")
2071 set_property(CACHE ${v} PROPERTY TYPE STRING)
2072 else()
2073 set_property(CACHE ${v} PROPERTY TYPE PATH)
2074 endif()
2075 endif()
2076 endif()
2077endforeach()
2078
2079# Record last used values of input variables so we can
2080# detect on the next run if the user changed them.
2081foreach(v
2082 ${_Boost_VARS_INC} ${_Boost_VARS_LIB}
2083 ${_Boost_VARS_DIR} ${_Boost_VARS_NAME}
2084 )
2085 if(DEFINED ${v})
2086 set(_${v}_LAST "${${v}}" CACHE INTERNAL "Last used ${v} value.")
2087 else()
2088 unset(_${v}_LAST CACHE)
2089 endif()
2090endforeach()
2091
2092# Maintain a persistent list of components requested anywhere since
2093# the last flush.
2094set(_Boost_COMPONENTS_SEARCHED "${_Boost_COMPONENTS_SEARCHED}")
2095list(APPEND _Boost_COMPONENTS_SEARCHED ${Boost_FIND_COMPONENTS})
2096list(REMOVE_DUPLICATES _Boost_COMPONENTS_SEARCHED)
2097list(SORT _Boost_COMPONENTS_SEARCHED)
2098set(_Boost_COMPONENTS_SEARCHED "${_Boost_COMPONENTS_SEARCHED}"
2099 CACHE INTERNAL "Components requested for this build tree.")
2100
Matthew Bentham0af44602018-09-07 10:40:55 +01002101# Restore project's policies
2102cmake_policy(POP)