aboutsummaryrefslogtreecommitdiffstats
path: root/community/rippled
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2019-04-01 09:27:39 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2019-04-02 10:31:57 +0000
commit925fe4d043bb70ae3266691e34d958234a5261b8 (patch)
treea29f9407e9549af791eb362e29bd60e054cded40 /community/rippled
parentee0dee6eb1029b367e59471e679f1b3b894b314a (diff)
downloadaports-925fe4d043bb70ae3266691e34d958234a5261b8.tar.bz2
aports-925fe4d043bb70ae3266691e34d958234a5261b8.tar.xz
community/rippled: rebuild against boost 1.69
Diffstat (limited to 'community/rippled')
-rw-r--r--community/rippled/APKBUILD6
-rw-r--r--community/rippled/boost-1.69.patch1276
2 files changed, 1280 insertions, 2 deletions
diff --git a/community/rippled/APKBUILD b/community/rippled/APKBUILD
index d6c6adcce2..1cae9ed4c9 100644
--- a/community/rippled/APKBUILD
+++ b/community/rippled/APKBUILD
@@ -2,7 +2,7 @@
# Maintainer: André Klitzing <aklitzing@gmail.com>
pkgname=rippled
pkgver=1.2.2
-pkgrel=0
+pkgrel=1
pkgdesc="Blockchain daemon implementing the Ripple Consensus Ledger"
url="https://ripple.com/"
arch="x86_64"
@@ -10,6 +10,7 @@ license="ISC"
makedepends="cmake openssl-dev boost-dev protobuf-dev"
subpackages="$pkgname-doc"
source="$pkgname-$pkgver.tar.gz::https://github.com/ripple/$pkgname/archive/$pkgver.tar.gz
+ boost-1.69.patch
"
builddir="$srcdir/"$pkgname-$pkgver
@@ -33,4 +34,5 @@ package() {
install -D -m644 cfg/validators-example.txt "${pkgdir}/etc/$pkgname/validators.txt"
}
-sha512sums="20ce3f1e5307463c386f4e29c57826bdbc49c49b4b0569a8aa309e384943c28b9ccc7ef450a0ef299ad03fa53427fff73e4d0afb7000ee01d11824a4cb1ddb74 rippled-1.2.2.tar.gz"
+sha512sums="20ce3f1e5307463c386f4e29c57826bdbc49c49b4b0569a8aa309e384943c28b9ccc7ef450a0ef299ad03fa53427fff73e4d0afb7000ee01d11824a4cb1ddb74 rippled-1.2.2.tar.gz
+ded17d689014ab69700896fcae5002b5229a34e2ef5810af2ee122c546843fc7ceb2963d70d85169a334281e081f6da3a236ef89354d1f6c639beaefdfc8b88e boost-1.69.patch"
diff --git a/community/rippled/boost-1.69.patch b/community/rippled/boost-1.69.patch
new file mode 100644
index 0000000000..f3894fd6e8
--- /dev/null
+++ b/community/rippled/boost-1.69.patch
@@ -0,0 +1,1276 @@
+From 9695fd44bae802e6ad9a6f9a2011e4693e2e5ac4 Mon Sep 17 00:00:00 2001
+From: seelabs <scott.determan@yahoo.com>
+Date: Wed, 12 Dec 2018 10:06:45 -0500
+Subject: [PATCH] Support boost 1.69
+
+---
+ Builds/CMake/FindBoost.cmake | 669 +++++++++---------
+ .../container/detail/aged_ordered_container.h | 34 +-
+ .../detail/aged_unordered_container.h | 32 +-
+ .../detail/empty_base_optimization.h | 98 +++
+ src/ripple/server/impl/BaseWSPeer.h | 18 +-
+ 5 files changed, 497 insertions(+), 354 deletions(-)
+ create mode 100644 src/ripple/beast/container/detail/empty_base_optimization.h
+
+diff --git a/Builds/CMake/FindBoost.cmake b/Builds/CMake/FindBoost.cmake
+index 8ad1481fe4..ce307fad7f 100644
+--- a/Builds/CMake/FindBoost.cmake
++++ b/Builds/CMake/FindBoost.cmake
+@@ -1,237 +1,242 @@
+ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ # file Copyright.txt or https://cmake.org/licensing for details.
+
+-#.rst:
+-# FindBoost
+-# ---------
+-#
+-# Find Boost include dirs and libraries
+-#
+-# Use this module by invoking find_package with the form::
+-#
+-# find_package(Boost
+-# [version] [EXACT] # Minimum or EXACT version e.g. 1.67.0
+-# [REQUIRED] # Fail with error if Boost is not found
+-# [COMPONENTS <libs>...] # Boost libraries by their canonical name
+-# # e.g. "date_time" for "libboost_date_time"
+-# [OPTIONAL_COMPONENTS <libs>...]
+-# # Optional Boost libraries by their canonical name)
+-# ) # e.g. "date_time" for "libboost_date_time"
+-#
+-# This module finds headers and requested component libraries OR a CMake
+-# package configuration file provided by a "Boost CMake" build. For the
+-# latter case skip to the "Boost CMake" section below. For the former
+-# case results are reported in variables::
+-#
+-# Boost_FOUND - True if headers and requested libraries were found
+-# Boost_INCLUDE_DIRS - Boost include directories
+-# Boost_LIBRARY_DIRS - Link directories for Boost libraries
+-# Boost_LIBRARIES - Boost component libraries to be linked
+-# Boost_<C>_FOUND - True if component <C> was found (<C> is upper-case)
+-# Boost_<C>_LIBRARY - Libraries to link for component <C> (may include
+-# target_link_libraries debug/optimized keywords)
+-# Boost_VERSION - BOOST_VERSION value from boost/version.hpp
+-# Boost_LIB_VERSION - Version string appended to library filenames
+-# Boost_MAJOR_VERSION - Boost major version number (X in X.y.z)
+-# Boost_MINOR_VERSION - Boost minor version number (Y in x.Y.z)
+-# Boost_SUBMINOR_VERSION - Boost subminor version number (Z in x.y.Z)
+-# Boost_LIB_DIAGNOSTIC_DEFINITIONS (Windows)
+-# - Pass to add_definitions() to have diagnostic
+-# information about Boost's automatic linking
+-# displayed during compilation
+-#
+-# Note that Boost Python components require a Python version suffix
+-# (Boost 1.67 and later), e.g. ``python36`` or ``python27`` for the
+-# versions built against Python 3.6 and 2.7, respectively. This also
+-# applies to additional components using Python including
+-# ``mpi_python`` and ``numpy``. Earlier Boost releases may use
+-# distribution-specific suffixes such as ``2``, ``3`` or ``2.7``.
+-# These may also be used as suffixes, but note that they are not
+-# portable.
+-#
+-# This module reads hints about search locations from variables::
+-#
+-# BOOST_ROOT - Preferred installation prefix
+-# (or BOOSTROOT)
+-# BOOST_INCLUDEDIR - Preferred include directory e.g. <prefix>/include
+-# BOOST_LIBRARYDIR - Preferred library directory e.g. <prefix>/lib
+-# Boost_NO_SYSTEM_PATHS - Set to ON to disable searching in locations not
+-# specified by these hint variables. Default is OFF.
+-# Boost_ADDITIONAL_VERSIONS
+-# - List of Boost versions not known to this module
+-# (Boost install locations may contain the version)
+-#
+-# and saves search results persistently in CMake cache entries::
+-#
+-# Boost_INCLUDE_DIR - Directory containing Boost headers
+-# Boost_LIBRARY_DIR_RELEASE - Directory containing release Boost libraries
+-# Boost_LIBRARY_DIR_DEBUG - Directory containing debug Boost libraries
+-# Boost_<C>_LIBRARY_DEBUG - Component <C> library debug variant
+-# Boost_<C>_LIBRARY_RELEASE - Component <C> library release variant
+-#
+-# The following :prop_tgt:`IMPORTED` targets are also defined::
+-#
+-# Boost::boost - Target for header-only dependencies
+-# (Boost include directory)
+-# Boost::<C> - Target for specific component dependency
+-# (shared or static library); <C> is lower-
+-# case
+-# Boost::diagnostic_definitions - interface target to enable diagnostic
+-# information about Boost's automatic linking
+-# during compilation (adds BOOST_LIB_DIAGNOSTIC)
+-# Boost::disable_autolinking - interface target to disable automatic
+-# linking with MSVC (adds BOOST_ALL_NO_LIB)
+-# Boost::dynamic_linking - interface target to enable dynamic linking
+-# linking with MSVC (adds BOOST_ALL_DYN_LINK)
+-#
+-# Implicit dependencies such as Boost::filesystem requiring
+-# Boost::system will be automatically detected and satisfied, even
+-# if system is not specified when using find_package and if
+-# Boost::system is not added to target_link_libraries. If using
+-# Boost::thread, then Threads::Threads will also be added automatically.
+-#
+-# It is important to note that the imported targets behave differently
+-# than variables created by this module: multiple calls to
+-# find_package(Boost) in the same directory or sub-directories with
+-# different options (e.g. static or shared) will not override the
+-# values of the targets created by the first call.
+-#
+-# Users may set these hints or results as cache entries. Projects
+-# should not read these entries directly but instead use the above
+-# result variables. Note that some hint names start in upper-case
+-# "BOOST". One may specify these as environment variables if they are
+-# not specified as CMake variables or cache entries.
+-#
+-# This module first searches for the Boost header files using the above
+-# hint variables (excluding BOOST_LIBRARYDIR) and saves the result in
+-# Boost_INCLUDE_DIR. Then it searches for requested component libraries
+-# using the above hints (excluding BOOST_INCLUDEDIR and
+-# Boost_ADDITIONAL_VERSIONS), "lib" directories near Boost_INCLUDE_DIR,
+-# and the library name configuration settings below. It saves the
+-# library directories in Boost_LIBRARY_DIR_DEBUG and
+-# Boost_LIBRARY_DIR_RELEASE and individual library
+-# locations in Boost_<C>_LIBRARY_DEBUG and Boost_<C>_LIBRARY_RELEASE.
+-# When one changes settings used by previous searches in the same build
+-# tree (excluding environment variables) this module discards previous
+-# search results affected by the changes and searches again.
+-#
+-# Boost libraries come in many variants encoded in their file name.
+-# Users or projects may tell this module which variant to find by
+-# setting variables::
+-#
+-# Boost_USE_DEBUG_LIBS - Set to ON or OFF to specify whether to search
+-# and use the debug libraries. Default is ON.
+-# Boost_USE_RELEASE_LIBS - Set to ON or OFF to specify whether to search
+-# and use the release libraries. Default is ON.
+-# Boost_USE_MULTITHREADED - Set to OFF to use the non-multithreaded
+-# libraries ('mt' tag). Default is ON.
+-# Boost_USE_STATIC_LIBS - Set to ON to force the use of the static
+-# libraries. Default is OFF.
+-# Boost_USE_STATIC_RUNTIME - Set to ON or OFF to specify whether to use
+-# libraries linked statically to the C++ runtime
+-# ('s' tag). Default is platform dependent.
+-# Boost_USE_DEBUG_RUNTIME - Set to ON or OFF to specify whether to use
+-# libraries linked to the MS debug C++ runtime
+-# ('g' tag). Default is ON.
+-# Boost_USE_DEBUG_PYTHON - Set to ON to use libraries compiled with a
+-# debug Python build ('y' tag). Default is OFF.
+-# Boost_USE_STLPORT - Set to ON to use libraries compiled with
+-# STLPort ('p' tag). Default is OFF.
+-# Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
+-# - Set to ON to use libraries compiled with
+-# STLPort deprecated "native iostreams"
+-# ('n' tag). Default is OFF.
+-# Boost_COMPILER - Set to the compiler-specific library suffix
+-# (e.g. "-gcc43"). Default is auto-computed
+-# for the C++ compiler in use. A list may be
+-# used if multiple compatible suffixes should
+-# be tested for, in decreasing order of
+-# preference.
+-# Boost_THREADAPI - Suffix for "thread" component library name,
+-# such as "pthread" or "win32". Names with
+-# and without this suffix will both be tried.
+-# Boost_NAMESPACE - Alternate namespace used to build boost with
+-# e.g. if set to "myboost", will search for
+-# myboost_thread instead of boost_thread.
+-#
+-# Other variables one may set to control this module are::
+-#
+-# Boost_DEBUG - Set to ON to enable debug output from FindBoost.
+-# Please enable this before filing any bug report.
+-# Boost_DETAILED_FAILURE_MSG
+-# - Set to ON to add detailed information to the
+-# failure message even when the REQUIRED option
+-# is not given to the find_package call.
+-# Boost_REALPATH - Set to ON to resolve symlinks for discovered
+-# libraries to assist with packaging. For example,
+-# the "system" component library may be resolved to
+-# "/usr/lib/libboost_system.so.1.67.0" instead of
+-# "/usr/lib/libboost_system.so". This does not
+-# affect linking and should not be enabled unless
+-# the user needs this information.
+-# Boost_LIBRARY_DIR - Default value for Boost_LIBRARY_DIR_RELEASE and
+-# Boost_LIBRARY_DIR_DEBUG.
+-#
+-# On Visual Studio and Borland compilers Boost headers request automatic
+-# linking to corresponding libraries. This requires matching libraries
+-# to be linked explicitly or available in the link library search path.
+-# In this case setting Boost_USE_STATIC_LIBS to OFF may not achieve
+-# dynamic linking. Boost automatic linking typically requests static
+-# libraries with a few exceptions (such as Boost.Python). Use::
+-#
+-# add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
+-#
+-# to ask Boost to report information about automatic linking requests.
+-#
+-# Example to find Boost headers only::
+-#
+-# find_package(Boost 1.36.0)
+-# if(Boost_FOUND)
+-# include_directories(${Boost_INCLUDE_DIRS})
+-# add_executable(foo foo.cc)
+-# endif()
+-#
+-# Example to find Boost libraries and use imported targets::
+-#
+-# find_package(Boost 1.56 REQUIRED COMPONENTS
+-# date_time filesystem iostreams)
+-# add_executable(foo foo.cc)
+-# target_link_libraries(foo Boost::date_time Boost::filesystem
+-# Boost::iostreams)
+-#
+-# Example to find Boost Python 3.6 libraries and use imported targets::
+-#
+-# find_package(Boost 1.67 REQUIRED COMPONENTS
+-# python36 numpy36)
+-# add_executable(foo foo.cc)
+-# target_link_libraries(foo Boost::python36 Boost::numpy36)
+-#
+-# Example to find Boost headers and some *static* (release only) libraries::
+-#
+-# set(Boost_USE_STATIC_LIBS ON) # only find static libs
+-# set(Boost_USE_DEBUG_LIBS OFF) # ignore debug libs and
+-# set(Boost_USE_RELEASE_LIBS ON) # only find release libs
+-# set(Boost_USE_MULTITHREADED ON)
+-# set(Boost_USE_STATIC_RUNTIME OFF)
+-# find_package(Boost 1.66.0 COMPONENTS date_time filesystem system ...)
+-# if(Boost_FOUND)
+-# include_directories(${Boost_INCLUDE_DIRS})
+-# add_executable(foo foo.cc)
+-# target_link_libraries(foo ${Boost_LIBRARIES})
+-# endif()
+-#
+-# Boost CMake
+-# ^^^^^^^^^^^
+-#
+-# If Boost was built using the boost-cmake project it provides a package
+-# configuration file for use with find_package's Config mode. This
+-# module looks for the package configuration file called
+-# BoostConfig.cmake or boost-config.cmake and stores the result in cache
+-# entry "Boost_DIR". If found, the package configuration file is loaded
+-# and this module returns with no further action. See documentation of
+-# the Boost CMake package configuration for details on what it provides.
+-#
+-# Set Boost_NO_BOOST_CMAKE to ON to disable the search for boost-cmake.
++#[=======================================================================[.rst:
++FindBoost
++---------
++
++Find Boost include dirs and libraries
++
++Use this module by invoking find_package with the form::
++
++ find_package(Boost
++ [version] [EXACT] # Minimum or EXACT version e.g. 1.67.0
++ [REQUIRED] # Fail with error if Boost is not found
++ [COMPONENTS <libs>...] # Boost libraries by their canonical name
++ # e.g. "date_time" for "libboost_date_time"
++ [OPTIONAL_COMPONENTS <libs>...]
++ # Optional Boost libraries by their canonical name)
++ ) # e.g. "date_time" for "libboost_date_time"
++
++This module finds headers and requested component libraries OR a CMake
++package configuration file provided by a "Boost CMake" build. For the
++latter case skip to the "Boost CMake" section below. For the former
++case results are reported in variables::
++
++ Boost_FOUND - True if headers and requested libraries were found
++ Boost_INCLUDE_DIRS - Boost include directories
++ Boost_LIBRARY_DIRS - Link directories for Boost libraries
++ Boost_LIBRARIES - Boost component libraries to be linked
++ Boost_<C>_FOUND - True if component <C> was found (<C> is upper-case)
++ Boost_<C>_LIBRARY - Libraries to link for component <C> (may include
++ target_link_libraries debug/optimized keywords)
++ Boost_VERSION - BOOST_VERSION value from boost/version.hpp
++ Boost_LIB_VERSION - Version string appended to library filenames
++ Boost_MAJOR_VERSION - Boost major version number (X in X.y.z)
++ Boost_MINOR_VERSION - Boost minor version number (Y in x.Y.z)
++ Boost_SUBMINOR_VERSION - Boost subminor version number (Z in x.y.Z)
++ Boost_VERSION_STRING - Boost version number in x.y.z format
++ Boost_LIB_DIAGNOSTIC_DEFINITIONS (Windows)
++ - Pass to add_definitions() to have diagnostic
++ information about Boost's automatic linking
++ displayed during compilation
++
++Note that Boost Python components require a Python version suffix
++(Boost 1.67 and later), e.g. ``python36`` or ``python27`` for the
++versions built against Python 3.6 and 2.7, respectively. This also
++applies to additional components using Python including
++``mpi_python`` and ``numpy``. Earlier Boost releases may use
++distribution-specific suffixes such as ``2``, ``3`` or ``2.7``.
++These may also be used as suffixes, but note that they are not
++portable.
++
++This module reads hints about search locations from variables::
++
++ BOOST_ROOT - Preferred installation prefix
++ (or BOOSTROOT)
++ BOOST_INCLUDEDIR - Preferred include directory e.g. <prefix>/include
++ BOOST_LIBRARYDIR - Preferred library directory e.g. <prefix>/lib
++ Boost_NO_SYSTEM_PATHS - Set to ON to disable searching in locations not
++ specified by these hint variables. Default is OFF.
++ Boost_ADDITIONAL_VERSIONS
++ - List of Boost versions not known to this module
++ (Boost install locations may contain the version)
++
++and saves search results persistently in CMake cache entries::
++
++ Boost_INCLUDE_DIR - Directory containing Boost headers
++ Boost_LIBRARY_DIR_RELEASE - Directory containing release Boost libraries
++ Boost_LIBRARY_DIR_DEBUG - Directory containing debug Boost libraries
++ Boost_<C>_LIBRARY_DEBUG - Component <C> library debug variant
++ Boost_<C>_LIBRARY_RELEASE - Component <C> library release variant
++
++The following :prop_tgt:`IMPORTED` targets are also defined::
++
++ Boost::boost - Target for header-only dependencies
++ (Boost include directory)
++ Boost::<C> - Target for specific component dependency
++ (shared or static library); <C> is lower-
++ case
++ Boost::diagnostic_definitions - interface target to enable diagnostic
++ information about Boost's automatic linking
++ during compilation (adds BOOST_LIB_DIAGNOSTIC)
++ Boost::disable_autolinking - interface target to disable automatic
++ linking with MSVC (adds BOOST_ALL_NO_LIB)
++ Boost::dynamic_linking - interface target to enable dynamic linking
++ linking with MSVC (adds BOOST_ALL_DYN_LINK)
++
++Implicit dependencies such as Boost::filesystem requiring
++Boost::system will be automatically detected and satisfied, even
++if system is not specified when using find_package and if
++Boost::system is not added to target_link_libraries. If using
++Boost::thread, then Threads::Threads will also be added automatically.
++
++It is important to note that the imported targets behave differently
++than variables created by this module: multiple calls to
++find_package(Boost) in the same directory or sub-directories with
++different options (e.g. static or shared) will not override the
++values of the targets created by the first call.
++
++Users may set these hints or results as cache entries. Projects
++should not read these entries directly but instead use the above
++result variables. Note that some hint names start in upper-case
++"BOOST". One may specify these as environment variables if they are
++not specified as CMake variables or cache entries.
++
++This module first searches for the Boost header files using the above
++hint variables (excluding BOOST_LIBRARYDIR) and saves the result in
++Boost_INCLUDE_DIR. Then it searches for requested component libraries
++using the above hints (excluding BOOST_INCLUDEDIR and
++Boost_ADDITIONAL_VERSIONS), "lib" directories near Boost_INCLUDE_DIR,
++and the library name configuration settings below. It saves the
++library directories in Boost_LIBRARY_DIR_DEBUG and
++Boost_LIBRARY_DIR_RELEASE and individual library
++locations in Boost_<C>_LIBRARY_DEBUG and Boost_<C>_LIBRARY_RELEASE.
++When one changes settings used by previous searches in the same build
++tree (excluding environment variables) this module discards previous
++search results affected by the changes and searches again.
++
++Boost libraries come in many variants encoded in their file name.
++Users or projects may tell this module which variant to find by
++setting variables::
++
++ Boost_USE_DEBUG_LIBS - Set to ON or OFF to specify whether to search
++ and use the debug libraries. Default is ON.
++ Boost_USE_RELEASE_LIBS - Set to ON or OFF to specify whether to search
++ and use the release libraries. Default is ON.
++ Boost_USE_MULTITHREADED - Set to OFF to use the non-multithreaded
++ libraries ('mt' tag). Default is ON.
++ Boost_USE_STATIC_LIBS - Set to ON to force the use of the static
++ libraries. Default is OFF.
++ Boost_USE_STATIC_RUNTIME - Set to ON or OFF to specify whether to use
++ libraries linked statically to the C++ runtime
++ ('s' tag). Default is platform dependent.
++ Boost_USE_DEBUG_RUNTIME - Set to ON or OFF to specify whether to use
++ libraries linked to the MS debug C++ runtime
++ ('g' tag). Default is ON.
++ Boost_USE_DEBUG_PYTHON - Set to ON to use libraries compiled with a
++ debug Python build ('y' tag). Default is OFF.
++ Boost_USE_STLPORT - Set to ON to use libraries compiled with
++ STLPort ('p' tag). Default is OFF.
++ Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
++ - Set to ON to use libraries compiled with
++ STLPort deprecated "native iostreams"
++ ('n' tag). Default is OFF.
++ Boost_COMPILER - Set to the compiler-specific library suffix
++ (e.g. "-gcc43"). Default is auto-computed
++ for the C++ compiler in use. A list may be
++ used if multiple compatible suffixes should
++ be tested for, in decreasing order of
++ preference.
++ Boost_ARCHITECTURE - Set to the architecture-specific library suffix
++ (e.g. "-x64"). Default is auto-computed for the
++ C++ compiler in use.
++ Boost_THREADAPI - Suffix for "thread" component library name,
++ such as "pthread" or "win32". Names with
++ and without this suffix will both be tried.
++ Boost_NAMESPACE - Alternate namespace used to build boost with
++ e.g. if set to "myboost", will search for
++ myboost_thread instead of boost_thread.
++
++Other variables one may set to control this module are::
++
++ Boost_DEBUG - Set to ON to enable debug output from FindBoost.
++ Please enable this before filing any bug report.
++ Boost_DETAILED_FAILURE_MSG
++ - Set to ON to add detailed information to the
++ failure message even when the REQUIRED option
++ is not given to the find_package call.
++ Boost_REALPATH - Set to ON to resolve symlinks for discovered
++ libraries to assist with packaging. For example,
++ the "system" component library may be resolved to
++ "/usr/lib/libboost_system.so.1.67.0" instead of
++ "/usr/lib/libboost_system.so". This does not
++ affect linking and should not be enabled unless
++ the user needs this information.
++ Boost_LIBRARY_DIR - Default value for Boost_LIBRARY_DIR_RELEASE and
++ Boost_LIBRARY_DIR_DEBUG.
++
++On Visual Studio and Borland compilers Boost headers request automatic
++linking to corresponding libraries. This requires matching libraries
++to be linked explicitly or available in the link library search path.
++In this case setting Boost_USE_STATIC_LIBS to OFF may not achieve
++dynamic linking. Boost automatic linking typically requests static
++libraries with a few exceptions (such as Boost.Python). Use::
++
++ add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
++
++to ask Boost to report information about automatic linking requests.
++
++Example to find Boost headers only::
++
++ find_package(Boost 1.36.0)
++ if(Boost_FOUND)
++ include_directories(${Boost_INCLUDE_DIRS})
++ add_executable(foo foo.cc)
++ endif()
++
++Example to find Boost libraries and use imported targets::
++
++ find_package(Boost 1.56 REQUIRED COMPONENTS
++ date_time filesystem iostreams)
++ add_executable(foo foo.cc)
++ target_link_libraries(foo Boost::date_time Boost::filesystem
++ Boost::iostreams)
++
++Example to find Boost Python 3.6 libraries and use imported targets::
++
++ find_package(Boost 1.67 REQUIRED COMPONENTS
++ python36 numpy36)
++ add_executable(foo foo.cc)
++ target_link_libraries(foo Boost::python36 Boost::numpy36)
++
++Example to find Boost headers and some *static* (release only) libraries::
++
++ set(Boost_USE_STATIC_LIBS ON) # only find static libs
++ set(Boost_USE_DEBUG_LIBS OFF) # ignore debug libs and
++ set(Boost_USE_RELEASE_LIBS ON) # only find release libs
++ set(Boost_USE_MULTITHREADED ON)
++ set(Boost_USE_STATIC_RUNTIME OFF)
++ find_package(Boost 1.66.0 COMPONENTS date_time filesystem system ...)
++ if(Boost_FOUND)
++ include_directories(${Boost_INCLUDE_DIRS})
++ add_executable(foo foo.cc)
++ target_link_libraries(foo ${Boost_LIBRARIES})
++ endif()
++
++Boost CMake
++^^^^^^^^^^^
++
++If Boost was built using the boost-cmake project it provides a package
++configuration file for use with find_package's Config mode. This
++module looks for the package configuration file called
++BoostConfig.cmake or boost-config.cmake and stores the result in cache
++entry "Boost_DIR". If found, the package configuration file is loaded
++and this module returns with no further action. See documentation of
++the Boost CMake package configuration for details on what it provides.
++
++Set Boost_NO_BOOST_CMAKE to ON to disable the search for boost-cmake.
++#]=======================================================================]
+
+ # Save project's policies
+ cmake_policy(PUSH)
+@@ -406,15 +411,18 @@ endmacro()
+
+ #-------------------------------------------------------------------------------
+
+-#
+-# Runs compiler with "-dumpversion" and parses major/minor
+-# version with a regex.
+-#
+-function(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION)
+- string(REGEX REPLACE "([0-9]+)\\.([0-9]+)(\\.[0-9]+)?" "\\1\\2"
+- _boost_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION})
++# Convert CMAKE_CXX_COMPILER_VERSION to boost compiler suffix version.
++function(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION _OUTPUT_VERSION_MAJOR _OUTPUT_VERSION_MINOR)
++ string(REGEX REPLACE "([0-9]+)\\.([0-9]+)(\\.[0-9]+)?" "\\1"
++ _boost_COMPILER_VERSION_MAJOR "${CMAKE_CXX_COMPILER_VERSION}")
++ string(REGEX REPLACE "([0-9]+)\\.([0-9]+)(\\.[0-9]+)?" "\\2"
++ _boost_COMPILER_VERSION_MINOR "${CMAKE_CXX_COMPILER_VERSION}")
++
++ set(_boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}${_boost_COMPILER_VERSION_MINOR}")
+
+ set(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE)
++ set(${_OUTPUT_VERSION_MAJOR} ${_boost_COMPILER_VERSION_MAJOR} PARENT_SCOPE)
++ set(${_OUTPUT_VERSION_MINOR} ${_boost_COMPILER_VERSION_MINOR} PARENT_SCOPE)
+ endfunction()
+
+ #
+@@ -458,28 +466,10 @@ function(_Boost_GUESS_COMPILER_PREFIX _ret)
+ elseif (GHSMULTI)
+ set(_boost_COMPILER "-ghs")
+ elseif("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
+- #[========================================================[
+- NOTE: newer versions of FindBoost from kitware
+- change this version check to use MSVC_TOOLSET_VERSION.
+- That variable only exists in make 3.12 or greater, so
+- until all envs (including bundled visual studio) have
+- this min version of cmake, stick with this
+- CMAKE_CXX_COMPILER_VERSION check
+- #]========================================================]
+- if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10)
++ if(MSVC_TOOLSET_VERSION GREATER_EQUAL 141)
+ set(_boost_COMPILER "-vc141;-vc140")
+- elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19)
+- set(_boost_COMPILER "-vc140")
+- elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18)
+- set(_boost_COMPILER "-vc120")
+- elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 17)
+- set(_boost_COMPILER "-vc110")
+- elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16)
+- set(_boost_COMPILER "-vc100")
+- elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15)
+- set(_boost_COMPILER "-vc90")
+- elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14)
+- set(_boost_COMPILER "-vc80")
++ elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 80)
++ set(_boost_COMPILER "-vc${MSVC_TOOLSET_VERSION}")
+ elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.10)
+ set(_boost_COMPILER "-vc71")
+ elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13) # Good luck!
+@@ -497,25 +487,35 @@ function(_Boost_GUESS_COMPILER_PREFIX _ret)
+ if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34)
+ set(_boost_COMPILER "-mgw") # no GCC version encoding prior to 1.34
+ else()
+- _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION)
++ _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION _boost_COMPILER_VERSION_MAJOR _boost_COMPILER_VERSION_MINOR)
+ set(_boost_COMPILER "-mgw${_boost_COMPILER_VERSION}")
+ endif()
+ elseif (UNIX)
+- if (CMAKE_COMPILER_IS_GNUCXX)
++ _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION _boost_COMPILER_VERSION_MAJOR _boost_COMPILER_VERSION_MINOR)
++ if(NOT Boost_VERSION VERSION_LESS 106900)
++ # From GCC 5 and clang 4, versioning changes and minor becomes patch.
++ # For those compilers, patch is exclude from compiler tag in Boost 1.69+ library naming.
++ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND _boost_COMPILER_VERSION_MAJOR VERSION_GREATER 4)
++ set(_boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}")
++ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND _boost_COMPILER_VERSION_MAJOR VERSION_GREATER 3)
++ set(_boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}")
++ endif()
++ endif()
++
++ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34)
+ set(_boost_COMPILER "-gcc") # no GCC version encoding prior to 1.34
+ else()
+- _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION)
+ # Determine which version of GCC we have.
+ if(APPLE)
+ if(Boost_MINOR_VERSION)
+ if(${Boost_MINOR_VERSION} GREATER 35)
+ # In Boost 1.36.0 and newer, the mangled compiler name used
+- # on Mac OS X/Darwin is "xgcc".
++ # on macOS/Darwin is "xgcc".
+ set(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}")
+ else()
+ # In Boost <= 1.35.0, there is no mangled compiler name for
+- # the Mac OS X/Darwin version of GCC.
++ # the macOS/Darwin version of GCC.
+ set(_boost_COMPILER "")
+ endif()
+ else()
+@@ -527,7 +527,10 @@ function(_Boost_GUESS_COMPILER_PREFIX _ret)
+ set(_boost_COMPILER "-gcc${_boost_COMPILER_VERSION}")
+ endif()
+ endif()
+- endif ()
++ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
++ # TODO: Find out any Boost version constraints vs clang support.
++ set(_boost_COMPILER "-clang${_boost_COMPILER_VERSION}")
++ endif()
+ else()
+ # TODO at least Boost_DEBUG here?
+ set(_boost_COMPILER "")
+@@ -591,7 +594,7 @@ function(_Boost_COMPONENT_DEPENDENCIES component _ret)
+ endif()
+
+ set(_Boost_IMPORTED_TARGETS TRUE)
+- if(Boost_VERSION VERSION_LESS 103300)
++ if(Boost_VERSION AND Boost_VERSION VERSION_LESS 103300)
+ message(WARNING "Imported targets and dependency information not available for Boost version ${Boost_VERSION} (all versions older than 1.33)")
+ set(_Boost_IMPORTED_TARGETS FALSE)
+ elseif(NOT Boost_VERSION VERSION_LESS 103300 AND Boost_VERSION VERSION_LESS 103500)
+@@ -841,27 +844,41 @@ function(_Boost_COMPONENT_DEPENDENCIES component _ret)
+ set(_Boost_TIMER_DEPENDENCIES chrono system)
+ set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+ set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
++ elseif(NOT Boost_VERSION VERSION_LESS 106800 AND Boost_VERSION VERSION_LESS 106900)
++ set(_Boost_CHRONO_DEPENDENCIES system)
++ set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
++ set(_Boost_CONTRACT_DEPENDENCIES thread chrono system date_time)
++ set(_Boost_COROUTINE_DEPENDENCIES context system)
++ set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
++ set(_Boost_FILESYSTEM_DEPENDENCIES system)
++ set(_Boost_IOSTREAMS_DEPENDENCIES regex)
++ set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
++ set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
++ set(_Boost_MPI_DEPENDENCIES serialization)
++ set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
++ set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
++ set(_Boost_RANDOM_DEPENDENCIES system)
++ set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
++ set(_Boost_TIMER_DEPENDENCIES chrono system)
++ set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
++ set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+ else()
+- if(NOT Boost_VERSION VERSION_LESS 106800)
+- set(_Boost_CHRONO_DEPENDENCIES system)
+- set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
+- set(_Boost_CONTRACT_DEPENDENCIES thread chrono system date_time)
+- set(_Boost_COROUTINE_DEPENDENCIES context system)
+- set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
+- set(_Boost_FILESYSTEM_DEPENDENCIES system)
++ if(NOT Boost_VERSION VERSION_LESS 106900)
++ set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time)
++ set(_Boost_COROUTINE_DEPENDENCIES context)
++ set(_Boost_FIBER_DEPENDENCIES context)
+ set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+- set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
++ set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
+ set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+ set(_Boost_MPI_DEPENDENCIES serialization)
+ set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+ set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
+- set(_Boost_RANDOM_DEPENDENCIES system)
+- set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
++ set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic)
+ set(_Boost_TIMER_DEPENDENCIES chrono system)
+- set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
++ set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
+ set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+ endif()
+- if(NOT Boost_VERSION VERSION_LESS 106900)
++ if(NOT Boost_VERSION VERSION_LESS 107000)
+ message(WARNING "New Boost version may have incorrect or missing dependencies and imported targets")
+ endif()
+ endif()
+@@ -899,7 +916,11 @@ function(_Boost_COMPONENT_HEADERS component _hdrs)
+ set(_Boost_CHRONO_HEADERS "boost/chrono.hpp")
+ set(_Boost_CONTAINER_HEADERS "boost/container/container_fwd.hpp")
+ set(_Boost_CONTRACT_HEADERS "boost/contract.hpp")
+- set(_Boost_CONTEXT_HEADERS "boost/context/detail/fcontext.hpp")
++ if(Boost_VERSION VERSION_LESS 106100)
++ set(_Boost_CONTEXT_HEADERS "boost/context/all.hpp")
++ else()
++ set(_Boost_CONTEXT_HEADERS "boost/context/detail/fcontext.hpp")
++ endif()
+ set(_Boost_COROUTINE_HEADERS "boost/coroutine/all.hpp")
+ set(_Boost_DATE_TIME_HEADERS "boost/date_time/date.hpp")
+ set(_Boost_EXCEPTION_HEADERS "boost/exception/exception.hpp")
+@@ -928,6 +949,12 @@ function(_Boost_COMPONENT_HEADERS component _hdrs)
+ set(_Boost_REGEX_HEADERS "boost/regex.hpp")
+ set(_Boost_SERIALIZATION_HEADERS "boost/serialization/serialization.hpp")
+ set(_Boost_SIGNALS_HEADERS "boost/signals.hpp")
++ set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
++ set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
++ set(_Boost_STACKTRACE_BASIC_HEADERS "boost/stacktrace.hpp")
++ set(_Boost_STACKTRACE_NOOP_HEADERS "boost/stacktrace.hpp")
++ set(_Boost_STACKTRACE_WINDBG_CACHED_HEADERS "boost/stacktrace.hpp")
++ set(_Boost_STACKTRACE_WINDBG_HEADERS "boost/stacktrace.hpp")
+ set(_Boost_SYSTEM_HEADERS "boost/system/config.hpp")
+ set(_Boost_TEST_EXEC_MONITOR_HEADERS "boost/test/test_exec_monitor.hpp")
+ set(_Boost_THREAD_HEADERS "boost/thread.hpp")
+@@ -1036,21 +1063,12 @@ function(_Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS component
+ else()
+ set(_arch_suffix 32)
+ endif()
+- if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10)
++ if(MSVC_TOOLSET_VERSION GREATER_EQUAL 141)
+ list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-14.1)
+ list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-14.0)
+- elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19)
+- list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-14.0)
+- elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18)
+- list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-12.0)
+- elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 17)
+- list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-11.0)
+- elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16)
+- list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-10.0)
+- elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15)
+- list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-9.0)
+- elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14)
+- list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-8.0)
++ elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 80)
++ math(EXPR _toolset_major_version "${MSVC_TOOLSET_VERSION} / 10")
++ list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-${_toolset_major_version}.0)
+ endif()
+ set(${componentlibvar} ${${componentlibvar}} PARENT_SCOPE)
+ endif()
+@@ -1108,6 +1126,7 @@ else()
+ # _Boost_COMPONENT_HEADERS. See the instructions at the top of
+ # _Boost_COMPONENT_DEPENDENCIES.
+ set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
++ "1.69.0" "1.69"
+ "1.68.0" "1.68" "1.67.0" "1.67" "1.66.0" "1.66" "1.65.1" "1.65.0" "1.65"
+ "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"
+ "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"
+@@ -1265,7 +1284,7 @@ if(NOT Boost_INCLUDE_DIR)
+ list(APPEND _boost_INCLUDE_SEARCH_DIRS NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH)
+ else()
+ if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
+- foreach(ver ${_Boost_KNOWN_VERSIONS})
++ foreach(ver ${_boost_TEST_VERSIONS})
+ string(REPLACE "." "_" ver "${ver}")
+ list(APPEND _boost_INCLUDE_SEARCH_DIRS PATHS "C:/local/boost_${ver}")
+ endforeach()
+@@ -1350,6 +1369,7 @@ if(Boost_INCLUDE_DIR)
+ math(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000")
+ math(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000")
+ math(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100")
++ set(Boost_VERSION_STRING "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}")
+
+ string(APPEND Boost_ERROR_REASON
+ "Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}\nBoost include path: ${Boost_INCLUDE_DIR}")
+@@ -1409,6 +1429,13 @@ if ( NOT Boost_NAMESPACE )
+ set(Boost_NAMESPACE "boost")
+ endif()
+
++if(Boost_DEBUG)
++ message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
++ "Boost_LIB_PREFIX = ${Boost_LIB_PREFIX}")
++ message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
++ "Boost_NAMESPACE = ${Boost_NAMESPACE}")
++endif()
++
+ # ------------------------------------------------------------------------
+ # Suffix initialization and compiler suffix detection.
+ # ------------------------------------------------------------------------
+@@ -1501,27 +1528,35 @@ endif()
+ # -x86 Architecture and address model tag
+ # First character is the architecture, then word-size, either 32 or 64
+ # Only used in 'versioned' layout, added in Boost 1.66.0
+-set(_boost_ARCHITECTURE_TAG "")
+-# {CMAKE_CXX_COMPILER_ARCHITECTURE_ID} is not currently set for all compilers
+-if(NOT "x${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "x" AND NOT Boost_VERSION VERSION_LESS 106600)
+- string(APPEND _boost_ARCHITECTURE_TAG "-")
+- # This needs to be kept in-sync with the section of CMakePlatformId.h.in
+- # inside 'defined(_WIN32) && defined(_MSC_VER)'
+- if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "IA64")
+- string(APPEND _boost_ARCHITECTURE_TAG "i")
+- elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "X86"
+- OR CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "x64")
+- string(APPEND _boost_ARCHITECTURE_TAG "x")
+- elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "^ARM")
+- string(APPEND _boost_ARCHITECTURE_TAG "a")
+- elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "MIPS")
+- string(APPEND _boost_ARCHITECTURE_TAG "m")
+- endif()
+-
+- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+- string(APPEND _boost_ARCHITECTURE_TAG "64")
+- else()
+- string(APPEND _boost_ARCHITECTURE_TAG "32")
++if(DEFINED Boost_ARCHITECTURE)
++ set(_boost_ARCHITECTURE_TAG "${Boost_ARCHITECTURE}")
++ if(Boost_DEBUG)
++ message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
++ "using user-specified Boost_ARCHITECTURE = ${_boost_ARCHITECTURE_TAG}")
++ endif()
++else()
++ set(_boost_ARCHITECTURE_TAG "")
++ # {CMAKE_CXX_COMPILER_ARCHITECTURE_ID} is not currently set for all compilers
++ if(NOT "x${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "x" AND NOT Boost_VERSION VERSION_LESS 106600)
++ string(APPEND _boost_ARCHITECTURE_TAG "-")
++ # This needs to be kept in-sync with the section of CMakePlatformId.h.in
++ # inside 'defined(_WIN32) && defined(_MSC_VER)'
++ if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "IA64")
++ string(APPEND _boost_ARCHITECTURE_TAG "i")
++ elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "X86"
++ OR CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "x64")
++ string(APPEND _boost_ARCHITECTURE_TAG "x")
++ elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "^ARM")
++ string(APPEND _boost_ARCHITECTURE_TAG "a")
++ elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "MIPS")
++ string(APPEND _boost_ARCHITECTURE_TAG "m")
++ endif()
++
++ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
++ string(APPEND _boost_ARCHITECTURE_TAG "64")
++ else()
++ string(APPEND _boost_ARCHITECTURE_TAG "32")
++ endif()
+ endif()
+ endif()
+
+@@ -1576,7 +1611,7 @@ foreach(c DEBUG RELEASE)
+ if( Boost_NO_SYSTEM_PATHS )
+ list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH)
+ else()
+- foreach(ver ${_Boost_KNOWN_VERSIONS})
++ foreach(ver ${_boost_TEST_VERSIONS})
+ string(REPLACE "." "_" ver "${ver}")
+ _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "C:/local/boost_${ver}")
+ endforeach()
+@@ -1763,6 +1798,7 @@ foreach(COMPONENT ${Boost_FIND_COMPONENTS})
+ list(APPEND _boost_RELEASE_NAMES
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}
++ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component} )
+ if(_boost_STATIC_RUNTIME_WORKAROUND)
+ set(_boost_RELEASE_STATIC_ABI_TAG "-s${_boost_RELEASE_ABI_TAG}")
+@@ -2064,6 +2100,9 @@ if(Boost_FOUND)
+ message (STATUS " ${COMPONENT}")
+ endif()
+ list(APPEND Boost_LIBRARIES ${Boost_${UPPERCOMPONENT}_LIBRARY})
++ if(COMPONENT STREQUAL "thread")
++ list(APPEND Boost_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
++ endif()
+ endif()
+ endforeach()
+ else()
+diff --git a/src/ripple/beast/container/detail/aged_ordered_container.h b/src/ripple/beast/container/detail/aged_ordered_container.h
+index 13483040ff..201c04b72d 100644
+--- a/src/ripple/beast/container/detail/aged_ordered_container.h
++++ b/src/ripple/beast/container/detail/aged_ordered_container.h
+@@ -22,9 +22,9 @@
+
+ #include <ripple/beast/container/detail/aged_container_iterator.h>
+ #include <ripple/beast/container/detail/aged_associative_container.h>
++#include <ripple/beast/container/detail/empty_base_optimization.h>
+ #include <ripple/beast/container/aged_container.h>
+ #include <ripple/beast/clock/abstract_clock.h>
+-#include <boost/beast/core/detail/empty_base_optimization.hpp>
+ #include <boost/intrusive/list.hpp>
+ #include <boost/intrusive/set.hpp>
+ #include <boost/version.hpp>
+@@ -162,7 +162,7 @@ class aged_ordered_container
+
+ // VFALCO TODO This should only be enabled for maps.
+ class pair_value_compare
+- : public boost::beast::detail::empty_base_optimization <Compare>
++ : public beast::detail::empty_base_optimization <Compare>
+ #ifdef _LIBCPP_VERSION
+ , public std::binary_function <value_type, value_type, bool>
+ #endif
+@@ -184,7 +184,7 @@ class aged_ordered_container
+ }
+
+ pair_value_compare (pair_value_compare const& other)
+- : boost::beast::detail::empty_base_optimization <Compare> (other)
++ : beast::detail::empty_base_optimization <Compare> (other)
+ {
+ }
+
+@@ -192,7 +192,7 @@ class aged_ordered_container
+ friend aged_ordered_container;
+
+ pair_value_compare (Compare const& compare)
+- : boost::beast::detail::empty_base_optimization <Compare> (compare)
++ : beast::detail::empty_base_optimization <Compare> (compare)
+ {
+ }
+ };
+@@ -200,7 +200,7 @@ class aged_ordered_container
+ // Compares value_type against element, used in insert_check
+ // VFALCO TODO hoist to remove template argument dependencies
+ class KeyValueCompare
+- : public boost::beast::detail::empty_base_optimization <Compare>
++ : public beast::detail::empty_base_optimization <Compare>
+ #ifdef _LIBCPP_VERSION
+ , public std::binary_function <Key, element, bool>
+ #endif
+@@ -215,7 +215,7 @@ class aged_ordered_container
+ KeyValueCompare () = default;
+
+ KeyValueCompare (Compare const& compare)
+- : boost::beast::detail::empty_base_optimization <Compare> (compare)
++ : beast::detail::empty_base_optimization <Compare> (compare)
+ {
+ }
+
+@@ -252,12 +252,12 @@ class aged_ordered_container
+
+ Compare& compare()
+ {
+- return boost::beast::detail::empty_base_optimization <Compare>::member();
++ return beast::detail::empty_base_optimization <Compare>::member();
+ }
+
+ Compare const& compare() const
+ {
+- return boost::beast::detail::empty_base_optimization <Compare>::member();
++ return beast::detail::empty_base_optimization <Compare>::member();
+ }
+ };
+
+@@ -283,7 +283,7 @@ class aged_ordered_container
+
+ class config_t
+ : private KeyValueCompare
+- , public boost::beast::detail::empty_base_optimization <ElementAllocator>
++ , public beast::detail::empty_base_optimization <ElementAllocator>
+ {
+ public:
+ explicit config_t (
+@@ -303,7 +303,7 @@ class aged_ordered_container
+ config_t (
+ clock_type& clock_,
+ Allocator const& alloc_)
+- : boost::beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
++ : beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
+ , clock (clock_)
+ {
+ }
+@@ -313,14 +313,14 @@ class aged_ordered_container
+ Compare const& comp,
+ Allocator const& alloc_)
+ : KeyValueCompare (comp)
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
++ , beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
+ , clock (clock_)
+ {
+ }
+
+ config_t (config_t const& other)
+ : KeyValueCompare (other.key_compare())
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (
++ , beast::detail::empty_base_optimization <ElementAllocator> (
+ ElementAllocatorTraits::
+ select_on_container_copy_construction (
+ other.alloc()))
+@@ -330,14 +330,14 @@ class aged_ordered_container
+
+ config_t (config_t const& other, Allocator const& alloc)
+ : KeyValueCompare (other.key_compare())
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (alloc)
++ , beast::detail::empty_base_optimization <ElementAllocator> (alloc)
+ , clock (other.clock)
+ {
+ }
+
+ config_t (config_t&& other)
+ : KeyValueCompare (std::move (other.key_compare()))
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (
++ , beast::detail::empty_base_optimization <ElementAllocator> (
+ std::move (other))
+ , clock (other.clock)
+ {
+@@ -345,7 +345,7 @@ class aged_ordered_container
+
+ config_t (config_t&& other, Allocator const& alloc)
+ : KeyValueCompare (std::move (other.key_compare()))
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (alloc)
++ , beast::detail::empty_base_optimization <ElementAllocator> (alloc)
+ , clock (other.clock)
+ {
+ }
+@@ -391,13 +391,13 @@ class aged_ordered_container
+
+ ElementAllocator& alloc()
+ {
+- return boost::beast::detail::empty_base_optimization <
++ return beast::detail::empty_base_optimization <
+ ElementAllocator>::member();
+ }
+
+ ElementAllocator const& alloc() const
+ {
+- return boost::beast::detail::empty_base_optimization <
++ return beast::detail::empty_base_optimization <
+ ElementAllocator>::member();
+ }
+
+diff --git a/src/ripple/beast/container/detail/aged_unordered_container.h b/src/ripple/beast/container/detail/aged_unordered_container.h
+index 024ef9a70b..271045ee47 100644
+--- a/src/ripple/beast/container/detail/aged_unordered_container.h
++++ b/src/ripple/beast/container/detail/aged_unordered_container.h
+@@ -22,9 +22,9 @@
+
+ #include <ripple/beast/container/detail/aged_container_iterator.h>
+ #include <ripple/beast/container/detail/aged_associative_container.h>
++#include <ripple/beast/container/detail/empty_base_optimization.h>
+ #include <ripple/beast/container/aged_container.h>
+ #include <ripple/beast/clock/abstract_clock.h>
+-#include <boost/beast/core/detail/empty_base_optimization.hpp>
+ #include <boost/intrusive/list.hpp>
+ #include <boost/intrusive/unordered_set.hpp>
+ #include <algorithm>
+@@ -163,7 +163,7 @@ class aged_unordered_container
+
+ // VFALCO TODO hoist to remove template argument dependencies
+ class ValueHash
+- : private boost::beast::detail::empty_base_optimization <Hash>
++ : private beast::detail::empty_base_optimization <Hash>
+ #ifdef _LIBCPP_VERSION
+ , public std::unary_function <element, std::size_t>
+ #endif
+@@ -179,7 +179,7 @@ class aged_unordered_container
+ }
+
+ ValueHash (Hash const& hash)
+- : boost::beast::detail::empty_base_optimization <Hash> (hash)
++ : beast::detail::empty_base_optimization <Hash> (hash)
+ {
+ }
+
+@@ -202,7 +202,7 @@ class aged_unordered_container
+ // Compares value_type against element, used in find/insert_check
+ // VFALCO TODO hoist to remove template argument dependencies
+ class KeyValueEqual
+- : private boost::beast::detail::empty_base_optimization <KeyEqual>
++ : private beast::detail::empty_base_optimization <KeyEqual>
+ #ifdef _LIBCPP_VERSION
+ , public std::binary_function <Key, element, bool>
+ #endif
+@@ -219,7 +219,7 @@ class aged_unordered_container
+ }
+
+ KeyValueEqual (KeyEqual const& keyEqual)
+- : boost::beast::detail::empty_base_optimization <KeyEqual> (keyEqual)
++ : beast::detail::empty_base_optimization <KeyEqual> (keyEqual)
+ {
+ }
+
+@@ -300,7 +300,7 @@ class aged_unordered_container
+ class config_t
+ : private ValueHash
+ , private KeyValueEqual
+- , private boost::beast::detail::empty_base_optimization <ElementAllocator>
++ , private beast::detail::empty_base_optimization <ElementAllocator>
+ {
+ public:
+ explicit config_t (
+@@ -328,7 +328,7 @@ class aged_unordered_container
+ config_t (
+ clock_type& clock_,
+ Allocator const& alloc_)
+- : boost::beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
++ : beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
+ , clock (clock_)
+ {
+ }
+@@ -348,7 +348,7 @@ class aged_unordered_container
+ Hash const& hash,
+ Allocator const& alloc_)
+ : ValueHash (hash)
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
++ , beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
+ , clock (clock_)
+ {
+ }
+@@ -358,7 +358,7 @@ class aged_unordered_container
+ KeyEqual const& keyEqual,
+ Allocator const& alloc_)
+ : KeyValueEqual (keyEqual)
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
++ , beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
+ , clock (clock_)
+ {
+ }
+@@ -370,7 +370,7 @@ class aged_unordered_container
+ Allocator const& alloc_)
+ : ValueHash (hash)
+ , KeyValueEqual (keyEqual)
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
++ , beast::detail::empty_base_optimization <ElementAllocator> (alloc_)
+ , clock (clock_)
+ {
+ }
+@@ -378,7 +378,7 @@ class aged_unordered_container
+ config_t (config_t const& other)
+ : ValueHash (other.hash_function())
+ , KeyValueEqual (other.key_eq())
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (
++ , beast::detail::empty_base_optimization <ElementAllocator> (
+ ElementAllocatorTraits::
+ select_on_container_copy_construction (
+ other.alloc()))
+@@ -389,7 +389,7 @@ class aged_unordered_container
+ config_t (config_t const& other, Allocator const& alloc)
+ : ValueHash (other.hash_function())
+ , KeyValueEqual (other.key_eq())
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (alloc)
++ , beast::detail::empty_base_optimization <ElementAllocator> (alloc)
+ , clock (other.clock)
+ {
+ }
+@@ -397,7 +397,7 @@ class aged_unordered_container
+ config_t (config_t&& other)
+ : ValueHash (std::move (other.hash_function()))
+ , KeyValueEqual (std::move (other.key_eq()))
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (
++ , beast::detail::empty_base_optimization <ElementAllocator> (
+ std::move (other.alloc()))
+ , clock (other.clock)
+ {
+@@ -406,7 +406,7 @@ class aged_unordered_container
+ config_t (config_t&& other, Allocator const& alloc)
+ : ValueHash (std::move (other.hash_function()))
+ , KeyValueEqual (std::move (other.key_eq()))
+- , boost::beast::detail::empty_base_optimization <ElementAllocator> (alloc)
++ , beast::detail::empty_base_optimization <ElementAllocator> (alloc)
+ , clock (other.clock)
+ {
+ }
+@@ -471,13 +471,13 @@ class aged_unordered_container
+
+ ElementAllocator& alloc()
+ {
+- return boost::beast::detail::empty_base_optimization <
++ return beast::detail::empty_base_optimization <
+ ElementAllocator>::member();
+ }
+
+ ElementAllocator const& alloc() const
+ {
+- return boost::beast::detail::empty_base_optimization <
++ return beast::detail::empty_base_optimization <
+ ElementAllocator>::member();
+ }
+
+diff --git a/src/ripple/beast/container/detail/empty_base_optimization.h b/src/ripple/beast/container/detail/empty_base_optimization.h
+new file mode 100644
+index 0000000000..3b1acb99b1
+--- /dev/null
++++ b/src/ripple/beast/container/detail/empty_base_optimization.h
+@@ -0,0 +1,98 @@
++//
++// Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
++//
++// Distributed under the Boost Software License, Version 1.0. (See accompanying
++// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
++//
++// Official repository: https://github.com/boostorg/beast
++//
++
++#ifndef BEAST_CONTAINER_DETAIL_EMPTY_BASE_OPTIMIZATION_H_INCLUDED
++#define BEAST_CONTAINER_DETAIL_EMPTY_BASE_OPTIMIZATION_H_INCLUDED
++
++#include <boost/type_traits/is_final.hpp>
++#include <type_traits>
++#include <utility>
++
++namespace beast {
++namespace detail {
++
++template<class T>
++struct is_empty_base_optimization_derived
++ : std::integral_constant<bool,
++ std::is_empty<T>::value &&
++ ! boost::is_final<T>::value>
++{
++};
++
++template<class T, int UniqueID = 0,
++ bool isDerived =
++ is_empty_base_optimization_derived<T>::value>
++class empty_base_optimization : private T
++{
++public:
++ empty_base_optimization() = default;
++ empty_base_optimization(empty_base_optimization&&) = default;
++ empty_base_optimization(empty_base_optimization const&) = default;
++ empty_base_optimization& operator=(empty_base_optimization&&) = default;
++ empty_base_optimization& operator=(empty_base_optimization const&) = default;
++
++ template<class Arg1, class... ArgN>
++ explicit
++ empty_base_optimization(Arg1&& arg1, ArgN&&... argn)
++ : T(std::forward<Arg1>(arg1),
++ std::forward<ArgN>(argn)...)
++ {
++ }
++
++ T& member() noexcept
++ {
++ return *this;
++ }
++
++ T const& member() const noexcept
++ {
++ return *this;
++ }
++};
++
++//------------------------------------------------------------------------------
++
++template<
++ class T,
++ int UniqueID
++>
++class empty_base_optimization <T, UniqueID, false>
++{
++ T t_;
++
++public:
++ empty_base_optimization() = default;
++ empty_base_optimization(empty_base_optimization&&) = default;
++ empty_base_optimization(empty_base_optimization const&) = default;
++ empty_base_optimization& operator=(empty_base_optimization&&) = default;
++ empty_base_optimization& operator=(empty_base_optimization const&) = default;
++
++ template<class Arg1, class... ArgN>
++ explicit
++ empty_base_optimization(Arg1&& arg1, ArgN&&... argn)
++ : t_(std::forward<Arg1>(arg1),
++ std::forward<ArgN>(argn)...)
++ {
++ }
++
++ T& member() noexcept
++ {
++ return t_;
++ }
++
++ T const& member() const noexcept
++ {
++ return t_;
++ }
++};
++
++} // detail
++} // beast
++
++#endif
+diff --git a/src/ripple/server/impl/BaseWSPeer.h b/src/ripple/server/impl/BaseWSPeer.h
+index c4fc9b79dc..301d78ace3 100644
+--- a/src/ripple/server/impl/BaseWSPeer.h
++++ b/src/ripple/server/impl/BaseWSPeer.h
+@@ -291,14 +291,20 @@ on_write(error_code const& ec)
+ start_timer();
+ if(! result.first)
+ impl().ws_.async_write_some(
+- result.first, result.second, strand_.wrap(std::bind(
+- &BaseWSPeer::on_write, impl().shared_from_this(),
+- std::placeholders::_1)));
++ static_cast<bool>(result.first),
++ result.second,
++ strand_.wrap(std::bind(
++ &BaseWSPeer::on_write,
++ impl().shared_from_this(),
++ std::placeholders::_1)));
+ else
+ impl().ws_.async_write_some(
+- result.first, result.second, strand_.wrap(std::bind(
+- &BaseWSPeer::on_write_fin, impl().shared_from_this(),
+- std::placeholders::_1)));
++ static_cast<bool>(result.first),
++ result.second,
++ strand_.wrap(std::bind(
++ &BaseWSPeer::on_write_fin,
++ impl().shared_from_this(),
++ std::placeholders::_1)));
+ }
+
+ template<class Handler, class Impl>