mirror of
				https://github.com/Xahau/xahaud.git
				synced 2025-11-04 02:35:48 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			7603 lines
		
	
	
		
			300 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			7603 lines
		
	
	
		
			300 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 311d0b8bf1fad594679fcd019dba3f7b5081e2d7 Mon Sep 17 00:00:00 2001
 | 
						|
From: Richard Holland <richard.holland@starstone.co.nz>
 | 
						|
Date: Thu, 6 Apr 2023 09:46:00 +0000
 | 
						|
Subject: [PATCH] Revert "Use the Conan package manager (#4367)"
 | 
						|
 | 
						|
This reverts commit c3a9f3dbf3b2a1430cbc26bb4630e9b84643b354.
 | 
						|
---
 | 
						|
 .github/workflows/doxygen.yml                 |   11 +-
 | 
						|
 .github/workflows/nix.yml                     |   96 -
 | 
						|
 .github/workflows/windows.yml                 |   97 -
 | 
						|
 .gitignore                                    |    3 +-
 | 
						|
 .gitlab-ci.yml                                |  169 ++
 | 
						|
 .travis.yml                                   |  460 ++++
 | 
						|
 BUILD.md                                      |  318 ---
 | 
						|
 Builds/CMake/FindRocksDB.cmake                |   62 +
 | 
						|
 Builds/CMake/README.md                        |   18 +
 | 
						|
 Builds/CMake/RippledCore.cmake                |    8 +-
 | 
						|
 Builds/CMake/RippledDocs.cmake                |  157 +-
 | 
						|
 Builds/CMake/RippledInstall.cmake             |   12 +
 | 
						|
 Builds/CMake/RippledInterface.cmake           |   15 +-
 | 
						|
 Builds/CMake/RippledMultiConfig.cmake         |    2 +-
 | 
						|
 Builds/CMake/RippledNIH.cmake                 |   33 +
 | 
						|
 Builds/CMake/RippledRelease.cmake             |   19 +-
 | 
						|
 Builds/CMake/RippledSanity.cmake              |   10 +-
 | 
						|
 Builds/CMake/deps/Boost.cmake                 |   51 +-
 | 
						|
 Builds/CMake/deps/Ed25519-donna.cmake         |   28 +
 | 
						|
 Builds/CMake/deps/FindBoost.cmake             | 2170 +++++++++++++++++
 | 
						|
 Builds/CMake/deps/Findjemalloc.cmake          |   47 +
 | 
						|
 Builds/CMake/deps/Findlibarchive_pc.cmake     |   22 +
 | 
						|
 Builds/CMake/deps/Findlz4.cmake               |   24 +
 | 
						|
 Builds/CMake/deps/Findsecp256k1.cmake         |   24 +
 | 
						|
 Builds/CMake/deps/Findsnappy.cmake            |   24 +
 | 
						|
 Builds/CMake/deps/Findsoci.cmake              |   17 +
 | 
						|
 Builds/CMake/deps/Findsqlite.cmake            |   24 +
 | 
						|
 Builds/CMake/deps/Libarchive.cmake            |  163 ++
 | 
						|
 Builds/CMake/deps/Lz4.cmake                   |   79 +
 | 
						|
 Builds/CMake/deps/Nudb.cmake                  |   31 +
 | 
						|
 Builds/CMake/deps/OpenSSL.cmake               |   48 +
 | 
						|
 Builds/CMake/deps/Postgres.cmake              |   70 +
 | 
						|
 Builds/CMake/deps/Protobuf.cmake              |  167 +-
 | 
						|
 Builds/CMake/deps/Rocksdb.cmake               |  177 ++
 | 
						|
 Builds/CMake/deps/Secp256k1.cmake             |   58 +
 | 
						|
 Builds/CMake/deps/Snappy.cmake                |   77 +
 | 
						|
 Builds/CMake/deps/Soci.cmake                  |  165 ++
 | 
						|
 Builds/CMake/deps/Sqlite.cmake                |   93 +
 | 
						|
 Builds/CMake/deps/cassandra.cmake             |  167 ++
 | 
						|
 Builds/CMake/deps/date.cmake                  |   18 +
 | 
						|
 Builds/CMake/deps/gRPC.cmake                  |  344 ++-
 | 
						|
 Builds/CMake/rocks_thirdparty.inc             |   15 +
 | 
						|
 Builds/CMake/rocksdb_build_version.cc.in      |   71 +
 | 
						|
 Builds/CMake/soci_patch.cmake                 |   49 +
 | 
						|
 Builds/VisualStudio2017/README.md             |    1 +
 | 
						|
 .../CMakeSettings-example.json                |   45 +
 | 
						|
 Builds/VisualStudio2019/README.md             |  263 ++
 | 
						|
 Builds/linux/README.md                        |    1 +
 | 
						|
 Builds/macos/README.md                        |    1 +
 | 
						|
 CMakeLists.txt                                |   65 +-
 | 
						|
 CONTRIBUTING.md                               |  185 +-
 | 
						|
 conanfile.py                                  |  154 --
 | 
						|
 docs/build/conan.md                           |  114 -
 | 
						|
 docs/build/depend.md                          |   98 -
 | 
						|
 docs/build/environment.md                     |   83 -
 | 
						|
 docs/build/install.md                         |   13 -
 | 
						|
 src/ed25519-donna/CMakeLists.txt              |   48 -
 | 
						|
 src/ripple/protocol/impl/PublicKey.cpp        |    3 +-
 | 
						|
 src/ripple/protocol/impl/SecretKey.cpp        |    2 +-
 | 
						|
 src/ripple/rpc/handlers/WalletPropose.cpp     |    2 +-
 | 
						|
 src/secp256k1/CMakeLists.txt                  |   52 -
 | 
						|
 src/test/core/SociDB_test.cpp                 |   13 +-
 | 
						|
 src/test/rpc/NodeToShardRPC_test.cpp          |    2 +-
 | 
						|
 63 files changed, 5435 insertions(+), 1423 deletions(-)
 | 
						|
 delete mode 100644 .github/workflows/nix.yml
 | 
						|
 delete mode 100644 .github/workflows/windows.yml
 | 
						|
 create mode 100644 .gitlab-ci.yml
 | 
						|
 create mode 100644 .travis.yml
 | 
						|
 delete mode 100644 BUILD.md
 | 
						|
 create mode 100644 Builds/CMake/FindRocksDB.cmake
 | 
						|
 create mode 100644 Builds/CMake/README.md
 | 
						|
 create mode 100644 Builds/CMake/RippledNIH.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Ed25519-donna.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/FindBoost.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Findjemalloc.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Findlibarchive_pc.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Findlz4.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Findsecp256k1.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Findsnappy.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Findsoci.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Findsqlite.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Libarchive.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Lz4.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Nudb.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/OpenSSL.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Postgres.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Rocksdb.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Secp256k1.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Snappy.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Soci.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/Sqlite.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/cassandra.cmake
 | 
						|
 create mode 100644 Builds/CMake/deps/date.cmake
 | 
						|
 create mode 100644 Builds/CMake/rocks_thirdparty.inc
 | 
						|
 create mode 100644 Builds/CMake/rocksdb_build_version.cc.in
 | 
						|
 create mode 100644 Builds/CMake/soci_patch.cmake
 | 
						|
 create mode 100644 Builds/VisualStudio2017/README.md
 | 
						|
 create mode 100644 Builds/VisualStudio2019/CMakeSettings-example.json
 | 
						|
 create mode 100644 Builds/VisualStudio2019/README.md
 | 
						|
 create mode 100644 Builds/linux/README.md
 | 
						|
 create mode 100644 Builds/macos/README.md
 | 
						|
 delete mode 100644 conanfile.py
 | 
						|
 delete mode 100644 docs/build/conan.md
 | 
						|
 delete mode 100644 docs/build/depend.md
 | 
						|
 delete mode 100644 docs/build/environment.md
 | 
						|
 delete mode 100644 docs/build/install.md
 | 
						|
 delete mode 100644 src/ed25519-donna/CMakeLists.txt
 | 
						|
 delete mode 100644 src/secp256k1/CMakeLists.txt
 | 
						|
 | 
						|
diff --git a/.github/workflows/doxygen.yml b/.github/workflows/doxygen.yml
 | 
						|
index db9801875..9a56185c5 100644
 | 
						|
--- a/.github/workflows/doxygen.yml
 | 
						|
+++ b/.github/workflows/doxygen.yml
 | 
						|
@@ -1,5 +1,4 @@
 | 
						|
 name: Build and publish Doxygen documentation
 | 
						|
-# To test this workflow, push your changes to your fork's `develop` branch.
 | 
						|
 on:
 | 
						|
   push:
 | 
						|
     branches:
 | 
						|
@@ -12,18 +11,12 @@ jobs:
 | 
						|
       image: docker://rippleci/rippled-ci-builder:2944b78d22db
 | 
						|
     steps:
 | 
						|
       - name: checkout
 | 
						|
-        uses: actions/checkout@v3
 | 
						|
-      - name: check environment
 | 
						|
-        run: |
 | 
						|
-          echo ${PATH} | tr ':' '\n'
 | 
						|
-          cmake --version
 | 
						|
-          doxygen --version
 | 
						|
-          env
 | 
						|
+        uses: actions/checkout@v2
 | 
						|
       - name: build
 | 
						|
         run: |
 | 
						|
           mkdir build
 | 
						|
           cd build
 | 
						|
-          cmake -Donly_docs=TRUE ..
 | 
						|
+          cmake -DBoost_NO_BOOST_CMAKE=ON ..
 | 
						|
           cmake --build . --target docs --parallel $(nproc)
 | 
						|
       - name: publish
 | 
						|
         uses: peaceiris/actions-gh-pages@v3
 | 
						|
diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml
 | 
						|
deleted file mode 100644
 | 
						|
index 8ccb1f527..000000000
 | 
						|
--- a/.github/workflows/nix.yml
 | 
						|
+++ /dev/null
 | 
						|
@@ -1,96 +0,0 @@
 | 
						|
-name: nix
 | 
						|
-on: [push, pull_request]
 | 
						|
-
 | 
						|
-jobs:
 | 
						|
-
 | 
						|
-  test:
 | 
						|
-    strategy:
 | 
						|
-      fail-fast: false
 | 
						|
-      matrix:
 | 
						|
-        platform:
 | 
						|
-          - ubuntu-latest
 | 
						|
-          - macos-12
 | 
						|
-        generator:
 | 
						|
-          - Ninja
 | 
						|
-        configuration:
 | 
						|
-          - Release
 | 
						|
-    runs-on: ${{ matrix.platform }}
 | 
						|
-    env:
 | 
						|
-      build_dir: .build
 | 
						|
-    steps:
 | 
						|
-      - name: checkout
 | 
						|
-        uses: actions/checkout@v3
 | 
						|
-      - name: install Ninja on Linux
 | 
						|
-        if: matrix.generator == 'Ninja' && runner.os == 'Linux'
 | 
						|
-        run: sudo apt install ninja-build
 | 
						|
-      - name: install Ninja on OSX
 | 
						|
-        if: matrix.generator == 'Ninja' && runner.os == 'macOS'
 | 
						|
-        run: brew install ninja
 | 
						|
-      - name: install nproc on OSX
 | 
						|
-        if: runner.os == 'macOS'
 | 
						|
-        run: brew install coreutils
 | 
						|
-      - name: choose Python
 | 
						|
-        uses: actions/setup-python@v3
 | 
						|
-        with:
 | 
						|
-          python-version: 3.9
 | 
						|
-      - name: learn Python cache directory
 | 
						|
-        id: pip-cache
 | 
						|
-        run: |
 | 
						|
-          sudo pip install --upgrade pip
 | 
						|
-          echo "::set-output name=dir::$(pip cache dir)"
 | 
						|
-      - name: restore Python cache directory
 | 
						|
-        uses: actions/cache@v2
 | 
						|
-        with:
 | 
						|
-            path: ${{ steps.pip-cache.outputs.dir }}
 | 
						|
-            key: ${{ runner.os }}-${{ hashFiles('.github/workflows/nix.yml') }}
 | 
						|
-      - name: install Conan
 | 
						|
-        run: pip install wheel 'conan~=1.52'
 | 
						|
-      - name: check environment
 | 
						|
-        run: |
 | 
						|
-          echo ${PATH} | tr ':' '\n'
 | 
						|
-          python --version
 | 
						|
-          conan --version
 | 
						|
-          cmake --version
 | 
						|
-          env
 | 
						|
-      - name: configure Conan
 | 
						|
-        run: |
 | 
						|
-          conan profile new default --detect
 | 
						|
-          conan profile update settings.compiler.cppstd=20 default
 | 
						|
-      - name: configure Conan on Linux
 | 
						|
-        if: runner.os == 'Linux'
 | 
						|
-        run: |
 | 
						|
-          conan profile update settings.compiler.libcxx=libstdc++11 default
 | 
						|
-      - name: learn Conan cache directory
 | 
						|
-        id: conan-cache
 | 
						|
-        run: |
 | 
						|
-          echo "::set-output name=dir::$(conan config get storage.path)"
 | 
						|
-      - name: restore Conan cache directory
 | 
						|
-        uses: actions/cache@v2
 | 
						|
-        with:
 | 
						|
-            path: ${{ steps.conan-cache.outputs.dir }}
 | 
						|
-            key: ${{ hashFiles('~/.conan/profiles/default', 'conanfile.py', 'external/rocksdb/*', '.github/workflows/nix.yml') }}
 | 
						|
-      - name: export Snappy
 | 
						|
-        run: conan export external/snappy snappy/1.1.9@
 | 
						|
-      - name: install dependencies
 | 
						|
-        run: |
 | 
						|
-          mkdir ${build_dir}
 | 
						|
-          cd ${build_dir}
 | 
						|
-          conan install .. --build missing --settings build_type=${{ matrix.configuration }}
 | 
						|
-      - name: configure
 | 
						|
-        run: |
 | 
						|
-          cd ${build_dir}
 | 
						|
-          cmake \
 | 
						|
-            -G ${{ matrix.generator }} \
 | 
						|
-            -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake \
 | 
						|
-            -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} \
 | 
						|
-            -Dassert=ON \
 | 
						|
-            -Dcoverage=OFF \
 | 
						|
-            -Dreporting=OFF \
 | 
						|
-            -Dunity=OFF \
 | 
						|
-            ..
 | 
						|
-      - name: build
 | 
						|
-        run: |
 | 
						|
-          cmake --build ${build_dir} --target rippled --parallel $(nproc)
 | 
						|
-      - name: test
 | 
						|
-        run: |
 | 
						|
-          ${build_dir}/rippled --unittest --unittest-jobs $(nproc)
 | 
						|
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
 | 
						|
deleted file mode 100644
 | 
						|
index 51fdc5d27..000000000
 | 
						|
--- a/.github/workflows/windows.yml
 | 
						|
+++ /dev/null
 | 
						|
@@ -1,97 +0,0 @@
 | 
						|
-name: windows
 | 
						|
-# We have disabled this workflow because it fails in our CI Windows
 | 
						|
-# environment, but we cannot replicate the failure in our personal Windows
 | 
						|
-# test environments, nor have we gone through the trouble of setting up an
 | 
						|
-# interactive CI Windows environment.
 | 
						|
-# We welcome contributions to diagnose or debug the problems on Windows. Until
 | 
						|
-# then, we leave this tombstone as a reminder that we have tried (but failed)
 | 
						|
-# to write a reliable test for Windows.
 | 
						|
-# on: [push, pull_request]
 | 
						|
-on:
 | 
						|
-  workflow_dispatch:
 | 
						|
-  push:
 | 
						|
-    branches:
 | 
						|
-      - 'action'
 | 
						|
-    paths:
 | 
						|
-      - '.github/workflow/windows.yml'
 | 
						|
-
 | 
						|
-jobs:
 | 
						|
-
 | 
						|
-  test:
 | 
						|
-    strategy:
 | 
						|
-      fail-fast: false
 | 
						|
-      matrix:
 | 
						|
-        generator:
 | 
						|
-          - Visual Studio 16 2019
 | 
						|
-        configuration:
 | 
						|
-          - Release
 | 
						|
-    runs-on: windows-2019
 | 
						|
-    env:
 | 
						|
-      build_dir: .build
 | 
						|
-    steps:
 | 
						|
-      - name: checkout
 | 
						|
-        uses: actions/checkout@v3
 | 
						|
-      - name: choose Python
 | 
						|
-        uses: actions/setup-python@v3
 | 
						|
-        with:
 | 
						|
-          python-version: 3.9
 | 
						|
-      - name: learn Python cache directory
 | 
						|
-        id: pip-cache
 | 
						|
-        run: |
 | 
						|
-          pip install --upgrade pip
 | 
						|
-          echo "::set-output name=dir::$(pip cache dir)"
 | 
						|
-      - name: restore Python cache directory
 | 
						|
-        uses: actions/cache@v2
 | 
						|
-        with:
 | 
						|
-            path: ${{ steps.pip-cache.outputs.dir }}
 | 
						|
-            key: ${{ runner.os }}-${{ hashFiles('.github/workflows/windows.yml') }}
 | 
						|
-      - name: install Conan
 | 
						|
-        run: pip install wheel 'conan~=1.52'
 | 
						|
-      - name: check environment
 | 
						|
-        run: |
 | 
						|
-          $env:PATH -split ';'
 | 
						|
-          python --version
 | 
						|
-          conan --version
 | 
						|
-          cmake --version
 | 
						|
-          dir env:
 | 
						|
-      - name: configure Conan
 | 
						|
-        run: |
 | 
						|
-          conan profile new default --detect
 | 
						|
-          conan profile update settings.compiler.cppstd=20 default
 | 
						|
-          conan profile update settings.compiler.runtime=MT default
 | 
						|
-          conan profile update settings.compiler.toolset=v141 default
 | 
						|
-      - name: learn Conan cache directory
 | 
						|
-        id: conan-cache
 | 
						|
-        run: |
 | 
						|
-          echo "::set-output name=dir::$(conan config get storage.path)"
 | 
						|
-      - name: restore Conan cache directory
 | 
						|
-        uses: actions/cache@v2
 | 
						|
-        with:
 | 
						|
-            path: ${{ steps.conan-cache.outputs.dir }}
 | 
						|
-            key: ${{ hashFiles('~/.conan/profiles/default', 'conanfile.py', 'external/rocksdb/*', '.github/workflows/windows.yml') }}
 | 
						|
-      - name: export Snappy
 | 
						|
-        run: conan export external/snappy snappy/1.1.9@
 | 
						|
-      - name: install dependencies
 | 
						|
-        run: |
 | 
						|
-          mkdir $env:build_dir
 | 
						|
-          cd $env:build_dir
 | 
						|
-          conan install .. --build missing --settings build_type=${{ matrix.configuration }}
 | 
						|
-      - name: configure
 | 
						|
-        run: |
 | 
						|
-          $env:build_dir
 | 
						|
-          cd $env:build_dir
 | 
						|
-          pwd
 | 
						|
-          ls
 | 
						|
-          cmake `
 | 
						|
-            -G "${{ matrix.generator }}" `
 | 
						|
-            -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake `
 | 
						|
-            -Dassert=ON `
 | 
						|
-            -Dreporting=OFF `
 | 
						|
-            -Dunity=OFF `
 | 
						|
-            ..
 | 
						|
-      - name: build
 | 
						|
-        run: |
 | 
						|
-          cmake --build $env:build_dir --target rippled --config ${{ matrix.configuration }} --parallel $env:NUMBER_OF_PROCESSORS
 | 
						|
-      - name: test
 | 
						|
-        run: |
 | 
						|
-          & "$env:build_dir\${{ matrix.configuration }}\rippled.exe" --unittest
 | 
						|
diff --git a/.gitignore b/.gitignore
 | 
						|
index baebdcb15..c7e12ec1b 100644
 | 
						|
--- a/.gitignore
 | 
						|
+++ b/.gitignore
 | 
						|
@@ -26,6 +26,7 @@ build/docker
 | 
						|
 
 | 
						|
 # Ignore object files.
 | 
						|
 *.o
 | 
						|
+build
 | 
						|
 .nih_c
 | 
						|
 tags
 | 
						|
 TAGS
 | 
						|
@@ -69,7 +70,7 @@ docs/html_doc
 | 
						|
 # Xcode user-specific project settings
 | 
						|
 # Xcode
 | 
						|
 .DS_Store
 | 
						|
-/build/
 | 
						|
+*/build/*
 | 
						|
 *.pbxuser
 | 
						|
 !default.pbxuser
 | 
						|
 *.mode1v3
 | 
						|
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
 | 
						|
new file mode 100644
 | 
						|
index 000000000..02475adf0
 | 
						|
--- /dev/null
 | 
						|
+++ b/.gitlab-ci.yml
 | 
						|
@@ -0,0 +1,169 @@
 | 
						|
+# I don't know what the minimum size is, but we cannot build on t3.micro.
 | 
						|
+
 | 
						|
+# TODO: Factor common builds between different tests.
 | 
						|
+
 | 
						|
+# The parameters for our job matrix:
 | 
						|
+#
 | 
						|
+# 1. Generator (Make, Ninja, MSBuild)
 | 
						|
+# 2. Compiler (GCC, Clang, MSVC)
 | 
						|
+# 3. Build type (Debug, Release)
 | 
						|
+# 4. Definitions (-Dunity=OFF, -Dassert=ON, ...)
 | 
						|
+
 | 
						|
+
 | 
						|
+.job_linux_build_test:
 | 
						|
+  only:
 | 
						|
+    variables:
 | 
						|
+      - $CI_PROJECT_URL =~ /^https?:\/\/gitlab.com\//
 | 
						|
+  stage: build
 | 
						|
+  tags:
 | 
						|
+    - linux
 | 
						|
+    - c5.2xlarge
 | 
						|
+  image: thejohnfreeman/rippled-build-ubuntu:4b73694e07f0
 | 
						|
+  script:
 | 
						|
+    - bin/ci/build.sh
 | 
						|
+    - bin/ci/test.sh
 | 
						|
+  cache:
 | 
						|
+    # Use a different key for each unique combination of (generator, compiler,
 | 
						|
+    # build type). Caches are stored as `.zip` files; they are not merged.
 | 
						|
+    # Generate a new key whenever you want to bust the cache, e.g. when the
 | 
						|
+    # dependency versions have been bumped.
 | 
						|
+    # By default, jobs pull the cache. Only a few specially chosen jobs update
 | 
						|
+    # the cache (with policy `pull-push`); one for each unique combination of
 | 
						|
+    # (generator, compiler, build type).
 | 
						|
+    policy: pull
 | 
						|
+    paths:
 | 
						|
+      - .nih_c/
 | 
						|
+
 | 
						|
+'build+test Make GCC Debug':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Unix Makefiles
 | 
						|
+    COMPILER: gcc
 | 
						|
+    BUILD_TYPE: Debug
 | 
						|
+  cache:
 | 
						|
+    key: 62ada41c-fc9e-4949-9533-736d4d6512b6
 | 
						|
+    policy: pull-push
 | 
						|
+
 | 
						|
+'build+test Ninja GCC Debug':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Ninja
 | 
						|
+    COMPILER: gcc
 | 
						|
+    BUILD_TYPE: Debug
 | 
						|
+  cache:
 | 
						|
+    key: 1665d3eb-6233-4eef-9f57-172636899faa
 | 
						|
+    policy: pull-push
 | 
						|
+
 | 
						|
+'build+test Ninja GCC Debug -Dstatic=OFF':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Ninja
 | 
						|
+    COMPILER: gcc
 | 
						|
+    BUILD_TYPE: Debug
 | 
						|
+    CMAKE_ARGS: '-Dstatic=OFF'
 | 
						|
+  cache:
 | 
						|
+    key: 1665d3eb-6233-4eef-9f57-172636899faa
 | 
						|
+
 | 
						|
+'build+test Ninja GCC Debug -Dstatic=OFF -DBUILD_SHARED_LIBS=ON':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Ninja
 | 
						|
+    COMPILER: gcc
 | 
						|
+    BUILD_TYPE: Debug
 | 
						|
+    CMAKE_ARGS: '-Dstatic=OFF -DBUILD_SHARED_LIBS=ON'
 | 
						|
+  cache:
 | 
						|
+    key: 1665d3eb-6233-4eef-9f57-172636899faa
 | 
						|
+
 | 
						|
+'build+test Ninja GCC Debug -Dunity=OFF':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Ninja
 | 
						|
+    COMPILER: gcc
 | 
						|
+    BUILD_TYPE: Debug
 | 
						|
+    CMAKE_ARGS: '-Dunity=OFF'
 | 
						|
+  cache:
 | 
						|
+    key: 1665d3eb-6233-4eef-9f57-172636899faa
 | 
						|
+
 | 
						|
+'build+test Ninja GCC Release -Dassert=ON':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Ninja
 | 
						|
+    COMPILER: gcc
 | 
						|
+    BUILD_TYPE: Release
 | 
						|
+    CMAKE_ARGS: '-Dassert=ON'
 | 
						|
+  cache:
 | 
						|
+    key: c45ec125-9625-4c19-acf7-4e889d5f90bd
 | 
						|
+    policy: pull-push
 | 
						|
+
 | 
						|
+'build+test(manual) Ninja GCC Release -Dassert=ON':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Ninja
 | 
						|
+    COMPILER: gcc
 | 
						|
+    BUILD_TYPE: Release
 | 
						|
+    CMAKE_ARGS: '-Dassert=ON'
 | 
						|
+    MANUAL_TEST: 'true'
 | 
						|
+  cache:
 | 
						|
+    key: c45ec125-9625-4c19-acf7-4e889d5f90bd
 | 
						|
+
 | 
						|
+'build+test Make clang Debug':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Unix Makefiles
 | 
						|
+    COMPILER: clang
 | 
						|
+    BUILD_TYPE: Debug
 | 
						|
+  cache:
 | 
						|
+    key: bf578dc2-5277-4580-8de5-6b9523118b19
 | 
						|
+    policy: pull-push
 | 
						|
+
 | 
						|
+'build+test Ninja clang Debug':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Ninja
 | 
						|
+    COMPILER: clang
 | 
						|
+    BUILD_TYPE: Debug
 | 
						|
+  cache:
 | 
						|
+    key: 762514c5-3d4c-4c7c-8da2-2df9d8839cbe
 | 
						|
+    policy: pull-push
 | 
						|
+
 | 
						|
+'build+test Ninja clang Debug -Dunity=OFF':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Ninja
 | 
						|
+    COMPILER: clang
 | 
						|
+    BUILD_TYPE: Debug
 | 
						|
+    CMAKE_ARGS: '-Dunity=OFF'
 | 
						|
+  cache:
 | 
						|
+    key: 762514c5-3d4c-4c7c-8da2-2df9d8839cbe
 | 
						|
+
 | 
						|
+'build+test Ninja clang Debug -Dunity=OFF -Dsan=address':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Ninja
 | 
						|
+    COMPILER: clang
 | 
						|
+    BUILD_TYPE: Debug
 | 
						|
+    CMAKE_ARGS: '-Dunity=OFF -Dsan=address'
 | 
						|
+    CONCURRENT_TESTS: 1
 | 
						|
+  cache:
 | 
						|
+    key: 762514c5-3d4c-4c7c-8da2-2df9d8839cbe
 | 
						|
+
 | 
						|
+'build+test Ninja clang Debug -Dunity=OFF -Dsan=undefined':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Ninja
 | 
						|
+    COMPILER: clang
 | 
						|
+    BUILD_TYPE: Debug
 | 
						|
+    CMAKE_ARGS: '-Dunity=OFF -Dsan=undefined'
 | 
						|
+  cache:
 | 
						|
+    key: 762514c5-3d4c-4c7c-8da2-2df9d8839cbe
 | 
						|
+
 | 
						|
+'build+test Ninja clang Release -Dassert=ON':
 | 
						|
+  extends: .job_linux_build_test
 | 
						|
+  variables:
 | 
						|
+    GENERATOR: Ninja
 | 
						|
+    COMPILER: clang
 | 
						|
+    BUILD_TYPE: Release
 | 
						|
+    CMAKE_ARGS: '-Dassert=ON'
 | 
						|
+  cache:
 | 
						|
+    key: 7751be37-2358-4f08-b1d0-7e72e0ad266d
 | 
						|
+    policy: pull-push
 | 
						|
diff --git a/.travis.yml b/.travis.yml
 | 
						|
new file mode 100644
 | 
						|
index 000000000..d8cbf4344
 | 
						|
--- /dev/null
 | 
						|
+++ b/.travis.yml
 | 
						|
@@ -0,0 +1,460 @@
 | 
						|
+# There is a known issue where Travis will have trouble fetching the cache,
 | 
						|
+# particularly on non-linux builds. Try restarting the individual build
 | 
						|
+# (probably will not be necessary in the "windep" stages) if the end of the
 | 
						|
+# log looks like:
 | 
						|
+#
 | 
						|
+#---------------------------------------
 | 
						|
+# attempting to download cache archive
 | 
						|
+# fetching travisorder/cache--windows-1809-containers-f2bf1c76c7fb4095c897a4999bd7c9b3fb830414dfe91f33d665443b52416d39--compiler-gpp.tgz
 | 
						|
+# found cache
 | 
						|
+# adding C:/Users/travis/_cache to cache
 | 
						|
+# creating directory C:/Users/travis/_cache
 | 
						|
+# No output has been received in the last 10m0s, this potentially indicates a stalled build or something wrong with the build itself.
 | 
						|
+# Check the details on how to adjust your build configuration on: https://docs.travis-ci.com/user/common-build-problems/#build-times-out-because-no-output-was-received
 | 
						|
+# The build has been terminated
 | 
						|
+#---------------------------------------
 | 
						|
+
 | 
						|
+language: cpp
 | 
						|
+dist: bionic
 | 
						|
+
 | 
						|
+services:
 | 
						|
+  - docker
 | 
						|
+
 | 
						|
+stages:
 | 
						|
+  - windep-vcpkg
 | 
						|
+  - windep-boost
 | 
						|
+  - build
 | 
						|
+
 | 
						|
+env:
 | 
						|
+  global:
 | 
						|
+    - DOCKER_IMAGE="rippleci/rippled-ci-builder:2020-01-08"
 | 
						|
+    - CMAKE_EXTRA_ARGS="-Dwerr=ON -Dwextra=ON"
 | 
						|
+    - NINJA_BUILD=true
 | 
						|
+    # change this if we get more VM capacity
 | 
						|
+    - MAX_TIME_MIN=80
 | 
						|
+    - CACHE_DIR=${TRAVIS_HOME}/_cache
 | 
						|
+    - NIH_CACHE_ROOT=${CACHE_DIR}/nih_c
 | 
						|
+    - PARALLEL_TESTS=true
 | 
						|
+    # this is NOT used by linux container based builds (which already have boost installed)
 | 
						|
+    - BOOST_URL='https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz'
 | 
						|
+    # Alternate dowload location
 | 
						|
+    - BOOST_URL2='https://downloads.sourceforge.net/project/boost/boost/1.75.0/boost_1_75_0.tar.bz2?r=&ts=1594393912&use_mirror=newcontinuum'
 | 
						|
+    # Travis downloader doesn't seem to have updated certs. Using this option
 | 
						|
+    # introduces obvious security risks, but they're Travis's risks.
 | 
						|
+    # Note that this option is only used if the "normal" build fails.
 | 
						|
+    - BOOST_WGET_OPTIONS='--no-check-certificate'
 | 
						|
+    - VCPKG_DIR=${CACHE_DIR}/vcpkg
 | 
						|
+    - USE_CCACHE=true
 | 
						|
+    - CCACHE_BASEDIR=${TRAVIS_HOME}"
 | 
						|
+    - CCACHE_NOHASHDIR=true
 | 
						|
+    - CCACHE_DIR=${CACHE_DIR}/ccache
 | 
						|
+
 | 
						|
+before_install:
 | 
						|
+  - export NUM_PROCESSORS=$(nproc)
 | 
						|
+  - echo "NUM PROC is ${NUM_PROCESSORS}"
 | 
						|
+  - if [ "$(uname)" = "Linux" ] ; then docker pull ${DOCKER_IMAGE}; fi
 | 
						|
+  - if [ "${MATRIX_EVAL}" != "" ] ; then eval "${MATRIX_EVAL}"; fi
 | 
						|
+  - if [ "${CMAKE_ADD}" != "" ] ; then export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} ${CMAKE_ADD}"; fi
 | 
						|
+  - bin/ci/ubuntu/travis-cache-start.sh
 | 
						|
+
 | 
						|
+matrix:
 | 
						|
+  fast_finish: true
 | 
						|
+  allow_failures:
 | 
						|
+    # TODO these need more investigation
 | 
						|
+    #
 | 
						|
+    # there are a number of UBs caught currently that need triage
 | 
						|
+    - name: ubsan, clang-8
 | 
						|
+    # this one often runs out of memory:
 | 
						|
+    - name: manual tests, gcc-8, release
 | 
						|
+    # The Windows build may fail if any of the dependencies fail, but
 | 
						|
+    # allow the rest of the builds to continue. They may succeed if the
 | 
						|
+    # dependency is already cached. These do not need to be retried if
 | 
						|
+    # _any_ of the Windows builds succeed.
 | 
						|
+    - stage: windep-vcpkg
 | 
						|
+    - stage: windep-boost
 | 
						|
+
 | 
						|
+  # https://docs.travis-ci.com/user/build-config-yaml#usage-of-yaml-anchors-and-aliases
 | 
						|
+  include:
 | 
						|
+    # debug builds
 | 
						|
+    - &linux
 | 
						|
+      stage: build
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: gcc-8, debug
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+      script:
 | 
						|
+        - sudo chmod -R a+rw ${CACHE_DIR}
 | 
						|
+        - ccache -s
 | 
						|
+        - travis_wait ${MAX_TIME_MIN} bin/ci/ubuntu/build-in-docker.sh
 | 
						|
+        - ccache -s
 | 
						|
+    - <<: *linux
 | 
						|
+      compiler: clang-8
 | 
						|
+      name: clang-8, debug
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+    - <<: *linux
 | 
						|
+      compiler: clang-8
 | 
						|
+      name: reporting, clang-8, debug
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - CMAKE_ADD="-Dreporting=ON"
 | 
						|
+    # coverage builds
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_cov/
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: coverage, gcc-8
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - CMAKE_ADD="-Dcoverage=ON"
 | 
						|
+        - TARGET=coverage_report
 | 
						|
+        - SKIP_TESTS=true
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_cov/
 | 
						|
+      compiler: clang-8
 | 
						|
+      name: coverage, clang-8
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - CMAKE_ADD="-Dcoverage=ON"
 | 
						|
+        - TARGET=coverage_report
 | 
						|
+        - SKIP_TESTS=true
 | 
						|
+    # test-free builds
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: no-tests-unity, gcc-8
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - CMAKE_ADD="-Dtests=OFF"
 | 
						|
+        - SKIP_TESTS=true
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/
 | 
						|
+      compiler: clang-8
 | 
						|
+      name: no-tests-non-unity, clang-8
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - CMAKE_ADD="-Dtests=OFF -Dunity=OFF"
 | 
						|
+        - SKIP_TESTS=true
 | 
						|
+    # nounity
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_nounity/
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: non-unity, gcc-8
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - CMAKE_ADD="-Dunity=OFF"
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_nounity/
 | 
						|
+      compiler: clang-8
 | 
						|
+      name: non-unity, clang-8
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - CMAKE_ADD="-Dunity=OFF"
 | 
						|
+    # manual tests
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_man/
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: manual tests, gcc-8, debug
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - MANUAL_TESTS=true
 | 
						|
+    # manual tests
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_man/
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: manual tests, gcc-8, release
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Release
 | 
						|
+        - CMAKE_ADD="-Dassert=ON -Dunity=OFF"
 | 
						|
+        - MANUAL_TESTS=true
 | 
						|
+    # release builds
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_release/
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: gcc-8, release
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Release
 | 
						|
+        - CMAKE_ADD="-Dassert=ON -Dunity=OFF"
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_release/
 | 
						|
+      compiler: clang-8
 | 
						|
+      name: clang-8, release
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
						|
+        - BUILD_TYPE=Release
 | 
						|
+        - CMAKE_ADD="-Dassert=ON"
 | 
						|
+    # asan
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_san/
 | 
						|
+      compiler: clang-8
 | 
						|
+      name: asan, clang-8
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
						|
+        - BUILD_TYPE=Release
 | 
						|
+        - CMAKE_ADD="-Dsan=address"
 | 
						|
+        - ASAN_OPTIONS="print_stats=true:atexit=true"
 | 
						|
+        #- LSAN_OPTIONS="verbosity=1:log_threads=1"
 | 
						|
+        - PARALLEL_TESTS=false
 | 
						|
+    # ubsan
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_san/
 | 
						|
+      compiler: clang-8
 | 
						|
+      name: ubsan, clang-8
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
						|
+        - BUILD_TYPE=Release
 | 
						|
+        - CMAKE_ADD="-Dsan=undefined"
 | 
						|
+        # once we can run clean under ubsan, add halt_on_error=1 to options below
 | 
						|
+        - UBSAN_OPTIONS="print_stacktrace=1:report_error_type=1"
 | 
						|
+        - PARALLEL_TESTS=false
 | 
						|
+    # tsan
 | 
						|
+    # current tsan failure *might* be related to:
 | 
						|
+    # https://github.com/google/sanitizers/issues/1104
 | 
						|
+    #  but we can't get it to run, so leave it disabled for now
 | 
						|
+    #    - <<: *linux
 | 
						|
+    #      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_san/
 | 
						|
+    #      compiler: clang-8
 | 
						|
+    #      name: tsan, clang-8
 | 
						|
+    #      env:
 | 
						|
+    #        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
						|
+    #        - BUILD_TYPE=Release
 | 
						|
+    #        - CMAKE_ADD="-Dsan=thread"
 | 
						|
+    #        - TSAN_OPTIONS="history_size=3 external_symbolizer_path=/usr/bin/llvm-symbolizer verbosity=1"
 | 
						|
+    #        - PARALLEL_TESTS=false
 | 
						|
+    # dynamic lib builds
 | 
						|
+    - <<: *linux
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: non-static, gcc-8
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - CMAKE_ADD="-Dstatic=OFF"
 | 
						|
+    - <<: *linux
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: non-static + BUILD_SHARED_LIBS, gcc-8
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - CMAKE_ADD="-Dstatic=OFF -DBUILD_SHARED_LIBS=ON"
 | 
						|
+    # makefile
 | 
						|
+    - <<: *linux
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: makefile generator, gcc-8
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - NINJA_BUILD=false
 | 
						|
+    # misc alternative compilers
 | 
						|
+    - <<: *linux
 | 
						|
+      compiler: gcc-9
 | 
						|
+      name: gcc-9
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-9 && CXX=g++-9"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+    - <<: *linux
 | 
						|
+      compiler: clang-9
 | 
						|
+      name: clang-9, debug
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=clang-9 && CXX=clang++-9"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+    - <<: *linux
 | 
						|
+      compiler: clang-9
 | 
						|
+      name: clang-9, release
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=clang-9 && CXX=clang++-9"
 | 
						|
+        - BUILD_TYPE=Release
 | 
						|
+    # verify build with min version of cmake
 | 
						|
+    - <<: *linux
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: min cmake version
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - CMAKE_EXE=/opt/local/cmake/bin/cmake
 | 
						|
+        - SKIP_TESTS=true
 | 
						|
+    # validator keys project as subproj of rippled
 | 
						|
+    - <<: *linux
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_vkeys/
 | 
						|
+      compiler: gcc-8
 | 
						|
+      name: validator-keys
 | 
						|
+      env:
 | 
						|
+        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
						|
+        - BUILD_TYPE=Debug
 | 
						|
+        - CMAKE_ADD="-Dvalidator_keys=ON"
 | 
						|
+        - TARGET=validator-keys
 | 
						|
+    # macos
 | 
						|
+    - &macos
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_mac/
 | 
						|
+      stage: build
 | 
						|
+      os: osx
 | 
						|
+      osx_image: xcode13.1
 | 
						|
+      name: xcode13.1, debug
 | 
						|
+      env:
 | 
						|
+        # put NIH in non-cache location since it seems to
 | 
						|
+        # cause failures when homebrew updates
 | 
						|
+        - NIH_CACHE_ROOT=${TRAVIS_BUILD_DIR}/nih_c
 | 
						|
+        - BLD_CONFIG=Debug
 | 
						|
+        - TEST_EXTRA_ARGS=""
 | 
						|
+        - BOOST_ROOT=${CACHE_DIR}/boost_1_75_0
 | 
						|
+        - >-
 | 
						|
+          CMAKE_ADD="
 | 
						|
+          -DBOOST_ROOT=${BOOST_ROOT}/_INSTALLED_
 | 
						|
+          -DBoost_ARCHITECTURE=-x64
 | 
						|
+          -DBoost_NO_SYSTEM_PATHS=ON
 | 
						|
+          -DCMAKE_VERBOSE_MAKEFILE=ON"
 | 
						|
+      addons:
 | 
						|
+        homebrew:
 | 
						|
+          packages:
 | 
						|
+            - protobuf
 | 
						|
+            - grpc
 | 
						|
+            - pkg-config
 | 
						|
+            - bash
 | 
						|
+            - ninja
 | 
						|
+            - cmake
 | 
						|
+            - wget
 | 
						|
+            - zstd
 | 
						|
+            - libarchive
 | 
						|
+            - openssl@1.1
 | 
						|
+          update: true
 | 
						|
+      install:
 | 
						|
+        - export OPENSSL_ROOT=$(brew --prefix openssl@1.1)
 | 
						|
+        - travis_wait ${MAX_TIME_MIN} Builds/containers/shared/install_boost.sh
 | 
						|
+        - brew uninstall --ignore-dependencies boost
 | 
						|
+      script:
 | 
						|
+        - mkdir -p build.macos && cd build.macos
 | 
						|
+        - cmake -G Ninja ${CMAKE_EXTRA_ARGS} -DCMAKE_BUILD_TYPE=${BLD_CONFIG} ..
 | 
						|
+        - travis_wait ${MAX_TIME_MIN} cmake --build . --parallel --verbose
 | 
						|
+        - ./rippled --unittest --quiet --unittest-log --unittest-jobs ${NUM_PROCESSORS} ${TEST_EXTRA_ARGS}
 | 
						|
+    - <<: *macos
 | 
						|
+      name: xcode13.1, release
 | 
						|
+      before_script:
 | 
						|
+        - export BLD_CONFIG=Release
 | 
						|
+        - export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -Dassert=ON"
 | 
						|
+    - <<: *macos
 | 
						|
+      name: ipv6 (macos)
 | 
						|
+      before_script:
 | 
						|
+        - export TEST_EXTRA_ARGS="--unittest-ipv6"
 | 
						|
+    - <<: *macos
 | 
						|
+      osx_image: xcode13.1
 | 
						|
+      name: xcode13.1, debug
 | 
						|
+    # windows
 | 
						|
+    - &windows
 | 
						|
+      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_win/
 | 
						|
+      os: windows
 | 
						|
+      env:
 | 
						|
+        # put NIH in a non-cached location until
 | 
						|
+        # we come up with a way to stabilize that
 | 
						|
+        # cache on windows (minimize incremental changes)
 | 
						|
+        - CACHE_NAME=win_01
 | 
						|
+        - NIH_CACHE_ROOT=${TRAVIS_BUILD_DIR}/nih_c
 | 
						|
+        - VCPKG_DEFAULT_TRIPLET="x64-windows-static"
 | 
						|
+        - MATRIX_EVAL="CC=cl.exe && CXX=cl.exe"
 | 
						|
+        - BOOST_ROOT=${CACHE_DIR}/boost_1_75
 | 
						|
+        - >-
 | 
						|
+          CMAKE_ADD="
 | 
						|
+          -DCMAKE_PREFIX_PATH=${BOOST_ROOT}/_INSTALLED_
 | 
						|
+          -DBOOST_ROOT=${BOOST_ROOT}/_INSTALLED_
 | 
						|
+          -DBoost_ROOT=${BOOST_ROOT}/_INSTALLED_
 | 
						|
+          -DBoost_DIR=${BOOST_ROOT}/_INSTALLED_/lib/cmake/Boost-1.75.0
 | 
						|
+          -DBoost_COMPILER=vc141
 | 
						|
+          -DCMAKE_VERBOSE_MAKEFILE=ON
 | 
						|
+          -DCMAKE_TOOLCHAIN_FILE=${VCPKG_DIR}/scripts/buildsystems/vcpkg.cmake
 | 
						|
+          -DVCPKG_TARGET_TRIPLET=x64-windows-static"
 | 
						|
+      stage: windep-vcpkg
 | 
						|
+      name: prereq-vcpkg
 | 
						|
+      install:
 | 
						|
+        - choco upgrade cmake.install
 | 
						|
+        - choco install ninja visualstudio2017-workload-vctools -y
 | 
						|
+      script:
 | 
						|
+        - df -h
 | 
						|
+        - env
 | 
						|
+        - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh openssl
 | 
						|
+        - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh grpc
 | 
						|
+        - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh libarchive[lz4]
 | 
						|
+        # TBD consider rocksdb via vcpkg if/when we can build with the
 | 
						|
+        # vcpkg version
 | 
						|
+        # - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh rocksdb[snappy,lz4,zlib]
 | 
						|
+    - <<: *windows
 | 
						|
+      stage: windep-boost
 | 
						|
+      name: prereq-keep-boost
 | 
						|
+      install:
 | 
						|
+        - choco upgrade cmake.install
 | 
						|
+        - choco install ninja visualstudio2017-workload-vctools -y
 | 
						|
+        - choco install visualstudio2019buildtools visualstudio2019community visualstudio2019-workload-vctools -y
 | 
						|
+      script:
 | 
						|
+        - export BOOST_TOOLSET=msvc-14.1
 | 
						|
+        - travis_wait ${MAX_TIME_MIN} Builds/containers/shared/install_boost.sh
 | 
						|
+    - &windows-bld
 | 
						|
+      <<: *windows
 | 
						|
+      stage: build
 | 
						|
+      name: windows, debug
 | 
						|
+      before_script:
 | 
						|
+        - export BLD_CONFIG=Debug
 | 
						|
+      script:
 | 
						|
+        - df -h
 | 
						|
+        - . ./bin/sh/setup-msvc.sh
 | 
						|
+        - mkdir -p build.ms && cd build.ms
 | 
						|
+        - cmake -G Ninja ${CMAKE_EXTRA_ARGS} -DCMAKE_BUILD_TYPE=${BLD_CONFIG} ..
 | 
						|
+        - travis_wait ${MAX_TIME_MIN} cmake --build . --parallel --verbose
 | 
						|
+        # override num procs to force fewer unit test jobs
 | 
						|
+        - export NUM_PROCESSORS=2
 | 
						|
+        - travis_wait ${MAX_TIME_MIN} ./rippled.exe --unittest --quiet --unittest-log --unittest-jobs ${NUM_PROCESSORS}
 | 
						|
+    - <<: *windows-bld
 | 
						|
+      name: windows, release
 | 
						|
+      before_script:
 | 
						|
+        - export BLD_CONFIG=Release
 | 
						|
+    - <<: *windows-bld
 | 
						|
+      name: windows, visual studio, debug
 | 
						|
+      script:
 | 
						|
+        - mkdir -p build.ms && cd build.ms
 | 
						|
+        - export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DCMAKE_GENERATOR_TOOLSET=host=x64"
 | 
						|
+        - cmake -G "Visual Studio 15 2017 Win64" ${CMAKE_EXTRA_ARGS} ..
 | 
						|
+        - export DESTDIR=${PWD}/_installed_
 | 
						|
+        - travis_wait ${MAX_TIME_MIN} cmake --build . --parallel --verbose --config ${BLD_CONFIG} --target install
 | 
						|
+        # override num procs to force fewer unit test jobs
 | 
						|
+        - export NUM_PROCESSORS=2
 | 
						|
+        - >-
 | 
						|
+          travis_wait ${MAX_TIME_MIN} "./_installed_/Program Files/rippled/bin/rippled.exe" --unittest --quiet --unittest-log --unittest-jobs ${NUM_PROCESSORS}
 | 
						|
+    - <<: *windows-bld
 | 
						|
+      name: windows, vc2019
 | 
						|
+      install:
 | 
						|
+        - choco upgrade cmake.install
 | 
						|
+        - choco install ninja -y
 | 
						|
+        - choco install visualstudio2019buildtools visualstudio2019community visualstudio2019-workload-vctools -y
 | 
						|
+      before_script:
 | 
						|
+        - export BLD_CONFIG=Release
 | 
						|
+        # we want to use the boost build from cache, which was built using the
 | 
						|
+        # vs2017 compiler so we need to specify the Boost_COMPILER. BUT, we
 | 
						|
+        # can't use the cmake config files generated by boost b/c they are
 | 
						|
+        # broken for Boost_COMPILER override, so we need to specify both
 | 
						|
+        # Boost_NO_BOOST_CMAKE and a slightly different Boost_COMPILER string
 | 
						|
+        # to make the legacy find module work for us. If the cmake configs are
 | 
						|
+        # fixed in the future, it should be possible to remove these
 | 
						|
+        # workarounds.
 | 
						|
+        - export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DBoost_NO_BOOST_CMAKE=ON -DBoost_COMPILER=-vc141"
 | 
						|
+
 | 
						|
+before_cache:
 | 
						|
+  - if [ $(uname) = "Linux" ] ; then SUDO="sudo"; else SUDO=""; fi
 | 
						|
+  - cd ${TRAVIS_HOME}
 | 
						|
+  - if [ -f cache_ignore.tar ] ; then $SUDO tar xvf cache_ignore.tar; fi
 | 
						|
+  - cd ${TRAVIS_BUILD_DIR}
 | 
						|
+
 | 
						|
+cache:
 | 
						|
+  timeout: 900
 | 
						|
+  directories:
 | 
						|
+    - $CACHE_DIR
 | 
						|
+
 | 
						|
+notifications:
 | 
						|
+  email: false
 | 
						|
diff --git a/BUILD.md b/BUILD.md
 | 
						|
deleted file mode 100644
 | 
						|
index 3a7283407..000000000
 | 
						|
--- a/BUILD.md
 | 
						|
+++ /dev/null
 | 
						|
@@ -1,318 +0,0 @@
 | 
						|
-## Branches
 | 
						|
-
 | 
						|
-For a stable release, choose the `master` branch or one of the [tagged
 | 
						|
-releases](https://github.com/ripple/rippled/releases).
 | 
						|
-
 | 
						|
-```
 | 
						|
-git checkout master
 | 
						|
-```
 | 
						|
-
 | 
						|
-For the latest release candidate, choose the `release` branch.
 | 
						|
-
 | 
						|
-```
 | 
						|
-git checkout release
 | 
						|
-```
 | 
						|
-
 | 
						|
-If you are contributing or want the latest set of untested features,
 | 
						|
-then use the `develop` branch.
 | 
						|
-
 | 
						|
-```
 | 
						|
-git checkout develop
 | 
						|
-```
 | 
						|
-
 | 
						|
-
 | 
						|
-## Platforms
 | 
						|
-
 | 
						|
-rippled is written in the C++20 dialect and includes the `<concepts>` header.
 | 
						|
-The [minimum compiler versions][2] that can compile this dialect are given
 | 
						|
-below:
 | 
						|
-
 | 
						|
-| Compiler | Minimum Version
 | 
						|
-|---|---
 | 
						|
-| GCC         | 10
 | 
						|
-| Clang       | 13
 | 
						|
-| Apple Clang | 13.1.6
 | 
						|
-| MSVC        | 19.23
 | 
						|
-
 | 
						|
-We do not recommend Windows for rippled production use at this time.
 | 
						|
-As of January 2023, the Ubuntu platform has received the highest level of
 | 
						|
-quality assurance, testing, and support.
 | 
						|
-Additionally, 32-bit Windows development is not supported.
 | 
						|
-
 | 
						|
-Visual Studio 2022 is not yet supported.
 | 
						|
-This is because rippled is not compatible with [Boost][] versions 1.78 or 1.79,
 | 
						|
-but Conan cannot build Boost versions released earlier than them with VS 2022.
 | 
						|
-We expect that rippled will be compatible with Boost 1.80, which should be
 | 
						|
-released in August 2022.
 | 
						|
-Until then, we advise Windows developers to use Visual Studio 2019.
 | 
						|
-
 | 
						|
-[Boost]: https://www.boost.org/
 | 
						|
-
 | 
						|
-
 | 
						|
-## Prerequisites
 | 
						|
-
 | 
						|
-> **Warning**
 | 
						|
-> These instructions assume you have a C++ development environment ready
 | 
						|
-> with Git, Python, Conan, CMake, and a C++ compiler.
 | 
						|
-> For help setting one up on Linux, macOS, or Windows,
 | 
						|
-> please see [our guide](./docs/build/environment.md).
 | 
						|
->
 | 
						|
-> These instructions further assume a basic familiarity with Conan and CMake.
 | 
						|
-> If you are unfamiliar with Conan,
 | 
						|
-> then please read our [crash course](./docs/build/conan.md)
 | 
						|
-> or the official [Getting Started][3] walkthrough.
 | 
						|
-
 | 
						|
-To build this package, you will need Python (>= 3.7),
 | 
						|
-[Conan][] (>= 1.55, < 2), and [CMake][] (>= 3.16).
 | 
						|
-
 | 
						|
-[Conan]: https://conan.io/downloads.html
 | 
						|
-[CMake]: https://cmake.org/download/
 | 
						|
-
 | 
						|
-You'll need at least one Conan profile:
 | 
						|
-
 | 
						|
-```
 | 
						|
-conan profile new default --detect
 | 
						|
-```
 | 
						|
-
 | 
						|
-You'll need to compile in the C++20 dialect:
 | 
						|
-
 | 
						|
-```
 | 
						|
-conan profile update settings.compiler.cppstd=20 default
 | 
						|
-```
 | 
						|
-
 | 
						|
-Linux developers will commonly have a default Conan [profile][] that compiles
 | 
						|
-with GCC and links with libstdc++.
 | 
						|
-If you are linking with libstdc++ (see profile setting `compiler.libcxx`),
 | 
						|
-then you will need to choose the `libstdc++11` ABI:
 | 
						|
-
 | 
						|
-```
 | 
						|
-conan profile update settings.compiler.libcxx=libstdc++11 default
 | 
						|
-```
 | 
						|
-
 | 
						|
-We find it necessary to use the x64 native build tools on Windows.
 | 
						|
-An easy way to do that is to run the shortcut "x64 Native Tools Command
 | 
						|
-Prompt" for the version of Visual Studio that you have installed.
 | 
						|
-
 | 
						|
-Windows developers must build rippled and its dependencies for the x64
 | 
						|
-architecture:
 | 
						|
-
 | 
						|
-```
 | 
						|
-conan profile update settings.arch=x86_64 default
 | 
						|
-```
 | 
						|
-
 | 
						|
-If you have multiple compilers installed on your platform,
 | 
						|
-then you'll need to make sure that Conan and CMake select the one you want to
 | 
						|
-use.
 | 
						|
-This setting will set the correct variables (`CMAKE_<LANG>_COMPILER`) in the
 | 
						|
-generated CMake toolchain file:
 | 
						|
-
 | 
						|
-```
 | 
						|
-conan profile update 'conf.tools.build:compiler_executables={"c": "<path>", "cpp": "<path>"}' default
 | 
						|
-```
 | 
						|
-
 | 
						|
-It should choose the compiler for dependencies as well,
 | 
						|
-but not all of them have a Conan recipe that respects this setting (yet).
 | 
						|
-For the rest, you can set these environment variables:
 | 
						|
-
 | 
						|
-```
 | 
						|
-conan profile update env.CC=<path> default
 | 
						|
-conan profile update env.CXX=<path> default
 | 
						|
-```
 | 
						|
-
 | 
						|
-Export our [Conan recipe for Snappy](./external/snappy).
 | 
						|
-It does not explicitly link the C++ standard library,
 | 
						|
-which allows you to statically link it with GCC, if you want.
 | 
						|
-
 | 
						|
-```
 | 
						|
-conan export external/snappy snappy/1.1.9@
 | 
						|
-```
 | 
						|
-
 | 
						|
-## How to build and test
 | 
						|
-
 | 
						|
-Let's start with a couple of examples of common workflows.
 | 
						|
-The first is for a single-configuration generator (e.g. Unix Makefiles) on
 | 
						|
-Linux or macOS:
 | 
						|
-
 | 
						|
-```
 | 
						|
-mkdir .build
 | 
						|
-cd .build
 | 
						|
-conan install .. --output-folder . --build missing --settings build_type=Release
 | 
						|
-cmake -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release ..
 | 
						|
-cmake --build .
 | 
						|
-./rippled --unittest
 | 
						|
-```
 | 
						|
-
 | 
						|
-The second is for a multi-configuration generator (e.g. Visual Studio) on
 | 
						|
-Windows:
 | 
						|
-
 | 
						|
-```
 | 
						|
-mkdir .build
 | 
						|
-cd .build
 | 
						|
-conan install .. --output-folder . --build missing --settings build_type=Release --settings compiler.runtime=MT
 | 
						|
-conan install .. --output-folder . --build missing --settings build_type=Debug --settings compiler.runtime=MTd
 | 
						|
-cmake -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake ..
 | 
						|
-cmake --build . --config Release
 | 
						|
-cmake --build . --config Debug
 | 
						|
-./Release/rippled --unittest
 | 
						|
-./Debug/rippled --unittest
 | 
						|
-```
 | 
						|
-
 | 
						|
-Now to explain the individual steps in each example:
 | 
						|
-
 | 
						|
-1. Create a build directory (and move into it).
 | 
						|
-
 | 
						|
-    You can choose any name you want.
 | 
						|
-
 | 
						|
-    Conan will generate some files in what it calls the "install folder".
 | 
						|
-    These files are implementation details that you don't need to worry about.
 | 
						|
-    By default, the install folder is your current working directory.
 | 
						|
-    If you don't move into your build directory before calling Conan,
 | 
						|
-    then you may be annoyed to see it polluting your project root directory
 | 
						|
-    with these files.
 | 
						|
-    To make Conan put them in your build directory,
 | 
						|
-    you'll have to add the option
 | 
						|
-    `--install-folder` or `-if` to every `conan install` command.
 | 
						|
-
 | 
						|
-1. Generate CMake files for every configuration you want to build.
 | 
						|
-
 | 
						|
-    For a single-configuration generator, e.g. `Unix Makefiles` or `Ninja`,
 | 
						|
-    you only need to run this command once.
 | 
						|
-    For a multi-configuration generator, e.g. `Visual Studio`, you may want to
 | 
						|
-    run it more than once.
 | 
						|
-
 | 
						|
-    Each of these commands should have a different `build_type` setting.
 | 
						|
-    A second command with the same `build_type` setting will just overwrite
 | 
						|
-    the files generated by the first.
 | 
						|
-    You can pass the build type on the command line with `--settings
 | 
						|
-    build_type=$BUILD_TYPE` or in the profile itself, under the section
 | 
						|
-    `[settings]`, with the key `build_type`.
 | 
						|
-
 | 
						|
-    If you are using a Microsoft Visual C++ compiler, then you will need to
 | 
						|
-    ensure consistency between the `build_type` setting and the
 | 
						|
-    `compiler.runtime` setting.
 | 
						|
-    When `build_type` is `Release`, `compiler.runtime` should be `MT`.
 | 
						|
-    When `build_type` is `Debug`, `compiler.runtime` should be `MTd`.
 | 
						|
-
 | 
						|
-1. Configure CMake once.
 | 
						|
-
 | 
						|
-    For all choices of generator, pass the toolchain file generated by Conan.
 | 
						|
-    It will be located at
 | 
						|
-    `$OUTPUT_FOLDER/build/generators/conan_toolchain.cmake`.
 | 
						|
-    If you are using a single-configuration generator, then pass the CMake
 | 
						|
-    variable [`CMAKE_BUILD_TYPE`][build_type] and make sure it matches the
 | 
						|
-    `build_type` setting you chose in the previous step.
 | 
						|
-
 | 
						|
-    This step is where you may pass build options for rippled.
 | 
						|
-
 | 
						|
-1. Build rippled.
 | 
						|
-
 | 
						|
-    For a multi-configuration generator, you must pass the option `--config`
 | 
						|
-    to select the build configuration.
 | 
						|
-    For a single-configuration generator, it will build whatever configuration
 | 
						|
-    you passed for `CMAKE_BUILD_TYPE`.
 | 
						|
-
 | 
						|
-1. Test rippled.
 | 
						|
-
 | 
						|
-    The exact location of rippled in your build directory
 | 
						|
-    depends on your choice of CMake generator.
 | 
						|
-    You can run unit tests by passing `--unittest`.
 | 
						|
-    Pass `--help` to see the rest of the command line options.
 | 
						|
-
 | 
						|
-
 | 
						|
-### Options
 | 
						|
-
 | 
						|
-The `unity` option allows you to select between [unity][5] and non-unity
 | 
						|
-builds.
 | 
						|
-Unity builds may be faster for the first build (at the cost of much
 | 
						|
-more memory) since they concatenate sources into fewer translation
 | 
						|
-units.
 | 
						|
-Non-unity builds may be faster for incremental builds, and can be helpful for
 | 
						|
-detecting `#include` omissions.
 | 
						|
-
 | 
						|
-Below are the most commonly used options,
 | 
						|
-with their default values in parentheses.
 | 
						|
-
 | 
						|
-- `assert` (OFF): Enable assertions.
 | 
						|
-- `reporting` (OFF): Build the reporting mode feature.
 | 
						|
-- `tests` (ON): Build tests.
 | 
						|
-- `unity` (ON): Configure a [unity build][5].
 | 
						|
-- `san` (): Enable a sanitizer with Clang. Choices are `thread` and `address`.
 | 
						|
-
 | 
						|
-
 | 
						|
-### Troubleshooting
 | 
						|
-
 | 
						|
-#### Conan
 | 
						|
-
 | 
						|
-If you find trouble building dependencies after changing Conan settings,
 | 
						|
-then you should retry after removing the Conan cache:
 | 
						|
-
 | 
						|
-```
 | 
						|
-rm -rf ~/.conan/data
 | 
						|
-```
 | 
						|
-
 | 
						|
-
 | 
						|
-#### no std::result_of
 | 
						|
-
 | 
						|
-If your compiler version is recent enough to have removed `std::result_of` as
 | 
						|
-part of C++20, e.g. Apple Clang 15.0,
 | 
						|
-then you might need to add a preprocessor definition to your bulid:
 | 
						|
-
 | 
						|
-```
 | 
						|
-conan profile update 'env.CFLAGS="-DBOOST_ASIO_HAS_STD_INVOKE_RESULT"' default
 | 
						|
-conan profile update 'env.CXXFLAGS="-DBOOST_ASIO_HAS_STD_INVOKE_RESULT"' default
 | 
						|
-conan profile update 'tools.build:cflags+=["-DBOOST_ASIO_HAS_STD_INVOKE_RESULT"]' default
 | 
						|
-conan profile update 'tools.build:cxxflags+=["-DBOOST_ASIO_HAS_STD_INVOKE_RESULT"]' default
 | 
						|
-```
 | 
						|
-
 | 
						|
-
 | 
						|
-#### recompile with -fPIC
 | 
						|
-
 | 
						|
-```
 | 
						|
-/usr/bin/ld.gold: error: /home/username/.conan/data/boost/1.77.0/_/_/package/.../lib/libboost_container.a(alloc_lib.o):
 | 
						|
-  requires unsupported dynamic reloc 11; recompile with -fPIC
 | 
						|
-```
 | 
						|
-
 | 
						|
-If you get a linker error like the one above suggesting that you recompile
 | 
						|
-Boost with position-independent code, the reason is most likely that Conan
 | 
						|
-downloaded a bad binary distribution of the dependency.
 | 
						|
-For now, this seems to be a [bug][1] in Conan just for Boost 1.77.0 compiled
 | 
						|
-with GCC for Linux.
 | 
						|
-The solution is to build the dependency locally by passing `--build boost`
 | 
						|
-when calling `conan install`:
 | 
						|
-
 | 
						|
-```
 | 
						|
-conan install --build boost ...
 | 
						|
-```
 | 
						|
-
 | 
						|
-
 | 
						|
-## How to add a dependency
 | 
						|
-
 | 
						|
-If you want to experiment with a new package, here are the steps to get it
 | 
						|
-working:
 | 
						|
-
 | 
						|
-1. Search for the package on [Conan Center](https://conan.io/center/).
 | 
						|
-1. In [`conanfile.py`](./conanfile.py):
 | 
						|
-    1. Add a version of the package to the `requires` property.
 | 
						|
-    1. Change any default options for the package by adding them to the
 | 
						|
-    `default_options` property (with syntax `'$package:$option': $value`)
 | 
						|
-1. In [`CMakeLists.txt`](./CMakeLists.txt):
 | 
						|
-    1. Add a call to `find_package($package REQUIRED)`.
 | 
						|
-    1. Link a library from the package to the target `ripple_libs` (search for
 | 
						|
-    the existing call to `target_link_libraries(ripple_libs INTERFACE ...)`).
 | 
						|
-1. Start coding! Don't forget to include whatever headers you need from the
 | 
						|
-   package.
 | 
						|
-
 | 
						|
-
 | 
						|
-[1]: https://github.com/conan-io/conan-center-index/issues/13168
 | 
						|
-[2]: https://en.cppreference.com/w/cpp/compiler_support/20
 | 
						|
-[3]: https://docs.conan.io/en/latest/getting_started.html
 | 
						|
-[5]: https://en.wikipedia.org/wiki/Unity_build
 | 
						|
-[build_type]: https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
 | 
						|
-[runtime]: https://cmake.org/cmake/help/latest/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html
 | 
						|
-[toolchain]: https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html
 | 
						|
-[pcf]: https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#package-configuration-file
 | 
						|
-[pvf]: https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#package-version-file
 | 
						|
-[find_package]: https://cmake.org/cmake/help/latest/command/find_package.html
 | 
						|
-[search]: https://cmake.org/cmake/help/latest/command/find_package.html#search-procedure
 | 
						|
-[prefix_path]: https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html
 | 
						|
-[profile]: https://docs.conan.io/en/latest/reference/profiles.html
 | 
						|
diff --git a/Builds/CMake/FindRocksDB.cmake b/Builds/CMake/FindRocksDB.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..e0d35706b
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/FindRocksDB.cmake
 | 
						|
@@ -0,0 +1,62 @@
 | 
						|
+set (RocksDB_DIR "" CACHE PATH "Root directory of RocksDB distribution")
 | 
						|
+
 | 
						|
+find_path (RocksDB_INCLUDE_DIR
 | 
						|
+    rocksdb/db.h
 | 
						|
+    PATHS ${RocksDB_DIR})
 | 
						|
+
 | 
						|
+set (RocksDB_VERSION "")
 | 
						|
+find_file (RocksDB_VERSION_FILE
 | 
						|
+    rocksdb/version.h
 | 
						|
+    PATHS ${RocksDB_DIR})
 | 
						|
+if (RocksDB_VERSION_FILE)
 | 
						|
+    file (READ ${RocksDB_VERSION_FILE} _verfile)
 | 
						|
+    if ("${_verfile}" MATCHES "#define[ \\t]+ROCKSDB_MAJOR[ \\t]+([0-9]+)")
 | 
						|
+        string (APPEND RocksDB_VERSION "${CMAKE_MATCH_1}")
 | 
						|
+    else ()
 | 
						|
+        string (APPEND RocksDB_VERSION "0")
 | 
						|
+    endif()
 | 
						|
+    if ("${_verfile}" MATCHES "#define[ \\t]+ROCKSDB_MINOR[ \\t]+([0-9]+)")
 | 
						|
+        string (APPEND RocksDB_VERSION ".${CMAKE_MATCH_1}")
 | 
						|
+    else ()
 | 
						|
+        string (APPEND RocksDB_VERSION ".0")
 | 
						|
+    endif()
 | 
						|
+    if ("${_verfile}" MATCHES "#define[ \\t]+ROCKSDB_PATCH[ \\t]+([0-9]+)")
 | 
						|
+        string (APPEND RocksDB_VERSION ".${CMAKE_MATCH_1}")
 | 
						|
+    else ()
 | 
						|
+        string (APPEND RocksDB_VERSION ".0")
 | 
						|
+    endif()
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+if (RocksDB_USE_STATIC)
 | 
						|
+    list (APPEND RocksDB_NAMES
 | 
						|
+        "${CMAKE_STATIC_LIBRARY_PREFIX}rocksdb${CMAKE_STATIC_LIBRARY_SUFFIX}"
 | 
						|
+        "${CMAKE_STATIC_LIBRARY_PREFIX}rocksdblib${CMAKE_STATIC_LIBRARY_SUFFIX}")
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+list (APPEND RocksDB_NAMES rocksdb)
 | 
						|
+
 | 
						|
+find_library (RocksDB_LIBRARY NAMES ${RocksDB_NAMES}
 | 
						|
+    PATHS
 | 
						|
+    ${RocksDB_DIR}
 | 
						|
+    ${RocksDB_DIR}/bin/Release
 | 
						|
+    ${RocksDB_DIR}/bin64_vs2013/Release
 | 
						|
+    PATH_SUFFIXES lib lib64)
 | 
						|
+
 | 
						|
+foreach (_n RocksDB_NAMES)
 | 
						|
+    list (APPEND RocksDB_NAMES_DBG "${_n}_d" "${_n}d")
 | 
						|
+endforeach ()
 | 
						|
+find_library (RocksDB_LIBRARY_DEBUG NAMES ${RocksDB_NAMES_DBG}
 | 
						|
+    PATHS
 | 
						|
+    ${RocksDB_DIR}
 | 
						|
+    ${RocksDB_DIR}/bin/Debug
 | 
						|
+    ${RocksDB_DIR}/bin64_vs2013/Debug
 | 
						|
+    PATH_SUFFIXES lib lib64)
 | 
						|
+
 | 
						|
+include (FindPackageHandleStandardArgs)
 | 
						|
+find_package_handle_standard_args (RocksDB
 | 
						|
+    REQUIRED_VARS RocksDB_LIBRARY RocksDB_INCLUDE_DIR
 | 
						|
+    VERSION_VAR RocksDB_VERSION)
 | 
						|
+
 | 
						|
+mark_as_advanced (RocksDB_INCLUDE_DIR RocksDB_LIBRARY)
 | 
						|
+set (RocksDB_INCLUDE_DIRS ${RocksDB_INCLUDE_DIR})
 | 
						|
+set (RocksDB_LIBRARIES ${RocksDB_LIBRARY})
 | 
						|
diff --git a/Builds/CMake/README.md b/Builds/CMake/README.md
 | 
						|
new file mode 100644
 | 
						|
index 000000000..77d6813b6
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/README.md
 | 
						|
@@ -0,0 +1,18 @@
 | 
						|
+
 | 
						|
+These are modules and sources that support our CMake build.
 | 
						|
+
 | 
						|
+== FindBoost.cmake ==
 | 
						|
+
 | 
						|
+In order to facilitate updating to latest releases of boost, we've made a local
 | 
						|
+copy of the FindBoost cmake module in our repo. The latest official version can
 | 
						|
+generally be obtained
 | 
						|
+[here](https://github.com/Kitware/CMake/blob/master/Modules/FindBoost.cmake).
 | 
						|
+
 | 
						|
+The latest version provided by Kitware can be tailored for use with the
 | 
						|
+version of CMake that it ships with (typically the next upcoming CMake
 | 
						|
+release). As such, the latest version from the repository might not work
 | 
						|
+perfectly with older versions of CMake - for instance, the latest version 
 | 
						|
+might use features or properties only available in the version of CMake that 
 | 
						|
+it ships with. Given this, it's best to test any updates to this module with a few 
 | 
						|
+different versions of cmake.
 | 
						|
+
 | 
						|
diff --git a/Builds/CMake/RippledCore.cmake b/Builds/CMake/RippledCore.cmake
 | 
						|
index 4d21a74d6..dadb2f4f7 100644
 | 
						|
--- a/Builds/CMake/RippledCore.cmake
 | 
						|
+++ b/Builds/CMake/RippledCore.cmake
 | 
						|
@@ -13,10 +13,6 @@ if (unity)
 | 
						|
   set_target_properties(xrpl_core PROPERTIES UNITY_BUILD ON)
 | 
						|
 endif ()
 | 
						|
 
 | 
						|
-add_library(libxrpl INTERFACE)
 | 
						|
-target_link_libraries(libxrpl INTERFACE xrpl_core)
 | 
						|
-add_library(xrpl::libxrpl ALIAS libxrpl)
 | 
						|
-
 | 
						|
 
 | 
						|
 #[===============================[
 | 
						|
     beast/legacy FILES:
 | 
						|
@@ -141,8 +137,8 @@ target_link_libraries (xrpl_core
 | 
						|
     Ripple::boost
 | 
						|
     NIH::WasmEdge
 | 
						|
     Ripple::syslibs
 | 
						|
-    secp256k1::secp256k1
 | 
						|
-    ed25519::ed25519
 | 
						|
+    NIH::secp256k1
 | 
						|
+    NIH::ed25519-donna
 | 
						|
     date::date
 | 
						|
     Ripple::opts)
 | 
						|
 #[=================================[
 | 
						|
diff --git a/Builds/CMake/RippledDocs.cmake b/Builds/CMake/RippledDocs.cmake
 | 
						|
index e7c42942a..6cb8f730d 100644
 | 
						|
--- a/Builds/CMake/RippledDocs.cmake
 | 
						|
+++ b/Builds/CMake/RippledDocs.cmake
 | 
						|
@@ -1,84 +1,79 @@
 | 
						|
 #[===================================================================[
 | 
						|
    docs target (optional)
 | 
						|
 #]===================================================================]
 | 
						|
-
 | 
						|
-option(with_docs "Include the docs target?" FALSE)
 | 
						|
-
 | 
						|
-if(NOT (with_docs OR only_docs))
 | 
						|
-  return()
 | 
						|
-endif()
 | 
						|
-
 | 
						|
-find_package(Doxygen)
 | 
						|
-if(NOT TARGET Doxygen::doxygen)
 | 
						|
-  message(STATUS "doxygen executable not found -- skipping docs target")
 | 
						|
-  return()
 | 
						|
-endif()
 | 
						|
-
 | 
						|
-set(doxygen_output_directory "${CMAKE_BINARY_DIR}/docs")
 | 
						|
-set(doxygen_include_path "${CMAKE_CURRENT_SOURCE_DIR}/src")
 | 
						|
-set(doxygen_index_file "${doxygen_output_directory}/html/index.html")
 | 
						|
-set(doxyfile "${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile")
 | 
						|
-
 | 
						|
-file(GLOB_RECURSE doxygen_input
 | 
						|
-  docs/*.md
 | 
						|
-  src/ripple/*.h
 | 
						|
-  src/ripple/*.cpp
 | 
						|
-  src/ripple/*.md
 | 
						|
-  src/test/*.h
 | 
						|
-  src/test/*.md
 | 
						|
-  Builds/*/README.md)
 | 
						|
-list(APPEND doxygen_input
 | 
						|
-  README.md
 | 
						|
-  RELEASENOTES.md
 | 
						|
-  src/README.md)
 | 
						|
-set(dependencies "${doxygen_input}" "${doxyfile}")
 | 
						|
-
 | 
						|
-function(verbose_find_path variable name)
 | 
						|
-  # find_path sets a CACHE variable, so don't try using a "local" variable.
 | 
						|
-  find_path(${variable} "${name}" ${ARGN})
 | 
						|
-  if(NOT ${variable})
 | 
						|
-    message(NOTICE "could not find ${name}")
 | 
						|
-  else()
 | 
						|
-    message(STATUS "found ${name}: ${${variable}}/${name}")
 | 
						|
-  endif()
 | 
						|
-endfunction()
 | 
						|
-
 | 
						|
-verbose_find_path(doxygen_plantuml_jar_path plantuml.jar PATH_SUFFIXES share/plantuml)
 | 
						|
-verbose_find_path(doxygen_dot_path dot)
 | 
						|
-
 | 
						|
-# https://en.cppreference.com/w/Cppreference:Archives
 | 
						|
-# https://stackoverflow.com/questions/60822559/how-to-move-a-file-download-from-configure-step-to-build-step
 | 
						|
-set(download_script "${CMAKE_BINARY_DIR}/docs/download-cppreference.cmake")
 | 
						|
-file(WRITE
 | 
						|
-  "${download_script}"
 | 
						|
-  "file(DOWNLOAD \
 | 
						|
-    http://upload.cppreference.com/mwiki/images/b/b2/html_book_20190607.zip \
 | 
						|
-    ${CMAKE_BINARY_DIR}/docs/cppreference.zip \
 | 
						|
-    EXPECTED_HASH MD5=82b3a612d7d35a83e3cb1195a63689ab \
 | 
						|
-  )\n \
 | 
						|
-  execute_process( \
 | 
						|
-    COMMAND \"${CMAKE_COMMAND}\" -E tar -xf cppreference.zip \
 | 
						|
-  )\n"
 | 
						|
-)
 | 
						|
-set(tagfile "${CMAKE_BINARY_DIR}/docs/cppreference-doxygen-web.tag.xml")
 | 
						|
-add_custom_command(
 | 
						|
-  OUTPUT "${tagfile}"
 | 
						|
-  COMMAND "${CMAKE_COMMAND}" -P "${download_script}"
 | 
						|
-  WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/docs"
 | 
						|
-)
 | 
						|
-set(doxygen_tagfiles "${tagfile}=http://en.cppreference.com/w/")
 | 
						|
-
 | 
						|
-add_custom_command(
 | 
						|
-  OUTPUT "${doxygen_index_file}"
 | 
						|
-  COMMAND "${CMAKE_COMMAND}" -E env
 | 
						|
-    "DOXYGEN_OUTPUT_DIRECTORY=${doxygen_output_directory}"
 | 
						|
-    "DOXYGEN_INCLUDE_PATH=${doxygen_include_path}"
 | 
						|
-    "DOXYGEN_TAGFILES=${doxygen_tagfiles}"
 | 
						|
-    "DOXYGEN_PLANTUML_JAR_PATH=${doxygen_plantuml_jar_path}"
 | 
						|
-    "DOXYGEN_DOT_PATH=${doxygen_dot_path}"
 | 
						|
-    "${DOXYGEN_EXECUTABLE}" "${doxyfile}"
 | 
						|
-  WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
 | 
						|
-  DEPENDS "${dependencies}" "${tagfile}")
 | 
						|
-add_custom_target(docs
 | 
						|
-  DEPENDS "${doxygen_index_file}"
 | 
						|
-  SOURCES "${dependencies}")
 | 
						|
+if (tests)
 | 
						|
+  find_package (Doxygen)
 | 
						|
+  if (NOT TARGET Doxygen::doxygen)
 | 
						|
+    message (STATUS "doxygen executable not found -- skipping docs target")
 | 
						|
+    return ()
 | 
						|
+  endif ()
 | 
						|
+  
 | 
						|
+  set (doxygen_output_directory "${CMAKE_BINARY_DIR}/docs")
 | 
						|
+  set (doxygen_include_path "${CMAKE_CURRENT_SOURCE_DIR}/src")
 | 
						|
+  set (doxygen_index_file "${doxygen_output_directory}/html/index.html")
 | 
						|
+  set (doxyfile "${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile")
 | 
						|
+  
 | 
						|
+  file (GLOB_RECURSE doxygen_input
 | 
						|
+    docs/*.md
 | 
						|
+    src/ripple/*.h
 | 
						|
+    src/ripple/*.cpp
 | 
						|
+    src/ripple/*.md
 | 
						|
+    src/test/*.h
 | 
						|
+    src/test/*.md
 | 
						|
+    Builds/*/README.md)
 | 
						|
+  list (APPEND doxygen_input
 | 
						|
+    README.md
 | 
						|
+    RELEASENOTES.md
 | 
						|
+    src/README.md)
 | 
						|
+  set (dependencies "${doxygen_input}" "${doxyfile}")
 | 
						|
+  
 | 
						|
+  function (verbose_find_path variable name)
 | 
						|
+    # find_path sets a CACHE variable, so don't try using a "local" variable.
 | 
						|
+    find_path (${variable} "${name}" ${ARGN})
 | 
						|
+    if (NOT ${variable})
 | 
						|
+      message (NOTICE "could not find ${name}")
 | 
						|
+    else ()
 | 
						|
+      message (STATUS "found ${name}: ${${variable}}/${name}")
 | 
						|
+    endif ()
 | 
						|
+  endfunction ()
 | 
						|
+  
 | 
						|
+  verbose_find_path (doxygen_plantuml_jar_path plantuml.jar PATH_SUFFIXES share/plantuml)
 | 
						|
+  verbose_find_path (doxygen_dot_path dot)
 | 
						|
+  
 | 
						|
+  # https://en.cppreference.com/w/Cppreference:Archives
 | 
						|
+  # https://stackoverflow.com/questions/60822559/how-to-move-a-file-download-from-configure-step-to-build-step
 | 
						|
+  set (download_script "${CMAKE_BINARY_DIR}/docs/download-cppreference.cmake")
 | 
						|
+  file (WRITE
 | 
						|
+    "${download_script}"
 | 
						|
+    "file (DOWNLOAD \
 | 
						|
+      http://upload.cppreference.com/mwiki/images/b/b2/html_book_20190607.zip \
 | 
						|
+      ${CMAKE_BINARY_DIR}/docs/cppreference.zip \
 | 
						|
+      EXPECTED_HASH MD5=82b3a612d7d35a83e3cb1195a63689ab \
 | 
						|
+    )\n \
 | 
						|
+    execute_process ( \
 | 
						|
+      COMMAND \"${CMAKE_COMMAND}\" -E tar -xf cppreference.zip \
 | 
						|
+    )\n"
 | 
						|
+  )
 | 
						|
+  set (tagfile "${CMAKE_BINARY_DIR}/docs/cppreference-doxygen-web.tag.xml")
 | 
						|
+  add_custom_command (
 | 
						|
+    OUTPUT "${tagfile}"
 | 
						|
+    COMMAND "${CMAKE_COMMAND}" -P "${download_script}"
 | 
						|
+    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/docs"
 | 
						|
+  )
 | 
						|
+  set (doxygen_tagfiles "${tagfile}=http://en.cppreference.com/w/")
 | 
						|
+  
 | 
						|
+  add_custom_command (
 | 
						|
+    OUTPUT "${doxygen_index_file}"
 | 
						|
+    COMMAND "${CMAKE_COMMAND}" -E env
 | 
						|
+      "DOXYGEN_OUTPUT_DIRECTORY=${doxygen_output_directory}"
 | 
						|
+      "DOXYGEN_INCLUDE_PATH=${doxygen_include_path}"
 | 
						|
+      "DOXYGEN_TAGFILES=${doxygen_tagfiles}"
 | 
						|
+      "DOXYGEN_PLANTUML_JAR_PATH=${doxygen_plantuml_jar_path}"
 | 
						|
+      "DOXYGEN_DOT_PATH=${doxygen_dot_path}"
 | 
						|
+      "${DOXYGEN_EXECUTABLE}" "${doxyfile}"
 | 
						|
+    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
 | 
						|
+    DEPENDS "${dependencies}" "${tagfile}")
 | 
						|
+  add_custom_target (docs
 | 
						|
+    DEPENDS "${doxygen_index_file}"
 | 
						|
+    SOURCES "${dependencies}")
 | 
						|
+endif ()
 | 
						|
diff --git a/Builds/CMake/RippledInstall.cmake b/Builds/CMake/RippledInstall.cmake
 | 
						|
index eef90c146..3cdeca9e6 100644
 | 
						|
--- a/Builds/CMake/RippledInstall.cmake
 | 
						|
+++ b/Builds/CMake/RippledInstall.cmake
 | 
						|
@@ -4,6 +4,7 @@
 | 
						|
 
 | 
						|
 install (
 | 
						|
   TARGETS
 | 
						|
+    ed25519-donna
 | 
						|
     common
 | 
						|
     opts
 | 
						|
     ripple_syslibs
 | 
						|
@@ -15,6 +16,17 @@ install (
 | 
						|
   RUNTIME DESTINATION bin
 | 
						|
   INCLUDES DESTINATION include)
 | 
						|
 
 | 
						|
+if(${INSTALL_SECP256K1})
 | 
						|
+install (
 | 
						|
+  TARGETS
 | 
						|
+    secp256k1
 | 
						|
+  EXPORT RippleExports
 | 
						|
+  LIBRARY DESTINATION lib
 | 
						|
+  ARCHIVE DESTINATION lib
 | 
						|
+  RUNTIME DESTINATION bin
 | 
						|
+  INCLUDES DESTINATION include)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
 install (EXPORT RippleExports
 | 
						|
   FILE RippleTargets.cmake
 | 
						|
   NAMESPACE Ripple::
 | 
						|
diff --git a/Builds/CMake/RippledInterface.cmake b/Builds/CMake/RippledInterface.cmake
 | 
						|
index dfb57a52f..28a531246 100644
 | 
						|
--- a/Builds/CMake/RippledInterface.cmake
 | 
						|
+++ b/Builds/CMake/RippledInterface.cmake
 | 
						|
@@ -35,10 +35,17 @@ target_link_libraries (opts
 | 
						|
     $<$<BOOL:${profile}>:-pg>
 | 
						|
     $<$<AND:$<BOOL:${is_gcc}>,$<BOOL:${profile}>>:-p>)
 | 
						|
 
 | 
						|
-if(jemalloc)
 | 
						|
-  find_package(jemalloc REQUIRED)
 | 
						|
-  target_compile_definitions(opts INTERFACE PROFILE_JEMALLOC)
 | 
						|
-  target_link_libraries(opts INTERFACE jemalloc::jemalloc)
 | 
						|
+if (jemalloc)
 | 
						|
+  if (static)
 | 
						|
+    set(JEMALLOC_USE_STATIC ON CACHE BOOL "" FORCE)
 | 
						|
+  endif ()
 | 
						|
+  find_package (jemalloc REQUIRED)
 | 
						|
+  target_compile_definitions (opts INTERFACE PROFILE_JEMALLOC)
 | 
						|
+  target_include_directories (opts SYSTEM INTERFACE ${JEMALLOC_INCLUDE_DIRS})
 | 
						|
+  target_link_libraries (opts INTERFACE ${JEMALLOC_LIBRARIES})
 | 
						|
+  get_filename_component (JEMALLOC_LIB_PATH ${JEMALLOC_LIBRARIES} DIRECTORY)
 | 
						|
+  ## TODO see if we can use the BUILD_RPATH target property (is it transitive?)
 | 
						|
+  set (CMAKE_BUILD_RPATH ${CMAKE_BUILD_RPATH} ${JEMALLOC_LIB_PATH})
 | 
						|
 endif ()
 | 
						|
 
 | 
						|
 if (san)
 | 
						|
diff --git a/Builds/CMake/RippledMultiConfig.cmake b/Builds/CMake/RippledMultiConfig.cmake
 | 
						|
index ae9b182a3..3bc500b53 100644
 | 
						|
--- a/Builds/CMake/RippledMultiConfig.cmake
 | 
						|
+++ b/Builds/CMake/RippledMultiConfig.cmake
 | 
						|
@@ -14,7 +14,7 @@ if (is_multiconfig)
 | 
						|
   file(GLOB md_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS
 | 
						|
     *.md)
 | 
						|
   LIST(APPEND all_sources ${md_files})
 | 
						|
-  foreach (_target secp256k1::secp256k1 ed25519::ed25519 pbufs xrpl_core rippled)
 | 
						|
+  foreach (_target secp256k1 ed25519-donna pbufs xrpl_core rippled)
 | 
						|
     get_target_property (_type ${_target} TYPE)
 | 
						|
     if(_type STREQUAL "INTERFACE_LIBRARY")
 | 
						|
       continue()
 | 
						|
diff --git a/Builds/CMake/RippledNIH.cmake b/Builds/CMake/RippledNIH.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..60ab3e4bf
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/RippledNIH.cmake
 | 
						|
@@ -0,0 +1,33 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH prefix path..this is where we will download
 | 
						|
+   and build any ExternalProjects, and they will hopefully
 | 
						|
+   survive across build directory deletion (manual cleans)
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+string (REGEX REPLACE "[ \\/%]+" "_" gen_for_path ${CMAKE_GENERATOR})
 | 
						|
+string (TOLOWER ${gen_for_path} gen_for_path)
 | 
						|
+# HACK: trying to shorten paths for windows CI (which hits 260 MAXPATH easily)
 | 
						|
+# @see:  https://issues.jenkins-ci.org/browse/JENKINS-38706?focusedCommentId=339847
 | 
						|
+string (REPLACE "visual_studio" "vs" gen_for_path ${gen_for_path})
 | 
						|
+if (NOT DEFINED NIH_CACHE_ROOT)
 | 
						|
+  if (DEFINED ENV{NIH_CACHE_ROOT})
 | 
						|
+    set (NIH_CACHE_ROOT $ENV{NIH_CACHE_ROOT})
 | 
						|
+  else ()
 | 
						|
+    set (NIH_CACHE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/.nih_c")
 | 
						|
+  endif ()
 | 
						|
+endif ()
 | 
						|
+set (nih_cache_path
 | 
						|
+  "${NIH_CACHE_ROOT}/${gen_for_path}/${CMAKE_CXX_COMPILER_ID}_${CMAKE_CXX_COMPILER_VERSION}")
 | 
						|
+if (NOT is_multiconfig)
 | 
						|
+  set (nih_cache_path "${nih_cache_path}/${CMAKE_BUILD_TYPE}")
 | 
						|
+endif ()
 | 
						|
+file(TO_CMAKE_PATH "${nih_cache_path}" nih_cache_path)
 | 
						|
+message (STATUS "NIH-EP cache path: ${nih_cache_path}")
 | 
						|
+## two convenience variables:
 | 
						|
+set (ep_lib_prefix ${CMAKE_STATIC_LIBRARY_PREFIX})
 | 
						|
+set (ep_lib_suffix ${CMAKE_STATIC_LIBRARY_SUFFIX})
 | 
						|
+
 | 
						|
+# this is a setting for FetchContent and needs to be
 | 
						|
+# a cache variable
 | 
						|
+# https://cmake.org/cmake/help/latest/module/FetchContent.html#populating-the-content
 | 
						|
+set (FETCHCONTENT_BASE_DIR ${nih_cache_path} CACHE STRING "" FORCE)
 | 
						|
diff --git a/Builds/CMake/RippledRelease.cmake b/Builds/CMake/RippledRelease.cmake
 | 
						|
index 1c60ea80d..f077461f6 100644
 | 
						|
--- a/Builds/CMake/RippledRelease.cmake
 | 
						|
+++ b/Builds/CMake/RippledRelease.cmake
 | 
						|
@@ -16,7 +16,20 @@ if (is_root_project)
 | 
						|
     message (STATUS "using [${container_label}] as build container tag...")
 | 
						|
 
 | 
						|
     file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/packages)
 | 
						|
-
 | 
						|
+    file (MAKE_DIRECTORY ${NIH_CACHE_ROOT}/pkgbuild)
 | 
						|
+    if (is_linux)
 | 
						|
+      execute_process (COMMAND id -u
 | 
						|
+        OUTPUT_VARIABLE DOCKER_USER_ID
 | 
						|
+        OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
						|
+      message (STATUS "docker local user id: ${DOCKER_USER_ID}")
 | 
						|
+      execute_process (COMMAND id -g
 | 
						|
+        OUTPUT_VARIABLE DOCKER_GROUP_ID
 | 
						|
+        OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
						|
+      message (STATUS "docker local group id: ${DOCKER_GROUP_ID}")
 | 
						|
+    endif ()
 | 
						|
+    if (DOCKER_USER_ID AND DOCKER_GROUP_ID)
 | 
						|
+      set(map_user TRUE)
 | 
						|
+    endif ()
 | 
						|
     #[===================================================================[
 | 
						|
         rpm
 | 
						|
     #]===================================================================]
 | 
						|
@@ -47,6 +60,8 @@ if (is_root_project)
 | 
						|
     exclude_from_default (rpm_container)
 | 
						|
     add_custom_target (rpm
 | 
						|
       docker run
 | 
						|
+        -e NIH_CACHE_ROOT=/opt/rippled_bld/pkg/.nih_c
 | 
						|
+        -v ${NIH_CACHE_ROOT}/pkgbuild:/opt/rippled_bld/pkg/.nih_c
 | 
						|
         -v ${CMAKE_CURRENT_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled
 | 
						|
         -v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out
 | 
						|
         -t rippleci/rippled-rpm-builder:${container_label}
 | 
						|
@@ -117,6 +132,8 @@ if (is_root_project)
 | 
						|
     exclude_from_default (dpkg_container)
 | 
						|
     add_custom_target (dpkg
 | 
						|
       docker run
 | 
						|
+        -e NIH_CACHE_ROOT=/opt/rippled_bld/pkg/.nih_c
 | 
						|
+        -v ${NIH_CACHE_ROOT}/pkgbuild:/opt/rippled_bld/pkg/.nih_c
 | 
						|
         -v ${CMAKE_CURRENT_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled
 | 
						|
         -v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out
 | 
						|
         -t rippled-dpkg-builder:${container_label}
 | 
						|
diff --git a/Builds/CMake/RippledSanity.cmake b/Builds/CMake/RippledSanity.cmake
 | 
						|
index 1d217196e..9e7fd113a 100644
 | 
						|
--- a/Builds/CMake/RippledSanity.cmake
 | 
						|
+++ b/Builds/CMake/RippledSanity.cmake
 | 
						|
@@ -10,7 +10,12 @@ if (NOT ep_procs)
 | 
						|
     message (STATUS "Using ${ep_procs} cores for ExternalProject builds.")
 | 
						|
   endif ()
 | 
						|
 endif ()
 | 
						|
-get_property(is_multiconfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
 | 
						|
+get_property (is_multiconfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
 | 
						|
+if (is_multiconfig STREQUAL "NOTFOUND")
 | 
						|
+  if (${CMAKE_GENERATOR} STREQUAL "Xcode" OR ${CMAKE_GENERATOR} MATCHES "^Visual Studio")
 | 
						|
+    set (is_multiconfig TRUE)
 | 
						|
+  endif ()
 | 
						|
+endif ()
 | 
						|
 
 | 
						|
 set (CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
 | 
						|
 if (NOT is_multiconfig)
 | 
						|
@@ -44,6 +49,9 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
 | 
						|
     message (FATAL_ERROR "This project requires GCC 8 or later")
 | 
						|
   endif ()
 | 
						|
 endif ()
 | 
						|
+if (CMAKE_GENERATOR STREQUAL "Xcode")
 | 
						|
+  set (is_xcode TRUE)
 | 
						|
+endif ()
 | 
						|
 
 | 
						|
 if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
 | 
						|
   set (is_linux TRUE)
 | 
						|
diff --git a/Builds/CMake/deps/Boost.cmake b/Builds/CMake/deps/Boost.cmake
 | 
						|
index 23ea5e549..ba3086c5c 100644
 | 
						|
--- a/Builds/CMake/deps/Boost.cmake
 | 
						|
+++ b/Builds/CMake/deps/Boost.cmake
 | 
						|
@@ -1,3 +1,49 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: boost
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+if((NOT DEFINED BOOST_ROOT) AND(DEFINED ENV{BOOST_ROOT}))
 | 
						|
+  set(BOOST_ROOT $ENV{BOOST_ROOT})
 | 
						|
+endif()
 | 
						|
+file(TO_CMAKE_PATH "${BOOST_ROOT}" BOOST_ROOT)
 | 
						|
+if(WIN32 OR CYGWIN)
 | 
						|
+  # Workaround for MSVC having two boost versions - x86 and x64 on same PC in stage folders
 | 
						|
+  if(DEFINED BOOST_ROOT)
 | 
						|
+    if(IS_DIRECTORY ${BOOST_ROOT}/stage64/lib)
 | 
						|
+      set(BOOST_LIBRARYDIR ${BOOST_ROOT}/stage64/lib)
 | 
						|
+    elseif(IS_DIRECTORY ${BOOST_ROOT}/stage/lib)
 | 
						|
+      set(BOOST_LIBRARYDIR ${BOOST_ROOT}/stage/lib)
 | 
						|
+    elseif(IS_DIRECTORY ${BOOST_ROOT}/lib)
 | 
						|
+      set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib)
 | 
						|
+    else()
 | 
						|
+      message(WARNING "Did not find expected boost library dir. "
 | 
						|
+        "Defaulting to ${BOOST_ROOT}")
 | 
						|
+      set(BOOST_LIBRARYDIR ${BOOST_ROOT})
 | 
						|
+    endif()
 | 
						|
+  endif()
 | 
						|
+endif()
 | 
						|
+message(STATUS "BOOST_ROOT: ${BOOST_ROOT}")
 | 
						|
+message(STATUS "BOOST_LIBRARYDIR: ${BOOST_LIBRARYDIR}")
 | 
						|
+
 | 
						|
+# uncomment the following as needed to debug FindBoost issues:
 | 
						|
+#set(Boost_DEBUG ON)
 | 
						|
+
 | 
						|
+#[=========================================================[
 | 
						|
+   boost dynamic libraries don't trivially support @rpath
 | 
						|
+   linking right now (cmake's default), so just force
 | 
						|
+   static linking for macos, or if requested on linux by flag
 | 
						|
+#]=========================================================]
 | 
						|
+if(static)
 | 
						|
+  set(Boost_USE_STATIC_LIBS ON)
 | 
						|
+endif()
 | 
						|
+set(Boost_USE_MULTITHREADED ON)
 | 
						|
+if(static AND NOT APPLE)
 | 
						|
+  set(Boost_USE_STATIC_RUNTIME ON)
 | 
						|
+else()
 | 
						|
+  set(Boost_USE_STATIC_RUNTIME OFF)
 | 
						|
+endif()
 | 
						|
+# TBD:
 | 
						|
+# Boost_USE_DEBUG_RUNTIME:  When ON, uses Boost libraries linked against the
 | 
						|
 find_package(Boost 1.70 REQUIRED
 | 
						|
   COMPONENTS
 | 
						|
     chrono
 | 
						|
@@ -9,12 +55,11 @@ find_package(Boost 1.70 REQUIRED
 | 
						|
     program_options
 | 
						|
     regex
 | 
						|
     system
 | 
						|
-    thread
 | 
						|
-)
 | 
						|
+    thread)
 | 
						|
 
 | 
						|
 add_library(ripple_boost INTERFACE)
 | 
						|
 add_library(Ripple::boost ALIAS ripple_boost)
 | 
						|
-if(XCODE)
 | 
						|
+if(is_xcode)
 | 
						|
   target_include_directories(ripple_boost BEFORE INTERFACE ${Boost_INCLUDE_DIRS})
 | 
						|
   target_compile_options(ripple_boost INTERFACE --system-header-prefix="boost/")
 | 
						|
 else()
 | 
						|
diff --git a/Builds/CMake/deps/Ed25519-donna.cmake b/Builds/CMake/deps/Ed25519-donna.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..7f352423f
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Ed25519-donna.cmake
 | 
						|
@@ -0,0 +1,28 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: ed25519-donna
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+add_library (ed25519-donna STATIC
 | 
						|
+  src/ed25519-donna/ed25519.c)
 | 
						|
+target_include_directories (ed25519-donna
 | 
						|
+  PUBLIC
 | 
						|
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
 | 
						|
+    $<INSTALL_INTERFACE:include>
 | 
						|
+  PRIVATE
 | 
						|
+    ${CMAKE_CURRENT_SOURCE_DIR}/src/ed25519-donna)
 | 
						|
+#[=========================================================[
 | 
						|
+   NOTE for macos:
 | 
						|
+   https://github.com/floodyberry/ed25519-donna/issues/29
 | 
						|
+   our source for ed25519-donna-portable.h has been
 | 
						|
+   patched to workaround this.
 | 
						|
+#]=========================================================]
 | 
						|
+target_link_libraries (ed25519-donna PUBLIC OpenSSL::SSL)
 | 
						|
+add_library (NIH::ed25519-donna ALIAS ed25519-donna)
 | 
						|
+target_link_libraries (ripple_libs INTERFACE NIH::ed25519-donna)
 | 
						|
+#[===========================[
 | 
						|
+   headers installation
 | 
						|
+#]===========================]
 | 
						|
+install (
 | 
						|
+  FILES
 | 
						|
+    src/ed25519-donna/ed25519.h
 | 
						|
+  DESTINATION include/ed25519-donna)
 | 
						|
diff --git a/Builds/CMake/deps/FindBoost.cmake b/Builds/CMake/deps/FindBoost.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..121e72641
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/FindBoost.cmake
 | 
						|
@@ -0,0 +1,2170 @@
 | 
						|
+# 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_MACRO    - BOOST_VERSION value from boost/version.hpp
 | 
						|
+  Boost_VERSION_STRING   - Boost version number in x.y.z format
 | 
						|
+  Boost_VERSION          - if CMP0093 NEW => same as Boost_VERSION_STRING
 | 
						|
+                           if CMP0093 OLD or unset => same as Boost_VERSION_MACRO
 | 
						|
+  Boost_LIB_VERSION      - Version string appended to library filenames
 | 
						|
+  Boost_VERSION_MAJOR    - Boost major version number (X in X.y.z)
 | 
						|
+                           alias: Boost_MAJOR_VERSION
 | 
						|
+  Boost_VERSION_MINOR    - Boost minor version number (Y in x.Y.z)
 | 
						|
+                           alias: Boost_MINOR_VERSION
 | 
						|
+  Boost_VERSION_PATCH    - Boost subminor version number (Z in x.y.Z)
 | 
						|
+                           alias: Boost_SUBMINOR_VERSION
 | 
						|
+  Boost_VERSION_COUNT    - Amount of version components (3)
 | 
						|
+  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::headers                - Target for header-only dependencies
 | 
						|
+                                  (Boost include directory)
 | 
						|
+                                  alias: Boost::boost
 | 
						|
+  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 :command:`find_package` and if
 | 
						|
+``Boost::system`` is not added to :command:`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
 | 
						|
+:command:`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_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 or from Boost 1.70.0 on
 | 
						|
+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.
 | 
						|
+#]=======================================================================]
 | 
						|
+
 | 
						|
+# The FPHSA helper provides standard way of reporting final search results to
 | 
						|
+# the user including the version and component checks.
 | 
						|
+include(FindPackageHandleStandardArgs)
 | 
						|
+
 | 
						|
+# Save project's policies
 | 
						|
+cmake_policy(PUSH)
 | 
						|
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
 | 
						|
+
 | 
						|
+#-------------------------------------------------------------------------------
 | 
						|
+# Before we go searching, check whether a boost cmake package is available, unless
 | 
						|
+# the user specifically asked NOT to search for one.
 | 
						|
+#
 | 
						|
+# If Boost_DIR is set, this behaves as any find_package call would. If not,
 | 
						|
+# it looks at BOOST_ROOT and BOOSTROOT to find Boost.
 | 
						|
+#
 | 
						|
+if (NOT Boost_NO_BOOST_CMAKE)
 | 
						|
+  # If Boost_DIR is not set, look for BOOSTROOT and BOOST_ROOT as alternatives,
 | 
						|
+  # since these are more conventional for Boost.
 | 
						|
+  if ("$ENV{Boost_DIR}" STREQUAL "")
 | 
						|
+    if (NOT "$ENV{BOOST_ROOT}" STREQUAL "")
 | 
						|
+      set(ENV{Boost_DIR} $ENV{BOOST_ROOT})
 | 
						|
+    elseif (NOT "$ENV{BOOSTROOT}" STREQUAL "")
 | 
						|
+      set(ENV{Boost_DIR} $ENV{BOOSTROOT})
 | 
						|
+    endif()
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  # Do the same find_package call but look specifically for the CMake version.
 | 
						|
+  # Note that args are passed in the Boost_FIND_xxxxx variables, so there is no
 | 
						|
+  # need to delegate them to this find_package call.
 | 
						|
+  find_package(Boost QUIET NO_MODULE)
 | 
						|
+  mark_as_advanced(Boost_DIR)
 | 
						|
+
 | 
						|
+  # If we found a boost cmake package, then we're done. Print out what we found.
 | 
						|
+  # Otherwise let the rest of the module try to find it.
 | 
						|
+  if(Boost_FOUND)
 | 
						|
+    # Neither the legacy boost-cmake nor the new builtin BoostConfig (as in 1.70)
 | 
						|
+    # report the found components in the standard variables, so we need to convert
 | 
						|
+    # them here
 | 
						|
+    if(Boost_FIND_COMPONENTS)
 | 
						|
+      foreach(_comp IN LISTS Boost_FIND_COMPONENTS)
 | 
						|
+        string(TOUPPER ${_comp} _uppercomp)
 | 
						|
+        if(DEFINED Boost${_comp}_FOUND)
 | 
						|
+          set(Boost_${_comp}_FOUND ${Boost${_comp}_FOUND})
 | 
						|
+        elseif(DEFINED Boost_${_uppercomp}_FOUND)
 | 
						|
+          set(Boost_${_comp}_FOUND ${Boost_${_uppercomp}_FOUND})
 | 
						|
+        endif()
 | 
						|
+      endforeach()
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    find_package_handle_standard_args(Boost HANDLE_COMPONENTS CONFIG_MODE)
 | 
						|
+
 | 
						|
+    # Restore project's policies
 | 
						|
+    cmake_policy(POP)
 | 
						|
+    return()
 | 
						|
+  endif()
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+
 | 
						|
+#-------------------------------------------------------------------------------
 | 
						|
+#  FindBoost functions & macros
 | 
						|
+#
 | 
						|
+
 | 
						|
+#
 | 
						|
+# Print debug text if Boost_DEBUG is set.
 | 
						|
+# Call example:
 | 
						|
+# _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "debug message")
 | 
						|
+#
 | 
						|
+function(_Boost_DEBUG_PRINT file line text)
 | 
						|
+  if(Boost_DEBUG)
 | 
						|
+    message(STATUS "[ ${file}:${line} ] ${text}")
 | 
						|
+  endif()
 | 
						|
+endfunction()
 | 
						|
+
 | 
						|
+#
 | 
						|
+# _Boost_DEBUG_PRINT_VAR(file line variable_name [ENVIRONMENT]
 | 
						|
+#                        [SOURCE "short explanation of origin of var value"])
 | 
						|
+#
 | 
						|
+#   ENVIRONMENT - look up environment variable instead of CMake variable
 | 
						|
+#
 | 
						|
+# Print variable name and its value if Boost_DEBUG is set.
 | 
						|
+# Call example:
 | 
						|
+# _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" BOOST_ROOT)
 | 
						|
+#
 | 
						|
+function(_Boost_DEBUG_PRINT_VAR file line name)
 | 
						|
+  if(Boost_DEBUG)
 | 
						|
+    cmake_parse_arguments(_args "ENVIRONMENT" "SOURCE" "" ${ARGN})
 | 
						|
+
 | 
						|
+    unset(source)
 | 
						|
+    if(_args_SOURCE)
 | 
						|
+      set(source " (${_args_SOURCE})")
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    if(_args_ENVIRONMENT)
 | 
						|
+      if(DEFINED ENV{${name}})
 | 
						|
+        set(value "\"$ENV{${name}}\"")
 | 
						|
+      else()
 | 
						|
+        set(value "<unset>")
 | 
						|
+      endif()
 | 
						|
+      set(_name "ENV{${name}}")
 | 
						|
+    else()
 | 
						|
+      if(DEFINED "${name}")
 | 
						|
+        set(value "\"${${name}}\"")
 | 
						|
+      else()
 | 
						|
+        set(value "<unset>")
 | 
						|
+      endif()
 | 
						|
+      set(_name "${name}")
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    _Boost_DEBUG_PRINT("${file}" "${line}" "${_name} = ${value}${source}")
 | 
						|
+  endif()
 | 
						|
+endfunction()
 | 
						|
+
 | 
						|
+############################################
 | 
						|
+#
 | 
						|
+# Check the existence of the libraries.
 | 
						|
+#
 | 
						|
+############################################
 | 
						|
+# This macro was taken directly from the FindQt4.cmake file that is included
 | 
						|
+# with the CMake distribution. This is NOT my work. All work was done by the
 | 
						|
+# original authors of the FindQt4.cmake file. Only minor modifications were
 | 
						|
+# made to remove references to Qt and make this file more generally applicable
 | 
						|
+# And ELSE/ENDIF pairs were removed for readability.
 | 
						|
+#########################################################################
 | 
						|
+
 | 
						|
+macro(_Boost_ADJUST_LIB_VARS basename)
 | 
						|
+  if(Boost_INCLUDE_DIR )
 | 
						|
+    if(Boost_${basename}_LIBRARY_DEBUG AND Boost_${basename}_LIBRARY_RELEASE)
 | 
						|
+      # if the generator is multi-config or if CMAKE_BUILD_TYPE is set for
 | 
						|
+      # single-config generators, set optimized and debug libraries
 | 
						|
+      get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
 | 
						|
+      if(_isMultiConfig OR CMAKE_BUILD_TYPE)
 | 
						|
+        set(Boost_${basename}_LIBRARY optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
 | 
						|
+      else()
 | 
						|
+        # For single-config generators where CMAKE_BUILD_TYPE has no value,
 | 
						|
+        # just use the release libraries
 | 
						|
+        set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} )
 | 
						|
+      endif()
 | 
						|
+      # FIXME: This probably should be set for both cases
 | 
						|
+      set(Boost_${basename}_LIBRARIES optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    # if only the release version was found, set the debug variable also to the release version
 | 
						|
+    if(Boost_${basename}_LIBRARY_RELEASE AND NOT Boost_${basename}_LIBRARY_DEBUG)
 | 
						|
+      set(Boost_${basename}_LIBRARY_DEBUG ${Boost_${basename}_LIBRARY_RELEASE})
 | 
						|
+      set(Boost_${basename}_LIBRARY       ${Boost_${basename}_LIBRARY_RELEASE})
 | 
						|
+      set(Boost_${basename}_LIBRARIES     ${Boost_${basename}_LIBRARY_RELEASE})
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    # if only the debug version was found, set the release variable also to the debug version
 | 
						|
+    if(Boost_${basename}_LIBRARY_DEBUG AND NOT Boost_${basename}_LIBRARY_RELEASE)
 | 
						|
+      set(Boost_${basename}_LIBRARY_RELEASE ${Boost_${basename}_LIBRARY_DEBUG})
 | 
						|
+      set(Boost_${basename}_LIBRARY         ${Boost_${basename}_LIBRARY_DEBUG})
 | 
						|
+      set(Boost_${basename}_LIBRARIES       ${Boost_${basename}_LIBRARY_DEBUG})
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    # If the debug & release library ends up being the same, omit the keywords
 | 
						|
+    if("${Boost_${basename}_LIBRARY_RELEASE}" STREQUAL "${Boost_${basename}_LIBRARY_DEBUG}")
 | 
						|
+      set(Boost_${basename}_LIBRARY   ${Boost_${basename}_LIBRARY_RELEASE} )
 | 
						|
+      set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_RELEASE} )
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    if(Boost_${basename}_LIBRARY AND Boost_${basename}_HEADER)
 | 
						|
+      set(Boost_${basename}_FOUND ON)
 | 
						|
+      if("x${basename}" STREQUAL "xTHREAD" AND NOT TARGET Threads::Threads)
 | 
						|
+        string(APPEND Boost_ERROR_REASON_THREAD " (missing dependency: Threads)")
 | 
						|
+        set(Boost_THREAD_FOUND OFF)
 | 
						|
+      endif()
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+  endif()
 | 
						|
+  # Make variables changeable to the advanced user
 | 
						|
+  mark_as_advanced(
 | 
						|
+      Boost_${basename}_LIBRARY_RELEASE
 | 
						|
+      Boost_${basename}_LIBRARY_DEBUG
 | 
						|
+  )
 | 
						|
+endmacro()
 | 
						|
+
 | 
						|
+# Detect changes in used variables.
 | 
						|
+# Compares the current variable value with the last one.
 | 
						|
+# In short form:
 | 
						|
+# v != v_LAST                      -> CHANGED = 1
 | 
						|
+# v is defined, v_LAST not         -> CHANGED = 1
 | 
						|
+# v is not defined, but v_LAST is  -> CHANGED = 1
 | 
						|
+# otherwise                        -> CHANGED = 0
 | 
						|
+# CHANGED is returned in variable named ${changed_var}
 | 
						|
+macro(_Boost_CHANGE_DETECT changed_var)
 | 
						|
+  set(${changed_var} 0)
 | 
						|
+  foreach(v ${ARGN})
 | 
						|
+    if(DEFINED _Boost_COMPONENTS_SEARCHED)
 | 
						|
+      if(${v})
 | 
						|
+        if(_${v}_LAST)
 | 
						|
+          string(COMPARE NOTEQUAL "${${v}}" "${_${v}_LAST}" _${v}_CHANGED)
 | 
						|
+        else()
 | 
						|
+          set(_${v}_CHANGED 1)
 | 
						|
+        endif()
 | 
						|
+      elseif(_${v}_LAST)
 | 
						|
+        set(_${v}_CHANGED 1)
 | 
						|
+      endif()
 | 
						|
+      if(_${v}_CHANGED)
 | 
						|
+        set(${changed_var} 1)
 | 
						|
+      endif()
 | 
						|
+    else()
 | 
						|
+      set(_${v}_CHANGED 0)
 | 
						|
+    endif()
 | 
						|
+  endforeach()
 | 
						|
+endmacro()
 | 
						|
+
 | 
						|
+#
 | 
						|
+# Find the given library (var).
 | 
						|
+# Use 'build_type' to support different lib paths for RELEASE or DEBUG builds
 | 
						|
+#
 | 
						|
+macro(_Boost_FIND_LIBRARY var build_type)
 | 
						|
+
 | 
						|
+  find_library(${var} ${ARGN})
 | 
						|
+
 | 
						|
+  if(${var})
 | 
						|
+    # If this is the first library found then save Boost_LIBRARY_DIR_[RELEASE,DEBUG].
 | 
						|
+    if(NOT Boost_LIBRARY_DIR_${build_type})
 | 
						|
+      get_filename_component(_dir "${${var}}" PATH)
 | 
						|
+      set(Boost_LIBRARY_DIR_${build_type} "${_dir}" CACHE PATH "Boost library directory ${build_type}" FORCE)
 | 
						|
+    endif()
 | 
						|
+  elseif(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
 | 
						|
+    # Try component-specific hints but do not save Boost_LIBRARY_DIR_[RELEASE,DEBUG].
 | 
						|
+    find_library(${var} HINTS ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT} ${ARGN})
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  # If Boost_LIBRARY_DIR_[RELEASE,DEBUG] is known then search only there.
 | 
						|
+  if(Boost_LIBRARY_DIR_${build_type})
 | 
						|
+    set(_boost_LIBRARY_SEARCH_DIRS_${build_type} ${Boost_LIBRARY_DIR_${build_type}} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
 | 
						|
+    _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
 | 
						|
+                           "Boost_LIBRARY_DIR_${build_type}")
 | 
						|
+    _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
 | 
						|
+                           "_boost_LIBRARY_SEARCH_DIRS_${build_type}")
 | 
						|
+  endif()
 | 
						|
+endmacro()
 | 
						|
+
 | 
						|
+#-------------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+# 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()
 | 
						|
+
 | 
						|
+#
 | 
						|
+# Take a list of libraries with "thread" in it
 | 
						|
+# and prepend duplicates with "thread_${Boost_THREADAPI}"
 | 
						|
+# at the front of the list
 | 
						|
+#
 | 
						|
+function(_Boost_PREPEND_LIST_WITH_THREADAPI _output)
 | 
						|
+  set(_orig_libnames ${ARGN})
 | 
						|
+  string(REPLACE "thread" "thread_${Boost_THREADAPI}" _threadapi_libnames "${_orig_libnames}")
 | 
						|
+  set(${_output} ${_threadapi_libnames} ${_orig_libnames} PARENT_SCOPE)
 | 
						|
+endfunction()
 | 
						|
+
 | 
						|
+#
 | 
						|
+# If a library is found, replace its cache entry with its REALPATH
 | 
						|
+#
 | 
						|
+function(_Boost_SWAP_WITH_REALPATH _library _docstring)
 | 
						|
+  if(${_library})
 | 
						|
+    get_filename_component(_boost_filepathreal ${${_library}} REALPATH)
 | 
						|
+    unset(${_library} CACHE)
 | 
						|
+    set(${_library} ${_boost_filepathreal} CACHE FILEPATH "${_docstring}")
 | 
						|
+  endif()
 | 
						|
+endfunction()
 | 
						|
+
 | 
						|
+function(_Boost_CHECK_SPELLING _var)
 | 
						|
+  if(${_var})
 | 
						|
+    string(TOUPPER ${_var} _var_UC)
 | 
						|
+    message(FATAL_ERROR "ERROR: ${_var} is not the correct spelling.  The proper spelling is ${_var_UC}.")
 | 
						|
+  endif()
 | 
						|
+endfunction()
 | 
						|
+
 | 
						|
+# Guesses Boost's compiler prefix used in built library names
 | 
						|
+# Returns the guess by setting the variable pointed to by _ret
 | 
						|
+function(_Boost_GUESS_COMPILER_PREFIX _ret)
 | 
						|
+  if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntel")
 | 
						|
+    if(WIN32)
 | 
						|
+      set (_boost_COMPILER "-iw")
 | 
						|
+    else()
 | 
						|
+      set (_boost_COMPILER "-il")
 | 
						|
+    endif()
 | 
						|
+  elseif (GHSMULTI)
 | 
						|
+    set(_boost_COMPILER "-ghs")
 | 
						|
+  elseif("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
 | 
						|
+    if(MSVC_TOOLSET_VERSION GREATER_EQUAL 150)
 | 
						|
+      # Not yet known.
 | 
						|
+      set(_boost_COMPILER "")
 | 
						|
+    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 140)
 | 
						|
+      # MSVC toolset 14.x versions are forward compatible.
 | 
						|
+      set(_boost_COMPILER "")
 | 
						|
+      foreach(v 9 8 7 6 5 4 3 2 1 0)
 | 
						|
+        if(MSVC_TOOLSET_VERSION GREATER_EQUAL 14${v})
 | 
						|
+          list(APPEND _boost_COMPILER "-vc14${v}")
 | 
						|
+        endif()
 | 
						|
+      endforeach()
 | 
						|
+    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!
 | 
						|
+      set(_boost_COMPILER "-vc7") # yes, this is correct
 | 
						|
+    else() # VS 6.0 Good luck!
 | 
						|
+      set(_boost_COMPILER "-vc6") # yes, this is correct
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang")
 | 
						|
+      string(REPLACE "." ";" VERSION_LIST "${CMAKE_CXX_COMPILER_VERSION}")
 | 
						|
+      list(GET VERSION_LIST 0 CLANG_VERSION_MAJOR)
 | 
						|
+      set(_boost_COMPILER "-clangw${CLANG_VERSION_MAJOR};${_boost_COMPILER}")
 | 
						|
+    endif()
 | 
						|
+  elseif (BORLAND)
 | 
						|
+    set(_boost_COMPILER "-bcb")
 | 
						|
+  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
 | 
						|
+    set(_boost_COMPILER "-sw")
 | 
						|
+  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "XL")
 | 
						|
+    set(_boost_COMPILER "-xlc")
 | 
						|
+  elseif (MINGW)
 | 
						|
+    if(Boost_VERSION_STRING 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_VERSION_MAJOR _boost_COMPILER_VERSION_MINOR)
 | 
						|
+      set(_boost_COMPILER "-mgw${_boost_COMPILER_VERSION}")
 | 
						|
+    endif()
 | 
						|
+  elseif (UNIX)
 | 
						|
+    _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION _boost_COMPILER_VERSION_MAJOR _boost_COMPILER_VERSION_MINOR)
 | 
						|
+    if(NOT Boost_VERSION_STRING VERSION_LESS 1.69.0)
 | 
						|
+      # 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_VERSION_STRING VERSION_LESS 1.34)
 | 
						|
+        set(_boost_COMPILER "-gcc") # no GCC version encoding prior to 1.34
 | 
						|
+      else()
 | 
						|
+        # Determine which version of GCC we have.
 | 
						|
+        if(APPLE)
 | 
						|
+          if(Boost_VERSION_STRING VERSION_LESS 1.36.0)
 | 
						|
+            # In Boost <= 1.35.0, there is no mangled compiler name for
 | 
						|
+            # the macOS/Darwin version of GCC.
 | 
						|
+            set(_boost_COMPILER "")
 | 
						|
+          else()
 | 
						|
+            # In Boost 1.36.0 and newer, the mangled compiler name used
 | 
						|
+            # on macOS/Darwin is "xgcc".
 | 
						|
+            set(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}")
 | 
						|
+          endif()
 | 
						|
+        else()
 | 
						|
+          set(_boost_COMPILER "-gcc${_boost_COMPILER_VERSION}")
 | 
						|
+        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()
 | 
						|
+    set(_boost_COMPILER "")
 | 
						|
+  endif()
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
 | 
						|
+                         "_boost_COMPILER" SOURCE "guessed")
 | 
						|
+  set(${_ret} ${_boost_COMPILER} PARENT_SCOPE)
 | 
						|
+endfunction()
 | 
						|
+
 | 
						|
+#
 | 
						|
+# Get component dependencies.  Requires the dependencies to have been
 | 
						|
+# defined for the Boost release version.
 | 
						|
+#
 | 
						|
+# component - the component to check
 | 
						|
+# _ret - list of library dependencies
 | 
						|
+#
 | 
						|
+function(_Boost_COMPONENT_DEPENDENCIES component _ret)
 | 
						|
+  # Note: to add a new Boost release, run
 | 
						|
+  #
 | 
						|
+  #   % cmake -DBOOST_DIR=/path/to/boost/source -P Utilities/Scripts/BoostScanDeps.cmake
 | 
						|
+  #
 | 
						|
+  # The output may be added in a new block below.  If it's the same as
 | 
						|
+  # the previous release, simply update the version range of the block
 | 
						|
+  # for the previous release.  Also check if any new components have
 | 
						|
+  # been added, and add any new components to
 | 
						|
+  # _Boost_COMPONENT_HEADERS.
 | 
						|
+  #
 | 
						|
+  # This information was originally generated by running
 | 
						|
+  # BoostScanDeps.cmake against every boost release to date supported
 | 
						|
+  # by FindBoost:
 | 
						|
+  #
 | 
						|
+  #   % for version in /path/to/boost/sources/*
 | 
						|
+  #     do
 | 
						|
+  #       cmake -DBOOST_DIR=$version -P Utilities/Scripts/BoostScanDeps.cmake
 | 
						|
+  #     done
 | 
						|
+  #
 | 
						|
+  # The output was then updated by search and replace with these regexes:
 | 
						|
+  #
 | 
						|
+  # - Strip message(STATUS) prefix dashes
 | 
						|
+  #   s;^-- ;;
 | 
						|
+  # - Indent
 | 
						|
+  #   s;^set(;    set(;;
 | 
						|
+  # - Add conditionals
 | 
						|
+  #   s;Scanning /path/to/boost/sources/boost_\(.*\)_\(.*\)_\(.*);  elseif(NOT Boost_VERSION_STRING VERSION_LESS \1\.\2\.\3 AND Boost_VERSION_STRING VERSION_LESS xxxx);
 | 
						|
+  #
 | 
						|
+  # This results in the logic seen below, but will require the xxxx
 | 
						|
+  # replacing with the following Boost release version (or the next
 | 
						|
+  # minor version to be released, e.g. 1.59 was the latest at the time
 | 
						|
+  # of writing, making 1.60 the next. Identical consecutive releases
 | 
						|
+  # were then merged together by updating the end range of the first
 | 
						|
+  # block and removing the following redundant blocks.
 | 
						|
+  #
 | 
						|
+  # Running the script against all historical releases should be
 | 
						|
+  # required only if the BoostScanDeps.cmake script logic is changed.
 | 
						|
+  # The addition of a new release should only require it to be run
 | 
						|
+  # against the new release.
 | 
						|
+
 | 
						|
+  # Handle Python version suffixes
 | 
						|
+  if(component MATCHES "^(python|mpi_python|numpy)([0-9][0-9]?|[0-9]\\.[0-9])\$")
 | 
						|
+    set(component "${CMAKE_MATCH_1}")
 | 
						|
+    set(component_python_version "${CMAKE_MATCH_2}")
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  set(_Boost_IMPORTED_TARGETS TRUE)
 | 
						|
+  if(Boost_VERSION_STRING AND Boost_VERSION_STRING VERSION_LESS 1.33.0)
 | 
						|
+    message(WARNING "Imported targets and dependency information not available for Boost version ${Boost_VERSION_STRING} (all versions older than 1.33)")
 | 
						|
+    set(_Boost_IMPORTED_TARGETS FALSE)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.33.0 AND Boost_VERSION_STRING VERSION_LESS 1.35.0)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex thread)
 | 
						|
+    set(_Boost_REGEX_DEPENDENCIES thread)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem thread)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.35.0 AND Boost_VERSION_STRING VERSION_LESS 1.36.0)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem system thread)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.36.0 AND Boost_VERSION_STRING VERSION_LESS 1.38.0)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem system thread)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.38.0 AND Boost_VERSION_STRING VERSION_LESS 1.43.0)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    set(_Boost_THREAD_DEPENDENCIES date_time)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem system thread date_time)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.43.0 AND Boost_VERSION_STRING VERSION_LESS 1.44.0)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    set(_Boost_THREAD_DEPENDENCIES date_time)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem system thread date_time)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.44.0 AND Boost_VERSION_STRING VERSION_LESS 1.45.0)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random serialization)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    set(_Boost_THREAD_DEPENDENCIES date_time)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES serialization filesystem system thread date_time)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.45.0 AND Boost_VERSION_STRING VERSION_LESS 1.47.0)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    set(_Boost_THREAD_DEPENDENCIES date_time)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.47.0 AND Boost_VERSION_STRING VERSION_LESS 1.48.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    set(_Boost_THREAD_DEPENDENCIES date_time)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.48.0 AND Boost_VERSION_STRING VERSION_LESS 1.50.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    set(_Boost_THREAD_DEPENDENCIES date_time)
 | 
						|
+    set(_Boost_TIMER_DEPENDENCIES chrono system)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.50.0 AND Boost_VERSION_STRING VERSION_LESS 1.53.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    set(_Boost_THREAD_DEPENDENCIES chrono system date_time)
 | 
						|
+    set(_Boost_TIMER_DEPENDENCIES chrono system)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.53.0 AND Boost_VERSION_STRING VERSION_LESS 1.54.0)
 | 
						|
+    set(_Boost_ATOMIC_DEPENDENCIES thread chrono system date_time)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    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)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.54.0 AND Boost_VERSION_STRING VERSION_LESS 1.55.0)
 | 
						|
+    set(_Boost_ATOMIC_DEPENDENCIES thread chrono system date_time)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
 | 
						|
+    set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    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)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.55.0 AND Boost_VERSION_STRING VERSION_LESS 1.56.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_COROUTINE_DEPENDENCIES context system)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
 | 
						|
+    set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
 | 
						|
+    set(_Boost_MPI_DEPENDENCIES serialization)
 | 
						|
+    set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
 | 
						|
+    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)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.56.0 AND Boost_VERSION_STRING VERSION_LESS 1.59.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_COROUTINE_DEPENDENCIES context system)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
 | 
						|
+    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_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)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.59.0 AND Boost_VERSION_STRING VERSION_LESS 1.60.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_COROUTINE_DEPENDENCIES context system)
 | 
						|
+    set(_Boost_FILESYSTEM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_IOSTREAMS_DEPENDENCIES regex)
 | 
						|
+    set(_Boost_LOG_DEPENDENCIES log_setup date_time 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_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)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.60.0 AND Boost_VERSION_STRING VERSION_LESS 1.61.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_COROUTINE_DEPENDENCIES context system)
 | 
						|
+    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_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)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.61.0 AND Boost_VERSION_STRING VERSION_LESS 1.62.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
 | 
						|
+    set(_Boost_COROUTINE_DEPENDENCIES context system)
 | 
						|
+    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_RANDOM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.62.0 AND Boost_VERSION_STRING VERSION_LESS 1.63.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_CONTEXT_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_RANDOM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.63.0 AND Boost_VERSION_STRING VERSION_LESS 1.65.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
 | 
						|
+    set(_Boost_COROUTINE_DEPENDENCIES context system)
 | 
						|
+    set(_Boost_COROUTINE2_DEPENDENCIES context fiber thread chrono system date_time)
 | 
						|
+    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_RANDOM_DEPENDENCIES system)
 | 
						|
+    set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.65.0 AND Boost_VERSION_STRING VERSION_LESS 1.67.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_CONTEXT_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)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.67.0 AND Boost_VERSION_STRING VERSION_LESS 1.68.0)
 | 
						|
+    set(_Boost_CHRONO_DEPENDENCIES system)
 | 
						|
+    set(_Boost_CONTEXT_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)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.68.0 AND Boost_VERSION_STRING VERSION_LESS 1.69.0)
 | 
						|
+    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)
 | 
						|
+  elseif(NOT Boost_VERSION_STRING VERSION_LESS 1.69.0 AND Boost_VERSION_STRING VERSION_LESS 1.70.0)
 | 
						|
+    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 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_THREAD_DEPENDENCIES chrono date_time atomic)
 | 
						|
+    set(_Boost_TIMER_DEPENDENCIES chrono system)
 | 
						|
+    set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
 | 
						|
+    set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+  else()
 | 
						|
+    if(NOT Boost_VERSION_STRING VERSION_LESS 1.70.0)
 | 
						|
+      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 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_THREAD_DEPENDENCIES chrono date_time atomic)
 | 
						|
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
 | 
						|
+      set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
 | 
						|
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
 | 
						|
+    endif()
 | 
						|
+    if(NOT Boost_VERSION_STRING VERSION_LESS 1.77.0)
 | 
						|
+      message(WARNING "New Boost version may have incorrect or missing dependencies and imported targets")
 | 
						|
+    endif()
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  string(TOUPPER ${component} uppercomponent)
 | 
						|
+  set(${_ret} ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
 | 
						|
+  set(_Boost_IMPORTED_TARGETS ${_Boost_IMPORTED_TARGETS} PARENT_SCOPE)
 | 
						|
+
 | 
						|
+  string(REGEX REPLACE ";" " " _boost_DEPS_STRING "${_Boost_${uppercomponent}_DEPENDENCIES}")
 | 
						|
+  if (NOT _boost_DEPS_STRING)
 | 
						|
+    set(_boost_DEPS_STRING "(none)")
 | 
						|
+  endif()
 | 
						|
+  # message(STATUS "Dependencies for Boost::${component}: ${_boost_DEPS_STRING}")
 | 
						|
+endfunction()
 | 
						|
+
 | 
						|
+#
 | 
						|
+# Get component headers.  This is the primary header (or headers) for
 | 
						|
+# a given component, and is used to check that the headers are present
 | 
						|
+# as well as the library itself as an extra sanity check of the build
 | 
						|
+# environment.
 | 
						|
+#
 | 
						|
+# component - the component to check
 | 
						|
+# _hdrs
 | 
						|
+#
 | 
						|
+function(_Boost_COMPONENT_HEADERS component _hdrs)
 | 
						|
+  # Handle Python version suffixes
 | 
						|
+  if(component MATCHES "^(python|mpi_python|numpy)([0-9][0-9]?|[0-9]\\.[0-9])\$")
 | 
						|
+    set(component "${CMAKE_MATCH_1}")
 | 
						|
+    set(component_python_version "${CMAKE_MATCH_2}")
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  # Note: new boost components will require adding here.  The header
 | 
						|
+  # must be present in all versions of Boost providing a library.
 | 
						|
+  set(_Boost_ATOMIC_HEADERS              "boost/atomic.hpp")
 | 
						|
+  set(_Boost_CHRONO_HEADERS              "boost/chrono.hpp")
 | 
						|
+  set(_Boost_CONTAINER_HEADERS           "boost/container/container_fwd.hpp")
 | 
						|
+  set(_Boost_CONTRACT_HEADERS            "boost/contract.hpp")
 | 
						|
+  if(Boost_VERSION_STRING VERSION_LESS 1.61.0)
 | 
						|
+    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")
 | 
						|
+  set(_Boost_FIBER_HEADERS               "boost/fiber/all.hpp")
 | 
						|
+  set(_Boost_FILESYSTEM_HEADERS          "boost/filesystem/path.hpp")
 | 
						|
+  set(_Boost_GRAPH_HEADERS               "boost/graph/adjacency_list.hpp")
 | 
						|
+  set(_Boost_GRAPH_PARALLEL_HEADERS      "boost/graph/adjacency_list.hpp")
 | 
						|
+  set(_Boost_IOSTREAMS_HEADERS           "boost/iostreams/stream.hpp")
 | 
						|
+  set(_Boost_LOCALE_HEADERS              "boost/locale.hpp")
 | 
						|
+  set(_Boost_LOG_HEADERS                 "boost/log/core.hpp")
 | 
						|
+  set(_Boost_LOG_SETUP_HEADERS           "boost/log/detail/setup_config.hpp")
 | 
						|
+  set(_Boost_MATH_HEADERS                "boost/math_fwd.hpp")
 | 
						|
+  set(_Boost_MATH_C99_HEADERS            "boost/math/tr1.hpp")
 | 
						|
+  set(_Boost_MATH_C99F_HEADERS           "boost/math/tr1.hpp")
 | 
						|
+  set(_Boost_MATH_C99L_HEADERS           "boost/math/tr1.hpp")
 | 
						|
+  set(_Boost_MATH_TR1_HEADERS            "boost/math/tr1.hpp")
 | 
						|
+  set(_Boost_MATH_TR1F_HEADERS           "boost/math/tr1.hpp")
 | 
						|
+  set(_Boost_MATH_TR1L_HEADERS           "boost/math/tr1.hpp")
 | 
						|
+  set(_Boost_MPI_HEADERS                 "boost/mpi.hpp")
 | 
						|
+  set(_Boost_MPI_PYTHON_HEADERS          "boost/mpi/python/config.hpp")
 | 
						|
+  set(_Boost_NUMPY_HEADERS               "boost/python/numpy.hpp")
 | 
						|
+  set(_Boost_PRG_EXEC_MONITOR_HEADERS    "boost/test/prg_exec_monitor.hpp")
 | 
						|
+  set(_Boost_PROGRAM_OPTIONS_HEADERS     "boost/program_options.hpp")
 | 
						|
+  set(_Boost_PYTHON_HEADERS              "boost/python.hpp")
 | 
						|
+  set(_Boost_RANDOM_HEADERS              "boost/random.hpp")
 | 
						|
+  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")
 | 
						|
+  set(_Boost_TIMER_HEADERS               "boost/timer.hpp")
 | 
						|
+  set(_Boost_TYPE_ERASURE_HEADERS        "boost/type_erasure/config.hpp")
 | 
						|
+  set(_Boost_UNIT_TEST_FRAMEWORK_HEADERS "boost/test/framework.hpp")
 | 
						|
+  set(_Boost_WAVE_HEADERS                "boost/wave.hpp")
 | 
						|
+  set(_Boost_WSERIALIZATION_HEADERS      "boost/archive/text_wiarchive.hpp")
 | 
						|
+  if(WIN32)
 | 
						|
+    set(_Boost_BZIP2_HEADERS             "boost/iostreams/filter/bzip2.hpp")
 | 
						|
+    set(_Boost_ZLIB_HEADERS              "boost/iostreams/filter/zlib.hpp")
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  string(TOUPPER ${component} uppercomponent)
 | 
						|
+  set(${_hdrs} ${_Boost_${uppercomponent}_HEADERS} PARENT_SCOPE)
 | 
						|
+
 | 
						|
+  string(REGEX REPLACE ";" " " _boost_HDRS_STRING "${_Boost_${uppercomponent}_HEADERS}")
 | 
						|
+  if (NOT _boost_HDRS_STRING)
 | 
						|
+    set(_boost_HDRS_STRING "(none)")
 | 
						|
+  endif()
 | 
						|
+  # message(STATUS "Headers for Boost::${component}: ${_boost_HDRS_STRING}")
 | 
						|
+endfunction()
 | 
						|
+
 | 
						|
+#
 | 
						|
+# Determine if any missing dependencies require adding to the component list.
 | 
						|
+#
 | 
						|
+# Sets _Boost_${COMPONENT}_DEPENDENCIES for each required component,
 | 
						|
+# plus _Boost_IMPORTED_TARGETS (TRUE if imported targets should be
 | 
						|
+# defined; FALSE if dependency information is unavailable).
 | 
						|
+#
 | 
						|
+# componentvar - the component list variable name
 | 
						|
+# extravar - the indirect dependency list variable name
 | 
						|
+#
 | 
						|
+#
 | 
						|
+function(_Boost_MISSING_DEPENDENCIES componentvar extravar)
 | 
						|
+  # _boost_unprocessed_components - list of components requiring processing
 | 
						|
+  # _boost_processed_components - components already processed (or currently being processed)
 | 
						|
+  # _boost_new_components - new components discovered for future processing
 | 
						|
+  #
 | 
						|
+  list(APPEND _boost_unprocessed_components ${${componentvar}})
 | 
						|
+
 | 
						|
+  while(_boost_unprocessed_components)
 | 
						|
+    list(APPEND _boost_processed_components ${_boost_unprocessed_components})
 | 
						|
+    foreach(component ${_boost_unprocessed_components})
 | 
						|
+      string(TOUPPER ${component} uppercomponent)
 | 
						|
+      set(${_ret} ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
 | 
						|
+      _Boost_COMPONENT_DEPENDENCIES("${component}" _Boost_${uppercomponent}_DEPENDENCIES)
 | 
						|
+      set(_Boost_${uppercomponent}_DEPENDENCIES ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
 | 
						|
+      set(_Boost_IMPORTED_TARGETS ${_Boost_IMPORTED_TARGETS} PARENT_SCOPE)
 | 
						|
+      foreach(componentdep ${_Boost_${uppercomponent}_DEPENDENCIES})
 | 
						|
+        if (NOT ("${componentdep}" IN_LIST _boost_processed_components OR "${componentdep}" IN_LIST _boost_new_components))
 | 
						|
+          list(APPEND _boost_new_components ${componentdep})
 | 
						|
+        endif()
 | 
						|
+      endforeach()
 | 
						|
+    endforeach()
 | 
						|
+    set(_boost_unprocessed_components ${_boost_new_components})
 | 
						|
+    unset(_boost_new_components)
 | 
						|
+  endwhile()
 | 
						|
+  set(_boost_extra_components ${_boost_processed_components})
 | 
						|
+  if(_boost_extra_components AND ${componentvar})
 | 
						|
+    list(REMOVE_ITEM _boost_extra_components ${${componentvar}})
 | 
						|
+  endif()
 | 
						|
+  set(${componentvar} ${_boost_processed_components} PARENT_SCOPE)
 | 
						|
+  set(${extravar} ${_boost_extra_components} PARENT_SCOPE)
 | 
						|
+endfunction()
 | 
						|
+
 | 
						|
+#
 | 
						|
+# Some boost libraries may require particular set of compler features.
 | 
						|
+# The very first one was `boost::fiber` introduced in Boost 1.62.
 | 
						|
+# One can check required compiler features of it in
 | 
						|
+# - `${Boost_ROOT}/libs/fiber/build/Jamfile.v2`;
 | 
						|
+# - `${Boost_ROOT}/libs/context/build/Jamfile.v2`.
 | 
						|
+#
 | 
						|
+# TODO (Re)Check compiler features on (every?) release ???
 | 
						|
+# One may use the following command to get the files to check:
 | 
						|
+#
 | 
						|
+#   $ find . -name Jamfile.v2 | grep build | xargs grep -l cxx1
 | 
						|
+#
 | 
						|
+function(_Boost_COMPILER_FEATURES component _ret)
 | 
						|
+  # Boost >= 1.62
 | 
						|
+  if(NOT Boost_VERSION_STRING VERSION_LESS 1.62.0)
 | 
						|
+    set(_Boost_FIBER_COMPILER_FEATURES
 | 
						|
+        cxx_alias_templates
 | 
						|
+        cxx_auto_type
 | 
						|
+        cxx_constexpr
 | 
						|
+        cxx_defaulted_functions
 | 
						|
+        cxx_final
 | 
						|
+        cxx_lambdas
 | 
						|
+        cxx_noexcept
 | 
						|
+        cxx_nullptr
 | 
						|
+        cxx_rvalue_references
 | 
						|
+        cxx_thread_local
 | 
						|
+        cxx_variadic_templates
 | 
						|
+    )
 | 
						|
+    # Compiler feature for `context` same as for `fiber`.
 | 
						|
+    set(_Boost_CONTEXT_COMPILER_FEATURES ${_Boost_FIBER_COMPILER_FEATURES})
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  # Boost Contract library available in >= 1.67
 | 
						|
+  if(NOT Boost_VERSION_STRING VERSION_LESS 1.67.0)
 | 
						|
+    # From `libs/contract/build/boost_contract_build.jam`
 | 
						|
+    set(_Boost_CONTRACT_COMPILER_FEATURES
 | 
						|
+        cxx_lambdas
 | 
						|
+        cxx_variadic_templates
 | 
						|
+    )
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  string(TOUPPER ${component} uppercomponent)
 | 
						|
+  set(${_ret} ${_Boost_${uppercomponent}_COMPILER_FEATURES} PARENT_SCOPE)
 | 
						|
+endfunction()
 | 
						|
+
 | 
						|
+#
 | 
						|
+# Update library search directory hint variable with paths used by prebuilt boost binaries.
 | 
						|
+#
 | 
						|
+# Prebuilt windows binaries (https://sourceforge.net/projects/boost/files/boost-binaries/)
 | 
						|
+# have library directories named using MSVC compiler version and architecture.
 | 
						|
+# This function would append corresponding directories if MSVC is a current compiler,
 | 
						|
+# so having `BOOST_ROOT` would be enough to specify to find everything.
 | 
						|
+#
 | 
						|
+function(_Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS componentlibvar basedir)
 | 
						|
+  if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
 | 
						|
+    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
 | 
						|
+      set(_arch_suffix 64)
 | 
						|
+    else()
 | 
						|
+      set(_arch_suffix 32)
 | 
						|
+    endif()
 | 
						|
+    if(MSVC_TOOLSET_VERSION GREATER_EQUAL 150)
 | 
						|
+      # Not yet known.
 | 
						|
+    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 140)
 | 
						|
+      # MSVC toolset 14.x versions are forward compatible.
 | 
						|
+      foreach(v 9 8 7 6 5 4 3 2 1 0)
 | 
						|
+        if(MSVC_TOOLSET_VERSION GREATER_EQUAL 14${v})
 | 
						|
+          list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-14.${v})
 | 
						|
+        endif()
 | 
						|
+      endforeach()
 | 
						|
+    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()
 | 
						|
+endfunction()
 | 
						|
+
 | 
						|
+#
 | 
						|
+# End functions/macros
 | 
						|
+#
 | 
						|
+#-------------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+#-------------------------------------------------------------------------------
 | 
						|
+# main.
 | 
						|
+#-------------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+
 | 
						|
+# If the user sets Boost_LIBRARY_DIR, use it as the default for both
 | 
						|
+# configurations.
 | 
						|
+if(NOT Boost_LIBRARY_DIR_RELEASE AND Boost_LIBRARY_DIR)
 | 
						|
+  set(Boost_LIBRARY_DIR_RELEASE "${Boost_LIBRARY_DIR}")
 | 
						|
+endif()
 | 
						|
+if(NOT Boost_LIBRARY_DIR_DEBUG AND Boost_LIBRARY_DIR)
 | 
						|
+  set(Boost_LIBRARY_DIR_DEBUG   "${Boost_LIBRARY_DIR}")
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+if(NOT DEFINED Boost_USE_DEBUG_LIBS)
 | 
						|
+  set(Boost_USE_DEBUG_LIBS TRUE)
 | 
						|
+endif()
 | 
						|
+if(NOT DEFINED Boost_USE_RELEASE_LIBS)
 | 
						|
+  set(Boost_USE_RELEASE_LIBS TRUE)
 | 
						|
+endif()
 | 
						|
+if(NOT DEFINED Boost_USE_MULTITHREADED)
 | 
						|
+  set(Boost_USE_MULTITHREADED TRUE)
 | 
						|
+endif()
 | 
						|
+if(NOT DEFINED Boost_USE_DEBUG_RUNTIME)
 | 
						|
+  set(Boost_USE_DEBUG_RUNTIME TRUE)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# Check the version of Boost against the requested version.
 | 
						|
+if(Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR)
 | 
						|
+  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")
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+if(Boost_FIND_VERSION_EXACT)
 | 
						|
+  # The version may appear in a directory with or without the patch
 | 
						|
+  # level, even when the patch level is non-zero.
 | 
						|
+  set(_boost_TEST_VERSIONS
 | 
						|
+    "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}.${Boost_FIND_VERSION_PATCH}"
 | 
						|
+    "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
 | 
						|
+else()
 | 
						|
+  # The user has not requested an exact version.  Among known
 | 
						|
+  # versions, find those that are acceptable to the user request.
 | 
						|
+  #
 | 
						|
+  # Note: When adding a new Boost release, also update the dependency
 | 
						|
+  # information in _Boost_COMPONENT_DEPENDENCIES and
 | 
						|
+  # _Boost_COMPONENT_HEADERS.  See the instructions at the top of
 | 
						|
+  # _Boost_COMPONENT_DEPENDENCIES.
 | 
						|
+  set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
 | 
						|
+    "1.70.0" "1.70" "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"
 | 
						|
+    "1.54.0" "1.54" "1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51"
 | 
						|
+    "1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1"
 | 
						|
+    "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"
 | 
						|
+    "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"
 | 
						|
+    "1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0"
 | 
						|
+    "1.34" "1.33.1" "1.33.0" "1.33")
 | 
						|
+
 | 
						|
+  set(_boost_TEST_VERSIONS)
 | 
						|
+  if(Boost_FIND_VERSION)
 | 
						|
+    set(_Boost_FIND_VERSION_SHORT "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
 | 
						|
+    # Select acceptable versions.
 | 
						|
+    foreach(version ${_Boost_KNOWN_VERSIONS})
 | 
						|
+      if(NOT "${version}" VERSION_LESS "${Boost_FIND_VERSION}")
 | 
						|
+        # This version is high enough.
 | 
						|
+        list(APPEND _boost_TEST_VERSIONS "${version}")
 | 
						|
+      elseif("${version}.99" VERSION_EQUAL "${_Boost_FIND_VERSION_SHORT}.99")
 | 
						|
+        # This version is a short-form for the requested version with
 | 
						|
+        # the patch level dropped.
 | 
						|
+        list(APPEND _boost_TEST_VERSIONS "${version}")
 | 
						|
+      endif()
 | 
						|
+    endforeach()
 | 
						|
+  else()
 | 
						|
+    # Any version is acceptable.
 | 
						|
+    set(_boost_TEST_VERSIONS "${_Boost_KNOWN_VERSIONS}")
 | 
						|
+  endif()
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_TEST_VERSIONS")
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_MULTITHREADED")
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_STATIC_LIBS")
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_STATIC_RUNTIME")
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_ADDITIONAL_VERSIONS")
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_NO_SYSTEM_PATHS")
 | 
						|
+
 | 
						|
+# Supply Boost_LIB_DIAGNOSTIC_DEFINITIONS as a convenience target. It
 | 
						|
+# will only contain any interface definitions on WIN32, but is created
 | 
						|
+# on all platforms to keep end user code free from platform dependent
 | 
						|
+# code.  Also provide convenience targets to disable autolinking and
 | 
						|
+# enable dynamic linking.
 | 
						|
+if(NOT TARGET Boost::diagnostic_definitions)
 | 
						|
+  add_library(Boost::diagnostic_definitions INTERFACE IMPORTED)
 | 
						|
+  add_library(Boost::disable_autolinking INTERFACE IMPORTED)
 | 
						|
+  add_library(Boost::dynamic_linking INTERFACE IMPORTED)
 | 
						|
+  set_target_properties(Boost::dynamic_linking PROPERTIES
 | 
						|
+    INTERFACE_COMPILE_DEFINITIONS "BOOST_ALL_DYN_LINK")
 | 
						|
+endif()
 | 
						|
+if(WIN32)
 | 
						|
+  # In windows, automatic linking is performed, so you do not have
 | 
						|
+  # to specify the libraries.  If you are linking to a dynamic
 | 
						|
+  # runtime, then you can choose to link to either a static or a
 | 
						|
+  # dynamic Boost library, the default is to do a static link.  You
 | 
						|
+  # can alter this for a specific library "whatever" by defining
 | 
						|
+  # BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to be
 | 
						|
+  # linked dynamically.  Alternatively you can force all Boost
 | 
						|
+  # libraries to dynamic link by defining BOOST_ALL_DYN_LINK.
 | 
						|
+
 | 
						|
+  # This feature can be disabled for Boost library "whatever" by
 | 
						|
+  # defining BOOST_WHATEVER_NO_LIB, or for all of Boost by defining
 | 
						|
+  # BOOST_ALL_NO_LIB.
 | 
						|
+
 | 
						|
+  # If you want to observe which libraries are being linked against
 | 
						|
+  # then defining BOOST_LIB_DIAGNOSTIC will cause the auto-linking
 | 
						|
+  # code to emit a #pragma message each time a library is selected
 | 
						|
+  # for linking.
 | 
						|
+  set(Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC")
 | 
						|
+  set_target_properties(Boost::diagnostic_definitions PROPERTIES
 | 
						|
+    INTERFACE_COMPILE_DEFINITIONS "BOOST_LIB_DIAGNOSTIC")
 | 
						|
+  set_target_properties(Boost::disable_autolinking PROPERTIES
 | 
						|
+    INTERFACE_COMPILE_DEFINITIONS "BOOST_ALL_NO_LIB")
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+if (POLICY CMP0074)
 | 
						|
+  cmake_policy(GET CMP0074 _Boost_CMP0074)
 | 
						|
+  if(NOT "x${_Boost_CMP0074}x" STREQUAL "xNEWx")
 | 
						|
+    _Boost_CHECK_SPELLING(Boost_ROOT)
 | 
						|
+  endif()
 | 
						|
+  unset(_Boost_CMP0074)
 | 
						|
+endif ()
 | 
						|
+_Boost_CHECK_SPELLING(Boost_LIBRARYDIR)
 | 
						|
+_Boost_CHECK_SPELLING(Boost_INCLUDEDIR)
 | 
						|
+
 | 
						|
+# Collect environment variable inputs as hints.  Do not consider changes.
 | 
						|
+foreach(v BOOSTROOT BOOST_ROOT BOOST_INCLUDEDIR BOOST_LIBRARYDIR)
 | 
						|
+  set(_env $ENV{${v}})
 | 
						|
+  if(_env)
 | 
						|
+    file(TO_CMAKE_PATH "${_env}" _ENV_${v})
 | 
						|
+  else()
 | 
						|
+    set(_ENV_${v} "")
 | 
						|
+  endif()
 | 
						|
+endforeach()
 | 
						|
+if(NOT _ENV_BOOST_ROOT AND _ENV_BOOSTROOT)
 | 
						|
+  set(_ENV_BOOST_ROOT "${_ENV_BOOSTROOT}")
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# Collect inputs and cached results.  Detect changes since the last run.
 | 
						|
+if(NOT BOOST_ROOT AND BOOSTROOT)
 | 
						|
+  set(BOOST_ROOT "${BOOSTROOT}")
 | 
						|
+endif()
 | 
						|
+set(_Boost_VARS_DIR
 | 
						|
+  BOOST_ROOT
 | 
						|
+  Boost_NO_SYSTEM_PATHS
 | 
						|
+  )
 | 
						|
+
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_ROOT")
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_ROOT" ENVIRONMENT)
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_INCLUDEDIR")
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_INCLUDEDIR" ENVIRONMENT)
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_LIBRARYDIR")
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_LIBRARYDIR" ENVIRONMENT)
 | 
						|
+
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+#  Search for Boost include DIR
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+set(_Boost_VARS_INC BOOST_INCLUDEDIR Boost_INCLUDE_DIR Boost_ADDITIONAL_VERSIONS)
 | 
						|
+_Boost_CHANGE_DETECT(_Boost_CHANGE_INCDIR ${_Boost_VARS_DIR} ${_Boost_VARS_INC})
 | 
						|
+# Clear Boost_INCLUDE_DIR if it did not change but other input affecting the
 | 
						|
+# location did.  We will find a new one based on the new inputs.
 | 
						|
+if(_Boost_CHANGE_INCDIR AND NOT _Boost_INCLUDE_DIR_CHANGED)
 | 
						|
+  unset(Boost_INCLUDE_DIR CACHE)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+if(NOT Boost_INCLUDE_DIR)
 | 
						|
+  set(_boost_INCLUDE_SEARCH_DIRS "")
 | 
						|
+  if(BOOST_INCLUDEDIR)
 | 
						|
+    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${BOOST_INCLUDEDIR})
 | 
						|
+  elseif(_ENV_BOOST_INCLUDEDIR)
 | 
						|
+    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${_ENV_BOOST_INCLUDEDIR})
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  if( BOOST_ROOT )
 | 
						|
+    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${BOOST_ROOT}/include ${BOOST_ROOT})
 | 
						|
+  elseif( _ENV_BOOST_ROOT )
 | 
						|
+    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${_ENV_BOOST_ROOT}/include ${_ENV_BOOST_ROOT})
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  if( Boost_NO_SYSTEM_PATHS)
 | 
						|
+    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_TEST_VERSIONS})
 | 
						|
+        string(REPLACE "." "_" ver "${ver}")
 | 
						|
+        list(APPEND _boost_INCLUDE_SEARCH_DIRS PATHS "C:/local/boost_${ver}")
 | 
						|
+      endforeach()
 | 
						|
+    endif()
 | 
						|
+    list(APPEND _boost_INCLUDE_SEARCH_DIRS PATHS
 | 
						|
+      C:/boost/include
 | 
						|
+      C:/boost
 | 
						|
+      /sw/local/include
 | 
						|
+      )
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  # Try to find Boost by stepping backwards through the Boost versions
 | 
						|
+  # we know about.
 | 
						|
+  # Build a list of path suffixes for each version.
 | 
						|
+  set(_boost_PATH_SUFFIXES)
 | 
						|
+  foreach(_boost_VER ${_boost_TEST_VERSIONS})
 | 
						|
+    # Add in a path suffix, based on the required version, ideally
 | 
						|
+    # we could read this from version.hpp, but for that to work we'd
 | 
						|
+    # need to know the include dir already
 | 
						|
+    set(_boost_BOOSTIFIED_VERSION)
 | 
						|
+
 | 
						|
+    # Transform 1.35 => 1_35 and 1.36.0 => 1_36_0
 | 
						|
+    if(_boost_VER MATCHES "([0-9]+)\\.([0-9]+)\\.([0-9]+)")
 | 
						|
+        set(_boost_BOOSTIFIED_VERSION
 | 
						|
+          "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}_${CMAKE_MATCH_3}")
 | 
						|
+    elseif(_boost_VER MATCHES "([0-9]+)\\.([0-9]+)")
 | 
						|
+        set(_boost_BOOSTIFIED_VERSION
 | 
						|
+          "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}")
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    list(APPEND _boost_PATH_SUFFIXES
 | 
						|
+      "boost-${_boost_BOOSTIFIED_VERSION}"
 | 
						|
+      "boost_${_boost_BOOSTIFIED_VERSION}"
 | 
						|
+      "boost/boost-${_boost_BOOSTIFIED_VERSION}"
 | 
						|
+      "boost/boost_${_boost_BOOSTIFIED_VERSION}"
 | 
						|
+      )
 | 
						|
+
 | 
						|
+  endforeach()
 | 
						|
+
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_INCLUDE_SEARCH_DIRS")
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_PATH_SUFFIXES")
 | 
						|
+
 | 
						|
+  # Look for a standard boost header file.
 | 
						|
+  find_path(Boost_INCLUDE_DIR
 | 
						|
+    NAMES         boost/config.hpp
 | 
						|
+    HINTS         ${_boost_INCLUDE_SEARCH_DIRS}
 | 
						|
+    PATH_SUFFIXES ${_boost_PATH_SUFFIXES}
 | 
						|
+    )
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+#  Extract version information from version.hpp
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+if(Boost_INCLUDE_DIR)
 | 
						|
+  _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
 | 
						|
+                     "location of version.hpp: ${Boost_INCLUDE_DIR}/boost/version.hpp")
 | 
						|
+
 | 
						|
+  # Extract Boost_VERSION_MACRO and Boost_LIB_VERSION from version.hpp
 | 
						|
+  set(Boost_VERSION_MACRO 0)
 | 
						|
+  set(Boost_LIB_VERSION "")
 | 
						|
+  file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")
 | 
						|
+  if("${_boost_VERSION_HPP_CONTENTS}" MATCHES "#define BOOST_VERSION ([0-9]+)")
 | 
						|
+    set(Boost_VERSION_MACRO "${CMAKE_MATCH_1}")
 | 
						|
+  endif()
 | 
						|
+  if("${_boost_VERSION_HPP_CONTENTS}" MATCHES "#define BOOST_LIB_VERSION \"([0-9_]+)\"")
 | 
						|
+    set(Boost_LIB_VERSION "${CMAKE_MATCH_1}")
 | 
						|
+  endif()
 | 
						|
+  unset(_boost_VERSION_HPP_CONTENTS)
 | 
						|
+
 | 
						|
+  # Calculate version components
 | 
						|
+  math(EXPR Boost_VERSION_MAJOR "${Boost_VERSION_MACRO} / 100000")
 | 
						|
+  math(EXPR Boost_VERSION_MINOR "${Boost_VERSION_MACRO} / 100 % 1000")
 | 
						|
+  math(EXPR Boost_VERSION_PATCH "${Boost_VERSION_MACRO} % 100")
 | 
						|
+  set(Boost_VERSION_COUNT 3)
 | 
						|
+
 | 
						|
+  # Define alias variables for backwards compat.
 | 
						|
+  set(Boost_MAJOR_VERSION ${Boost_VERSION_MAJOR})
 | 
						|
+  set(Boost_MINOR_VERSION ${Boost_VERSION_MINOR})
 | 
						|
+  set(Boost_SUBMINOR_VERSION ${Boost_VERSION_PATCH})
 | 
						|
+
 | 
						|
+  # Define Boost version in x.y.z format
 | 
						|
+  set(Boost_VERSION_STRING "${Boost_VERSION_MAJOR}.${Boost_VERSION_MINOR}.${Boost_VERSION_PATCH}")
 | 
						|
+
 | 
						|
+  if (POLICY CMP0093)
 | 
						|
+    # Define final Boost_VERSION
 | 
						|
+    cmake_policy(GET CMP0093 _Boost_CMP0093
 | 
						|
+      PARENT_SCOPE # undocumented, do not use outside of CMake
 | 
						|
+    )
 | 
						|
+    if("x${_Boost_CMP0093}x" STREQUAL "xNEWx")
 | 
						|
+      set(Boost_VERSION ${Boost_VERSION_STRING})
 | 
						|
+    endif()
 | 
						|
+    unset(_Boost_CMP0093)
 | 
						|
+  else()
 | 
						|
+    set(Boost_VERSION ${Boost_VERSION_MACRO})
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION")
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_STRING")
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MACRO")
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MAJOR")
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MINOR")
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_PATCH")
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_COUNT")
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+#  Prefix initialization
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+set(Boost_LIB_PREFIX "")
 | 
						|
+if ( (GHSMULTI AND Boost_USE_STATIC_LIBS) OR
 | 
						|
+    (WIN32 AND Boost_USE_STATIC_LIBS AND NOT CYGWIN) )
 | 
						|
+  set(Boost_LIB_PREFIX "lib")
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+if ( NOT Boost_NAMESPACE )
 | 
						|
+  set(Boost_NAMESPACE "boost")
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_LIB_PREFIX")
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_NAMESPACE")
 | 
						|
+
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+#  Suffix initialization and compiler suffix detection.
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+set(_Boost_VARS_NAME
 | 
						|
+  Boost_NAMESPACE
 | 
						|
+  Boost_COMPILER
 | 
						|
+  Boost_THREADAPI
 | 
						|
+  Boost_USE_DEBUG_PYTHON
 | 
						|
+  Boost_USE_MULTITHREADED
 | 
						|
+  Boost_USE_STATIC_LIBS
 | 
						|
+  Boost_USE_STATIC_RUNTIME
 | 
						|
+  Boost_USE_STLPORT
 | 
						|
+  Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
 | 
						|
+  )
 | 
						|
+_Boost_CHANGE_DETECT(_Boost_CHANGE_LIBNAME ${_Boost_VARS_NAME})
 | 
						|
+
 | 
						|
+# Setting some more suffixes for the library
 | 
						|
+if (Boost_COMPILER)
 | 
						|
+  set(_boost_COMPILER ${Boost_COMPILER})
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
 | 
						|
+                         "_boost_COMPILER" SOURCE "user-specified via Boost_COMPILER")
 | 
						|
+else()
 | 
						|
+  # Attempt to guess the compiler suffix
 | 
						|
+  # NOTE: this is not perfect yet, if you experience any issues
 | 
						|
+  # please report them and use the Boost_COMPILER variable
 | 
						|
+  # to work around the problems.
 | 
						|
+  _Boost_GUESS_COMPILER_PREFIX(_boost_COMPILER)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+set (_boost_MULTITHREADED "-mt")
 | 
						|
+if( NOT Boost_USE_MULTITHREADED )
 | 
						|
+  set (_boost_MULTITHREADED "")
 | 
						|
+endif()
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_MULTITHREADED")
 | 
						|
+
 | 
						|
+#======================
 | 
						|
+# Systematically build up the Boost ABI tag for the 'tagged' and 'versioned' layouts
 | 
						|
+# http://boost.org/doc/libs/1_66_0/more/getting_started/windows.html#library-naming
 | 
						|
+# http://boost.org/doc/libs/1_66_0/boost/config/auto_link.hpp
 | 
						|
+# http://boost.org/doc/libs/1_66_0/tools/build/src/tools/common.jam
 | 
						|
+# http://boost.org/doc/libs/1_66_0/boostcpp.jam
 | 
						|
+set( _boost_RELEASE_ABI_TAG "-")
 | 
						|
+set( _boost_DEBUG_ABI_TAG   "-")
 | 
						|
+# Key       Use this library when:
 | 
						|
+#  s        linking statically to the C++ standard library and
 | 
						|
+#           compiler runtime support libraries.
 | 
						|
+if(Boost_USE_STATIC_RUNTIME)
 | 
						|
+  set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}s")
 | 
						|
+  set( _boost_DEBUG_ABI_TAG   "${_boost_DEBUG_ABI_TAG}s")
 | 
						|
+endif()
 | 
						|
+#  g        using debug versions of the standard and runtime
 | 
						|
+#           support libraries
 | 
						|
+if(WIN32 AND Boost_USE_DEBUG_RUNTIME)
 | 
						|
+  if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC"
 | 
						|
+          OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang"
 | 
						|
+          OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntel")
 | 
						|
+    string(APPEND _boost_DEBUG_ABI_TAG "g")
 | 
						|
+  endif()
 | 
						|
+endif()
 | 
						|
+#  y        using special debug build of python
 | 
						|
+if(Boost_USE_DEBUG_PYTHON)
 | 
						|
+  string(APPEND _boost_DEBUG_ABI_TAG "y")
 | 
						|
+endif()
 | 
						|
+#  d        using a debug version of your code
 | 
						|
+string(APPEND _boost_DEBUG_ABI_TAG "d")
 | 
						|
+#  p        using the STLport standard library rather than the
 | 
						|
+#           default one supplied with your compiler
 | 
						|
+if(Boost_USE_STLPORT)
 | 
						|
+  string(APPEND _boost_RELEASE_ABI_TAG "p")
 | 
						|
+  string(APPEND _boost_DEBUG_ABI_TAG "p")
 | 
						|
+endif()
 | 
						|
+#  n        using the STLport deprecated "native iostreams" feature
 | 
						|
+#           removed from the documentation in 1.43.0 but still present in
 | 
						|
+#           boost/config/auto_link.hpp
 | 
						|
+if(Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS)
 | 
						|
+  string(APPEND _boost_RELEASE_ABI_TAG "n")
 | 
						|
+  string(APPEND _boost_DEBUG_ABI_TAG "n")
 | 
						|
+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
 | 
						|
+if(DEFINED Boost_ARCHITECTURE)
 | 
						|
+  set(_boost_ARCHITECTURE_TAG "${Boost_ARCHITECTURE}")
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
 | 
						|
+                         "_boost_ARCHITECTURE_TAG" SOURCE "user-specified via Boost_ARCHITECTURE")
 | 
						|
+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_STRING VERSION_LESS 1.66.0)
 | 
						|
+    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()
 | 
						|
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
 | 
						|
+                         "_boost_ARCHITECTURE_TAG" SOURCE "detected")
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_RELEASE_ABI_TAG")
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_DEBUG_ABI_TAG")
 | 
						|
+
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+#  Begin finding boost libraries
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+set(_Boost_VARS_LIB "")
 | 
						|
+foreach(c DEBUG RELEASE)
 | 
						|
+  set(_Boost_VARS_LIB_${c} BOOST_LIBRARYDIR Boost_LIBRARY_DIR_${c})
 | 
						|
+  list(APPEND _Boost_VARS_LIB ${_Boost_VARS_LIB_${c}})
 | 
						|
+  _Boost_CHANGE_DETECT(_Boost_CHANGE_LIBDIR_${c} ${_Boost_VARS_DIR} ${_Boost_VARS_LIB_${c}} Boost_INCLUDE_DIR)
 | 
						|
+  # Clear Boost_LIBRARY_DIR_${c} if it did not change but other input affecting the
 | 
						|
+  # location did.  We will find a new one based on the new inputs.
 | 
						|
+  if(_Boost_CHANGE_LIBDIR_${c} AND NOT _Boost_LIBRARY_DIR_${c}_CHANGED)
 | 
						|
+    unset(Boost_LIBRARY_DIR_${c} CACHE)
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  # If Boost_LIBRARY_DIR_[RELEASE,DEBUG] is set, prefer its value.
 | 
						|
+  if(Boost_LIBRARY_DIR_${c})
 | 
						|
+    set(_boost_LIBRARY_SEARCH_DIRS_${c} ${Boost_LIBRARY_DIR_${c}} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
 | 
						|
+  else()
 | 
						|
+    set(_boost_LIBRARY_SEARCH_DIRS_${c} "")
 | 
						|
+    if(BOOST_LIBRARYDIR)
 | 
						|
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${BOOST_LIBRARYDIR})
 | 
						|
+    elseif(_ENV_BOOST_LIBRARYDIR)
 | 
						|
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${_ENV_BOOST_LIBRARYDIR})
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    if(BOOST_ROOT)
 | 
						|
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${BOOST_ROOT}/lib ${BOOST_ROOT}/stage/lib)
 | 
						|
+      _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${BOOST_ROOT}")
 | 
						|
+    elseif(_ENV_BOOST_ROOT)
 | 
						|
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${_ENV_BOOST_ROOT}/lib ${_ENV_BOOST_ROOT}/stage/lib)
 | 
						|
+      _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${_ENV_BOOST_ROOT}")
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c}
 | 
						|
+      ${Boost_INCLUDE_DIR}/lib
 | 
						|
+      ${Boost_INCLUDE_DIR}/../lib
 | 
						|
+      ${Boost_INCLUDE_DIR}/stage/lib
 | 
						|
+      )
 | 
						|
+    _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${Boost_INCLUDE_DIR}/..")
 | 
						|
+    _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${Boost_INCLUDE_DIR}")
 | 
						|
+    if( Boost_NO_SYSTEM_PATHS )
 | 
						|
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH)
 | 
						|
+    else()
 | 
						|
+      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()
 | 
						|
+      _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "C:/boost")
 | 
						|
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} PATHS
 | 
						|
+        C:/boost/lib
 | 
						|
+        C:/boost
 | 
						|
+        /sw/local/lib
 | 
						|
+        )
 | 
						|
+    endif()
 | 
						|
+  endif()
 | 
						|
+endforeach()
 | 
						|
+
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_LIBRARY_SEARCH_DIRS_RELEASE")
 | 
						|
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_LIBRARY_SEARCH_DIRS_DEBUG")
 | 
						|
+
 | 
						|
+# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
 | 
						|
+if( Boost_USE_STATIC_LIBS )
 | 
						|
+  set( _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
 | 
						|
+  if(WIN32)
 | 
						|
+    list(INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 .lib .a)
 | 
						|
+  else()
 | 
						|
+    set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
 | 
						|
+  endif()
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# We want to use the tag inline below without risking double dashes
 | 
						|
+if(_boost_RELEASE_ABI_TAG)
 | 
						|
+  if(${_boost_RELEASE_ABI_TAG} STREQUAL "-")
 | 
						|
+    set(_boost_RELEASE_ABI_TAG "")
 | 
						|
+  endif()
 | 
						|
+endif()
 | 
						|
+if(_boost_DEBUG_ABI_TAG)
 | 
						|
+  if(${_boost_DEBUG_ABI_TAG} STREQUAL "-")
 | 
						|
+    set(_boost_DEBUG_ABI_TAG "")
 | 
						|
+  endif()
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# The previous behavior of FindBoost when Boost_USE_STATIC_LIBS was enabled
 | 
						|
+# on WIN32 was to:
 | 
						|
+#  1. Search for static libs compiled against a SHARED C++ standard runtime library (use if found)
 | 
						|
+#  2. Search for static libs compiled against a STATIC C++ standard runtime library (use if found)
 | 
						|
+# We maintain this behavior since changing it could break people's builds.
 | 
						|
+# To disable the ambiguous behavior, the user need only
 | 
						|
+# set Boost_USE_STATIC_RUNTIME either ON or OFF.
 | 
						|
+set(_boost_STATIC_RUNTIME_WORKAROUND false)
 | 
						|
+if(WIN32 AND Boost_USE_STATIC_LIBS)
 | 
						|
+  if(NOT DEFINED Boost_USE_STATIC_RUNTIME)
 | 
						|
+    set(_boost_STATIC_RUNTIME_WORKAROUND TRUE)
 | 
						|
+  endif()
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# On versions < 1.35, remove the System library from the considered list
 | 
						|
+# since it wasn't added until 1.35.
 | 
						|
+if(Boost_VERSION_STRING AND Boost_FIND_COMPONENTS)
 | 
						|
+  if(Boost_VERSION_STRING VERSION_LESS 1.35.0)
 | 
						|
+    list(REMOVE_ITEM Boost_FIND_COMPONENTS system)
 | 
						|
+  endif()
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# Additional components may be required via component dependencies.
 | 
						|
+# Add any missing components to the list.
 | 
						|
+_Boost_MISSING_DEPENDENCIES(Boost_FIND_COMPONENTS _Boost_EXTRA_FIND_COMPONENTS)
 | 
						|
+
 | 
						|
+# If thread is required, get the thread libs as a dependency
 | 
						|
+if("thread" IN_LIST Boost_FIND_COMPONENTS)
 | 
						|
+  if(Boost_FIND_QUIETLY)
 | 
						|
+    set(_Boost_find_quiet QUIET)
 | 
						|
+  else()
 | 
						|
+    set(_Boost_find_quiet "")
 | 
						|
+  endif()
 | 
						|
+  find_package(Threads ${_Boost_find_quiet})
 | 
						|
+  unset(_Boost_find_quiet)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# If the user changed any of our control inputs flush previous results.
 | 
						|
+if(_Boost_CHANGE_LIBDIR_DEBUG OR _Boost_CHANGE_LIBDIR_RELEASE OR _Boost_CHANGE_LIBNAME)
 | 
						|
+  foreach(COMPONENT ${_Boost_COMPONENTS_SEARCHED})
 | 
						|
+    string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
 | 
						|
+    foreach(c DEBUG RELEASE)
 | 
						|
+      set(_var Boost_${UPPERCOMPONENT}_LIBRARY_${c})
 | 
						|
+      unset(${_var} CACHE)
 | 
						|
+      set(${_var} "${_var}-NOTFOUND")
 | 
						|
+    endforeach()
 | 
						|
+  endforeach()
 | 
						|
+  set(_Boost_COMPONENTS_SEARCHED "")
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+foreach(COMPONENT ${Boost_FIND_COMPONENTS})
 | 
						|
+  string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
 | 
						|
+
 | 
						|
+  set( _boost_docstring_release "Boost ${COMPONENT} library (release)")
 | 
						|
+  set( _boost_docstring_debug   "Boost ${COMPONENT} library (debug)")
 | 
						|
+
 | 
						|
+  # Compute component-specific hints.
 | 
						|
+  set(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT "")
 | 
						|
+  if(${COMPONENT} STREQUAL "mpi" OR ${COMPONENT} STREQUAL "mpi_python" OR
 | 
						|
+     ${COMPONENT} STREQUAL "graph_parallel")
 | 
						|
+    foreach(lib ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES})
 | 
						|
+      if(IS_ABSOLUTE "${lib}")
 | 
						|
+        get_filename_component(libdir "${lib}" PATH)
 | 
						|
+        string(REPLACE "\\" "/" libdir "${libdir}")
 | 
						|
+        list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT ${libdir})
 | 
						|
+      endif()
 | 
						|
+    endforeach()
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  # Handle Python version suffixes
 | 
						|
+  unset(COMPONENT_PYTHON_VERSION_MAJOR)
 | 
						|
+  unset(COMPONENT_PYTHON_VERSION_MINOR)
 | 
						|
+  if(${COMPONENT} MATCHES "^(python|mpi_python|numpy)([0-9])\$")
 | 
						|
+    set(COMPONENT_UNVERSIONED "${CMAKE_MATCH_1}")
 | 
						|
+    set(COMPONENT_PYTHON_VERSION_MAJOR "${CMAKE_MATCH_2}")
 | 
						|
+  elseif(${COMPONENT} MATCHES "^(python|mpi_python|numpy)([0-9])\\.?([0-9])\$")
 | 
						|
+    set(COMPONENT_UNVERSIONED "${CMAKE_MATCH_1}")
 | 
						|
+    set(COMPONENT_PYTHON_VERSION_MAJOR "${CMAKE_MATCH_2}")
 | 
						|
+    set(COMPONENT_PYTHON_VERSION_MINOR "${CMAKE_MATCH_3}")
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  unset(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
 | 
						|
+  if (COMPONENT_PYTHON_VERSION_MINOR)
 | 
						|
+    # Boost >= 1.67
 | 
						|
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
 | 
						|
+    # Debian/Ubuntu (Some versions omit the 2 and/or 3 from the suffix)
 | 
						|
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}-py${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
 | 
						|
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-py${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
 | 
						|
+    # Gentoo
 | 
						|
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-${COMPONENT_PYTHON_VERSION_MAJOR}.${COMPONENT_PYTHON_VERSION_MINOR}")
 | 
						|
+    # RPMs
 | 
						|
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
 | 
						|
+  endif()
 | 
						|
+  if (COMPONENT_PYTHON_VERSION_MAJOR AND NOT COMPONENT_PYTHON_VERSION_MINOR)
 | 
						|
+    # Boost < 1.67
 | 
						|
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}")
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  # Consolidate and report component-specific hints.
 | 
						|
+  if(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
 | 
						|
+    list(REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
 | 
						|
+    _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
 | 
						|
+      "Component-specific library search names for ${COMPONENT_NAME}: ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME}")
 | 
						|
+  endif()
 | 
						|
+  if(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
 | 
						|
+    list(REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
 | 
						|
+    _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
 | 
						|
+      "Component-specific library search paths for ${COMPONENT}: ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT}")
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  #
 | 
						|
+  # Find headers
 | 
						|
+  #
 | 
						|
+  _Boost_COMPONENT_HEADERS("${COMPONENT}" Boost_${UPPERCOMPONENT}_HEADER_NAME)
 | 
						|
+  # Look for a standard boost header file.
 | 
						|
+  if(Boost_${UPPERCOMPONENT}_HEADER_NAME)
 | 
						|
+    if(EXISTS "${Boost_INCLUDE_DIR}/${Boost_${UPPERCOMPONENT}_HEADER_NAME}")
 | 
						|
+      set(Boost_${UPPERCOMPONENT}_HEADER ON)
 | 
						|
+    else()
 | 
						|
+      set(Boost_${UPPERCOMPONENT}_HEADER OFF)
 | 
						|
+    endif()
 | 
						|
+  else()
 | 
						|
+    set(Boost_${UPPERCOMPONENT}_HEADER ON)
 | 
						|
+    message(WARNING "No header defined for ${COMPONENT}; skipping header check")
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  #
 | 
						|
+  # Find RELEASE libraries
 | 
						|
+  #
 | 
						|
+  unset(_boost_RELEASE_NAMES)
 | 
						|
+  foreach(component IN LISTS _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME COMPONENT)
 | 
						|
+    foreach(compiler IN LISTS _boost_COMPILER)
 | 
						|
+      list(APPEND _boost_RELEASE_NAMES
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG} )
 | 
						|
+    endforeach()
 | 
						|
+    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_ARCHITECTURE_TAG}
 | 
						|
+      ${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}")
 | 
						|
+      foreach(compiler IN LISTS _boost_COMPILER)
 | 
						|
+        list(APPEND _boost_RELEASE_NAMES
 | 
						|
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
 | 
						|
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
 | 
						|
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} )
 | 
						|
+      endforeach()
 | 
						|
+      list(APPEND _boost_RELEASE_NAMES
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} )
 | 
						|
+    endif()
 | 
						|
+  endforeach()
 | 
						|
+  if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
 | 
						|
+    _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_RELEASE_NAMES ${_boost_RELEASE_NAMES})
 | 
						|
+  endif()
 | 
						|
+  _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
 | 
						|
+                     "Searching for ${UPPERCOMPONENT}_LIBRARY_RELEASE: ${_boost_RELEASE_NAMES}")
 | 
						|
+
 | 
						|
+  # if Boost_LIBRARY_DIR_RELEASE is not defined,
 | 
						|
+  # but Boost_LIBRARY_DIR_DEBUG is, look there first for RELEASE libs
 | 
						|
+  if(NOT Boost_LIBRARY_DIR_RELEASE AND Boost_LIBRARY_DIR_DEBUG)
 | 
						|
+    list(INSERT _boost_LIBRARY_SEARCH_DIRS_RELEASE 0 ${Boost_LIBRARY_DIR_DEBUG})
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  # Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
 | 
						|
+  string(REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS_RELEASE}")
 | 
						|
+
 | 
						|
+  if(Boost_USE_RELEASE_LIBS)
 | 
						|
+    _Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE RELEASE
 | 
						|
+      NAMES ${_boost_RELEASE_NAMES}
 | 
						|
+      HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
 | 
						|
+      NAMES_PER_DIR
 | 
						|
+      DOC "${_boost_docstring_release}"
 | 
						|
+      )
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  #
 | 
						|
+  # Find DEBUG libraries
 | 
						|
+  #
 | 
						|
+  unset(_boost_DEBUG_NAMES)
 | 
						|
+  foreach(component IN LISTS _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME COMPONENT)
 | 
						|
+    foreach(compiler IN LISTS _boost_COMPILER)
 | 
						|
+      list(APPEND _boost_DEBUG_NAMES
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG} )
 | 
						|
+    endforeach()
 | 
						|
+    list(APPEND _boost_DEBUG_NAMES
 | 
						|
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
 | 
						|
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}
 | 
						|
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
 | 
						|
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}
 | 
						|
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component} )
 | 
						|
+    if(_boost_STATIC_RUNTIME_WORKAROUND)
 | 
						|
+      set(_boost_DEBUG_STATIC_ABI_TAG "-s${_boost_DEBUG_ABI_TAG}")
 | 
						|
+      foreach(compiler IN LISTS _boost_COMPILER)
 | 
						|
+        list(APPEND _boost_DEBUG_NAMES
 | 
						|
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
 | 
						|
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
 | 
						|
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} )
 | 
						|
+      endforeach()
 | 
						|
+      list(APPEND _boost_DEBUG_NAMES
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
 | 
						|
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} )
 | 
						|
+    endif()
 | 
						|
+  endforeach()
 | 
						|
+  if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
 | 
						|
+     _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_DEBUG_NAMES ${_boost_DEBUG_NAMES})
 | 
						|
+  endif()
 | 
						|
+  _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
 | 
						|
+                     "Searching for ${UPPERCOMPONENT}_LIBRARY_DEBUG: ${_boost_DEBUG_NAMES}")
 | 
						|
+
 | 
						|
+  # if Boost_LIBRARY_DIR_DEBUG is not defined,
 | 
						|
+  # but Boost_LIBRARY_DIR_RELEASE is, look there first for DEBUG libs
 | 
						|
+  if(NOT Boost_LIBRARY_DIR_DEBUG AND Boost_LIBRARY_DIR_RELEASE)
 | 
						|
+    list(INSERT _boost_LIBRARY_SEARCH_DIRS_DEBUG 0 ${Boost_LIBRARY_DIR_RELEASE})
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  # Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
 | 
						|
+  string(REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS_DEBUG}")
 | 
						|
+
 | 
						|
+  if(Boost_USE_DEBUG_LIBS)
 | 
						|
+    _Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG DEBUG
 | 
						|
+      NAMES ${_boost_DEBUG_NAMES}
 | 
						|
+      HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
 | 
						|
+      NAMES_PER_DIR
 | 
						|
+      DOC "${_boost_docstring_debug}"
 | 
						|
+      )
 | 
						|
+  endif ()
 | 
						|
+
 | 
						|
+  if(Boost_REALPATH)
 | 
						|
+    _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "${_boost_docstring_release}")
 | 
						|
+    _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG   "${_boost_docstring_debug}"  )
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  _Boost_ADJUST_LIB_VARS(${UPPERCOMPONENT})
 | 
						|
+
 | 
						|
+  # Check if component requires some compiler features
 | 
						|
+  _Boost_COMPILER_FEATURES(${COMPONENT} _Boost_${UPPERCOMPONENT}_COMPILER_FEATURES)
 | 
						|
+
 | 
						|
+endforeach()
 | 
						|
+
 | 
						|
+# Restore the original find library ordering
 | 
						|
+if( Boost_USE_STATIC_LIBS )
 | 
						|
+  set(CMAKE_FIND_LIBRARY_SUFFIXES ${_boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+#  End finding boost libraries
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+set(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR})
 | 
						|
+set(Boost_LIBRARY_DIRS)
 | 
						|
+if(Boost_LIBRARY_DIR_RELEASE)
 | 
						|
+  list(APPEND Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIR_RELEASE})
 | 
						|
+endif()
 | 
						|
+if(Boost_LIBRARY_DIR_DEBUG)
 | 
						|
+  list(APPEND Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIR_DEBUG})
 | 
						|
+endif()
 | 
						|
+if(Boost_LIBRARY_DIRS)
 | 
						|
+  list(REMOVE_DUPLICATES Boost_LIBRARY_DIRS)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+#  Call FPHSA helper, see https://cmake.org/cmake/help/latest/module/FindPackageHandleStandardArgs.html
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+# Define aliases as needed by the component handler in the FPHSA helper below
 | 
						|
+foreach(_comp IN LISTS Boost_FIND_COMPONENTS)
 | 
						|
+  string(TOUPPER ${_comp} _uppercomp)
 | 
						|
+  if(DEFINED Boost_${_uppercomp}_FOUND)
 | 
						|
+    set(Boost_${_comp}_FOUND ${Boost_${_uppercomp}_FOUND})
 | 
						|
+  endif()
 | 
						|
+endforeach()
 | 
						|
+
 | 
						|
+find_package_handle_standard_args(Boost
 | 
						|
+  REQUIRED_VARS Boost_INCLUDE_DIR
 | 
						|
+  VERSION_VAR Boost_VERSION_STRING
 | 
						|
+  HANDLE_COMPONENTS)
 | 
						|
+
 | 
						|
+if(Boost_FOUND)
 | 
						|
+  if( NOT Boost_LIBRARY_DIRS )
 | 
						|
+    # Compatibility Code for backwards compatibility with CMake
 | 
						|
+    # 2.4's FindBoost module.
 | 
						|
+
 | 
						|
+    # Look for the boost library path.
 | 
						|
+    # Note that the user may not have installed any libraries
 | 
						|
+    # so it is quite possible the Boost_LIBRARY_DIRS may not exist.
 | 
						|
+    set(_boost_LIB_DIR ${Boost_INCLUDE_DIR})
 | 
						|
+
 | 
						|
+    if("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+")
 | 
						|
+      get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    if("${_boost_LIB_DIR}" MATCHES "/include$")
 | 
						|
+      # Strip off the trailing "/include" in the path.
 | 
						|
+      get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    if(EXISTS "${_boost_LIB_DIR}/lib")
 | 
						|
+      string(APPEND _boost_LIB_DIR /lib)
 | 
						|
+    elseif(EXISTS "${_boost_LIB_DIR}/stage/lib")
 | 
						|
+      string(APPEND _boost_LIB_DIR "/stage/lib")
 | 
						|
+    else()
 | 
						|
+      set(_boost_LIB_DIR "")
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    if(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}")
 | 
						|
+      set(Boost_LIBRARY_DIRS ${_boost_LIB_DIR})
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+  endif()
 | 
						|
+else()
 | 
						|
+  # Boost headers were not found so no components were found.
 | 
						|
+  foreach(COMPONENT ${Boost_FIND_COMPONENTS})
 | 
						|
+    string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
 | 
						|
+    set(Boost_${UPPERCOMPONENT}_FOUND 0)
 | 
						|
+  endforeach()
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+#  Add imported targets
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+if(Boost_FOUND)
 | 
						|
+  # The builtin CMake package in Boost 1.70+ introduces a new name
 | 
						|
+  # for the header-only lib, let's provide the same UI in module mode
 | 
						|
+  if(NOT TARGET Boost::headers)
 | 
						|
+    add_library(Boost::headers INTERFACE IMPORTED)
 | 
						|
+    if(Boost_INCLUDE_DIRS)
 | 
						|
+      set_target_properties(Boost::headers PROPERTIES
 | 
						|
+        INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}")
 | 
						|
+    endif()
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  # Define the old target name for header-only libraries for backwards
 | 
						|
+  # compat.
 | 
						|
+  if(NOT TARGET Boost::boost)
 | 
						|
+    add_library(Boost::boost INTERFACE IMPORTED)
 | 
						|
+    set_target_properties(Boost::boost
 | 
						|
+      PROPERTIES INTERFACE_LINK_LIBRARIES Boost::headers)
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  foreach(COMPONENT ${Boost_FIND_COMPONENTS})
 | 
						|
+    if(_Boost_IMPORTED_TARGETS AND NOT TARGET Boost::${COMPONENT})
 | 
						|
+      string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
 | 
						|
+      if(Boost_${UPPERCOMPONENT}_FOUND)
 | 
						|
+        if(Boost_USE_STATIC_LIBS)
 | 
						|
+          add_library(Boost::${COMPONENT} STATIC IMPORTED)
 | 
						|
+        else()
 | 
						|
+          # Even if Boost_USE_STATIC_LIBS is OFF, we might have static
 | 
						|
+          # libraries as a result.
 | 
						|
+          add_library(Boost::${COMPONENT} UNKNOWN IMPORTED)
 | 
						|
+        endif()
 | 
						|
+        if(Boost_INCLUDE_DIRS)
 | 
						|
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
 | 
						|
+            INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}")
 | 
						|
+        endif()
 | 
						|
+        if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY}")
 | 
						|
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
 | 
						|
+            IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
 | 
						|
+            IMPORTED_LOCATION "${Boost_${UPPERCOMPONENT}_LIBRARY}")
 | 
						|
+        endif()
 | 
						|
+        if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE}")
 | 
						|
+          set_property(TARGET Boost::${COMPONENT} APPEND PROPERTY
 | 
						|
+            IMPORTED_CONFIGURATIONS RELEASE)
 | 
						|
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
 | 
						|
+            IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
 | 
						|
+            IMPORTED_LOCATION_RELEASE "${Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE}")
 | 
						|
+        endif()
 | 
						|
+        if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG}")
 | 
						|
+          set_property(TARGET Boost::${COMPONENT} APPEND PROPERTY
 | 
						|
+            IMPORTED_CONFIGURATIONS DEBUG)
 | 
						|
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
 | 
						|
+            IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
 | 
						|
+            IMPORTED_LOCATION_DEBUG "${Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG}")
 | 
						|
+        endif()
 | 
						|
+        if(_Boost_${UPPERCOMPONENT}_DEPENDENCIES)
 | 
						|
+          unset(_Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES)
 | 
						|
+          foreach(dep ${_Boost_${UPPERCOMPONENT}_DEPENDENCIES})
 | 
						|
+            list(APPEND _Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES Boost::${dep})
 | 
						|
+          endforeach()
 | 
						|
+          if(COMPONENT STREQUAL "thread")
 | 
						|
+            list(APPEND _Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES Threads::Threads)
 | 
						|
+          endif()
 | 
						|
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
 | 
						|
+            INTERFACE_LINK_LIBRARIES "${_Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES}")
 | 
						|
+        endif()
 | 
						|
+        if(_Boost_${UPPERCOMPONENT}_COMPILER_FEATURES)
 | 
						|
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
 | 
						|
+            INTERFACE_COMPILE_FEATURES "${_Boost_${UPPERCOMPONENT}_COMPILER_FEATURES}")
 | 
						|
+        endif()
 | 
						|
+      endif()
 | 
						|
+    endif()
 | 
						|
+  endforeach()
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+#  Finalize
 | 
						|
+# ------------------------------------------------------------------------
 | 
						|
+
 | 
						|
+# Report Boost_LIBRARIES
 | 
						|
+set(Boost_LIBRARIES "")
 | 
						|
+foreach(_comp IN LISTS Boost_FIND_COMPONENTS)
 | 
						|
+  string(TOUPPER ${_comp} _uppercomp)
 | 
						|
+  if(Boost_${_uppercomp}_FOUND)
 | 
						|
+    list(APPEND Boost_LIBRARIES ${Boost_${_uppercomp}_LIBRARY})
 | 
						|
+    if(_comp STREQUAL "thread")
 | 
						|
+      list(APPEND Boost_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
 | 
						|
+    endif()
 | 
						|
+  endif()
 | 
						|
+endforeach()
 | 
						|
+
 | 
						|
+# Configure display of cache entries in GUI.
 | 
						|
+foreach(v BOOSTROOT BOOST_ROOT ${_Boost_VARS_INC} ${_Boost_VARS_LIB})
 | 
						|
+  get_property(_type CACHE ${v} PROPERTY TYPE)
 | 
						|
+  if(_type)
 | 
						|
+    set_property(CACHE ${v} PROPERTY ADVANCED 1)
 | 
						|
+    if("x${_type}" STREQUAL "xUNINITIALIZED")
 | 
						|
+      if("x${v}" STREQUAL "xBoost_ADDITIONAL_VERSIONS")
 | 
						|
+        set_property(CACHE ${v} PROPERTY TYPE STRING)
 | 
						|
+      else()
 | 
						|
+        set_property(CACHE ${v} PROPERTY TYPE PATH)
 | 
						|
+      endif()
 | 
						|
+    endif()
 | 
						|
+  endif()
 | 
						|
+endforeach()
 | 
						|
+
 | 
						|
+# Record last used values of input variables so we can
 | 
						|
+# detect on the next run if the user changed them.
 | 
						|
+foreach(v
 | 
						|
+    ${_Boost_VARS_INC} ${_Boost_VARS_LIB}
 | 
						|
+    ${_Boost_VARS_DIR} ${_Boost_VARS_NAME}
 | 
						|
+    )
 | 
						|
+  if(DEFINED ${v})
 | 
						|
+    set(_${v}_LAST "${${v}}" CACHE INTERNAL "Last used ${v} value.")
 | 
						|
+  else()
 | 
						|
+    unset(_${v}_LAST CACHE)
 | 
						|
+  endif()
 | 
						|
+endforeach()
 | 
						|
+
 | 
						|
+# Maintain a persistent list of components requested anywhere since
 | 
						|
+# the last flush.
 | 
						|
+set(_Boost_COMPONENTS_SEARCHED "${_Boost_COMPONENTS_SEARCHED}")
 | 
						|
+list(APPEND _Boost_COMPONENTS_SEARCHED ${Boost_FIND_COMPONENTS})
 | 
						|
+list(REMOVE_DUPLICATES _Boost_COMPONENTS_SEARCHED)
 | 
						|
+list(SORT _Boost_COMPONENTS_SEARCHED)
 | 
						|
+set(_Boost_COMPONENTS_SEARCHED "${_Boost_COMPONENTS_SEARCHED}"
 | 
						|
+  CACHE INTERNAL "Components requested for this build tree.")
 | 
						|
+
 | 
						|
+# Restore project's policies
 | 
						|
+cmake_policy(POP)
 | 
						|
diff --git a/Builds/CMake/deps/Findjemalloc.cmake b/Builds/CMake/deps/Findjemalloc.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..820ceeed4
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Findjemalloc.cmake
 | 
						|
@@ -0,0 +1,47 @@
 | 
						|
+# - Try to find jemalloc
 | 
						|
+# Once done this will define
 | 
						|
+#  JEMALLOC_FOUND - System has jemalloc
 | 
						|
+#  JEMALLOC_INCLUDE_DIRS - The jemalloc include directories
 | 
						|
+#  JEMALLOC_LIBRARIES - The libraries needed to use jemalloc
 | 
						|
+
 | 
						|
+if(NOT USE_BUNDLED_JEMALLOC)
 | 
						|
+  find_package(PkgConfig)
 | 
						|
+  if (PKG_CONFIG_FOUND)
 | 
						|
+    pkg_check_modules(PC_JEMALLOC QUIET jemalloc)
 | 
						|
+  endif()
 | 
						|
+else()
 | 
						|
+  set(PC_JEMALLOC_INCLUDEDIR)
 | 
						|
+  set(PC_JEMALLOC_INCLUDE_DIRS)
 | 
						|
+  set(PC_JEMALLOC_LIBDIR)
 | 
						|
+  set(PC_JEMALLOC_LIBRARY_DIRS)
 | 
						|
+  set(LIMIT_SEARCH NO_DEFAULT_PATH)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+set(JEMALLOC_DEFINITIONS ${PC_JEMALLOC_CFLAGS_OTHER})
 | 
						|
+
 | 
						|
+find_path(JEMALLOC_INCLUDE_DIR jemalloc/jemalloc.h
 | 
						|
+          PATHS ${PC_JEMALLOC_INCLUDEDIR} ${PC_JEMALLOC_INCLUDE_DIRS}
 | 
						|
+          ${LIMIT_SEARCH})
 | 
						|
+
 | 
						|
+# If we're asked to use static linkage, add libjemalloc.a as a preferred library name.
 | 
						|
+if(JEMALLOC_USE_STATIC)
 | 
						|
+  list(APPEND JEMALLOC_NAMES
 | 
						|
+    "${CMAKE_STATIC_LIBRARY_PREFIX}jemalloc${CMAKE_STATIC_LIBRARY_SUFFIX}")
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+list(APPEND JEMALLOC_NAMES jemalloc)
 | 
						|
+
 | 
						|
+find_library(JEMALLOC_LIBRARY NAMES ${JEMALLOC_NAMES}
 | 
						|
+  HINTS ${PC_JEMALLOC_LIBDIR} ${PC_JEMALLOC_LIBRARY_DIRS}
 | 
						|
+  ${LIMIT_SEARCH})
 | 
						|
+
 | 
						|
+set(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY})
 | 
						|
+set(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR})
 | 
						|
+
 | 
						|
+include(FindPackageHandleStandardArgs)
 | 
						|
+# handle the QUIETLY and REQUIRED arguments and set JEMALLOC_FOUND to TRUE
 | 
						|
+# if all listed variables are TRUE
 | 
						|
+find_package_handle_standard_args(JeMalloc DEFAULT_MSG
 | 
						|
+  JEMALLOC_LIBRARY JEMALLOC_INCLUDE_DIR)
 | 
						|
+
 | 
						|
+mark_as_advanced(JEMALLOC_INCLUDE_DIR JEMALLOC_LIBRARY)
 | 
						|
diff --git a/Builds/CMake/deps/Findlibarchive_pc.cmake b/Builds/CMake/deps/Findlibarchive_pc.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..8f248b287
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Findlibarchive_pc.cmake
 | 
						|
@@ -0,0 +1,22 @@
 | 
						|
+find_package (PkgConfig REQUIRED)
 | 
						|
+pkg_search_module (libarchive_PC QUIET libarchive>=3.4.3)
 | 
						|
+
 | 
						|
+if(static)
 | 
						|
+  set(LIBARCHIVE_LIB libarchive.a)
 | 
						|
+else()
 | 
						|
+  set(LIBARCHIVE_LIB archive)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+find_library (archive
 | 
						|
+  NAMES ${LIBARCHIVE_LIB}
 | 
						|
+  HINTS
 | 
						|
+    ${libarchive_PC_LIBDIR}
 | 
						|
+    ${libarchive_PC_LIBRARY_DIRS}
 | 
						|
+  NO_DEFAULT_PATH)
 | 
						|
+
 | 
						|
+find_path (LIBARCHIVE_INCLUDE_DIR
 | 
						|
+  NAMES archive.h
 | 
						|
+  HINTS
 | 
						|
+    ${libarchive_PC_INCLUDEDIR}
 | 
						|
+    ${libarchive_PC_INCLUDEDIRS}
 | 
						|
+  NO_DEFAULT_PATH)
 | 
						|
diff --git a/Builds/CMake/deps/Findlz4.cmake b/Builds/CMake/deps/Findlz4.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..835f5989d
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Findlz4.cmake
 | 
						|
@@ -0,0 +1,24 @@
 | 
						|
+find_package (PkgConfig)
 | 
						|
+if (PKG_CONFIG_FOUND)
 | 
						|
+  pkg_search_module (lz4_PC QUIET liblz4>=1.9)
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+if(static)
 | 
						|
+  set(LZ4_LIB liblz4.a)
 | 
						|
+else()
 | 
						|
+  set(LZ4_LIB lz4.so)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+find_library (lz4
 | 
						|
+  NAMES ${LZ4_LIB}
 | 
						|
+  HINTS
 | 
						|
+    ${lz4_PC_LIBDIR}
 | 
						|
+    ${lz4_PC_LIBRARY_DIRS}
 | 
						|
+  NO_DEFAULT_PATH)
 | 
						|
+
 | 
						|
+find_path (LZ4_INCLUDE_DIR
 | 
						|
+  NAMES lz4.h
 | 
						|
+  HINTS
 | 
						|
+    ${lz4_PC_INCLUDEDIR}
 | 
						|
+    ${lz4_PC_INCLUDEDIRS}
 | 
						|
+  NO_DEFAULT_PATH)
 | 
						|
diff --git a/Builds/CMake/deps/Findsecp256k1.cmake b/Builds/CMake/deps/Findsecp256k1.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..7be3d0272
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Findsecp256k1.cmake
 | 
						|
@@ -0,0 +1,24 @@
 | 
						|
+find_package (PkgConfig)
 | 
						|
+if (PKG_CONFIG_FOUND)
 | 
						|
+  pkg_search_module (secp256k1_PC QUIET libsecp256k1)
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+if(static)
 | 
						|
+  set(SECP256K1_LIB libsecp256k1.a)
 | 
						|
+else()
 | 
						|
+  set(SECP256K1_LIB secp256k1)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+find_library(secp256k1
 | 
						|
+  NAMES ${SECP256K1_LIB}
 | 
						|
+  HINTS
 | 
						|
+    ${secp256k1_PC_LIBDIR}
 | 
						|
+    ${secp256k1_PC_LIBRARY_PATHS}
 | 
						|
+  NO_DEFAULT_PATH)
 | 
						|
+
 | 
						|
+find_path (SECP256K1_INCLUDE_DIR
 | 
						|
+  NAMES secp256k1.h
 | 
						|
+  HINTS
 | 
						|
+    ${secp256k1_PC_INCLUDEDIR}
 | 
						|
+    ${secp256k1_PC_INCLUDEDIRS}
 | 
						|
+  NO_DEFAULT_PATH)
 | 
						|
diff --git a/Builds/CMake/deps/Findsnappy.cmake b/Builds/CMake/deps/Findsnappy.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..ddf3cb280
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Findsnappy.cmake
 | 
						|
@@ -0,0 +1,24 @@
 | 
						|
+find_package (PkgConfig)
 | 
						|
+if (PKG_CONFIG_FOUND)
 | 
						|
+  pkg_search_module (snappy_PC QUIET snappy>=1.1.7)
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+if(static)
 | 
						|
+  set(SNAPPY_LIB libsnappy.a)
 | 
						|
+else()
 | 
						|
+  set(SNAPPY_LIB libsnappy.so)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+find_library (snappy
 | 
						|
+  NAMES ${SNAPPY_LIB}
 | 
						|
+  HINTS
 | 
						|
+    ${snappy_PC_LIBDIR}
 | 
						|
+    ${snappy_PC_LIBRARY_DIRS}
 | 
						|
+  NO_DEFAULT_PATH)
 | 
						|
+
 | 
						|
+find_path (SNAPPY_INCLUDE_DIR
 | 
						|
+  NAMES snappy.h
 | 
						|
+  HINTS
 | 
						|
+    ${snappy_PC_INCLUDEDIR}
 | 
						|
+    ${snappy_PC_INCLUDEDIRS}
 | 
						|
+  NO_DEFAULT_PATH)
 | 
						|
diff --git a/Builds/CMake/deps/Findsoci.cmake b/Builds/CMake/deps/Findsoci.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..67b89276f
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Findsoci.cmake
 | 
						|
@@ -0,0 +1,17 @@
 | 
						|
+find_package (PkgConfig)
 | 
						|
+if (PKG_CONFIG_FOUND)
 | 
						|
+  # TBD - currently no soci pkgconfig
 | 
						|
+  #pkg_search_module (soci_PC QUIET libsoci_core>=3.2)
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+if(static)
 | 
						|
+  set(SOCI_LIB libsoci.a)
 | 
						|
+else()
 | 
						|
+  set(SOCI_LIB libsoci_core.so)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+find_library (soci
 | 
						|
+  NAMES ${SOCI_LIB})
 | 
						|
+
 | 
						|
+find_path (SOCI_INCLUDE_DIR
 | 
						|
+  NAMES soci/soci.h)
 | 
						|
diff --git a/Builds/CMake/deps/Findsqlite.cmake b/Builds/CMake/deps/Findsqlite.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..ef5c6befc
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Findsqlite.cmake
 | 
						|
@@ -0,0 +1,24 @@
 | 
						|
+find_package (PkgConfig)
 | 
						|
+if (PKG_CONFIG_FOUND)
 | 
						|
+  pkg_search_module (sqlite_PC QUIET sqlite3>=3.26.0)
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+if(static)
 | 
						|
+  set(SQLITE_LIB libsqlite3.a)
 | 
						|
+else()
 | 
						|
+  set(SQLITE_LIB sqlite3.so)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+find_library (sqlite3
 | 
						|
+  NAMES ${SQLITE_LIB}
 | 
						|
+  HINTS
 | 
						|
+    ${sqlite_PC_LIBDIR}
 | 
						|
+    ${sqlite_PC_LIBRARY_DIRS}
 | 
						|
+  NO_DEFAULT_PATH)
 | 
						|
+
 | 
						|
+find_path (SQLITE_INCLUDE_DIR
 | 
						|
+  NAMES sqlite3.h
 | 
						|
+  HINTS
 | 
						|
+    ${sqlite_PC_INCLUDEDIR}
 | 
						|
+    ${sqlite_PC_INCLUDEDIRS}
 | 
						|
+  NO_DEFAULT_PATH)
 | 
						|
diff --git a/Builds/CMake/deps/Libarchive.cmake b/Builds/CMake/deps/Libarchive.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..57b8d2e39
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Libarchive.cmake
 | 
						|
@@ -0,0 +1,163 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: libarchive
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+option (local_libarchive "use local build of libarchive." OFF)
 | 
						|
+add_library (archive_lib UNKNOWN IMPORTED GLOBAL)
 | 
						|
+
 | 
						|
+if (NOT local_libarchive)
 | 
						|
+  if (NOT WIN32)
 | 
						|
+    find_package(libarchive_pc REQUIRED)
 | 
						|
+  endif ()
 | 
						|
+  if (archive)
 | 
						|
+    message (STATUS "Found libarchive using pkg-config. Using ${archive}.")
 | 
						|
+    set_target_properties (archive_lib PROPERTIES
 | 
						|
+      IMPORTED_LOCATION_DEBUG
 | 
						|
+        ${archive}
 | 
						|
+      IMPORTED_LOCATION_RELEASE
 | 
						|
+        ${archive}
 | 
						|
+      INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+        ${LIBARCHIVE_INCLUDE_DIR})
 | 
						|
+      # pkg-config can return extra info for static lib linking
 | 
						|
+      # this is probably needed/useful generally, but apply
 | 
						|
+      # to APPLE for now (mostly for homebrew)
 | 
						|
+      if (APPLE AND static AND libarchive_PC_STATIC_LIBRARIES)
 | 
						|
+        message(STATUS "NOTE: libarchive static libs: ${libarchive_PC_STATIC_LIBRARIES}")
 | 
						|
+        # also, APPLE seems to need iconv...maybe linux does too (TBD)
 | 
						|
+        target_link_libraries (archive_lib
 | 
						|
+          INTERFACE iconv ${libarchive_PC_STATIC_LIBRARIES})
 | 
						|
+      endif ()
 | 
						|
+  else ()
 | 
						|
+    ## now try searching using the minimal find module that cmake provides
 | 
						|
+    find_package(LibArchive 3.4.3 QUIET)
 | 
						|
+    if (LibArchive_FOUND)
 | 
						|
+      if (static)
 | 
						|
+        # find module doesn't find static libs currently, so we re-search
 | 
						|
+        get_filename_component(_loc ${LibArchive_LIBRARY} DIRECTORY)
 | 
						|
+        find_library(_la_static
 | 
						|
+          NAMES libarchive.a archive_static.lib archive.lib
 | 
						|
+          PATHS ${_loc})
 | 
						|
+        if (_la_static)
 | 
						|
+          set (_la_lib ${_la_static})
 | 
						|
+        else ()
 | 
						|
+          message (WARNING "unable to find libarchive static lib - switching to local build")
 | 
						|
+          set (local_libarchive ON CACHE BOOL "" FORCE)
 | 
						|
+        endif ()
 | 
						|
+      else ()
 | 
						|
+        set (_la_lib ${LibArchive_LIBRARY})
 | 
						|
+      endif ()
 | 
						|
+      if (NOT local_libarchive)
 | 
						|
+        message (STATUS "Found libarchive using module/config. Using ${_la_lib}.")
 | 
						|
+        set_target_properties (archive_lib PROPERTIES
 | 
						|
+          IMPORTED_LOCATION_DEBUG
 | 
						|
+            ${_la_lib}
 | 
						|
+          IMPORTED_LOCATION_RELEASE
 | 
						|
+            ${_la_lib}
 | 
						|
+          INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+            ${LibArchive_INCLUDE_DIRS})
 | 
						|
+      endif ()
 | 
						|
+    else ()
 | 
						|
+      set (local_libarchive ON CACHE BOOL "" FORCE)
 | 
						|
+    endif ()
 | 
						|
+  endif ()
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+if (local_libarchive)
 | 
						|
+  set (lib_post "")
 | 
						|
+  if (MSVC)
 | 
						|
+    set (lib_post "_static")
 | 
						|
+  endif ()
 | 
						|
+  ExternalProject_Add (libarchive
 | 
						|
+    PREFIX ${nih_cache_path}
 | 
						|
+    GIT_REPOSITORY https://github.com/libarchive/libarchive.git
 | 
						|
+    GIT_TAG v3.4.3
 | 
						|
+    CMAKE_ARGS
 | 
						|
+      # passing the compiler seems to be needed for windows CI, sadly
 | 
						|
+      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
						|
+      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
						|
+      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
						|
+      -DCMAKE_DEBUG_POSTFIX=_d
 | 
						|
+      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
						|
+      -DENABLE_LZ4=ON
 | 
						|
+      -ULZ4_*
 | 
						|
+      -DLZ4_INCLUDE_DIR=$<JOIN:$<TARGET_PROPERTY:lz4_lib,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
						|
+      # because we are building a static lib, this lz4 library doesn't
 | 
						|
+      # actually matter since you can't generally link static libs to other static
 | 
						|
+      # libs. The include files are needed, but the library itself is not (until
 | 
						|
+      # we link our application, at which point we use the lz4 we built above).
 | 
						|
+      # nonetheless, we need to provide a library to libarchive else it will
 | 
						|
+      # NOT include lz4 support when configuring
 | 
						|
+      -DLZ4_LIBRARY=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:lz4_lib,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:lz4_lib,IMPORTED_LOCATION_RELEASE>>
 | 
						|
+      -DENABLE_WERROR=OFF
 | 
						|
+      -DENABLE_TAR=OFF
 | 
						|
+      -DENABLE_TAR_SHARED=OFF
 | 
						|
+      -DENABLE_INSTALL=ON
 | 
						|
+      -DENABLE_NETTLE=OFF
 | 
						|
+      -DENABLE_OPENSSL=OFF
 | 
						|
+      -DENABLE_LZO=OFF
 | 
						|
+      -DENABLE_LZMA=OFF
 | 
						|
+      -DENABLE_ZLIB=OFF
 | 
						|
+      -DENABLE_BZip2=OFF
 | 
						|
+      -DENABLE_LIBXML2=OFF
 | 
						|
+      -DENABLE_EXPAT=OFF
 | 
						|
+      -DENABLE_PCREPOSIX=OFF
 | 
						|
+      -DENABLE_LibGCC=OFF
 | 
						|
+      -DENABLE_CNG=OFF
 | 
						|
+      -DENABLE_CPIO=OFF
 | 
						|
+      -DENABLE_CPIO_SHARED=OFF
 | 
						|
+      -DENABLE_CAT=OFF
 | 
						|
+      -DENABLE_CAT_SHARED=OFF
 | 
						|
+      -DENABLE_XATTR=OFF
 | 
						|
+      -DENABLE_ACL=OFF
 | 
						|
+      -DENABLE_ICONV=OFF
 | 
						|
+      -DENABLE_TEST=OFF
 | 
						|
+      -DENABLE_COVERAGE=OFF
 | 
						|
+      $<$<BOOL:${MSVC}>:
 | 
						|
+        "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
						|
+        "-DCMAKE_C_FLAGS_DEBUG=-MTd"
 | 
						|
+        "-DCMAKE_C_FLAGS_RELEASE=-MT"
 | 
						|
+      >
 | 
						|
+    LIST_SEPARATOR ::
 | 
						|
+    LOG_BUILD ON
 | 
						|
+    LOG_CONFIGURE ON
 | 
						|
+    BUILD_COMMAND
 | 
						|
+      ${CMAKE_COMMAND}
 | 
						|
+      --build .
 | 
						|
+      --config $<CONFIG>
 | 
						|
+      --target archive_static
 | 
						|
+      --parallel ${ep_procs}
 | 
						|
+      $<$<BOOL:${is_multiconfig}>:
 | 
						|
+        COMMAND
 | 
						|
+          ${CMAKE_COMMAND} -E copy
 | 
						|
+            <BINARY_DIR>/libarchive/$<CONFIG>/${ep_lib_prefix}archive${lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+            <BINARY_DIR>/libarchive
 | 
						|
+        >
 | 
						|
+    TEST_COMMAND ""
 | 
						|
+    INSTALL_COMMAND ""
 | 
						|
+    DEPENDS lz4_lib
 | 
						|
+    BUILD_BYPRODUCTS
 | 
						|
+      <BINARY_DIR>/libarchive/${ep_lib_prefix}archive${lib_post}${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/libarchive/${ep_lib_prefix}archive${lib_post}_d${ep_lib_suffix}
 | 
						|
+  )
 | 
						|
+  ExternalProject_Get_Property (libarchive BINARY_DIR)
 | 
						|
+  ExternalProject_Get_Property (libarchive SOURCE_DIR)
 | 
						|
+  if (CMAKE_VERBOSE_MAKEFILE)
 | 
						|
+    print_ep_logs (libarchive)
 | 
						|
+  endif ()
 | 
						|
+  file (MAKE_DIRECTORY ${SOURCE_DIR}/libarchive)
 | 
						|
+  set_target_properties (archive_lib PROPERTIES
 | 
						|
+    IMPORTED_LOCATION_DEBUG
 | 
						|
+      ${BINARY_DIR}/libarchive/${ep_lib_prefix}archive${lib_post}_d${ep_lib_suffix}
 | 
						|
+    IMPORTED_LOCATION_RELEASE
 | 
						|
+      ${BINARY_DIR}/libarchive/${ep_lib_prefix}archive${lib_post}${ep_lib_suffix}
 | 
						|
+    INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+      ${SOURCE_DIR}/libarchive
 | 
						|
+    INTERFACE_COMPILE_DEFINITIONS
 | 
						|
+      LIBARCHIVE_STATIC)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+add_dependencies (archive_lib libarchive)
 | 
						|
+target_link_libraries (archive_lib INTERFACE lz4_lib)
 | 
						|
+target_link_libraries (ripple_libs INTERFACE archive_lib)
 | 
						|
+exclude_if_included (libarchive)
 | 
						|
+exclude_if_included (archive_lib)
 | 
						|
diff --git a/Builds/CMake/deps/Lz4.cmake b/Builds/CMake/deps/Lz4.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..15d890692
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Lz4.cmake
 | 
						|
@@ -0,0 +1,79 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: lz4
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+add_library (lz4_lib STATIC IMPORTED GLOBAL)
 | 
						|
+
 | 
						|
+if (NOT WIN32)
 | 
						|
+  find_package(lz4)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+if(lz4)
 | 
						|
+  set_target_properties (lz4_lib PROPERTIES
 | 
						|
+    IMPORTED_LOCATION_DEBUG
 | 
						|
+      ${lz4}
 | 
						|
+    IMPORTED_LOCATION_RELEASE
 | 
						|
+      ${lz4}
 | 
						|
+    INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+      ${LZ4_INCLUDE_DIR})
 | 
						|
+
 | 
						|
+else()
 | 
						|
+  ExternalProject_Add (lz4
 | 
						|
+    PREFIX ${nih_cache_path}
 | 
						|
+    GIT_REPOSITORY https://github.com/lz4/lz4.git
 | 
						|
+    GIT_TAG v1.9.2
 | 
						|
+    SOURCE_SUBDIR contrib/cmake_unofficial
 | 
						|
+    CMAKE_ARGS
 | 
						|
+      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
						|
+      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
						|
+      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
						|
+      -DCMAKE_DEBUG_POSTFIX=_d
 | 
						|
+      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
						|
+      -DBUILD_STATIC_LIBS=ON
 | 
						|
+      -DBUILD_SHARED_LIBS=OFF
 | 
						|
+      $<$<BOOL:${MSVC}>:
 | 
						|
+        "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
						|
+        "-DCMAKE_C_FLAGS_DEBUG=-MTd"
 | 
						|
+        "-DCMAKE_C_FLAGS_RELEASE=-MT"
 | 
						|
+      >
 | 
						|
+    LOG_BUILD ON
 | 
						|
+    LOG_CONFIGURE ON
 | 
						|
+    BUILD_COMMAND
 | 
						|
+      ${CMAKE_COMMAND}
 | 
						|
+      --build .
 | 
						|
+      --config $<CONFIG>
 | 
						|
+      --target lz4_static
 | 
						|
+      --parallel ${ep_procs}
 | 
						|
+      $<$<BOOL:${is_multiconfig}>:
 | 
						|
+        COMMAND
 | 
						|
+          ${CMAKE_COMMAND} -E copy
 | 
						|
+          <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}lz4$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+          <BINARY_DIR>
 | 
						|
+        >
 | 
						|
+    TEST_COMMAND ""
 | 
						|
+    INSTALL_COMMAND ""
 | 
						|
+    BUILD_BYPRODUCTS
 | 
						|
+      <BINARY_DIR>/${ep_lib_prefix}lz4${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/${ep_lib_prefix}lz4_d${ep_lib_suffix}
 | 
						|
+  )
 | 
						|
+  ExternalProject_Get_Property (lz4 BINARY_DIR)
 | 
						|
+  ExternalProject_Get_Property (lz4 SOURCE_DIR)
 | 
						|
+
 | 
						|
+  file (MAKE_DIRECTORY ${SOURCE_DIR}/lz4)
 | 
						|
+  set_target_properties (lz4_lib PROPERTIES
 | 
						|
+    IMPORTED_LOCATION_DEBUG
 | 
						|
+      ${BINARY_DIR}/${ep_lib_prefix}lz4_d${ep_lib_suffix}
 | 
						|
+    IMPORTED_LOCATION_RELEASE
 | 
						|
+      ${BINARY_DIR}/${ep_lib_prefix}lz4${ep_lib_suffix}
 | 
						|
+    INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+      ${SOURCE_DIR}/lib)
 | 
						|
+
 | 
						|
+  if (CMAKE_VERBOSE_MAKEFILE)
 | 
						|
+    print_ep_logs (lz4)
 | 
						|
+  endif ()
 | 
						|
+  add_dependencies (lz4_lib lz4)
 | 
						|
+  target_link_libraries (ripple_libs INTERFACE lz4_lib)
 | 
						|
+  exclude_if_included (lz4)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+exclude_if_included (lz4_lib)
 | 
						|
diff --git a/Builds/CMake/deps/Nudb.cmake b/Builds/CMake/deps/Nudb.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..9698d3f06
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Nudb.cmake
 | 
						|
@@ -0,0 +1,31 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: nudb
 | 
						|
+
 | 
						|
+   NuDB is header-only, thus is an INTERFACE lib in CMake.
 | 
						|
+   TODO: move the library definition into NuDB repo and add
 | 
						|
+   proper targets and export/install
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+if (is_root_project) # NuDB not needed in the case of xrpl_core inclusion build
 | 
						|
+  add_library (nudb INTERFACE)
 | 
						|
+  FetchContent_Declare(
 | 
						|
+    nudb_src
 | 
						|
+    GIT_REPOSITORY https://github.com/CPPAlliance/NuDB.git
 | 
						|
+    GIT_TAG        2.0.5
 | 
						|
+  )
 | 
						|
+  FetchContent_GetProperties(nudb_src)
 | 
						|
+  if(NOT nudb_src_POPULATED)
 | 
						|
+    message (STATUS "Pausing to download NuDB...")
 | 
						|
+    FetchContent_Populate(nudb_src)
 | 
						|
+  endif()
 | 
						|
+
 | 
						|
+  file(TO_CMAKE_PATH "${nudb_src_SOURCE_DIR}" nudb_src_SOURCE_DIR)
 | 
						|
+  # specify as system includes so as to avoid warnings
 | 
						|
+  target_include_directories (nudb SYSTEM INTERFACE ${nudb_src_SOURCE_DIR}/include)
 | 
						|
+  target_link_libraries (nudb
 | 
						|
+    INTERFACE
 | 
						|
+      Boost::thread
 | 
						|
+      Boost::system)
 | 
						|
+  add_library (NIH::nudb ALIAS nudb)
 | 
						|
+  target_link_libraries (ripple_libs INTERFACE NIH::nudb)
 | 
						|
+endif ()
 | 
						|
diff --git a/Builds/CMake/deps/OpenSSL.cmake b/Builds/CMake/deps/OpenSSL.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..ad5117aac
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/OpenSSL.cmake
 | 
						|
@@ -0,0 +1,48 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: openssl
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+#[===============================================[
 | 
						|
+  OPENSSL_ROOT_DIR is the only variable that
 | 
						|
+  FindOpenSSL honors for locating, so convert any
 | 
						|
+  OPENSSL_ROOT vars to this
 | 
						|
+#]===============================================]
 | 
						|
+if (NOT DEFINED OPENSSL_ROOT_DIR)
 | 
						|
+  if (DEFINED ENV{OPENSSL_ROOT})
 | 
						|
+    set (OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT})
 | 
						|
+  elseif (HOMEBREW)
 | 
						|
+    execute_process (COMMAND ${HOMEBREW} --prefix openssl
 | 
						|
+      OUTPUT_VARIABLE OPENSSL_ROOT_DIR
 | 
						|
+      OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
						|
+  endif ()
 | 
						|
+  file (TO_CMAKE_PATH "${OPENSSL_ROOT_DIR}" OPENSSL_ROOT_DIR)
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+if (static)
 | 
						|
+  set (OPENSSL_USE_STATIC_LIBS ON)
 | 
						|
+endif ()
 | 
						|
+set (OPENSSL_MSVC_STATIC_RT ON)
 | 
						|
+find_package (OpenSSL 1.1.1 REQUIRED)
 | 
						|
+target_link_libraries (ripple_libs
 | 
						|
+  INTERFACE
 | 
						|
+    OpenSSL::SSL
 | 
						|
+    OpenSSL::Crypto)
 | 
						|
+# disable SSLv2...this can also be done when building/configuring OpenSSL
 | 
						|
+set_target_properties(OpenSSL::SSL PROPERTIES
 | 
						|
+    INTERFACE_COMPILE_DEFINITIONS OPENSSL_NO_SSL2)
 | 
						|
+#[=========================================================[
 | 
						|
+   https://gitlab.kitware.com/cmake/cmake/issues/16885
 | 
						|
+   depending on how openssl is built, it might depend
 | 
						|
+   on zlib. In fact, the openssl find package should
 | 
						|
+   figure this out for us, but it does not currently...
 | 
						|
+   so let's add zlib ourselves to the lib list
 | 
						|
+   TODO: investigate linking to static zlib for static
 | 
						|
+   build option
 | 
						|
+#]=========================================================]
 | 
						|
+find_package (ZLIB)
 | 
						|
+set (has_zlib FALSE)
 | 
						|
+if (TARGET ZLIB::ZLIB)
 | 
						|
+  set_target_properties(OpenSSL::Crypto PROPERTIES
 | 
						|
+    INTERFACE_LINK_LIBRARIES ZLIB::ZLIB)
 | 
						|
+  set (has_zlib TRUE)
 | 
						|
+endif ()
 | 
						|
diff --git a/Builds/CMake/deps/Postgres.cmake b/Builds/CMake/deps/Postgres.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..bb94832a4
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Postgres.cmake
 | 
						|
@@ -0,0 +1,70 @@
 | 
						|
+if(reporting)
 | 
						|
+    find_package(PostgreSQL)
 | 
						|
+    if(NOT PostgreSQL_FOUND)
 | 
						|
+        message("find_package did not find postgres")
 | 
						|
+        find_library(postgres NAMES pq libpq libpq-dev pq-dev postgresql-devel)
 | 
						|
+        find_path(libpq-fe NAMES libpq-fe.h PATH_SUFFIXES postgresql pgsql include)
 | 
						|
+
 | 
						|
+        if(NOT libpq-fe_FOUND OR NOT postgres_FOUND)
 | 
						|
+            message("No system installed Postgres found. Will build")
 | 
						|
+            add_library(postgres SHARED IMPORTED GLOBAL)
 | 
						|
+            add_library(pgport SHARED IMPORTED GLOBAL)
 | 
						|
+            add_library(pgcommon SHARED IMPORTED GLOBAL)
 | 
						|
+            ExternalProject_Add(postgres_src
 | 
						|
+                PREFIX ${nih_cache_path}
 | 
						|
+                GIT_REPOSITORY https://github.com/postgres/postgres.git
 | 
						|
+                GIT_TAG REL_14_5
 | 
						|
+                CONFIGURE_COMMAND ./configure --without-readline > /dev/null
 | 
						|
+                BUILD_COMMAND ${CMAKE_COMMAND} -E env --unset=MAKELEVEL make
 | 
						|
+                UPDATE_COMMAND ""
 | 
						|
+                BUILD_IN_SOURCE 1
 | 
						|
+                INSTALL_COMMAND ""
 | 
						|
+                BUILD_BYPRODUCTS
 | 
						|
+                    <BINARY_DIR>/src/interfaces/libpq/${ep_lib_prefix}pq.a
 | 
						|
+                    <BINARY_DIR>/src/common/${ep_lib_prefix}pgcommon.a
 | 
						|
+                    <BINARY_DIR>/src/port/${ep_lib_prefix}pgport.a
 | 
						|
+                LOG_BUILD TRUE
 | 
						|
+                )
 | 
						|
+            ExternalProject_Get_Property (postgres_src SOURCE_DIR)
 | 
						|
+            ExternalProject_Get_Property (postgres_src BINARY_DIR)
 | 
						|
+
 | 
						|
+            set (postgres_src_SOURCE_DIR "${SOURCE_DIR}")
 | 
						|
+            file (MAKE_DIRECTORY ${postgres_src_SOURCE_DIR})
 | 
						|
+            list(APPEND INCLUDE_DIRS
 | 
						|
+                ${SOURCE_DIR}/src/include
 | 
						|
+                ${SOURCE_DIR}/src/interfaces/libpq
 | 
						|
+                )
 | 
						|
+            set_target_properties(postgres PROPERTIES
 | 
						|
+                IMPORTED_LOCATION
 | 
						|
+                    ${BINARY_DIR}/src/interfaces/libpq/${ep_lib_prefix}pq.a
 | 
						|
+                INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+                    "${INCLUDE_DIRS}"
 | 
						|
+                )
 | 
						|
+            set_target_properties(pgcommon PROPERTIES
 | 
						|
+                IMPORTED_LOCATION
 | 
						|
+                    ${BINARY_DIR}/src/common/${ep_lib_prefix}pgcommon.a
 | 
						|
+                INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+                    "${INCLUDE_DIRS}"
 | 
						|
+                )
 | 
						|
+            set_target_properties(pgport PROPERTIES
 | 
						|
+                IMPORTED_LOCATION
 | 
						|
+                    ${BINARY_DIR}/src/port/${ep_lib_prefix}pgport.a
 | 
						|
+                INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+                    "${INCLUDE_DIRS}"
 | 
						|
+                )
 | 
						|
+            add_dependencies(postgres postgres_src)
 | 
						|
+            add_dependencies(pgcommon postgres_src)
 | 
						|
+            add_dependencies(pgport postgres_src)
 | 
						|
+            file(TO_CMAKE_PATH "${postgres_src_SOURCE_DIR}" postgres_src_SOURCE_DIR)
 | 
						|
+            target_link_libraries(ripple_libs INTERFACE postgres pgcommon pgport)
 | 
						|
+        else()
 | 
						|
+            message("Found system installed Postgres via find_libary")
 | 
						|
+            target_include_directories(ripple_libs INTERFACE ${libpq-fe})
 | 
						|
+            target_link_libraries(ripple_libs INTERFACE ${postgres})
 | 
						|
+        endif()
 | 
						|
+    else()
 | 
						|
+        message("Found system installed Postgres via find_package")
 | 
						|
+        target_include_directories(ripple_libs INTERFACE ${PostgreSQL_INCLUDE_DIRS})
 | 
						|
+        target_link_libraries(ripple_libs INTERFACE ${PostgreSQL_LIBRARIES})
 | 
						|
+    endif()
 | 
						|
+endif()
 | 
						|
diff --git a/Builds/CMake/deps/Protobuf.cmake b/Builds/CMake/deps/Protobuf.cmake
 | 
						|
index 0706ae322..35d5b9f0f 100644
 | 
						|
--- a/Builds/CMake/deps/Protobuf.cmake
 | 
						|
+++ b/Builds/CMake/deps/Protobuf.cmake
 | 
						|
@@ -1,22 +1,155 @@
 | 
						|
-find_package(Protobuf 3.8)
 | 
						|
+#[===================================================================[
 | 
						|
+   import protobuf (lib and compiler) and create a lib
 | 
						|
+   from our proto message definitions. If the system protobuf
 | 
						|
+   is not found, fallback on EP to download and build a version
 | 
						|
+   from official source.
 | 
						|
+#]===================================================================]
 | 
						|
 
 | 
						|
-file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/proto_gen)
 | 
						|
-set(ccbd ${CMAKE_CURRENT_BINARY_DIR})
 | 
						|
-set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_BINARY_DIR}/proto_gen)
 | 
						|
-protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS src/ripple/proto/ripple.proto)
 | 
						|
-set(CMAKE_CURRENT_BINARY_DIR ${ccbd})
 | 
						|
+if (static)
 | 
						|
+  set (Protobuf_USE_STATIC_LIBS ON)
 | 
						|
+endif ()
 | 
						|
+find_package (Protobuf 3.8)
 | 
						|
+if (is_multiconfig)
 | 
						|
+    set(protobuf_protoc_lib ${Protobuf_PROTOC_LIBRARIES})
 | 
						|
+else ()
 | 
						|
+    string(TOUPPER ${CMAKE_BUILD_TYPE} upper_cmake_build_type)
 | 
						|
+    set(protobuf_protoc_lib ${Protobuf_PROTOC_LIBRARY_${upper_cmake_build_type}})
 | 
						|
+endif ()
 | 
						|
+if (local_protobuf OR NOT (Protobuf_FOUND AND Protobuf_PROTOC_EXECUTABLE AND protobuf_protoc_lib))
 | 
						|
+  include (GNUInstallDirs)
 | 
						|
+  message (STATUS "using local protobuf build.")
 | 
						|
+  set(protobuf_reqs Protobuf_PROTOC_EXECUTABLE protobuf_protoc_lib)
 | 
						|
+  foreach(lib ${protobuf_reqs})
 | 
						|
+    if(NOT ${lib})
 | 
						|
+      message(STATUS "Couldn't find ${lib}")
 | 
						|
+    endif()
 | 
						|
+  endforeach()
 | 
						|
+  if (WIN32)
 | 
						|
+    # protobuf prepends lib even on windows
 | 
						|
+    set (pbuf_lib_pre "lib")
 | 
						|
+  else ()
 | 
						|
+    set (pbuf_lib_pre ${ep_lib_prefix})
 | 
						|
+  endif ()
 | 
						|
+  # for the external project build of protobuf, we currently ignore the
 | 
						|
+  # static option and always build static libs here. This is consistent
 | 
						|
+  # with our other EP builds. Dynamic libs in an EP would add complexity
 | 
						|
+  # because we'd need to get them into the runtime path, and probably
 | 
						|
+  # install them.
 | 
						|
+  ExternalProject_Add (protobuf_src
 | 
						|
+    PREFIX ${nih_cache_path}
 | 
						|
+    GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git
 | 
						|
+    GIT_TAG v3.8.0
 | 
						|
+    SOURCE_SUBDIR cmake
 | 
						|
+    CMAKE_ARGS
 | 
						|
+      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
						|
+      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
						|
+      -DCMAKE_INSTALL_PREFIX=<BINARY_DIR>/_installed_
 | 
						|
+      -Dprotobuf_BUILD_TESTS=OFF
 | 
						|
+      -Dprotobuf_BUILD_EXAMPLES=OFF
 | 
						|
+      -Dprotobuf_BUILD_PROTOC_BINARIES=ON
 | 
						|
+      -Dprotobuf_MSVC_STATIC_RUNTIME=ON
 | 
						|
+      -DBUILD_SHARED_LIBS=OFF
 | 
						|
+      -Dprotobuf_BUILD_SHARED_LIBS=OFF
 | 
						|
+      -DCMAKE_DEBUG_POSTFIX=_d
 | 
						|
+      -Dprotobuf_DEBUG_POSTFIX=_d
 | 
						|
+      -Dprotobuf_WITH_ZLIB=$<IF:$<BOOL:${has_zlib}>,ON,OFF>
 | 
						|
+      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
						|
+      $<$<BOOL:${unity}>:-DCMAKE_UNITY_BUILD=ON}>
 | 
						|
+      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
						|
+      $<$<BOOL:${MSVC}>:
 | 
						|
+	"-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP"
 | 
						|
+      >
 | 
						|
+    LOG_BUILD ON
 | 
						|
+    LOG_CONFIGURE ON
 | 
						|
+    BUILD_COMMAND
 | 
						|
+      ${CMAKE_COMMAND}
 | 
						|
+      --build .
 | 
						|
+      --config $<CONFIG>
 | 
						|
+      --parallel ${ep_procs}
 | 
						|
+    TEST_COMMAND ""
 | 
						|
+    INSTALL_COMMAND
 | 
						|
+      ${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --config $<CONFIG> --target install
 | 
						|
+    BUILD_BYPRODUCTS
 | 
						|
+      <BINARY_DIR>/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protobuf${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protobuf_d${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protoc${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protoc_d${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/_installed_/bin/protoc${CMAKE_EXECUTABLE_SUFFIX}
 | 
						|
+  )
 | 
						|
+  ExternalProject_Get_Property (protobuf_src BINARY_DIR)
 | 
						|
+  ExternalProject_Get_Property (protobuf_src SOURCE_DIR)
 | 
						|
+  if (CMAKE_VERBOSE_MAKEFILE)
 | 
						|
+    print_ep_logs (protobuf_src)
 | 
						|
+  endif ()
 | 
						|
+  exclude_if_included (protobuf_src)
 | 
						|
 
 | 
						|
-add_library(pbufs STATIC ${PROTO_SRCS} ${PROTO_HDRS})
 | 
						|
-target_include_directories(pbufs SYSTEM PUBLIC
 | 
						|
-  ${CMAKE_BINARY_DIR}/proto_gen
 | 
						|
-  ${CMAKE_BINARY_DIR}/proto_gen/src/ripple/proto
 | 
						|
-)
 | 
						|
-target_link_libraries(pbufs protobuf::libprotobuf)
 | 
						|
-target_compile_options(pbufs
 | 
						|
+  if (NOT TARGET protobuf::libprotobuf)
 | 
						|
+    add_library (protobuf::libprotobuf STATIC IMPORTED GLOBAL)
 | 
						|
+  endif ()
 | 
						|
+  file (MAKE_DIRECTORY ${BINARY_DIR}/_installed_/include)
 | 
						|
+  set_target_properties (protobuf::libprotobuf PROPERTIES
 | 
						|
+    IMPORTED_LOCATION_DEBUG
 | 
						|
+      ${BINARY_DIR}/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protobuf_d${ep_lib_suffix}
 | 
						|
+    IMPORTED_LOCATION_RELEASE
 | 
						|
+      ${BINARY_DIR}/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protobuf${ep_lib_suffix}
 | 
						|
+    INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+      ${BINARY_DIR}/_installed_/include)
 | 
						|
+  add_dependencies (protobuf::libprotobuf protobuf_src)
 | 
						|
+  exclude_if_included (protobuf::libprotobuf)
 | 
						|
+
 | 
						|
+  if (NOT TARGET protobuf::libprotoc)
 | 
						|
+    add_library (protobuf::libprotoc STATIC IMPORTED GLOBAL)
 | 
						|
+  endif ()
 | 
						|
+  set_target_properties (protobuf::libprotoc PROPERTIES
 | 
						|
+    IMPORTED_LOCATION_DEBUG
 | 
						|
+      ${BINARY_DIR}/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protoc_d${ep_lib_suffix}
 | 
						|
+    IMPORTED_LOCATION_RELEASE
 | 
						|
+      ${BINARY_DIR}/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protoc${ep_lib_suffix}
 | 
						|
+    INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+      ${BINARY_DIR}/_installed_/include)
 | 
						|
+  add_dependencies (protobuf::libprotoc protobuf_src)
 | 
						|
+  exclude_if_included (protobuf::libprotoc)
 | 
						|
+
 | 
						|
+  if (NOT TARGET protobuf::protoc)
 | 
						|
+    add_executable (protobuf::protoc IMPORTED)
 | 
						|
+    exclude_if_included (protobuf::protoc)
 | 
						|
+  endif ()
 | 
						|
+  set_target_properties (protobuf::protoc PROPERTIES
 | 
						|
+    IMPORTED_LOCATION "${BINARY_DIR}/_installed_/bin/protoc${CMAKE_EXECUTABLE_SUFFIX}")
 | 
						|
+  add_dependencies (protobuf::protoc protobuf_src)
 | 
						|
+else ()
 | 
						|
+  if (NOT TARGET protobuf::protoc)
 | 
						|
+    if (EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
 | 
						|
+      add_executable (protobuf::protoc IMPORTED)
 | 
						|
+      set_target_properties (protobuf::protoc PROPERTIES
 | 
						|
+        IMPORTED_LOCATION "${Protobuf_PROTOC_EXECUTABLE}")
 | 
						|
+    else ()
 | 
						|
+      message (FATAL_ERROR "Protobuf import failed")
 | 
						|
+    endif ()
 | 
						|
+  endif ()
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/proto_gen)
 | 
						|
+set (save_CBD ${CMAKE_CURRENT_BINARY_DIR})
 | 
						|
+set (CMAKE_CURRENT_BINARY_DIR ${CMAKE_BINARY_DIR}/proto_gen)
 | 
						|
+protobuf_generate_cpp (
 | 
						|
+  PROTO_SRCS
 | 
						|
+  PROTO_HDRS
 | 
						|
+  src/ripple/proto/ripple.proto)
 | 
						|
+set (CMAKE_CURRENT_BINARY_DIR ${save_CBD})
 | 
						|
+
 | 
						|
+add_library (pbufs STATIC ${PROTO_SRCS} ${PROTO_HDRS})
 | 
						|
+
 | 
						|
+target_include_directories (pbufs PRIVATE src)
 | 
						|
+target_include_directories (pbufs
 | 
						|
+  SYSTEM PUBLIC ${CMAKE_BINARY_DIR}/proto_gen)
 | 
						|
+target_link_libraries (pbufs protobuf::libprotobuf)
 | 
						|
+target_compile_options (pbufs
 | 
						|
   PUBLIC
 | 
						|
-    $<$<BOOL:${XCODE}>:
 | 
						|
+    $<$<BOOL:${is_xcode}>:
 | 
						|
       --system-header-prefix="google/protobuf"
 | 
						|
       -Wno-deprecated-dynamic-exception-spec
 | 
						|
-    >
 | 
						|
-)
 | 
						|
-add_library(Ripple::pbufs ALIAS pbufs)
 | 
						|
+    >)
 | 
						|
+add_library (Ripple::pbufs ALIAS pbufs)
 | 
						|
+target_link_libraries (ripple_libs INTERFACE Ripple::pbufs)
 | 
						|
+exclude_if_included (pbufs)
 | 
						|
diff --git a/Builds/CMake/deps/Rocksdb.cmake b/Builds/CMake/deps/Rocksdb.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..2c832c593
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Rocksdb.cmake
 | 
						|
@@ -0,0 +1,177 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: rocksdb
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+add_library (rocksdb_lib UNKNOWN IMPORTED GLOBAL)
 | 
						|
+set_target_properties (rocksdb_lib
 | 
						|
+  PROPERTIES INTERFACE_COMPILE_DEFINITIONS RIPPLE_ROCKSDB_AVAILABLE=1)
 | 
						|
+
 | 
						|
+option (local_rocksdb "use local build of rocksdb." OFF)
 | 
						|
+if (NOT local_rocksdb)
 | 
						|
+  find_package (RocksDB 6.27 QUIET CONFIG)
 | 
						|
+  if (TARGET RocksDB::rocksdb)
 | 
						|
+    message (STATUS "Found RocksDB using config.")
 | 
						|
+    get_target_property (_rockslib_l RocksDB::rocksdb IMPORTED_LOCATION_DEBUG)
 | 
						|
+    if (_rockslib_l)
 | 
						|
+      set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION_DEBUG ${_rockslib_l})
 | 
						|
+    endif ()
 | 
						|
+    get_target_property (_rockslib_l RocksDB::rocksdb IMPORTED_LOCATION_RELEASE)
 | 
						|
+    if (_rockslib_l)
 | 
						|
+      set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION_RELEASE ${_rockslib_l})
 | 
						|
+    endif ()
 | 
						|
+    get_target_property (_rockslib_l RocksDB::rocksdb IMPORTED_LOCATION)
 | 
						|
+    if (_rockslib_l)
 | 
						|
+      set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION ${_rockslib_l})
 | 
						|
+    endif ()
 | 
						|
+    get_target_property (_rockslib_i RocksDB::rocksdb INTERFACE_INCLUDE_DIRECTORIES)
 | 
						|
+    if (_rockslib_i)
 | 
						|
+      set_target_properties (rocksdb_lib PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${_rockslib_i})
 | 
						|
+    endif ()
 | 
						|
+    target_link_libraries (ripple_libs INTERFACE RocksDB::rocksdb)
 | 
						|
+  else ()
 | 
						|
+    # using a find module with rocksdb is difficult because
 | 
						|
+    # you have no idea how it was configured (transitive dependencies).
 | 
						|
+    # the code below will generally find rocksdb using the module, but
 | 
						|
+    # will then result in linker errors for static linkage since the
 | 
						|
+    # transitive dependencies are unknown. force local build here for now, but leave the code as
 | 
						|
+    # a placeholder for future investigation.
 | 
						|
+    if (static)
 | 
						|
+      set (local_rocksdb ON CACHE BOOL "" FORCE)
 | 
						|
+      # TBD if there is some way to extract transitive deps..then:
 | 
						|
+      #set (RocksDB_USE_STATIC ON)
 | 
						|
+    else ()
 | 
						|
+      find_package (RocksDB 6.27 MODULE)
 | 
						|
+      if (ROCKSDB_FOUND)
 | 
						|
+        if (RocksDB_LIBRARY_DEBUG)
 | 
						|
+          set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION_DEBUG ${RocksDB_LIBRARY_DEBUG})
 | 
						|
+        endif ()
 | 
						|
+        set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION_RELEASE ${RocksDB_LIBRARIES})
 | 
						|
+        set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION ${RocksDB_LIBRARIES})
 | 
						|
+        set_target_properties (rocksdb_lib PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${RocksDB_INCLUDE_DIRS})
 | 
						|
+      else ()
 | 
						|
+        set (local_rocksdb ON CACHE BOOL "" FORCE)
 | 
						|
+      endif ()
 | 
						|
+    endif ()
 | 
						|
+  endif ()
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+if (local_rocksdb)
 | 
						|
+  message (STATUS "Using local build of RocksDB.")
 | 
						|
+  ExternalProject_Add (rocksdb
 | 
						|
+    PREFIX ${nih_cache_path}
 | 
						|
+    GIT_REPOSITORY https://github.com/facebook/rocksdb.git
 | 
						|
+    GIT_TAG v6.27.3
 | 
						|
+    PATCH_COMMAND
 | 
						|
+      # only used by windows build
 | 
						|
+      ${CMAKE_COMMAND} -E copy_if_different
 | 
						|
+      ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/rocks_thirdparty.inc
 | 
						|
+      <SOURCE_DIR>/thirdparty.inc
 | 
						|
+    COMMAND
 | 
						|
+      # fixup their build version file to keep the values
 | 
						|
+      # from changing always
 | 
						|
+      ${CMAKE_COMMAND} -E copy_if_different
 | 
						|
+      ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/rocksdb_build_version.cc.in
 | 
						|
+      <SOURCE_DIR>/util/build_version.cc.in
 | 
						|
+    CMAKE_ARGS
 | 
						|
+      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
						|
+      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
						|
+      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
						|
+      $<$<BOOL:${unity}>:-DCMAKE_UNITY_BUILD=ON}>
 | 
						|
+      -DCMAKE_DEBUG_POSTFIX=_d
 | 
						|
+      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
						|
+      -DBUILD_SHARED_LIBS=OFF
 | 
						|
+      -DCMAKE_POSITION_INDEPENDENT_CODE=ON
 | 
						|
+      -DWITH_JEMALLOC=$<IF:$<BOOL:${jemalloc}>,ON,OFF>
 | 
						|
+      -DWITH_SNAPPY=ON
 | 
						|
+      -DWITH_LZ4=ON
 | 
						|
+      -DWITH_ZLIB=OFF
 | 
						|
+      -DUSE_RTTI=ON
 | 
						|
+      -DWITH_ZSTD=OFF
 | 
						|
+      -DWITH_GFLAGS=OFF
 | 
						|
+      -DWITH_BZ2=OFF
 | 
						|
+      -ULZ4_*
 | 
						|
+      -Ulz4_*
 | 
						|
+      -Dlz4_INCLUDE_DIRS=$<JOIN:$<TARGET_PROPERTY:lz4_lib,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
						|
+      -Dlz4_LIBRARIES=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:lz4_lib,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:lz4_lib,IMPORTED_LOCATION_RELEASE>>
 | 
						|
+      -Dlz4_FOUND=ON
 | 
						|
+      -USNAPPY_*
 | 
						|
+      -Usnappy_*
 | 
						|
+      -USnappy_*
 | 
						|
+      -Dsnappy_INCLUDE_DIRS=$<JOIN:$<TARGET_PROPERTY:snappy_lib,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
						|
+      -Dsnappy_LIBRARIES=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:snappy_lib,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:snappy_lib,IMPORTED_LOCATION_RELEASE>>
 | 
						|
+      -Dsnappy_FOUND=ON
 | 
						|
+      -DSnappy_INCLUDE_DIRS=$<JOIN:$<TARGET_PROPERTY:snappy_lib,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
						|
+      -DSnappy_LIBRARIES=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:snappy_lib,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:snappy_lib,IMPORTED_LOCATION_RELEASE>>
 | 
						|
+      -DSnappy_FOUND=ON
 | 
						|
+      -DWITH_MD_LIBRARY=OFF
 | 
						|
+      -DWITH_RUNTIME_DEBUG=$<IF:$<CONFIG:Debug>,ON,OFF>
 | 
						|
+      -DFAIL_ON_WARNINGS=OFF
 | 
						|
+      -DWITH_ASAN=OFF
 | 
						|
+      -DWITH_TSAN=OFF
 | 
						|
+      -DWITH_UBSAN=OFF
 | 
						|
+      -DWITH_NUMA=OFF
 | 
						|
+      -DWITH_TBB=OFF
 | 
						|
+      -DWITH_WINDOWS_UTF8_FILENAMES=OFF
 | 
						|
+      -DWITH_XPRESS=OFF
 | 
						|
+      -DPORTABLE=ON
 | 
						|
+      -DFORCE_SSE42=OFF
 | 
						|
+      -DDISABLE_STALL_NOTIF=OFF
 | 
						|
+      -DOPTDBG=ON
 | 
						|
+      -DROCKSDB_LITE=OFF
 | 
						|
+      -DWITH_FALLOCATE=ON
 | 
						|
+      -DWITH_LIBRADOS=OFF
 | 
						|
+      -DWITH_JNI=OFF
 | 
						|
+      -DROCKSDB_INSTALL_ON_WINDOWS=OFF
 | 
						|
+      -DWITH_TESTS=OFF
 | 
						|
+      -DWITH_TOOLS=OFF
 | 
						|
+      $<$<BOOL:${MSVC}>:
 | 
						|
+        "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -MP /DNDEBUG"
 | 
						|
+      >
 | 
						|
+      $<$<NOT:$<BOOL:${MSVC}>>:
 | 
						|
+        "-DCMAKE_CXX_FLAGS=-DNDEBUG"
 | 
						|
+      >
 | 
						|
+    LOG_BUILD ON
 | 
						|
+    LOG_CONFIGURE ON
 | 
						|
+    BUILD_COMMAND
 | 
						|
+      ${CMAKE_COMMAND}
 | 
						|
+      --build .
 | 
						|
+      --config $<CONFIG>
 | 
						|
+      --parallel ${ep_procs}
 | 
						|
+      $<$<BOOL:${is_multiconfig}>:
 | 
						|
+        COMMAND
 | 
						|
+          ${CMAKE_COMMAND} -E copy
 | 
						|
+          <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}rocksdb$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+          <BINARY_DIR>
 | 
						|
+        >
 | 
						|
+    LIST_SEPARATOR ::
 | 
						|
+    TEST_COMMAND ""
 | 
						|
+    INSTALL_COMMAND ""
 | 
						|
+    DEPENDS snappy_lib lz4_lib
 | 
						|
+    BUILD_BYPRODUCTS
 | 
						|
+      <BINARY_DIR>/${ep_lib_prefix}rocksdb${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/${ep_lib_prefix}rocksdb_d${ep_lib_suffix}
 | 
						|
+  )
 | 
						|
+  ExternalProject_Get_Property (rocksdb BINARY_DIR)
 | 
						|
+  ExternalProject_Get_Property (rocksdb SOURCE_DIR)
 | 
						|
+  if (CMAKE_VERBOSE_MAKEFILE)
 | 
						|
+    print_ep_logs (rocksdb)
 | 
						|
+  endif ()
 | 
						|
+  file (MAKE_DIRECTORY ${SOURCE_DIR}/include)
 | 
						|
+  set_target_properties (rocksdb_lib PROPERTIES
 | 
						|
+    IMPORTED_LOCATION_DEBUG
 | 
						|
+      ${BINARY_DIR}/${ep_lib_prefix}rocksdb_d${ep_lib_suffix}
 | 
						|
+    IMPORTED_LOCATION_RELEASE
 | 
						|
+      ${BINARY_DIR}/${ep_lib_prefix}rocksdb${ep_lib_suffix}
 | 
						|
+    INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+      ${SOURCE_DIR}/include)
 | 
						|
+  add_dependencies (rocksdb_lib rocksdb)
 | 
						|
+  exclude_if_included (rocksdb)
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+target_link_libraries (rocksdb_lib
 | 
						|
+  INTERFACE
 | 
						|
+    snappy_lib
 | 
						|
+    lz4_lib
 | 
						|
+    $<$<BOOL:${MSVC}>:rpcrt4>)
 | 
						|
+exclude_if_included (rocksdb_lib)
 | 
						|
+target_link_libraries (ripple_libs INTERFACE rocksdb_lib)
 | 
						|
diff --git a/Builds/CMake/deps/Secp256k1.cmake b/Builds/CMake/deps/Secp256k1.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..319731562
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Secp256k1.cmake
 | 
						|
@@ -0,0 +1,58 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: secp256k1
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+add_library (secp256k1_lib STATIC IMPORTED GLOBAL)
 | 
						|
+
 | 
						|
+if (NOT WIN32)
 | 
						|
+  find_package(secp256k1)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+if(secp256k1)
 | 
						|
+  set_target_properties (secp256k1_lib PROPERTIES
 | 
						|
+    IMPORTED_LOCATION_DEBUG
 | 
						|
+      ${secp256k1}
 | 
						|
+    IMPORTED_LOCATION_RELEASE
 | 
						|
+      ${secp256k1}
 | 
						|
+    INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+      ${SECP256K1_INCLUDE_DIR})
 | 
						|
+
 | 
						|
+  add_library (secp256k1 ALIAS secp256k1_lib)
 | 
						|
+  add_library (NIH::secp256k1 ALIAS secp256k1_lib)
 | 
						|
+
 | 
						|
+else()
 | 
						|
+  set(INSTALL_SECP256K1 true)
 | 
						|
+
 | 
						|
+  add_library (secp256k1 STATIC
 | 
						|
+    src/secp256k1/src/secp256k1.c)
 | 
						|
+  target_compile_definitions (secp256k1
 | 
						|
+    PRIVATE
 | 
						|
+      USE_NUM_NONE
 | 
						|
+      USE_FIELD_10X26
 | 
						|
+      USE_FIELD_INV_BUILTIN
 | 
						|
+      USE_SCALAR_8X32
 | 
						|
+      USE_SCALAR_INV_BUILTIN)
 | 
						|
+  target_include_directories (secp256k1
 | 
						|
+    PUBLIC
 | 
						|
+      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
 | 
						|
+      $<INSTALL_INTERFACE:include>
 | 
						|
+    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/secp256k1)
 | 
						|
+  target_compile_options (secp256k1
 | 
						|
+    PRIVATE
 | 
						|
+      $<$<BOOL:${MSVC}>:-wd4319>
 | 
						|
+      $<$<NOT:$<BOOL:${MSVC}>>:
 | 
						|
+        -Wno-deprecated-declarations
 | 
						|
+        -Wno-unused-function
 | 
						|
+      >
 | 
						|
+      $<$<BOOL:${is_gcc}>:-Wno-nonnull-compare>)
 | 
						|
+  target_link_libraries (ripple_libs INTERFACE NIH::secp256k1)
 | 
						|
+#[===========================[
 | 
						|
+     headers installation
 | 
						|
+#]===========================]
 | 
						|
+  install (
 | 
						|
+    FILES
 | 
						|
+      src/secp256k1/include/secp256k1.h
 | 
						|
+  DESTINATION include/secp256k1/include)
 | 
						|
+
 | 
						|
+  add_library (NIH::secp256k1 ALIAS secp256k1)
 | 
						|
+endif()
 | 
						|
diff --git a/Builds/CMake/deps/Snappy.cmake b/Builds/CMake/deps/Snappy.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..331ac2fbe
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Snappy.cmake
 | 
						|
@@ -0,0 +1,77 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: snappy
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+add_library (snappy_lib STATIC IMPORTED GLOBAL)
 | 
						|
+
 | 
						|
+if (NOT WIN32)
 | 
						|
+  find_package(snappy)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+if(snappy)
 | 
						|
+  set_target_properties (snappy_lib PROPERTIES
 | 
						|
+    IMPORTED_LOCATION_DEBUG
 | 
						|
+      ${snappy}
 | 
						|
+    IMPORTED_LOCATION_RELEASE
 | 
						|
+      ${snappy}
 | 
						|
+    INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+    ${SNAPPY_INCLUDE_DIR})
 | 
						|
+
 | 
						|
+else()
 | 
						|
+  ExternalProject_Add (snappy
 | 
						|
+    PREFIX ${nih_cache_path}
 | 
						|
+    GIT_REPOSITORY https://github.com/google/snappy.git
 | 
						|
+    GIT_TAG 1.1.7
 | 
						|
+    CMAKE_ARGS
 | 
						|
+      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
						|
+      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
						|
+      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
						|
+      -DCMAKE_DEBUG_POSTFIX=_d
 | 
						|
+      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
						|
+      -DBUILD_SHARED_LIBS=OFF
 | 
						|
+      -DCMAKE_POSITION_INDEPENDENT_CODE=ON
 | 
						|
+      -DSNAPPY_BUILD_TESTS=OFF
 | 
						|
+      $<$<BOOL:${MSVC}>:
 | 
						|
+        "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP"
 | 
						|
+        "-DCMAKE_CXX_FLAGS_DEBUG=-MTd"
 | 
						|
+        "-DCMAKE_CXX_FLAGS_RELEASE=-MT"
 | 
						|
+      >
 | 
						|
+    LOG_BUILD ON
 | 
						|
+    LOG_CONFIGURE ON
 | 
						|
+    BUILD_COMMAND
 | 
						|
+      ${CMAKE_COMMAND}
 | 
						|
+      --build .
 | 
						|
+      --config $<CONFIG>
 | 
						|
+      --parallel ${ep_procs}
 | 
						|
+      $<$<BOOL:${is_multiconfig}>:
 | 
						|
+        COMMAND
 | 
						|
+          ${CMAKE_COMMAND} -E copy
 | 
						|
+          <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}snappy$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+          <BINARY_DIR>
 | 
						|
+        >
 | 
						|
+    TEST_COMMAND ""
 | 
						|
+    INSTALL_COMMAND
 | 
						|
+      ${CMAKE_COMMAND} -E copy_if_different <BINARY_DIR>/config.h <BINARY_DIR>/snappy-stubs-public.h <SOURCE_DIR>
 | 
						|
+    BUILD_BYPRODUCTS
 | 
						|
+      <BINARY_DIR>/${ep_lib_prefix}snappy${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/${ep_lib_prefix}snappy_d${ep_lib_suffix}
 | 
						|
+  )
 | 
						|
+  ExternalProject_Get_Property (snappy BINARY_DIR)
 | 
						|
+  ExternalProject_Get_Property (snappy SOURCE_DIR)
 | 
						|
+  if (CMAKE_VERBOSE_MAKEFILE)
 | 
						|
+    print_ep_logs (snappy)
 | 
						|
+  endif ()
 | 
						|
+  file (MAKE_DIRECTORY ${SOURCE_DIR}/snappy)
 | 
						|
+  set_target_properties (snappy_lib PROPERTIES
 | 
						|
+    IMPORTED_LOCATION_DEBUG
 | 
						|
+      ${BINARY_DIR}/${ep_lib_prefix}snappy_d${ep_lib_suffix}
 | 
						|
+    IMPORTED_LOCATION_RELEASE
 | 
						|
+      ${BINARY_DIR}/${ep_lib_prefix}snappy${ep_lib_suffix}
 | 
						|
+    INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+      ${SOURCE_DIR})
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+add_dependencies (snappy_lib snappy)
 | 
						|
+target_link_libraries (ripple_libs INTERFACE snappy_lib)
 | 
						|
+exclude_if_included (snappy)
 | 
						|
+exclude_if_included (snappy_lib)
 | 
						|
diff --git a/Builds/CMake/deps/Soci.cmake b/Builds/CMake/deps/Soci.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..d165d6e1f
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Soci.cmake
 | 
						|
@@ -0,0 +1,165 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: soci
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+foreach (_comp core empty sqlite3)
 | 
						|
+  add_library ("soci_${_comp}" STATIC IMPORTED GLOBAL)
 | 
						|
+endforeach ()
 | 
						|
+
 | 
						|
+if (NOT WIN32)
 | 
						|
+  find_package(soci)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+if (soci)
 | 
						|
+  foreach (_comp core empty sqlite3)
 | 
						|
+    set_target_properties ("soci_${_comp}" PROPERTIES
 | 
						|
+      IMPORTED_LOCATION_DEBUG
 | 
						|
+        ${soci}
 | 
						|
+      IMPORTED_LOCATION_RELEASE
 | 
						|
+        ${soci}
 | 
						|
+      INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+        ${SOCI_INCLUDE_DIR})
 | 
						|
+  endforeach ()
 | 
						|
+
 | 
						|
+else()
 | 
						|
+  set (soci_lib_pre ${ep_lib_prefix})
 | 
						|
+  set (soci_lib_post "")
 | 
						|
+  if (WIN32)
 | 
						|
+    # for some reason soci on windows still prepends lib (non-standard)
 | 
						|
+    set (soci_lib_pre lib)
 | 
						|
+    # this version in the name might change if/when we change versions of soci
 | 
						|
+    set (soci_lib_post "_4_0")
 | 
						|
+  endif ()
 | 
						|
+  get_target_property (_boost_incs Boost::date_time INTERFACE_INCLUDE_DIRECTORIES)
 | 
						|
+  get_target_property (_boost_dt Boost::date_time IMPORTED_LOCATION)
 | 
						|
+  if (NOT _boost_dt)
 | 
						|
+    get_target_property (_boost_dt Boost::date_time IMPORTED_LOCATION_RELEASE)
 | 
						|
+  endif ()
 | 
						|
+  if (NOT _boost_dt)
 | 
						|
+    get_target_property (_boost_dt Boost::date_time IMPORTED_LOCATION_DEBUG)
 | 
						|
+  endif ()
 | 
						|
+
 | 
						|
+  ExternalProject_Add (soci
 | 
						|
+    PREFIX ${nih_cache_path}
 | 
						|
+    GIT_REPOSITORY https://github.com/SOCI/soci.git
 | 
						|
+    GIT_TAG 04e1870294918d20761736743bb6136314c42dd5
 | 
						|
+    # We had an issue with soci integer range checking for boost::optional
 | 
						|
+    # and needed to remove the exception that SOCI throws in this case.
 | 
						|
+    # This is *probably* a bug in SOCI, but has never been investigated more
 | 
						|
+    # nor reported to the maintainers.
 | 
						|
+    # This cmake script comments out the lines in question.
 | 
						|
+    # This patch process is likely fragile and should be reviewed carefully
 | 
						|
+    # whenever we update the GIT_TAG above.
 | 
						|
+    PATCH_COMMAND
 | 
						|
+      ${CMAKE_COMMAND} -D RIPPLED_SOURCE=${CMAKE_CURRENT_SOURCE_DIR}
 | 
						|
+        -P ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/soci_patch.cmake
 | 
						|
+    CMAKE_ARGS
 | 
						|
+      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
						|
+      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
						|
+      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
						|
+      $<$<BOOL:${CMAKE_TOOLCHAIN_FILE}>:-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}>
 | 
						|
+      $<$<BOOL:${VCPKG_TARGET_TRIPLET}>:-DVCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}>
 | 
						|
+      $<$<BOOL:${unity}>:-DCMAKE_UNITY_BUILD=ON}>
 | 
						|
+      -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/sqlite3
 | 
						|
+      -DCMAKE_MODULE_PATH=${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake
 | 
						|
+      -DCMAKE_INCLUDE_PATH=$<JOIN:$<TARGET_PROPERTY:sqlite,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
						|
+      -DCMAKE_LIBRARY_PATH=${sqlite_BINARY_DIR}
 | 
						|
+      -DCMAKE_DEBUG_POSTFIX=_d
 | 
						|
+      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
						|
+      -DSOCI_CXX_C11=ON
 | 
						|
+      -DSOCI_STATIC=ON
 | 
						|
+      -DSOCI_LIBDIR=lib
 | 
						|
+      -DSOCI_SHARED=OFF
 | 
						|
+      -DSOCI_TESTS=OFF
 | 
						|
+      # hacks to workaround the fact that soci doesn't currently use
 | 
						|
+      # boost imported targets in its cmake. If they switch to
 | 
						|
+      # proper imported targets, this next line can be removed
 | 
						|
+      # (as well as the get_property above that sets _boost_incs)
 | 
						|
+      -DBoost_INCLUDE_DIRS=$<JOIN:${_boost_incs},::>
 | 
						|
+      -DBoost_INCLUDE_DIR=$<JOIN:${_boost_incs},::>
 | 
						|
+      -DBOOST_ROOT=${BOOST_ROOT}
 | 
						|
+      -DWITH_BOOST=ON
 | 
						|
+      -DBoost_FOUND=ON
 | 
						|
+      -DBoost_NO_BOOST_CMAKE=ON
 | 
						|
+      -DBoost_DATE_TIME_FOUND=ON
 | 
						|
+      -DSOCI_HAVE_BOOST=ON
 | 
						|
+      -DSOCI_HAVE_BOOST_DATE_TIME=ON
 | 
						|
+      -DBoost_DATE_TIME_LIBRARY=${_boost_dt}
 | 
						|
+      -DSOCI_DB2=OFF
 | 
						|
+      -DSOCI_FIREBIRD=OFF
 | 
						|
+      -DSOCI_MYSQL=OFF
 | 
						|
+      -DSOCI_ODBC=OFF
 | 
						|
+      -DSOCI_ORACLE=OFF
 | 
						|
+      -DSOCI_POSTGRESQL=OFF
 | 
						|
+      -DSOCI_SQLITE3=ON
 | 
						|
+      -DSQLITE3_INCLUDE_DIR=$<JOIN:$<TARGET_PROPERTY:sqlite,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
						|
+      -DSQLITE3_LIBRARY=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:sqlite,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:sqlite,IMPORTED_LOCATION_RELEASE>>
 | 
						|
+      $<$<BOOL:${APPLE}>:-DCMAKE_FIND_FRAMEWORK=LAST>
 | 
						|
+      $<$<BOOL:${MSVC}>:
 | 
						|
+        "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP"
 | 
						|
+        "-DCMAKE_CXX_FLAGS_DEBUG=-MTd"
 | 
						|
+        "-DCMAKE_CXX_FLAGS_RELEASE=-MT"
 | 
						|
+      >
 | 
						|
+      $<$<NOT:$<BOOL:${MSVC}>>:
 | 
						|
+        "-DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations"
 | 
						|
+      >
 | 
						|
+      # SEE: https://github.com/SOCI/soci/issues/640
 | 
						|
+      $<$<AND:$<BOOL:${is_gcc}>,$<VERSION_GREATER_EQUAL:${CMAKE_CXX_COMPILER_VERSION},8>>:
 | 
						|
+        "-DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations -Wno-error=format-overflow -Wno-format-overflow -Wno-error=format-truncation"
 | 
						|
+      >
 | 
						|
+    LIST_SEPARATOR ::
 | 
						|
+    LOG_BUILD ON
 | 
						|
+    LOG_CONFIGURE ON
 | 
						|
+    BUILD_COMMAND
 | 
						|
+      ${CMAKE_COMMAND}
 | 
						|
+      --build .
 | 
						|
+      --config $<CONFIG>
 | 
						|
+      --parallel ${ep_procs}
 | 
						|
+      $<$<BOOL:${is_multiconfig}>:
 | 
						|
+        COMMAND
 | 
						|
+          ${CMAKE_COMMAND} -E copy
 | 
						|
+          <BINARY_DIR>/lib/$<CONFIG>/${soci_lib_pre}soci_core${soci_lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+          <BINARY_DIR>/lib/$<CONFIG>/${soci_lib_pre}soci_empty${soci_lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+          <BINARY_DIR>/lib/$<CONFIG>/${soci_lib_pre}soci_sqlite3${soci_lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+          <BINARY_DIR>/lib
 | 
						|
+        >
 | 
						|
+    TEST_COMMAND ""
 | 
						|
+    INSTALL_COMMAND ""
 | 
						|
+    DEPENDS sqlite
 | 
						|
+    BUILD_BYPRODUCTS
 | 
						|
+      <BINARY_DIR>/lib/${soci_lib_pre}soci_core${soci_lib_post}${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/lib/${soci_lib_pre}soci_core${soci_lib_post}_d${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/lib/${soci_lib_pre}soci_empty${soci_lib_post}${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/lib/${soci_lib_pre}soci_empty${soci_lib_post}_d${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/lib/${soci_lib_pre}soci_sqlite3${soci_lib_post}${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/lib/${soci_lib_pre}soci_sqlite3${soci_lib_post}_d${ep_lib_suffix}
 | 
						|
+  )
 | 
						|
+  ExternalProject_Get_Property (soci BINARY_DIR)
 | 
						|
+  ExternalProject_Get_Property (soci SOURCE_DIR)
 | 
						|
+  if (CMAKE_VERBOSE_MAKEFILE)
 | 
						|
+    print_ep_logs (soci)
 | 
						|
+  endif ()
 | 
						|
+  file (MAKE_DIRECTORY ${SOURCE_DIR}/include)
 | 
						|
+  file (MAKE_DIRECTORY ${BINARY_DIR}/include)
 | 
						|
+  foreach (_comp core empty sqlite3)
 | 
						|
+    set_target_properties ("soci_${_comp}" PROPERTIES
 | 
						|
+      IMPORTED_LOCATION_DEBUG
 | 
						|
+        ${BINARY_DIR}/lib/${soci_lib_pre}soci_${_comp}${soci_lib_post}_d${ep_lib_suffix}
 | 
						|
+      IMPORTED_LOCATION_RELEASE
 | 
						|
+        ${BINARY_DIR}/lib/${soci_lib_pre}soci_${_comp}${soci_lib_post}${ep_lib_suffix}
 | 
						|
+      INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+        "${SOURCE_DIR}/include;${BINARY_DIR}/include")
 | 
						|
+    add_dependencies ("soci_${_comp}" soci) # something has to depend on the ExternalProject to trigger it
 | 
						|
+    target_link_libraries (ripple_libs INTERFACE "soci_${_comp}")
 | 
						|
+    if (NOT _comp STREQUAL "core")
 | 
						|
+      target_link_libraries ("soci_${_comp}" INTERFACE soci_core)
 | 
						|
+    endif ()
 | 
						|
+  endforeach ()
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+foreach (_comp core empty sqlite3)
 | 
						|
+  exclude_if_included ("soci_${_comp}")
 | 
						|
+endforeach ()
 | 
						|
+
 | 
						|
+
 | 
						|
+exclude_if_included (soci)
 | 
						|
diff --git a/Builds/CMake/deps/Sqlite.cmake b/Builds/CMake/deps/Sqlite.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..7b34c1121
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/Sqlite.cmake
 | 
						|
@@ -0,0 +1,93 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: sqlite
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+add_library (sqlite STATIC IMPORTED GLOBAL)
 | 
						|
+
 | 
						|
+if (NOT WIN32)
 | 
						|
+  find_package(sqlite)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+
 | 
						|
+if(sqlite3)
 | 
						|
+  set_target_properties (sqlite PROPERTIES
 | 
						|
+    IMPORTED_LOCATION_DEBUG
 | 
						|
+      ${sqlite3}
 | 
						|
+    IMPORTED_LOCATION_RELEASE
 | 
						|
+      ${sqlite3}
 | 
						|
+    INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+    ${SQLITE_INCLUDE_DIR})
 | 
						|
+
 | 
						|
+else()
 | 
						|
+  ExternalProject_Add (sqlite3
 | 
						|
+    PREFIX ${nih_cache_path}
 | 
						|
+    # sqlite doesn't use git, but it provides versioned tarballs
 | 
						|
+    URL https://www.sqlite.org/2018/sqlite-amalgamation-3260000.zip
 | 
						|
+      http://www.sqlite.org/2018/sqlite-amalgamation-3260000.zip
 | 
						|
+      https://www2.sqlite.org/2018/sqlite-amalgamation-3260000.zip
 | 
						|
+      http://www2.sqlite.org/2018/sqlite-amalgamation-3260000.zip
 | 
						|
+    # ^^^ version is apparent in the URL:  3260000 => 3.26.0
 | 
						|
+    URL_HASH SHA256=de5dcab133aa339a4cf9e97c40aa6062570086d6085d8f9ad7bc6ddf8a52096e
 | 
						|
+    # Don't need to worry about MITM attacks too much because the download
 | 
						|
+    # is checked against a strong hash
 | 
						|
+    TLS_VERIFY false
 | 
						|
+    # we wrote a very simple CMake file to build sqlite
 | 
						|
+    # so that's what we copy here so that we can build with
 | 
						|
+    # CMake. sqlite doesn't generally provided a build system
 | 
						|
+    # for the single amalgamation source file.
 | 
						|
+    PATCH_COMMAND
 | 
						|
+      ${CMAKE_COMMAND} -E copy_if_different
 | 
						|
+      ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/CMake_sqlite3.txt
 | 
						|
+      <SOURCE_DIR>/CMakeLists.txt
 | 
						|
+    CMAKE_ARGS
 | 
						|
+      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
						|
+      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
						|
+      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
						|
+      -DCMAKE_DEBUG_POSTFIX=_d
 | 
						|
+      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
						|
+      $<$<BOOL:${MSVC}>:
 | 
						|
+        "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
						|
+        "-DCMAKE_C_FLAGS_DEBUG=-MTd"
 | 
						|
+        "-DCMAKE_C_FLAGS_RELEASE=-MT"
 | 
						|
+      >
 | 
						|
+    LOG_BUILD ON
 | 
						|
+    LOG_CONFIGURE ON
 | 
						|
+    BUILD_COMMAND
 | 
						|
+      ${CMAKE_COMMAND}
 | 
						|
+      --build .
 | 
						|
+      --config $<CONFIG>
 | 
						|
+      --parallel ${ep_procs}
 | 
						|
+      $<$<BOOL:${is_multiconfig}>:
 | 
						|
+        COMMAND
 | 
						|
+          ${CMAKE_COMMAND} -E copy
 | 
						|
+            <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}sqlite3$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+            <BINARY_DIR>
 | 
						|
+        >
 | 
						|
+    TEST_COMMAND ""
 | 
						|
+    INSTALL_COMMAND ""
 | 
						|
+    BUILD_BYPRODUCTS
 | 
						|
+      <BINARY_DIR>/${ep_lib_prefix}sqlite3${ep_lib_suffix}
 | 
						|
+      <BINARY_DIR>/${ep_lib_prefix}sqlite3_d${ep_lib_suffix}
 | 
						|
+  )
 | 
						|
+  ExternalProject_Get_Property (sqlite3 BINARY_DIR)
 | 
						|
+  ExternalProject_Get_Property (sqlite3 SOURCE_DIR)
 | 
						|
+  if (CMAKE_VERBOSE_MAKEFILE)
 | 
						|
+    print_ep_logs (sqlite3)
 | 
						|
+  endif ()
 | 
						|
+
 | 
						|
+  set_target_properties (sqlite PROPERTIES
 | 
						|
+    IMPORTED_LOCATION_DEBUG
 | 
						|
+      ${BINARY_DIR}/${ep_lib_prefix}sqlite3_d${ep_lib_suffix}
 | 
						|
+    IMPORTED_LOCATION_RELEASE
 | 
						|
+      ${BINARY_DIR}/${ep_lib_prefix}sqlite3${ep_lib_suffix}
 | 
						|
+    INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+      ${SOURCE_DIR})
 | 
						|
+
 | 
						|
+  add_dependencies (sqlite sqlite3)
 | 
						|
+  exclude_if_included (sqlite3)
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+target_link_libraries (sqlite INTERFACE $<$<NOT:$<BOOL:${MSVC}>>:dl>)
 | 
						|
+target_link_libraries (ripple_libs INTERFACE sqlite)
 | 
						|
+exclude_if_included (sqlite)
 | 
						|
+set(sqlite_BINARY_DIR ${BINARY_DIR})
 | 
						|
diff --git a/Builds/CMake/deps/cassandra.cmake b/Builds/CMake/deps/cassandra.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..4563a3413
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/cassandra.cmake
 | 
						|
@@ -0,0 +1,167 @@
 | 
						|
+if(reporting)
 | 
						|
+    find_library(cassandra NAMES cassandra)
 | 
						|
+    if(NOT cassandra)
 | 
						|
+
 | 
						|
+        message("System installed Cassandra cpp driver not found. Will build")
 | 
						|
+
 | 
						|
+        find_library(zlib NAMES zlib1g-dev zlib-devel zlib z)
 | 
						|
+        if(NOT zlib)
 | 
						|
+            message("zlib not found. will build")
 | 
						|
+            add_library(zlib STATIC IMPORTED GLOBAL)
 | 
						|
+            ExternalProject_Add(zlib_src
 | 
						|
+                PREFIX ${nih_cache_path}
 | 
						|
+                GIT_REPOSITORY https://github.com/madler/zlib.git
 | 
						|
+                GIT_TAG v1.2.12
 | 
						|
+                INSTALL_COMMAND ""
 | 
						|
+                BUILD_BYPRODUCTS <BINARY_DIR>/${ep_lib_prefix}z.a
 | 
						|
+                LOG_BUILD TRUE
 | 
						|
+                LOG_CONFIGURE TRUE
 | 
						|
+                )
 | 
						|
+
 | 
						|
+
 | 
						|
+            ExternalProject_Get_Property (zlib_src SOURCE_DIR)
 | 
						|
+            ExternalProject_Get_Property (zlib_src BINARY_DIR)
 | 
						|
+            set (zlib_src_SOURCE_DIR "${SOURCE_DIR}")
 | 
						|
+            file (MAKE_DIRECTORY ${zlib_src_SOURCE_DIR}/include)
 | 
						|
+
 | 
						|
+            set_target_properties (zlib PROPERTIES
 | 
						|
+                IMPORTED_LOCATION
 | 
						|
+                ${BINARY_DIR}/${ep_lib_prefix}z.a
 | 
						|
+                INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+                ${SOURCE_DIR}/include)
 | 
						|
+            add_dependencies(zlib zlib_src)
 | 
						|
+
 | 
						|
+            file(TO_CMAKE_PATH "${zlib_src_SOURCE_DIR}" zlib_src_SOURCE_DIR)
 | 
						|
+        endif()
 | 
						|
+
 | 
						|
+
 | 
						|
+
 | 
						|
+
 | 
						|
+        find_library(krb5 NAMES krb5-dev libkrb5-dev)
 | 
						|
+
 | 
						|
+        if(NOT krb5)
 | 
						|
+            message("krb5 not found. will build")
 | 
						|
+            add_library(krb5 STATIC IMPORTED GLOBAL)
 | 
						|
+            ExternalProject_Add(krb5_src
 | 
						|
+                PREFIX ${nih_cache_path}
 | 
						|
+                GIT_REPOSITORY https://github.com/krb5/krb5.git
 | 
						|
+                GIT_TAG krb5-1.20-final
 | 
						|
+                UPDATE_COMMAND ""
 | 
						|
+                CONFIGURE_COMMAND autoreconf src && CFLAGS=-fcommon ./src/configure --enable-static --disable-shared > /dev/null
 | 
						|
+                BUILD_IN_SOURCE 1
 | 
						|
+                BUILD_COMMAND make
 | 
						|
+                INSTALL_COMMAND ""
 | 
						|
+                BUILD_BYPRODUCTS <SOURCE_DIR>/lib/${ep_lib_prefix}krb5.a
 | 
						|
+                LOG_BUILD TRUE
 | 
						|
+                )
 | 
						|
+
 | 
						|
+            ExternalProject_Get_Property (krb5_src SOURCE_DIR)
 | 
						|
+            ExternalProject_Get_Property (krb5_src BINARY_DIR)
 | 
						|
+            set (krb5_src_SOURCE_DIR "${SOURCE_DIR}")
 | 
						|
+            file (MAKE_DIRECTORY ${krb5_src_SOURCE_DIR}/include)
 | 
						|
+
 | 
						|
+            set_target_properties (krb5 PROPERTIES
 | 
						|
+                IMPORTED_LOCATION
 | 
						|
+                ${BINARY_DIR}/lib/${ep_lib_prefix}krb5.a
 | 
						|
+                INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+                ${SOURCE_DIR}/include)
 | 
						|
+            add_dependencies(krb5 krb5_src)
 | 
						|
+
 | 
						|
+            file(TO_CMAKE_PATH "${krb5_src_SOURCE_DIR}" krb5_src_SOURCE_DIR)
 | 
						|
+        endif()
 | 
						|
+
 | 
						|
+
 | 
						|
+        find_library(libuv1 NAMES uv1 libuv1 liubuv1-dev libuv1:amd64)
 | 
						|
+
 | 
						|
+
 | 
						|
+        if(NOT libuv1)
 | 
						|
+            message("libuv1 not found, will build")
 | 
						|
+            add_library(libuv1 STATIC IMPORTED GLOBAL)
 | 
						|
+            ExternalProject_Add(libuv_src
 | 
						|
+                PREFIX ${nih_cache_path}
 | 
						|
+                GIT_REPOSITORY https://github.com/libuv/libuv.git
 | 
						|
+                GIT_TAG v1.44.2
 | 
						|
+                INSTALL_COMMAND ""
 | 
						|
+                BUILD_BYPRODUCTS <BINARY_DIR>/${ep_lib_prefix}uv_a.a
 | 
						|
+                LOG_BUILD TRUE
 | 
						|
+                LOG_CONFIGURE TRUE
 | 
						|
+                )
 | 
						|
+
 | 
						|
+            ExternalProject_Get_Property (libuv_src SOURCE_DIR)
 | 
						|
+            ExternalProject_Get_Property (libuv_src BINARY_DIR)
 | 
						|
+            set (libuv_src_SOURCE_DIR "${SOURCE_DIR}")
 | 
						|
+            file (MAKE_DIRECTORY ${libuv_src_SOURCE_DIR}/include)
 | 
						|
+
 | 
						|
+            set_target_properties (libuv1 PROPERTIES
 | 
						|
+                IMPORTED_LOCATION
 | 
						|
+                ${BINARY_DIR}/${ep_lib_prefix}uv_a.a
 | 
						|
+                INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+                ${SOURCE_DIR}/include)
 | 
						|
+            add_dependencies(libuv1 libuv_src)
 | 
						|
+
 | 
						|
+            file(TO_CMAKE_PATH "${libuv_src_SOURCE_DIR}" libuv_src_SOURCE_DIR)
 | 
						|
+        endif()
 | 
						|
+
 | 
						|
+        add_library (cassandra STATIC IMPORTED GLOBAL)
 | 
						|
+        ExternalProject_Add(cassandra_src
 | 
						|
+            PREFIX ${nih_cache_path}
 | 
						|
+            GIT_REPOSITORY https://github.com/datastax/cpp-driver.git
 | 
						|
+            GIT_TAG 2.16.2
 | 
						|
+            CMAKE_ARGS
 | 
						|
+            -DLIBUV_ROOT_DIR=${BINARY_DIR}
 | 
						|
+            -DLIBUV_LIBARY=${BINARY_DIR}/libuv_a.a
 | 
						|
+            -DLIBUV_INCLUDE_DIR=${SOURCE_DIR}/include
 | 
						|
+            -DCASS_BUILD_STATIC=ON
 | 
						|
+            -DCASS_BUILD_SHARED=OFF
 | 
						|
+            -DOPENSSL_ROOT_DIR=/opt/local/openssl
 | 
						|
+            INSTALL_COMMAND ""
 | 
						|
+            BUILD_BYPRODUCTS <BINARY_DIR>/${ep_lib_prefix}cassandra_static.a
 | 
						|
+            LOG_BUILD TRUE
 | 
						|
+            LOG_CONFIGURE TRUE
 | 
						|
+            )
 | 
						|
+
 | 
						|
+        ExternalProject_Get_Property (cassandra_src SOURCE_DIR)
 | 
						|
+        ExternalProject_Get_Property (cassandra_src BINARY_DIR)
 | 
						|
+        set (cassandra_src_SOURCE_DIR "${SOURCE_DIR}")
 | 
						|
+        file (MAKE_DIRECTORY ${cassandra_src_SOURCE_DIR}/include)
 | 
						|
+
 | 
						|
+        set_target_properties (cassandra PROPERTIES
 | 
						|
+            IMPORTED_LOCATION
 | 
						|
+            ${BINARY_DIR}/${ep_lib_prefix}cassandra_static.a
 | 
						|
+            INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+            ${SOURCE_DIR}/include)
 | 
						|
+        add_dependencies(cassandra cassandra_src)
 | 
						|
+
 | 
						|
+        if(NOT libuv1)
 | 
						|
+            ExternalProject_Add_StepDependencies(cassandra_src build libuv1)
 | 
						|
+            target_link_libraries(cassandra INTERFACE libuv1)
 | 
						|
+        else()
 | 
						|
+            target_link_libraries(cassandra INTERFACE ${libuv1})
 | 
						|
+        endif()
 | 
						|
+        if(NOT krb5)
 | 
						|
+
 | 
						|
+            ExternalProject_Add_StepDependencies(cassandra_src build krb5)
 | 
						|
+            target_link_libraries(cassandra INTERFACE krb5)
 | 
						|
+        else()
 | 
						|
+            target_link_libraries(cassandra INTERFACE ${krb5})
 | 
						|
+        endif()
 | 
						|
+
 | 
						|
+        if(NOT zlib)
 | 
						|
+            ExternalProject_Add_StepDependencies(cassandra_src build zlib)
 | 
						|
+            target_link_libraries(cassandra INTERFACE zlib)
 | 
						|
+        else()
 | 
						|
+            target_link_libraries(cassandra INTERFACE ${zlib})
 | 
						|
+        endif()
 | 
						|
+
 | 
						|
+        file(TO_CMAKE_PATH "${cassandra_src_SOURCE_DIR}" cassandra_src_SOURCE_DIR)
 | 
						|
+        target_link_libraries(ripple_libs INTERFACE cassandra)
 | 
						|
+    else()
 | 
						|
+        message("Found system installed cassandra cpp driver")
 | 
						|
+
 | 
						|
+        find_path(cassandra_includes NAMES cassandra.h REQUIRED)
 | 
						|
+        target_link_libraries (ripple_libs INTERFACE ${cassandra})
 | 
						|
+        target_include_directories(ripple_libs INTERFACE ${cassandra_includes})
 | 
						|
+    endif()
 | 
						|
+
 | 
						|
+    exclude_if_included (cassandra)
 | 
						|
+endif()
 | 
						|
diff --git a/Builds/CMake/deps/date.cmake b/Builds/CMake/deps/date.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..b9155c264
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/deps/date.cmake
 | 
						|
@@ -0,0 +1,18 @@
 | 
						|
+#[===================================================================[
 | 
						|
+   NIH dep: date
 | 
						|
+
 | 
						|
+   the main library is header-only, thus is an INTERFACE lib in CMake.
 | 
						|
+
 | 
						|
+   NOTE: this has been accepted into c++20 so can likely be replaced
 | 
						|
+   when we update to that standard
 | 
						|
+#]===================================================================]
 | 
						|
+
 | 
						|
+find_package (date QUIET)
 | 
						|
+if (NOT TARGET date::date)
 | 
						|
+  FetchContent_Declare(
 | 
						|
+    hh_date_src
 | 
						|
+    GIT_REPOSITORY https://github.com/HowardHinnant/date.git
 | 
						|
+    GIT_TAG        fc4cf092f9674f2670fb9177edcdee870399b829
 | 
						|
+  )
 | 
						|
+  FetchContent_MakeAvailable(hh_date_src)
 | 
						|
+endif ()
 | 
						|
diff --git a/Builds/CMake/deps/gRPC.cmake b/Builds/CMake/deps/gRPC.cmake
 | 
						|
index 44185b3a2..8dd094175 100644
 | 
						|
--- a/Builds/CMake/deps/gRPC.cmake
 | 
						|
+++ b/Builds/CMake/deps/gRPC.cmake
 | 
						|
@@ -1,15 +1,319 @@
 | 
						|
-find_package(gRPC 1.23)
 | 
						|
+
 | 
						|
+# currently linking to unsecure versions...if we switch, we'll
 | 
						|
+# need to add ssl as a link dependency to the grpc targets
 | 
						|
+option (use_secure_grpc "use TLS version of grpc libs." OFF)
 | 
						|
+if (use_secure_grpc)
 | 
						|
+  set (grpc_suffix "")
 | 
						|
+else ()
 | 
						|
+  set (grpc_suffix "_unsecure")
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+find_package (gRPC 1.23 CONFIG QUIET)
 | 
						|
+if (TARGET gRPC::gpr AND NOT local_grpc)
 | 
						|
+  get_target_property (_grpc_l gRPC::gpr IMPORTED_LOCATION_DEBUG)
 | 
						|
+  if (NOT _grpc_l)
 | 
						|
+    get_target_property (_grpc_l gRPC::gpr IMPORTED_LOCATION_RELEASE)
 | 
						|
+  endif ()
 | 
						|
+  if (NOT _grpc_l)
 | 
						|
+    get_target_property (_grpc_l gRPC::gpr IMPORTED_LOCATION)
 | 
						|
+  endif ()
 | 
						|
+  message (STATUS "Found cmake config for gRPC. Using ${_grpc_l}.")
 | 
						|
+else ()
 | 
						|
+  find_package (PkgConfig QUIET)
 | 
						|
+  if (PKG_CONFIG_FOUND)
 | 
						|
+    pkg_check_modules (grpc QUIET "grpc${grpc_suffix}>=1.25" "grpc++${grpc_suffix}" gpr)
 | 
						|
+  endif ()
 | 
						|
+
 | 
						|
+  if (grpc_FOUND)
 | 
						|
+    message (STATUS "Found gRPC using pkg-config. Using ${grpc_gpr_PREFIX}.")
 | 
						|
+  endif ()
 | 
						|
+
 | 
						|
+  add_executable (gRPC::grpc_cpp_plugin IMPORTED)
 | 
						|
+  exclude_if_included (gRPC::grpc_cpp_plugin)
 | 
						|
+
 | 
						|
+  if (grpc_FOUND AND NOT local_grpc)
 | 
						|
+    # use installed grpc (via pkg-config)
 | 
						|
+    macro (add_imported_grpc libname_)
 | 
						|
+      if (static)
 | 
						|
+        set (_search "${CMAKE_STATIC_LIBRARY_PREFIX}${libname_}${CMAKE_STATIC_LIBRARY_SUFFIX}")
 | 
						|
+      else ()
 | 
						|
+        set (_search "${CMAKE_SHARED_LIBRARY_PREFIX}${libname_}${CMAKE_SHARED_LIBRARY_SUFFIX}")
 | 
						|
+      endif()
 | 
						|
+      find_library(_found_${libname_}
 | 
						|
+        NAMES ${_search}
 | 
						|
+        HINTS ${grpc_LIBRARY_DIRS})
 | 
						|
+      if (_found_${libname_})
 | 
						|
+        message (STATUS "importing ${libname_} as ${_found_${libname_}}")
 | 
						|
+      else ()
 | 
						|
+        message (FATAL_ERROR "using pkg-config for grpc, can't find ${_search}")
 | 
						|
+      endif ()
 | 
						|
+      add_library ("gRPC::${libname_}" STATIC IMPORTED GLOBAL)
 | 
						|
+      set_target_properties ("gRPC::${libname_}" PROPERTIES IMPORTED_LOCATION ${_found_${libname_}})
 | 
						|
+      if (grpc_INCLUDE_DIRS)
 | 
						|
+        set_target_properties ("gRPC::${libname_}" PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${grpc_INCLUDE_DIRS})
 | 
						|
+      endif ()
 | 
						|
+      target_link_libraries (ripple_libs INTERFACE "gRPC::${libname_}")
 | 
						|
+      exclude_if_included ("gRPC::${libname_}")
 | 
						|
+    endmacro ()
 | 
						|
+
 | 
						|
+    set_target_properties (gRPC::grpc_cpp_plugin PROPERTIES
 | 
						|
+        IMPORTED_LOCATION "${grpc_gpr_PREFIX}/bin/grpc_cpp_plugin${CMAKE_EXECUTABLE_SUFFIX}")
 | 
						|
+
 | 
						|
+    pkg_check_modules (cares QUIET libcares)
 | 
						|
+    if (cares_FOUND)
 | 
						|
+      if (static)
 | 
						|
+        set (_search "${CMAKE_STATIC_LIBRARY_PREFIX}cares${CMAKE_STATIC_LIBRARY_SUFFIX}")
 | 
						|
+        set (_prefix cares_STATIC)
 | 
						|
+        set (_static STATIC)
 | 
						|
+      else ()
 | 
						|
+        set (_search "${CMAKE_SHARED_LIBRARY_PREFIX}cares${CMAKE_SHARED_LIBRARY_SUFFIX}")
 | 
						|
+        set (_prefix cares)
 | 
						|
+        set (_static)
 | 
						|
+      endif()
 | 
						|
+      find_library(_location NAMES ${_search} HINTS ${cares_LIBRARY_DIRS})
 | 
						|
+      if (NOT _location)
 | 
						|
+        message (FATAL_ERROR "using pkg-config for grpc, can't find c-ares")
 | 
						|
+      endif ()
 | 
						|
+      add_library (c-ares::cares ${_static} IMPORTED GLOBAL)
 | 
						|
+      set_target_properties (c-ares::cares PROPERTIES
 | 
						|
+        IMPORTED_LOCATION ${_location}
 | 
						|
+        INTERFACE_INCLUDE_DIRECTORIES "${${_prefix}_INCLUDE_DIRS}"
 | 
						|
+        INTERFACE_LINK_OPTIONS "${${_prefix}_LDFLAGS}"
 | 
						|
+      )
 | 
						|
+      exclude_if_included (c-ares::cares)
 | 
						|
+    else ()
 | 
						|
+      message (FATAL_ERROR "using pkg-config for grpc, can't find c-ares")
 | 
						|
+    endif ()
 | 
						|
+  else ()
 | 
						|
+    #[===========================[
 | 
						|
+       c-ares (grpc requires)
 | 
						|
+    #]===========================]
 | 
						|
+    ExternalProject_Add (c-ares_src
 | 
						|
+      PREFIX ${nih_cache_path}
 | 
						|
+      GIT_REPOSITORY https://github.com/c-ares/c-ares.git
 | 
						|
+      GIT_TAG cares-1_15_0
 | 
						|
+      CMAKE_ARGS
 | 
						|
+        -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
						|
+        $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
						|
+        -DCMAKE_DEBUG_POSTFIX=_d
 | 
						|
+        $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
						|
+        -DCMAKE_INSTALL_PREFIX=<BINARY_DIR>/_installed_
 | 
						|
+        -DCARES_SHARED=OFF
 | 
						|
+        -DCARES_STATIC=ON
 | 
						|
+        -DCARES_STATIC_PIC=ON
 | 
						|
+        -DCARES_INSTALL=ON
 | 
						|
+        -DCARES_MSVC_STATIC_RUNTIME=ON
 | 
						|
+        $<$<BOOL:${MSVC}>:
 | 
						|
+          "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
						|
+        >
 | 
						|
+      LOG_BUILD ON
 | 
						|
+      LOG_CONFIGURE ON
 | 
						|
+      BUILD_COMMAND
 | 
						|
+        ${CMAKE_COMMAND}
 | 
						|
+          --build .
 | 
						|
+          --config $<CONFIG>
 | 
						|
+          --parallel ${ep_procs}
 | 
						|
+      TEST_COMMAND ""
 | 
						|
+      INSTALL_COMMAND
 | 
						|
+        ${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --config $<CONFIG> --target install
 | 
						|
+      BUILD_BYPRODUCTS
 | 
						|
+        <BINARY_DIR>/_installed_/lib/${ep_lib_prefix}cares${ep_lib_suffix}
 | 
						|
+        <BINARY_DIR>/_installed_/lib/${ep_lib_prefix}cares_d${ep_lib_suffix}
 | 
						|
+    )
 | 
						|
+    exclude_if_included (c-ares_src)
 | 
						|
+    ExternalProject_Get_Property (c-ares_src BINARY_DIR)
 | 
						|
+    set (cares_binary_dir "${BINARY_DIR}")
 | 
						|
+
 | 
						|
+    add_library (c-ares::cares STATIC IMPORTED GLOBAL)
 | 
						|
+    file (MAKE_DIRECTORY ${BINARY_DIR}/_installed_/include)
 | 
						|
+    set_target_properties (c-ares::cares PROPERTIES
 | 
						|
+      IMPORTED_LOCATION_DEBUG
 | 
						|
+        ${BINARY_DIR}/_installed_/lib/${ep_lib_prefix}cares_d${ep_lib_suffix}
 | 
						|
+      IMPORTED_LOCATION_RELEASE
 | 
						|
+        ${BINARY_DIR}/_installed_/lib/${ep_lib_prefix}cares${ep_lib_suffix}
 | 
						|
+      INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+        ${BINARY_DIR}/_installed_/include)
 | 
						|
+    add_dependencies (c-ares::cares c-ares_src)
 | 
						|
+    exclude_if_included (c-ares::cares)
 | 
						|
+
 | 
						|
+    if (NOT has_zlib)
 | 
						|
+      #[===========================[
 | 
						|
+         zlib (grpc requires)
 | 
						|
+      #]===========================]
 | 
						|
+      if (MSVC)
 | 
						|
+        set (zlib_debug_postfix "d") # zlib cmake sets this internally for MSVC, so we really don't have a choice
 | 
						|
+        set (zlib_base "zlibstatic")
 | 
						|
+      else ()
 | 
						|
+        set (zlib_debug_postfix "_d")
 | 
						|
+        set (zlib_base "z")
 | 
						|
+      endif ()
 | 
						|
+      ExternalProject_Add (zlib_src
 | 
						|
+        PREFIX ${nih_cache_path}
 | 
						|
+        GIT_REPOSITORY https://github.com/madler/zlib.git
 | 
						|
+        GIT_TAG v1.2.11
 | 
						|
+        CMAKE_ARGS
 | 
						|
+          -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
						|
+          $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
						|
+          -DCMAKE_DEBUG_POSTFIX=${zlib_debug_postfix}
 | 
						|
+          $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
						|
+          -DCMAKE_INSTALL_PREFIX=<BINARY_DIR>/_installed_
 | 
						|
+          -DBUILD_SHARED_LIBS=OFF
 | 
						|
+          $<$<BOOL:${MSVC}>:
 | 
						|
+            "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
						|
+            "-DCMAKE_C_FLAGS_DEBUG=-MTd"
 | 
						|
+            "-DCMAKE_C_FLAGS_RELEASE=-MT"
 | 
						|
+          >
 | 
						|
+        LOG_BUILD ON
 | 
						|
+        LOG_CONFIGURE ON
 | 
						|
+        BUILD_COMMAND
 | 
						|
+          ${CMAKE_COMMAND}
 | 
						|
+            --build .
 | 
						|
+            --config $<CONFIG>
 | 
						|
+            --parallel ${ep_procs}
 | 
						|
+        TEST_COMMAND ""
 | 
						|
+        INSTALL_COMMAND
 | 
						|
+          ${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --config $<CONFIG> --target install
 | 
						|
+        BUILD_BYPRODUCTS
 | 
						|
+          <BINARY_DIR>/_installed_/lib/${ep_lib_prefix}${zlib_base}${ep_lib_suffix}
 | 
						|
+          <BINARY_DIR>/_installed_/lib/${ep_lib_prefix}${zlib_base}${zlib_debug_postfix}${ep_lib_suffix}
 | 
						|
+      )
 | 
						|
+      exclude_if_included (zlib_src)
 | 
						|
+      ExternalProject_Get_Property (zlib_src BINARY_DIR)
 | 
						|
+      set (zlib_binary_dir "${BINARY_DIR}")
 | 
						|
+
 | 
						|
+      add_library (ZLIB::ZLIB STATIC IMPORTED GLOBAL)
 | 
						|
+      file (MAKE_DIRECTORY ${BINARY_DIR}/_installed_/include)
 | 
						|
+      set_target_properties (ZLIB::ZLIB PROPERTIES
 | 
						|
+        IMPORTED_LOCATION_DEBUG
 | 
						|
+          ${BINARY_DIR}/_installed_/lib/${ep_lib_prefix}${zlib_base}${zlib_debug_postfix}${ep_lib_suffix}
 | 
						|
+        IMPORTED_LOCATION_RELEASE
 | 
						|
+          ${BINARY_DIR}/_installed_/lib/${ep_lib_prefix}${zlib_base}${ep_lib_suffix}
 | 
						|
+        INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+          ${BINARY_DIR}/_installed_/include)
 | 
						|
+      add_dependencies (ZLIB::ZLIB zlib_src)
 | 
						|
+      exclude_if_included (ZLIB::ZLIB)
 | 
						|
+    endif ()
 | 
						|
+
 | 
						|
+    #[===========================[
 | 
						|
+       grpc
 | 
						|
+    #]===========================]
 | 
						|
+    ExternalProject_Add (grpc_src
 | 
						|
+      PREFIX ${nih_cache_path}
 | 
						|
+      GIT_REPOSITORY https://github.com/grpc/grpc.git
 | 
						|
+      GIT_TAG v1.25.0
 | 
						|
+      CMAKE_ARGS
 | 
						|
+        -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
						|
+        -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
						|
+        $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
						|
+        $<$<BOOL:${CMAKE_TOOLCHAIN_FILE}>:-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}>
 | 
						|
+        $<$<BOOL:${VCPKG_TARGET_TRIPLET}>:-DVCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}>
 | 
						|
+        $<$<BOOL:${unity}>:-DCMAKE_UNITY_BUILD=ON}>
 | 
						|
+        -DCMAKE_DEBUG_POSTFIX=_d
 | 
						|
+        $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
						|
+        -DgRPC_BUILD_TESTS=OFF
 | 
						|
+        -DgRPC_BENCHMARK_PROVIDER=""
 | 
						|
+        -DgRPC_BUILD_CSHARP_EXT=OFF
 | 
						|
+        -DgRPC_MSVC_STATIC_RUNTIME=ON
 | 
						|
+        -DgRPC_INSTALL=OFF
 | 
						|
+        -DgRPC_CARES_PROVIDER=package
 | 
						|
+        -Dc-ares_DIR=${cares_binary_dir}/_installed_/lib/cmake/c-ares
 | 
						|
+        -DgRPC_SSL_PROVIDER=package
 | 
						|
+        -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
 | 
						|
+        -DgRPC_PROTOBUF_PROVIDER=package
 | 
						|
+        -DProtobuf_USE_STATIC_LIBS=$<IF:$<AND:$<BOOL:${Protobuf_FOUND}>,$<NOT:$<BOOL:${static}>>>,OFF,ON>
 | 
						|
+        -DProtobuf_INCLUDE_DIR=$<JOIN:$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>,:_:>
 | 
						|
+        -DProtobuf_LIBRARY=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:protobuf::libprotobuf,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:protobuf::libprotobuf,IMPORTED_LOCATION_RELEASE>>
 | 
						|
+        -DProtobuf_PROTOC_LIBRARY=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:protobuf::libprotoc,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:protobuf::libprotoc,IMPORTED_LOCATION_RELEASE>>
 | 
						|
+        -DProtobuf_PROTOC_EXECUTABLE=$<TARGET_PROPERTY:protobuf::protoc,IMPORTED_LOCATION>
 | 
						|
+        -DgRPC_ZLIB_PROVIDER=package
 | 
						|
+        $<$<NOT:$<BOOL:${has_zlib}>>:-DZLIB_ROOT=${zlib_binary_dir}/_installed_>
 | 
						|
+        $<$<BOOL:${MSVC}>:
 | 
						|
+          "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP"
 | 
						|
+          "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
						|
+        >
 | 
						|
+      LOG_BUILD ON
 | 
						|
+      LOG_CONFIGURE ON
 | 
						|
+      BUILD_COMMAND
 | 
						|
+        ${CMAKE_COMMAND}
 | 
						|
+        --build .
 | 
						|
+        --config $<CONFIG>
 | 
						|
+        --parallel ${ep_procs}
 | 
						|
+        $<$<BOOL:${is_multiconfig}>:
 | 
						|
+          COMMAND
 | 
						|
+            ${CMAKE_COMMAND} -E copy
 | 
						|
+            <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}grpc${grpc_suffix}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+            <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}grpc++${grpc_suffix}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+            <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}address_sorting$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+            <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}gpr$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
+            <BINARY_DIR>/$<CONFIG>/grpc_cpp_plugin${CMAKE_EXECUTABLE_SUFFIX}
 | 
						|
+            <BINARY_DIR>
 | 
						|
+          >
 | 
						|
+      LIST_SEPARATOR :_:
 | 
						|
+      TEST_COMMAND ""
 | 
						|
+      INSTALL_COMMAND ""
 | 
						|
+      DEPENDS c-ares_src
 | 
						|
+      BUILD_BYPRODUCTS
 | 
						|
+        <BINARY_DIR>/${ep_lib_prefix}grpc${grpc_suffix}${ep_lib_suffix}
 | 
						|
+        <BINARY_DIR>/${ep_lib_prefix}grpc${grpc_suffix}_d${ep_lib_suffix}
 | 
						|
+        <BINARY_DIR>/${ep_lib_prefix}grpc++${grpc_suffix}${ep_lib_suffix}
 | 
						|
+        <BINARY_DIR>/${ep_lib_prefix}grpc++${grpc_suffix}_d${ep_lib_suffix}
 | 
						|
+        <BINARY_DIR>/${ep_lib_prefix}address_sorting${ep_lib_suffix}
 | 
						|
+        <BINARY_DIR>/${ep_lib_prefix}address_sorting_d${ep_lib_suffix}
 | 
						|
+        <BINARY_DIR>/${ep_lib_prefix}gpr${ep_lib_suffix}
 | 
						|
+        <BINARY_DIR>/${ep_lib_prefix}gpr_d${ep_lib_suffix}
 | 
						|
+        <BINARY_DIR>/grpc_cpp_plugin${CMAKE_EXECUTABLE_SUFFIX}
 | 
						|
+    )
 | 
						|
+    if (TARGET protobuf_src)
 | 
						|
+      ExternalProject_Add_StepDependencies(grpc_src build protobuf_src)
 | 
						|
+    endif ()
 | 
						|
+    exclude_if_included (grpc_src)
 | 
						|
+    ExternalProject_Get_Property (grpc_src BINARY_DIR)
 | 
						|
+    ExternalProject_Get_Property (grpc_src SOURCE_DIR)
 | 
						|
+    set (grpc_binary_dir "${BINARY_DIR}")
 | 
						|
+    set (grpc_source_dir "${SOURCE_DIR}")
 | 
						|
+    if (CMAKE_VERBOSE_MAKEFILE)
 | 
						|
+      print_ep_logs (grpc_src)
 | 
						|
+    endif ()
 | 
						|
+    file (MAKE_DIRECTORY ${SOURCE_DIR}/include)
 | 
						|
+
 | 
						|
+    macro (add_imported_grpc libname_)
 | 
						|
+      add_library ("gRPC::${libname_}" STATIC IMPORTED GLOBAL)
 | 
						|
+      set_target_properties ("gRPC::${libname_}" PROPERTIES
 | 
						|
+        IMPORTED_LOCATION_DEBUG
 | 
						|
+          ${grpc_binary_dir}/${ep_lib_prefix}${libname_}_d${ep_lib_suffix}
 | 
						|
+        IMPORTED_LOCATION_RELEASE
 | 
						|
+          ${grpc_binary_dir}/${ep_lib_prefix}${libname_}${ep_lib_suffix}
 | 
						|
+        INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
+          ${grpc_source_dir}/include)
 | 
						|
+      add_dependencies ("gRPC::${libname_}" grpc_src)
 | 
						|
+      target_link_libraries (ripple_libs INTERFACE "gRPC::${libname_}")
 | 
						|
+      exclude_if_included ("gRPC::${libname_}")
 | 
						|
+    endmacro ()
 | 
						|
+
 | 
						|
+    set_target_properties (gRPC::grpc_cpp_plugin PROPERTIES
 | 
						|
+        IMPORTED_LOCATION "${grpc_binary_dir}/grpc_cpp_plugin${CMAKE_EXECUTABLE_SUFFIX}")
 | 
						|
+    add_dependencies (gRPC::grpc_cpp_plugin grpc_src)
 | 
						|
+  endif ()
 | 
						|
+
 | 
						|
+  add_imported_grpc (gpr)
 | 
						|
+  add_imported_grpc ("grpc${grpc_suffix}")
 | 
						|
+  add_imported_grpc ("grpc++${grpc_suffix}")
 | 
						|
+  add_imported_grpc (address_sorting)
 | 
						|
+
 | 
						|
+  target_link_libraries ("gRPC::grpc${grpc_suffix}" INTERFACE c-ares::cares gRPC::gpr gRPC::address_sorting ZLIB::ZLIB)
 | 
						|
+  target_link_libraries ("gRPC::grpc++${grpc_suffix}" INTERFACE "gRPC::grpc${grpc_suffix}" gRPC::gpr)
 | 
						|
+endif ()
 | 
						|
 
 | 
						|
 #[=================================[
 | 
						|
    generate protobuf sources for
 | 
						|
    grpc defs and bundle into a
 | 
						|
    static lib
 | 
						|
 #]=================================]
 | 
						|
-set(GRPC_GEN_DIR "${CMAKE_BINARY_DIR}/proto_gen_grpc")
 | 
						|
-file(MAKE_DIRECTORY ${GRPC_GEN_DIR})
 | 
						|
-set(GRPC_PROTO_SRCS)
 | 
						|
-set(GRPC_PROTO_HDRS)
 | 
						|
-set(GRPC_PROTO_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/src/ripple/proto/org")
 | 
						|
+set (GRPC_GEN_DIR "${CMAKE_BINARY_DIR}/proto_gen_grpc")
 | 
						|
+file (MAKE_DIRECTORY ${GRPC_GEN_DIR})
 | 
						|
+set (GRPC_PROTO_SRCS)
 | 
						|
+set (GRPC_PROTO_HDRS)
 | 
						|
+set (GRPC_PROTO_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/src/ripple/proto/org")
 | 
						|
 file(GLOB_RECURSE GRPC_DEFINITION_FILES LIST_DIRECTORIES false "${GRPC_PROTO_ROOT}/*.proto")
 | 
						|
 foreach(file ${GRPC_DEFINITION_FILES})
 | 
						|
   get_filename_component(_abs_file ${file} ABSOLUTE)
 | 
						|
@@ -20,10 +324,10 @@ foreach(file ${GRPC_DEFINITION_FILES})
 | 
						|
   get_filename_component(_rel_root_dir ${_rel_root_file} DIRECTORY)
 | 
						|
   file(RELATIVE_PATH _rel_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_abs_dir})
 | 
						|
 
 | 
						|
-  set(src_1 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.grpc.pb.cc")
 | 
						|
-  set(src_2 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.pb.cc")
 | 
						|
-  set(hdr_1 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.grpc.pb.h")
 | 
						|
-  set(hdr_2 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.pb.h")
 | 
						|
+  set (src_1 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.grpc.pb.cc")
 | 
						|
+  set (src_2 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.pb.cc")
 | 
						|
+  set (hdr_1 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.grpc.pb.h")
 | 
						|
+  set (hdr_2 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.pb.h")
 | 
						|
   add_custom_command(
 | 
						|
     OUTPUT ${src_1} ${src_2} ${hdr_1} ${hdr_2}
 | 
						|
     COMMAND protobuf::protoc
 | 
						|
@@ -41,22 +345,20 @@ foreach(file ${GRPC_DEFINITION_FILES})
 | 
						|
     list(APPEND GRPC_PROTO_HDRS ${hdr_1} ${hdr_2})
 | 
						|
 endforeach()
 | 
						|
 
 | 
						|
-add_library(grpc_pbufs STATIC ${GRPC_PROTO_SRCS} ${GRPC_PROTO_HDRS})
 | 
						|
-#target_include_directories(grpc_pbufs PRIVATE src)
 | 
						|
-target_include_directories(grpc_pbufs SYSTEM PUBLIC ${GRPC_GEN_DIR})
 | 
						|
-target_link_libraries(grpc_pbufs
 | 
						|
-  "gRPC::grpc++"
 | 
						|
-  # libgrpc is missing references.
 | 
						|
-  absl::random_random
 | 
						|
-)
 | 
						|
-target_compile_options(grpc_pbufs
 | 
						|
+add_library (grpc_pbufs STATIC ${GRPC_PROTO_SRCS} ${GRPC_PROTO_HDRS})
 | 
						|
+#target_include_directories (grpc_pbufs PRIVATE src)
 | 
						|
+target_include_directories (grpc_pbufs SYSTEM PUBLIC ${GRPC_GEN_DIR})
 | 
						|
+target_link_libraries (grpc_pbufs protobuf::libprotobuf "gRPC::grpc++${grpc_suffix}")
 | 
						|
+target_compile_options (grpc_pbufs
 | 
						|
   PRIVATE
 | 
						|
     $<$<BOOL:${MSVC}>:-wd4065>
 | 
						|
     $<$<NOT:$<BOOL:${MSVC}>>:-Wno-deprecated-declarations>
 | 
						|
   PUBLIC
 | 
						|
     $<$<BOOL:${MSVC}>:-wd4996>
 | 
						|
-    $<$<BOOL:${XCODE}>:
 | 
						|
+    $<$<BOOL:${is_xcode}>:
 | 
						|
       --system-header-prefix="google/protobuf"
 | 
						|
       -Wno-deprecated-dynamic-exception-spec
 | 
						|
     >)
 | 
						|
-add_library(Ripple::grpc_pbufs ALIAS grpc_pbufs)
 | 
						|
+add_library (Ripple::grpc_pbufs ALIAS grpc_pbufs)
 | 
						|
+target_link_libraries (ripple_libs INTERFACE Ripple::grpc_pbufs)
 | 
						|
+exclude_if_included (grpc_pbufs)
 | 
						|
diff --git a/Builds/CMake/rocks_thirdparty.inc b/Builds/CMake/rocks_thirdparty.inc
 | 
						|
new file mode 100644
 | 
						|
index 000000000..cba23df71
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/rocks_thirdparty.inc
 | 
						|
@@ -0,0 +1,15 @@
 | 
						|
+set (THIRDPARTY_LIBS "")
 | 
						|
+
 | 
						|
+if(WITH_SNAPPY)
 | 
						|
+  add_definitions(-DSNAPPY)
 | 
						|
+  include_directories(${snappy_INCLUDE_DIRS})
 | 
						|
+  set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${snappy_LIBRARIES})
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+if(WITH_LZ4)
 | 
						|
+  add_definitions(-DLZ4)
 | 
						|
+  include_directories(${lz4_INCLUDE_DIRS})
 | 
						|
+  set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${lz4_LIBRARIES})
 | 
						|
+endif()
 | 
						|
+
 | 
						|
+
 | 
						|
diff --git a/Builds/CMake/rocksdb_build_version.cc.in b/Builds/CMake/rocksdb_build_version.cc.in
 | 
						|
new file mode 100644
 | 
						|
index 000000000..9ef424669
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/rocksdb_build_version.cc.in
 | 
						|
@@ -0,0 +1,71 @@
 | 
						|
+// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
 | 
						|
+
 | 
						|
+#include <memory>
 | 
						|
+
 | 
						|
+#include "rocksdb/version.h"
 | 
						|
+#include "util/string_util.h"
 | 
						|
+
 | 
						|
+// The build script may replace these values with real values based
 | 
						|
+// on whether or not GIT is available and the platform settings
 | 
						|
+static const std::string rocksdb_build_git_sha  = "rocksdb_build_git_sha:@GIT_SHA@";
 | 
						|
+static const std::string rocksdb_build_git_tag = "rocksdb_build_git_tag:@GIT_TAG@";
 | 
						|
+#define HAS_GIT_CHANGES @GIT_MOD@
 | 
						|
+#if HAS_GIT_CHANGES == 0
 | 
						|
+// If HAS_GIT_CHANGES is 0, the GIT date is used.
 | 
						|
+// Use the time the branch/tag was last modified
 | 
						|
+static const std::string rocksdb_build_date = "rocksdb_build_date:@GIT_DATE@";
 | 
						|
+#else
 | 
						|
+// If HAS_GIT_CHANGES is > 0, the branch/tag has modifications.
 | 
						|
+// Use the time the build was created.
 | 
						|
+static const std::string rocksdb_build_date = "rocksdb_build_date:@BUILD_DATE@";
 | 
						|
+#endif
 | 
						|
+
 | 
						|
+namespace ROCKSDB_NAMESPACE {
 | 
						|
+static void AddProperty(std::unordered_map<std::string, std::string> *props, const std::string& name) {
 | 
						|
+  size_t colon = name.find(":");
 | 
						|
+  if (colon != std::string::npos && colon > 0 && colon < name.length() - 1) {
 | 
						|
+    // If we found a "@:", then this property was a build-time substitution that failed.  Skip it
 | 
						|
+    size_t at = name.find("@", colon);
 | 
						|
+    if (at != colon + 1) {
 | 
						|
+      // Everything before the colon is the name, after is the value
 | 
						|
+      (*props)[name.substr(0, colon)] = name.substr(colon + 1);
 | 
						|
+    }
 | 
						|
+  }
 | 
						|
+}
 | 
						|
+  
 | 
						|
+static std::unordered_map<std::string, std::string>* LoadPropertiesSet() {
 | 
						|
+  auto * properties = new std::unordered_map<std::string, std::string>();
 | 
						|
+  AddProperty(properties, rocksdb_build_git_sha);
 | 
						|
+  AddProperty(properties, rocksdb_build_git_tag);
 | 
						|
+  AddProperty(properties, rocksdb_build_date);
 | 
						|
+  return properties;
 | 
						|
+}
 | 
						|
+
 | 
						|
+const std::unordered_map<std::string, std::string>& GetRocksBuildProperties() {
 | 
						|
+  static std::unique_ptr<std::unordered_map<std::string, std::string>> props(LoadPropertiesSet());
 | 
						|
+  return *props;
 | 
						|
+}
 | 
						|
+
 | 
						|
+std::string GetRocksVersionAsString(bool with_patch) {
 | 
						|
+  std::string version = ToString(ROCKSDB_MAJOR) + "." + ToString(ROCKSDB_MINOR);
 | 
						|
+  if (with_patch) {
 | 
						|
+    return version + "." + ToString(ROCKSDB_PATCH);
 | 
						|
+  } else {
 | 
						|
+    return version;
 | 
						|
+  }
 | 
						|
+}
 | 
						|
+  
 | 
						|
+std::string GetRocksBuildInfoAsString(const std::string& program, bool verbose) {
 | 
						|
+  std::string info = program + " (RocksDB) " + GetRocksVersionAsString(true);
 | 
						|
+  if (verbose) {
 | 
						|
+    for (const auto& it : GetRocksBuildProperties()) {
 | 
						|
+      info.append("\n    ");
 | 
						|
+      info.append(it.first);
 | 
						|
+      info.append(": ");
 | 
						|
+      info.append(it.second);
 | 
						|
+    }
 | 
						|
+  }
 | 
						|
+  return info;
 | 
						|
+}
 | 
						|
+} // namespace ROCKSDB_NAMESPACE
 | 
						|
+
 | 
						|
diff --git a/Builds/CMake/soci_patch.cmake b/Builds/CMake/soci_patch.cmake
 | 
						|
new file mode 100644
 | 
						|
index 000000000..0c2a75c0d
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/CMake/soci_patch.cmake
 | 
						|
@@ -0,0 +1,49 @@
 | 
						|
+# This patches unsigned-types.h in the soci official sources
 | 
						|
+# so as to remove type range check exceptions that cause
 | 
						|
+# us trouble when using boost::optional to select int values
 | 
						|
+
 | 
						|
+# Soci's CMake setup leaves flags in place that will cause warnings to
 | 
						|
+# be treated as errors, but some compiler versions throw "new" warnings
 | 
						|
+# that then cause the build to fail. Simplify that until soci fixes
 | 
						|
+# those warnings.
 | 
						|
+if (RIPPLED_SOURCE)
 | 
						|
+  execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different
 | 
						|
+      ${RIPPLED_SOURCE}/Builds/CMake/SociConfig.cmake.patched
 | 
						|
+      cmake/SociConfig.cmake )
 | 
						|
+endif ()
 | 
						|
+
 | 
						|
+# Some versions of CMake erroneously patch external projects on every build.
 | 
						|
+# If the patch makes no changes, skip it. This workaround can be
 | 
						|
+# removed once we stop supporting vulnerable versions of CMake.
 | 
						|
+# https://gitlab.kitware.com/cmake/cmake/-/issues/21086
 | 
						|
+file (STRINGS include/soci/unsigned-types.h sourcecode)
 | 
						|
+# Delete the .patched file if it exists, so it doesn't end up duplicated.
 | 
						|
+# Trying to remove a file that does not exist is not a problem.
 | 
						|
+file (REMOVE include/soci/unsigned-types.h.patched)
 | 
						|
+foreach (line_ ${sourcecode})
 | 
						|
+  if (line_ MATCHES "^[ \\t]+throw[ ]+soci_error[ ]*\\([ ]*\"Value outside of allowed.+$")
 | 
						|
+    set (line_ "//${CMAKE_MATCH_0}")
 | 
						|
+  endif ()
 | 
						|
+  file (APPEND include/soci/unsigned-types.h.patched "${line_}\n")
 | 
						|
+endforeach ()
 | 
						|
+execute_process( COMMAND ${CMAKE_COMMAND} -E compare_files
 | 
						|
+                 include/soci/unsigned-types.h include/soci/unsigned-types.h.patched
 | 
						|
+                 RESULT_VARIABLE compare_result
 | 
						|
+)
 | 
						|
+if( compare_result EQUAL 0)
 | 
						|
+  message(DEBUG "The soci source and patch files are identical. Make no changes.")
 | 
						|
+  file (REMOVE include/soci/unsigned-types.h.patched)
 | 
						|
+  return()
 | 
						|
+endif()
 | 
						|
+file (RENAME include/soci/unsigned-types.h include/soci/unsigned-types.h.orig)
 | 
						|
+file (RENAME include/soci/unsigned-types.h.patched include/soci/unsigned-types.h)
 | 
						|
+# also fix Boost.cmake so that it just returns when we override the Boost_FOUND var
 | 
						|
+file (APPEND cmake/dependencies/Boost.cmake.patched "if (Boost_FOUND)\n")
 | 
						|
+file (APPEND cmake/dependencies/Boost.cmake.patched "  return ()\n")
 | 
						|
+file (APPEND cmake/dependencies/Boost.cmake.patched "endif ()\n")
 | 
						|
+file (STRINGS cmake/dependencies/Boost.cmake sourcecode)
 | 
						|
+foreach (line_ ${sourcecode})
 | 
						|
+  file (APPEND cmake/dependencies/Boost.cmake.patched "${line_}\n")
 | 
						|
+endforeach ()
 | 
						|
+file (RENAME cmake/dependencies/Boost.cmake.patched cmake/dependencies/Boost.cmake)
 | 
						|
+
 | 
						|
diff --git a/Builds/VisualStudio2017/README.md b/Builds/VisualStudio2017/README.md
 | 
						|
new file mode 100644
 | 
						|
index 000000000..fce8e824a
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/VisualStudio2017/README.md
 | 
						|
@@ -0,0 +1 @@
 | 
						|
+[Build instructions are currently located in `BUILD.md`](../../BUILD.md)
 | 
						|
diff --git a/Builds/VisualStudio2019/CMakeSettings-example.json b/Builds/VisualStudio2019/CMakeSettings-example.json
 | 
						|
new file mode 100644
 | 
						|
index 000000000..b90bfce6b
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/VisualStudio2019/CMakeSettings-example.json
 | 
						|
@@ -0,0 +1,45 @@
 | 
						|
+{
 | 
						|
+  // See https://go.microsoft.com//fwlink//?linkid=834763 for more information about this file.
 | 
						|
+  "configurations": [
 | 
						|
+    {
 | 
						|
+      "name": "x64-Debug",
 | 
						|
+      "generator": "Visual Studio 16 2019",
 | 
						|
+      "configurationType": "Debug",
 | 
						|
+      "inheritEnvironments": [ "msvc_x64_x64" ],
 | 
						|
+      "buildRoot": "${thisFileDir}\\build\\${name}",
 | 
						|
+      "cmakeCommandArgs": "",
 | 
						|
+      "buildCommandArgs": "-v:minimal",
 | 
						|
+      "ctestCommandArgs": "",
 | 
						|
+      "variables": [
 | 
						|
+        {
 | 
						|
+          "name": "BOOST_ROOT",
 | 
						|
+          "value": "C:\\lib\\boost"
 | 
						|
+        },
 | 
						|
+        {
 | 
						|
+          "name": "OPENSSL_ROOT",
 | 
						|
+          "value": "C:\\lib\\OpenSSL-Win64"
 | 
						|
+        }
 | 
						|
+      ]
 | 
						|
+    },
 | 
						|
+    {
 | 
						|
+      "name": "x64-Release",
 | 
						|
+      "generator": "Visual Studio 16 2019",
 | 
						|
+      "configurationType": "Release",
 | 
						|
+      "inheritEnvironments": [ "msvc_x64_x64" ],
 | 
						|
+      "buildRoot": "${thisFileDir}\\build\\${name}",
 | 
						|
+      "cmakeCommandArgs": "",
 | 
						|
+      "buildCommandArgs": "-v:minimal",
 | 
						|
+      "ctestCommandArgs": "",
 | 
						|
+      "variables": [
 | 
						|
+        {
 | 
						|
+          "name": "BOOST_ROOT",
 | 
						|
+          "value": "C:\\lib\\boost"
 | 
						|
+        },
 | 
						|
+        {
 | 
						|
+          "name": "OPENSSL_ROOT",
 | 
						|
+          "value": "C:\\lib\\OpenSSL-Win64"
 | 
						|
+        }
 | 
						|
+      ]
 | 
						|
+    }
 | 
						|
+  ]
 | 
						|
+}
 | 
						|
diff --git a/Builds/VisualStudio2019/README.md b/Builds/VisualStudio2019/README.md
 | 
						|
new file mode 100644
 | 
						|
index 000000000..e369eac67
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/VisualStudio2019/README.md
 | 
						|
@@ -0,0 +1,263 @@
 | 
						|
+# Visual Studio 2019 Build Instructions
 | 
						|
+
 | 
						|
+## Important
 | 
						|
+
 | 
						|
+We do not recommend Windows for rippled production use at this time. Currently,
 | 
						|
+the Ubuntu platform has received the highest level of quality assurance,
 | 
						|
+testing, and support. Additionally, 32-bit Windows versions are not supported.
 | 
						|
+
 | 
						|
+## Prerequisites
 | 
						|
+
 | 
						|
+To clone the source code repository, create branches for inspection or
 | 
						|
+modification, build rippled under Visual Studio, and run the unit tests you will
 | 
						|
+need these software components
 | 
						|
+
 | 
						|
+| Component | Minimum Recommended Version |
 | 
						|
+|-----------|-----------------------|
 | 
						|
+| [Visual Studio 2019](README.md#install-visual-studio-2019)| 15.5.4 |
 | 
						|
+| [Git for Windows](README.md#install-git-for-windows)| 2.16.1 |
 | 
						|
+| [OpenSSL Library](README.md#install-openssl) | 1.1.1L |
 | 
						|
+| [Boost library](README.md#build-boost) | 1.70.0 |
 | 
						|
+| [CMake for Windows](README.md#optional-install-cmake-for-windows)* | 3.12 |
 | 
						|
+
 | 
						|
+\* Only needed if not using the integrated CMake in VS 2019 and prefer generating dedicated project/solution files.
 | 
						|
+
 | 
						|
+## Install Software
 | 
						|
+
 | 
						|
+### Install Visual Studio 2019
 | 
						|
+
 | 
						|
+If not already installed on your system, download your choice of installer from
 | 
						|
+the [Visual Studio 2019
 | 
						|
+Download](https://www.visualstudio.com/downloads/download-visual-studio-vs)
 | 
						|
+page, run the installer, and follow the directions. **You may need to choose the
 | 
						|
+`Desktop development with C++` workload to install all necessary C++ features.**
 | 
						|
+
 | 
						|
+Any version of Visual Studio 2019 may be used to build rippled. The **Visual
 | 
						|
+Studio 2019 Community** edition is available free of charge (see [the product
 | 
						|
+page](https://www.visualstudio.com/products/visual-studio-community-vs) for
 | 
						|
+licensing details), while paid editions may be used for an initial free-trial
 | 
						|
+period.
 | 
						|
+
 | 
						|
+### Install Git for Windows
 | 
						|
+
 | 
						|
+Git is a distributed revision control system. The Windows version also provides
 | 
						|
+the bash shell and many Windows versions of Unix commands. While there are other
 | 
						|
+varieties of Git (such as TortoiseGit, which has a native Windows interface and
 | 
						|
+integrates with the Explorer shell), we recommend installing [Git for
 | 
						|
+Windows](https://git-scm.com/) since it provides a Unix-like command line
 | 
						|
+environment useful for running shell scripts. Use of the bash shell under
 | 
						|
+Windows is mandatory for running the unit tests.
 | 
						|
+
 | 
						|
+### Install OpenSSL
 | 
						|
+
 | 
						|
+[Download the latest version of
 | 
						|
+OpenSSL.](http://slproweb.com/products/Win32OpenSSL.html) There will
 | 
						|
+several `Win64` bit variants available, you want the non-light
 | 
						|
+`v1.1` line. As of this writing, you **should** select
 | 
						|
+
 | 
						|
+* Win64 OpenSSL v1.1.1q
 | 
						|
+
 | 
						|
+and should **not** select
 | 
						|
+
 | 
						|
+* Anything with "Win32" in the name
 | 
						|
+* Anything with "light" in the name
 | 
						|
+* Anything with "EXPERIMENTAL" in the name
 | 
						|
+* Anything in the 3.0 line - rippled won't currently build with this version.
 | 
						|
+
 | 
						|
+Run the installer, and choose an appropriate location for your OpenSSL
 | 
						|
+installation. In this guide we use `C:\lib\OpenSSL-Win64` as the destination
 | 
						|
+location.
 | 
						|
+
 | 
						|
+You may be informed on running the installer that "Visual C++ 2008
 | 
						|
+Redistributables" must first be installed first. If so, download it from the
 | 
						|
+[same page](http://slproweb.com/products/Win32OpenSSL.html), again making sure
 | 
						|
+to get the correct 32-/64-bit variant.
 | 
						|
+
 | 
						|
+* NOTE: Since rippled links statically to OpenSSL, it does not matter where the
 | 
						|
+  OpenSSL .DLL files are placed, or what version they are. rippled does not use
 | 
						|
+  or require any external .DLL files to run other than the standard operating
 | 
						|
+  system ones.
 | 
						|
+
 | 
						|
+### Build Boost
 | 
						|
+
 | 
						|
+Boost 1.70 or later is required.
 | 
						|
+
 | 
						|
+[Download boost](http://www.boost.org/users/download/) and unpack it
 | 
						|
+to `c:\lib`. As of this writing, the most recent version of boost is 1.80.0,
 | 
						|
+which will unpack into a directory named `boost_1_80_0`. We recommended either
 | 
						|
+renaming this directory to `boost`, or creating a junction link `mklink /J boost
 | 
						|
+boost_1_80_0`, so that you can more easily switch between versions.
 | 
						|
+
 | 
						|
+Next, open **Developer Command Prompt** and type the following commands
 | 
						|
+
 | 
						|
+```powershell
 | 
						|
+cd C:\lib\boost
 | 
						|
+bootstrap
 | 
						|
+```
 | 
						|
+
 | 
						|
+The rippled application is linked statically to the standard runtimes and
 | 
						|
+external dependencies on Windows, to ensure that the behavior of the executable
 | 
						|
+is not affected by changes in outside files. Therefore, it is necessary to build
 | 
						|
+the required boost static libraries using this command:
 | 
						|
+
 | 
						|
+```powershell
 | 
						|
+b2 -j<Num Parallel> --toolset=msvc-14.2 address-model=64 architecture=x86 link=static threading=multi runtime-link=shared,static stage
 | 
						|
+```
 | 
						|
+
 | 
						|
+where you should replace `<Num Parallel>` with the number of parallel
 | 
						|
+invocations to use build, e.g. `bjam -j8 ...` would use up to 8 concurrent build
 | 
						|
+shell commands for the build.
 | 
						|
+
 | 
						|
+Building the boost libraries may take considerable time. When the build process
 | 
						|
+is completed, take note of both the reported compiler include paths and linker
 | 
						|
+library paths as they will be required later.
 | 
						|
+
 | 
						|
+### (Optional) Install CMake for Windows
 | 
						|
+
 | 
						|
+[CMake](http://cmake.org) is a cross platform build system generator. Visual
 | 
						|
+Studio 2019 includes an integrated version of CMake that avoids having to
 | 
						|
+manually run CMake, but it is undergoing continuous improvement. Users that
 | 
						|
+prefer to use standard Visual Studio project and solution files need to install
 | 
						|
+a dedicated version of CMake to generate them.  The latest version can be found
 | 
						|
+at the [CMake download site](https://cmake.org/download/). It is recommended you
 | 
						|
+select the install option to add CMake to your path.
 | 
						|
+
 | 
						|
+## Clone the rippled repository
 | 
						|
+
 | 
						|
+If you are familiar with cloning github repositories, just follow your normal
 | 
						|
+process and clone `git@github.com:ripple/rippled.git`. Otherwise follow this
 | 
						|
+section for instructions.
 | 
						|
+
 | 
						|
+1. If you don't have a github account, sign up for one at
 | 
						|
+   [github.com](https://github.com/).
 | 
						|
+2. Make sure you have Github ssh keys. For help see
 | 
						|
+   [generating-ssh-keys](https://help.github.com/articles/generating-ssh-keys).
 | 
						|
+
 | 
						|
+Open the "Git Bash" shell that was installed with "Git for Windows" in the step
 | 
						|
+above. Navigate to the directory where you want to clone rippled (git bash uses
 | 
						|
+`/c` for windows's `C:` and forward slash where windows uses backslash, so
 | 
						|
+`C:\Users\joe\projs` would be `/c/Users/joe/projs` in git bash). Now clone the
 | 
						|
+repository and optionally switch to the *master* branch. Type the following at
 | 
						|
+the bash prompt:
 | 
						|
+
 | 
						|
+```powershell
 | 
						|
+git clone git@github.com:XRPLF/rippled.git
 | 
						|
+cd rippled
 | 
						|
+```
 | 
						|
+If you receive an error about not having the "correct access rights" make sure
 | 
						|
+you have Github ssh keys, as described above.
 | 
						|
+
 | 
						|
+For a stable release, choose the `master` branch or one of the tagged releases
 | 
						|
+listed on [rippled's GitHub page](https://github.com/ripple/rippled/releases).
 | 
						|
+
 | 
						|
+```
 | 
						|
+git checkout master
 | 
						|
+```
 | 
						|
+
 | 
						|
+To test the latest release candidate, choose the `release` branch.
 | 
						|
+
 | 
						|
+```
 | 
						|
+git checkout release
 | 
						|
+```
 | 
						|
+
 | 
						|
+If you are doing development work and want the latest set of beta features,
 | 
						|
+you can consider using the `develop` branch instead.
 | 
						|
+
 | 
						|
+```
 | 
						|
+git checkout develop
 | 
						|
+```
 | 
						|
+
 | 
						|
+# Build using Visual Studio integrated CMake
 | 
						|
+
 | 
						|
+In Visual Studio 2017, Microsoft added [integrated IDE support for
 | 
						|
+cmake](https://blogs.msdn.microsoft.com/vcblog/2016/10/05/cmake-support-in-visual-studio/).
 | 
						|
+To begin, simply:
 | 
						|
+
 | 
						|
+1. Launch Visual Studio and choose **File | Open | Folder**, navigating to the
 | 
						|
+   cloned rippled folder.
 | 
						|
+2. Right-click on `CMakeLists.txt` in the **Solution Explorer - Folder View** to
 | 
						|
+   generate a `CMakeSettings.json` file. A sample settings file is provided
 | 
						|
+   [here](/Builds/VisualStudio2019/CMakeSettings-example.json). Customize the
 | 
						|
+   settings for `BOOST_ROOT`, `OPENSSL_ROOT` to match the install paths if they
 | 
						|
+   differ from those in the file.
 | 
						|
+4. Select either the `x64-Release` or `x64-Debug` configuration from the
 | 
						|
+   **Project Settings** drop-down. This should invoke the built-in CMake project
 | 
						|
+   generator. If not, you can right-click on the `CMakeLists.txt` file and
 | 
						|
+   choose **Configure rippled**.
 | 
						|
+5. Select the `rippled.exe`
 | 
						|
+   option in the **Select Startup Item** drop-down. This will be the target
 | 
						|
+   built when you press F7. Alternatively, you can choose a target to build from
 | 
						|
+   the top-level **CMake | Build** menu. Note that at this time, there are other
 | 
						|
+   targets listed that come from third party visual studio files embedded in the
 | 
						|
+   rippled repo, e.g. `datagen.vcxproj`. Please ignore them.
 | 
						|
+
 | 
						|
+For details on configuring debugging sessions or further customization of CMake,
 | 
						|
+please refer to the [CMake tools for VS
 | 
						|
+documentation](https://docs.microsoft.com/en-us/cpp/ide/cmake-tools-for-visual-cpp).
 | 
						|
+
 | 
						|
+If using the provided `CMakeSettings.json` file, the executable will be in
 | 
						|
+```
 | 
						|
+.\build\x64-Release\Release\rippled.exe
 | 
						|
+```
 | 
						|
+or
 | 
						|
+```
 | 
						|
+.\build\x64-Debug\Debug\rippled.exe
 | 
						|
+```
 | 
						|
+These paths are relative to your cloned git repository.
 | 
						|
+
 | 
						|
+# Build using stand-alone CMake
 | 
						|
+
 | 
						|
+This requires having installed [CMake for
 | 
						|
+Windows](README.md#optional-install-cmake-for-windows). We do not recommend
 | 
						|
+mixing this method with the integrated CMake method for the same repository
 | 
						|
+clone. Assuming you included the cmake executable folder in your path,
 | 
						|
+execute the following commands within your `rippled` cloned repository:
 | 
						|
+
 | 
						|
+```
 | 
						|
+mkdir build\cmake
 | 
						|
+cd build\cmake
 | 
						|
+cmake ..\.. -G"Visual Studio 16 2019" -Ax64 -DBOOST_ROOT="C:\lib\boost" -DOPENSSL_ROOT="C:\lib\OpenSSL-Win64" -DCMAKE_GENERATOR_TOOLSET=host=x64
 | 
						|
+```
 | 
						|
+Now launch Visual Studio 2019 and select **File | Open | Project/Solution**.
 | 
						|
+Navigate to the `build\cmake` folder created above and select the `rippled.sln`
 | 
						|
+file. You can then choose whether to build the `Debug` or `Release` solution
 | 
						|
+configuration.
 | 
						|
+
 | 
						|
+The executable will be in
 | 
						|
+```
 | 
						|
+.\build\cmake\Release\rippled.exe
 | 
						|
+```
 | 
						|
+or
 | 
						|
+```
 | 
						|
+.\build\cmake\Debug\rippled.exe
 | 
						|
+```
 | 
						|
+These paths are relative to your cloned git repository.
 | 
						|
+
 | 
						|
+# Unity/No-Unity Builds
 | 
						|
+
 | 
						|
+The rippled build system defaults to using
 | 
						|
+[unity source files](http://onqtam.com/programming/2018-07-07-unity-builds/)
 | 
						|
+to improve build times. In some cases it might be desirable to disable the
 | 
						|
+unity build and compile individual translation units. Here is how you can
 | 
						|
+switch to a "no-unity" build configuration:
 | 
						|
+
 | 
						|
+## Visual Studio Integrated CMake
 | 
						|
+
 | 
						|
+Edit your `CmakeSettings.json` (described above) by adding `-Dunity=OFF`
 | 
						|
+to the `cmakeCommandArgs` entry for each build configuration.
 | 
						|
+
 | 
						|
+## Standalone CMake Builds
 | 
						|
+
 | 
						|
+When running cmake to generate the Visual Studio project files, add
 | 
						|
+`-Dunity=OFF` to the command line options passed to cmake.
 | 
						|
+
 | 
						|
+**Note:** you will need to re-run the cmake configuration step anytime you
 | 
						|
+want to switch between unity/no-unity builds.
 | 
						|
+
 | 
						|
+# Unit Test (Recommended)
 | 
						|
+
 | 
						|
+`rippled` builds a set of unit tests into the server executable. To run these
 | 
						|
+unit tests after building, pass the `--unittest` option to the compiled
 | 
						|
+`rippled` executable. The executable will exit with summary info after running
 | 
						|
+the unit tests.
 | 
						|
+
 | 
						|
diff --git a/Builds/linux/README.md b/Builds/linux/README.md
 | 
						|
new file mode 100644
 | 
						|
index 000000000..fce8e824a
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/linux/README.md
 | 
						|
@@ -0,0 +1 @@
 | 
						|
+[Build instructions are currently located in `BUILD.md`](../../BUILD.md)
 | 
						|
diff --git a/Builds/macos/README.md b/Builds/macos/README.md
 | 
						|
new file mode 100644
 | 
						|
index 000000000..fce8e824a
 | 
						|
--- /dev/null
 | 
						|
+++ b/Builds/macos/README.md
 | 
						|
@@ -0,0 +1 @@
 | 
						|
+[Build instructions are currently located in `BUILD.md`](../../BUILD.md)
 | 
						|
diff --git a/CMakeLists.txt b/CMakeLists.txt
 | 
						|
index f382f28ad..f948bc50d 100644
 | 
						|
--- a/CMakeLists.txt
 | 
						|
+++ b/CMakeLists.txt
 | 
						|
@@ -1,17 +1,10 @@
 | 
						|
-cmake_minimum_required(VERSION 3.16)
 | 
						|
+cmake_minimum_required (VERSION 3.16)
 | 
						|
 
 | 
						|
-if(POLICY CMP0074)
 | 
						|
+if (POLICY CMP0074)
 | 
						|
   cmake_policy(SET CMP0074 NEW)
 | 
						|
-endif()
 | 
						|
-if(POLICY CMP0077)
 | 
						|
-  cmake_policy(SET CMP0077 NEW)
 | 
						|
-endif()
 | 
						|
-
 | 
						|
-# Fix "unrecognized escape" issues when passing CMAKE_MODULE_PATH on Windows.
 | 
						|
-file(TO_CMAKE_PATH "${CMAKE_MODULE_PATH}" CMAKE_MODULE_PATH)
 | 
						|
-list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake")
 | 
						|
+endif ()
 | 
						|
 
 | 
						|
-project(rippled)
 | 
						|
+project (rippled)
 | 
						|
 set(CMAKE_CXX_EXTENSIONS OFF)
 | 
						|
 set(CMAKE_CXX_STANDARD 20)
 | 
						|
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
						|
@@ -30,12 +23,15 @@ if(Git_FOUND)
 | 
						|
     endif()
 | 
						|
 endif() #git
 | 
						|
 
 | 
						|
-if(thread_safety_analysis)
 | 
						|
+if (thread_safety_analysis)
 | 
						|
   add_compile_options(-Wthread-safety -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -DRIPPLE_ENABLE_THREAD_SAFETY_ANNOTATIONS)
 | 
						|
   add_compile_options("-stdlib=libc++")
 | 
						|
   add_link_options("-stdlib=libc++")
 | 
						|
 endif()
 | 
						|
 
 | 
						|
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake")
 | 
						|
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/deps")
 | 
						|
+
 | 
						|
 include (CheckCXXCompilerFlag)
 | 
						|
 include (FetchContent)
 | 
						|
 include (ExternalProject)
 | 
						|
@@ -48,6 +44,7 @@ endif ()
 | 
						|
 include(RippledSanity)
 | 
						|
 include(RippledVersion)
 | 
						|
 include(RippledSettings)
 | 
						|
+include(RippledNIH)
 | 
						|
 include(RippledRelease)
 | 
						|
 # this check has to remain in the top-level cmake
 | 
						|
 # because of the early return statement
 | 
						|
@@ -60,41 +57,20 @@ endif ()
 | 
						|
 include(RippledCompiler)
 | 
						|
 include(RippledInterface)
 | 
						|
 
 | 
						|
-option(only_docs "Include only the docs target?" FALSE)
 | 
						|
-include(RippledDocs)
 | 
						|
-if(only_docs)
 | 
						|
-  return()
 | 
						|
-endif()
 | 
						|
-
 | 
						|
 ###
 | 
						|
 
 | 
						|
 include(deps/Boost)
 | 
						|
-find_package(OpenSSL 1.1.1 REQUIRED)
 | 
						|
-set_target_properties(OpenSSL::SSL PROPERTIES
 | 
						|
-  INTERFACE_COMPILE_DEFINITIONS OPENSSL_NO_SSL2
 | 
						|
-)
 | 
						|
-add_subdirectory(src/secp256k1)
 | 
						|
-add_subdirectory(src/ed25519-donna)
 | 
						|
-find_package(lz4 REQUIRED)
 | 
						|
-# Target names with :: are not allowed in a generator expression.
 | 
						|
-# We need to pull the include directories and imported location properties
 | 
						|
-# from separate targets.
 | 
						|
-find_package(LibArchive REQUIRED)
 | 
						|
-find_package(SOCI REQUIRED)
 | 
						|
-find_package(SQLite3 REQUIRED)
 | 
						|
-find_package(Snappy REQUIRED)
 | 
						|
-
 | 
						|
-option(rocksdb "Enable RocksDB" ON)
 | 
						|
-if(rocksdb)
 | 
						|
-  find_package(RocksDB REQUIRED)
 | 
						|
-  set_target_properties(RocksDB::rocksdb PROPERTIES
 | 
						|
-    INTERFACE_COMPILE_DEFINITIONS RIPPLE_ROCKSDB_AVAILABLE=1
 | 
						|
-  )
 | 
						|
-  target_link_libraries(ripple_libs INTERFACE RocksDB::rocksdb)
 | 
						|
-endif()
 | 
						|
-
 | 
						|
-find_package(nudb REQUIRED)
 | 
						|
-find_package(date REQUIRED)
 | 
						|
+include(deps/OpenSSL)
 | 
						|
+include(deps/Secp256k1)
 | 
						|
+include(deps/Ed25519-donna)
 | 
						|
+include(deps/Lz4)
 | 
						|
+include(deps/Libarchive)
 | 
						|
+include(deps/Sqlite)
 | 
						|
+include(deps/Soci)
 | 
						|
+include(deps/Snappy)
 | 
						|
+include(deps/Rocksdb)
 | 
						|
+include(deps/Nudb)
 | 
						|
+include(deps/date)
 | 
						|
 include(deps/Protobuf)
 | 
						|
 include(deps/gRPC)
 | 
						|
 include(deps/cassandra)
 | 
						|
@@ -130,4 +106,5 @@ include(RippledCore)
 | 
						|
 include(RippledInstall)
 | 
						|
 include(RippledCov)
 | 
						|
 include(RippledMultiConfig)
 | 
						|
+include(RippledDocs)
 | 
						|
 include(RippledValidatorKeys)
 | 
						|
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
 | 
						|
index 4a09ad4b9..06b9d622c 100644
 | 
						|
--- a/CONTRIBUTING.md
 | 
						|
+++ b/CONTRIBUTING.md
 | 
						|
@@ -1,129 +1,31 @@
 | 
						|
-The XRP Ledger has many and diverse stakeholders, and everyone deserves
 | 
						|
-a chance to contribute meaningful changes to the code that runs the XRPL.
 | 
						|
-
 | 
						|
 # Contributing
 | 
						|
-
 | 
						|
-We assume you are familiar with the general practice of [making contributions
 | 
						|
-on GitHub][1].
 | 
						|
-This file includes only special instructions specific to this project.
 | 
						|
-
 | 
						|
-
 | 
						|
-## Before you start
 | 
						|
-
 | 
						|
-All of your contributions must be developed in your personal
 | 
						|
-[fork](https://github.com/XRPLF/rippled/fork).
 | 
						|
-No personal branches may ever be pushed to the [main project][rippled].
 | 
						|
-These are the only branches that may ever exist in the main project:
 | 
						|
-
 | 
						|
-- `develop`: The latest set of unreleased features, and the most common
 | 
						|
-    starting point for contributions.
 | 
						|
-- `release`: The latest release candidate.
 | 
						|
-- `master`: The latest stable release.
 | 
						|
-- `gh-pages`: The documentation for this project, built by Doxygen.
 | 
						|
-
 | 
						|
-The tip of each branch must be signed.
 | 
						|
-In order for GitHub to sign a squashed commit that it builds from your pull
 | 
						|
-request,
 | 
						|
-all of your commits must be signed,
 | 
						|
-and GitHub must know your verifying key.
 | 
						|
-Please walk through the excellent documentation from GitHub to set
 | 
						|
-up [signature verification][signing].
 | 
						|
-
 | 
						|
-[rippled]: https://github.com/XRPLF/rippled
 | 
						|
-[signing]: https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification
 | 
						|
-
 | 
						|
-
 | 
						|
-## Major contributions
 | 
						|
-
 | 
						|
-If your contribution is a major feature or breaking change,
 | 
						|
-then you must first write an XRP Ledger Standard (XLS) describing it.
 | 
						|
-Go to [XRPL-Standards](https://github.com/XRPLF/XRPL-Standards/discussions),
 | 
						|
-choose the next available standard number, and
 | 
						|
-open a discussion with an appropriate title to propose your draft standard.
 | 
						|
-
 | 
						|
-When you submit a pull request, please link the corresponding XLS in the
 | 
						|
-description.
 | 
						|
-An XLS still in draft status is considered a work-in-progress and open for
 | 
						|
-discussion.
 | 
						|
-Please do not submit a pull request before allowing due time for questions,
 | 
						|
-suggestions, and changes to the XLS draft.
 | 
						|
-It is the responsibility of the XLS author to update the draft to match the
 | 
						|
-final implementation when its corresponding pull request is merged.
 | 
						|
-
 | 
						|
-
 | 
						|
-## Before making a pull request
 | 
						|
-
 | 
						|
-Changes that alter transaction processing must be guarded by an
 | 
						|
-[Amendment](https://xrpl.org/amendments.html).
 | 
						|
-All other changes that maintain the existing behavior do not need an
 | 
						|
-Amendment.
 | 
						|
-
 | 
						|
-Ensure that your code compiles according to the build instructions in
 | 
						|
-[`BUILD.md`](./BUILD.md).
 | 
						|
-If you create new source files, they must go under `src/ripple`.
 | 
						|
-You will need to add them to one of the
 | 
						|
-[source lists](./Builds/CMake/RippledCore.cmake) in CMake.
 | 
						|
-
 | 
						|
-Please write tests for your code.
 | 
						|
-If you create new test source files, they must go under `src/test`.
 | 
						|
-You will need to add them to one of the
 | 
						|
-[source lists](./Builds/CMake/RippledCore.cmake) in CMake.
 | 
						|
-If your test can be run offline, in under 60 seconds, then it can be an
 | 
						|
-automatic test run by `rippled --unittest`.
 | 
						|
-Otherwise, it must be a manual test.
 | 
						|
-
 | 
						|
-The source must be formatted according to the style guide below.
 | 
						|
-
 | 
						|
-Header includes must be [levelized](./Builds/levelization).
 | 
						|
-
 | 
						|
-
 | 
						|
-## Pull requests
 | 
						|
-
 | 
						|
-Pull requests must target the `develop` branch.[^1]
 | 
						|
-
 | 
						|
-[^1]: There are exceptions to this policy for hotfixes, but no one consulting
 | 
						|
-  this document will be in that situation.
 | 
						|
-
 | 
						|
-Changes to pull requests must be added as new commits.
 | 
						|
-You may **never force push a branch in a pull request** (e.g. after a rebase).
 | 
						|
-This preserves the ability for reviewers to filter changes since their last
 | 
						|
-review.
 | 
						|
-
 | 
						|
-A pull request must obtain **approvals from at least two reviewers** before it
 | 
						|
-can be considered for merge by a Maintainer.
 | 
						|
-Maintainers retain discretion to require more approvals if they feel the
 | 
						|
-credibility of the existing approvals is insufficient.
 | 
						|
-
 | 
						|
-Pull requests must be merged by [squash-and-merge][2]
 | 
						|
-to preserve a linear history for the `develop` branch.
 | 
						|
-
 | 
						|
+The XRP Ledger has many and diverse stakeholders, and everyone deserves a chance to contribute meaningful changes to the code that runs the XRPL.
 | 
						|
+To contribute, please:
 | 
						|
+1. Fork the repository under your own user.
 | 
						|
+2. Create a new branch on which to write your changes. Please note that changes which alter transaction processing must be composed via and guarded using [Amendments](https://xrpl.org/amendments.html). Changes which are _read only_ i.e. RPC, or changes which are only refactors and maintain the existing behaviour do not need to be made through an Amendment.
 | 
						|
+3. Write and test your code.
 | 
						|
+4. Ensure that your code compiles with the provided build engine and update the provided build engine as part of your PR where needed and where appropriate.
 | 
						|
+5. Write test cases for your code and include those in `src/test` such that they are runnable from the command line using `./rippled -u`. (Some changes will not be able to be tested this way.)
 | 
						|
+6. Ensure your code passes automated checks (e.g. clang-format and levelization.)
 | 
						|
+7. Squash your commits (i.e. rebase) into as few commits as is reasonable to describe your changes at a high level (typically a single commit for a small change.)
 | 
						|
+8. Open a PR to the main repository onto the _develop_ branch, and follow the provided template.
 | 
						|
+
 | 
						|
+# Major Changes
 | 
						|
+If your code change is a major feature, a breaking change or in some other way makes a significant alteration to the way the XRPL will operate, then you must first write an XLS document (XRP Ledger Standard) describing your change.
 | 
						|
+To do this:
 | 
						|
+1. Go to [XLS Standards](https://github.com/XRPLF/XRPL-Standards/discussions).
 | 
						|
+2. Choose the next available standard number.
 | 
						|
+3. Open a discussion with the appropriate title to propose your draft standard.
 | 
						|
+4. Link your XLS in your PR.
 | 
						|
 
 | 
						|
 # Style guide
 | 
						|
-
 | 
						|
-This is a non-exhaustive list of recommended style guidelines.
 | 
						|
-These are not always strictly enforced and serve as a way to keep the codebase coherent rather than a set of _thou shalt not_ commandments.
 | 
						|
-
 | 
						|
+This is a non-exhaustive list of recommended style guidelines. These are not always strictly enforced and serve as a way to keep the codebase coherent rather than a set of _thou shalt not_ commandments.
 | 
						|
 
 | 
						|
 ## Formatting
 | 
						|
-
 | 
						|
-All code must conform to `clang-format` version 10,
 | 
						|
-according to the settings in [`.clang-format`](./.clang-format),
 | 
						|
-unless the result would be unreasonably difficult to read or maintain.
 | 
						|
-To demarcate lines that should be left as-is, surround them with comments like
 | 
						|
-this:
 | 
						|
-
 | 
						|
-```
 | 
						|
-// clang-format off
 | 
						|
-...
 | 
						|
-// clang-format on
 | 
						|
-```
 | 
						|
-
 | 
						|
-You can format individual files in place by running `clang-format -i <file>...`
 | 
						|
-from any directory within this project.
 | 
						|
-
 | 
						|
+All code must conform to `clang-format` version 10, unless the result would be unreasonably difficult to read or maintain.
 | 
						|
+To change your code to conform use `clang-format -i <your changed files>`.
 | 
						|
 
 | 
						|
 ## Avoid
 | 
						|
-
 | 
						|
 1. Proliferation of nearly identical code.
 | 
						|
 2. Proliferation of new files and classes.
 | 
						|
 3. Complex inheritance and complex OOP patterns.
 | 
						|
@@ -133,9 +35,7 @@ from any directory within this project.
 | 
						|
 7. CPU or architecture-specific code unless there is a good reason to include it, and where it is used guard it with macros and provide explanatory comments.
 | 
						|
 8. Importing new libraries unless there is a very good reason to do so.
 | 
						|
 
 | 
						|
-
 | 
						|
 ## Seek to
 | 
						|
-
 | 
						|
 9. Extend functionality of existing code rather than creating new code.
 | 
						|
 10. Prefer readability over terseness where important logic is concerned.
 | 
						|
 11. Inline functions that are not used or are not likely to be used elsewhere in the codebase.
 | 
						|
@@ -143,42 +43,25 @@ from any directory within this project.
 | 
						|
 13. Use TitleCase for classes, structs and filenames, camelCase for function and variable names, lower case for namespaces and folders.
 | 
						|
 14. Provide as many comments as you feel that a competent programmer would need to understand what your code does.
 | 
						|
 
 | 
						|
-
 | 
						|
 # Maintainers
 | 
						|
+Maintainers are ecosystem participants with elevated access to the repository. They are able to push new code, make decisions on when a release should be made, etc.
 | 
						|
 
 | 
						|
-Maintainers are ecosystem participants with elevated access to the repository.
 | 
						|
-They are able to push new code, make decisions on when a release should be
 | 
						|
-made, etc.
 | 
						|
-
 | 
						|
+## Code Review
 | 
						|
+New contributors' PRs must be reviewed by at least two of the maintainers. Well established prior contributors can be reviewed by a single maintainer.
 | 
						|
 
 | 
						|
-## Adding and removing
 | 
						|
+## Adding and Removing
 | 
						|
+New maintainers can be proposed by two existing maintainers, subject to a vote by a quorum of the existing maintainers. A minimum of 50% support and a 50% participation is required. In the event of a tie vote, the addition of the new maintainer will be rejected.
 | 
						|
 
 | 
						|
-New maintainers can be proposed by two existing maintainers, subject to a vote
 | 
						|
-by a quorum of the existing maintainers.
 | 
						|
-A minimum of 50% support and a 50% participation is required.
 | 
						|
-In the event of a tie vote, the addition of the new maintainer will be
 | 
						|
-rejected.
 | 
						|
-
 | 
						|
-Existing maintainers can resign, or be subject to a vote for removal at the
 | 
						|
-behest of two existing maintainers.
 | 
						|
-A minimum of 60% agreement and 50% participation are required.
 | 
						|
-The XRP Ledger Foundation will have the ability, for cause, to remove an
 | 
						|
-existing maintainer without a vote.
 | 
						|
-
 | 
						|
-
 | 
						|
-## Current Maintainers
 | 
						|
+Existing maintainers can resign, or be subject to a vote for removal at the behest of two existing maintainers. A minimum of 60% agreement and 50% participation are required. The XRP Ledger Foundation will have the ability, for cause, to remove an existing maintainer without a vote.
 | 
						|
 
 | 
						|
+## Existing Maintainers
 | 
						|
 * [JoelKatz](https://github.com/JoelKatz) (Ripple)
 | 
						|
-* [manojsdoshi](https://github.com/manojsdoshi) (Ripple)
 | 
						|
-* [n3tc4t](https://github.com/n3tc4t) (XRPL Labs)
 | 
						|
-* [Nik Bougalis](https://github.com/nbougalis)
 | 
						|
-* [nixer89](https://github.com/nixer89) (XRP Ledger Foundation)
 | 
						|
+* [Manojsdoshi](https://github.com/manojsdoshi) (Ripple)
 | 
						|
+* [N3tc4t](https://github.com/n3tc4t) (XRPL Labs)
 | 
						|
+* [Nikolaos D Bougalis](https://github.com/nbougalis)
 | 
						|
+* [Nixer89](https://github.com/nixer89) (XRP Ledger Foundation)
 | 
						|
 * [RichardAH](https://github.com/RichardAH) (XRPL Labs + XRP Ledger Foundation)
 | 
						|
-* [seelabs](https://github.com/seelabs) (Ripple)
 | 
						|
+* [Seelabs](https://github.com/seelabs) (Ripple)
 | 
						|
 * [Silkjaer](https://github.com/Silkjaer) (XRP Ledger Foundation)
 | 
						|
 * [WietseWind](https://github.com/WietseWind) (XRPL Labs + XRP Ledger Foundation)
 | 
						|
-* [Ed Hennis](https://github.com/ximinez) (Ripple)
 | 
						|
-
 | 
						|
-
 | 
						|
-[1]: https://docs.github.com/en/get-started/quickstart/contributing-to-projects
 | 
						|
-[2]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges#squash-and-merge-your-commits
 | 
						|
+* [Ximinez](https://github.com/ximinez) (Ripple)
 | 
						|
diff --git a/conanfile.py b/conanfile.py
 | 
						|
deleted file mode 100644
 | 
						|
index 6e616b3c9..000000000
 | 
						|
--- a/conanfile.py
 | 
						|
+++ /dev/null
 | 
						|
@@ -1,154 +0,0 @@
 | 
						|
-from conan import ConanFile
 | 
						|
-from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout
 | 
						|
-import re
 | 
						|
-
 | 
						|
-class Xrpl(ConanFile):
 | 
						|
-    name = 'xrpl'
 | 
						|
-
 | 
						|
-    license = 'ISC'
 | 
						|
-    author = 'John Freeman <jfreeman@ripple.com>'
 | 
						|
-    url = 'https://github.com/xrplf/rippled'
 | 
						|
-    description = 'The XRP Ledger'
 | 
						|
-    settings = 'os', 'compiler', 'build_type', 'arch'
 | 
						|
-    options = {
 | 
						|
-        'assertions': [True, False],
 | 
						|
-        'coverage': [True, False],
 | 
						|
-        'fPIC': [True, False],
 | 
						|
-        'jemalloc': [True, False],
 | 
						|
-        'reporting': [True, False],
 | 
						|
-        'rocksdb': [True, False],
 | 
						|
-        'shared': [True, False],
 | 
						|
-        'static': [True, False],
 | 
						|
-        'tests': [True, False],
 | 
						|
-        'unity': [True, False],
 | 
						|
-    }
 | 
						|
-
 | 
						|
-    requires = [
 | 
						|
-        'boost/1.77.0',
 | 
						|
-        'date/3.0.1',
 | 
						|
-        'libarchive/3.6.0',
 | 
						|
-        'lz4/1.9.3',
 | 
						|
-        'grpc/1.50.1',
 | 
						|
-        'nudb/2.0.8',
 | 
						|
-        'openssl/1.1.1m',
 | 
						|
-        'protobuf/3.21.4',
 | 
						|
-        'snappy/1.1.9',
 | 
						|
-        'soci/4.0.3',
 | 
						|
-        'sqlite3/3.38.0',
 | 
						|
-        'zlib/1.2.12',
 | 
						|
-    ]
 | 
						|
-
 | 
						|
-    default_options = {
 | 
						|
-        'assertions': False,
 | 
						|
-        'coverage': False,
 | 
						|
-        'fPIC': True,
 | 
						|
-        'jemalloc': False,
 | 
						|
-        'reporting': False,
 | 
						|
-        'rocksdb': True,
 | 
						|
-        'shared': False,
 | 
						|
-        'static': True,
 | 
						|
-        'tests': True,
 | 
						|
-        'unity': False,
 | 
						|
-
 | 
						|
-        'cassandra-cpp-driver:shared': False,
 | 
						|
-        'date:header_only': True,
 | 
						|
-        'grpc:shared': False,
 | 
						|
-        'grpc:secure': True,
 | 
						|
-        'libarchive:shared': False,
 | 
						|
-        'libarchive:with_acl': False,
 | 
						|
-        'libarchive:with_bzip2': False,
 | 
						|
-        'libarchive:with_cng': False,
 | 
						|
-        'libarchive:with_expat': False,
 | 
						|
-        'libarchive:with_iconv': False,
 | 
						|
-        'libarchive:with_libxml2': False,
 | 
						|
-        'libarchive:with_lz4': True,
 | 
						|
-        'libarchive:with_lzma': False,
 | 
						|
-        'libarchive:with_lzo': False,
 | 
						|
-        'libarchive:with_nettle': False,
 | 
						|
-        'libarchive:with_openssl': False,
 | 
						|
-        'libarchive:with_pcreposix': False,
 | 
						|
-        'libarchive:with_xattr': False,
 | 
						|
-        'libarchive:with_zlib': False,
 | 
						|
-        'libpq:shared': False,
 | 
						|
-        'lz4:shared': False,
 | 
						|
-        'openssl:shared': False,
 | 
						|
-        'protobuf:shared': False,
 | 
						|
-        'protobuf:with_zlib': True,
 | 
						|
-        'rocksdb:enable_sse': False,
 | 
						|
-        'rocksdb:lite': False,
 | 
						|
-        'rocksdb:shared': False,
 | 
						|
-        'rocksdb:use_rtti': True,
 | 
						|
-        'rocksdb:with_jemalloc': False,
 | 
						|
-        'rocksdb:with_lz4': True,
 | 
						|
-        'rocksdb:with_snappy': True,
 | 
						|
-        'snappy:shared': False,
 | 
						|
-        'soci:shared': False,
 | 
						|
-        'soci:with_sqlite3': True,
 | 
						|
-        'soci:with_boost': True,
 | 
						|
-    }
 | 
						|
-
 | 
						|
-    def set_version(self):
 | 
						|
-        path = f'{self.recipe_folder}/src/ripple/protocol/impl/BuildInfo.cpp'
 | 
						|
-        regex = r'versionString\s?=\s?\"(.*)\"'
 | 
						|
-        with open(path, 'r') as file:
 | 
						|
-            matches = (re.search(regex, line) for line in file)
 | 
						|
-            match = next(m for m in matches if m)
 | 
						|
-            self.version = match.group(1)
 | 
						|
-
 | 
						|
-    def configure(self):
 | 
						|
-        if self.settings.compiler == 'apple-clang':
 | 
						|
-            self.options['boost'].visibility = 'global'
 | 
						|
-
 | 
						|
-    def requirements(self):
 | 
						|
-        if self.options.jemalloc:
 | 
						|
-            self.requires('jemalloc/5.2.1')
 | 
						|
-        if self.options.reporting:
 | 
						|
-            self.requires('cassandra-cpp-driver/2.15.3')
 | 
						|
-            self.requires('libpq/13.6')
 | 
						|
-        if self.options.rocksdb:
 | 
						|
-            self.requires('rocksdb/6.27.3')
 | 
						|
-
 | 
						|
-    exports_sources = (
 | 
						|
-        'CMakeLists.txt', 'Builds/*', 'bin/getRippledInfo', 'src/*', 'cfg/*'
 | 
						|
-    )
 | 
						|
-
 | 
						|
-    def layout(self):
 | 
						|
-        cmake_layout(self)
 | 
						|
-        # Fix this setting to follow the default introduced in Conan 1.48
 | 
						|
-        # to align with our build instructions.
 | 
						|
-        self.folders.generators = 'build/generators'
 | 
						|
-
 | 
						|
-    generators = 'CMakeDeps'
 | 
						|
-    def generate(self):
 | 
						|
-        tc = CMakeToolchain(self)
 | 
						|
-        tc.variables['tests'] = self.options.tests
 | 
						|
-        tc.variables['assert'] = self.options.assertions
 | 
						|
-        tc.variables['coverage'] = self.options.coverage
 | 
						|
-        tc.variables['jemalloc'] = self.options.jemalloc
 | 
						|
-        tc.variables['reporting'] = self.options.reporting
 | 
						|
-        tc.variables['rocksdb'] = self.options.rocksdb
 | 
						|
-        tc.variables['BUILD_SHARED_LIBS'] = self.options.shared
 | 
						|
-        tc.variables['static'] = self.options.static
 | 
						|
-        tc.variables['unity'] = self.options.unity
 | 
						|
-        tc.generate()
 | 
						|
-
 | 
						|
-    def build(self):
 | 
						|
-        cmake = CMake(self)
 | 
						|
-        cmake.verbose = True
 | 
						|
-        cmake.configure()
 | 
						|
-        cmake.build()
 | 
						|
-
 | 
						|
-    def package(self):
 | 
						|
-        cmake = CMake(self)
 | 
						|
-        cmake.verbose = True
 | 
						|
-        cmake.install()
 | 
						|
-
 | 
						|
-    def package_info(self):
 | 
						|
-        libxrpl = self.cpp_info.components['libxrpl']
 | 
						|
-        libxrpl.libs = [
 | 
						|
-            'libxrpl_core.a',
 | 
						|
-            'libed25519.a',
 | 
						|
-            'libsecp256k1.a',
 | 
						|
-        ]
 | 
						|
-        libxrpl.includedirs = ['include']
 | 
						|
-        libxrpl.requires = ['boost::boost']
 | 
						|
diff --git a/docs/build/conan.md b/docs/build/conan.md
 | 
						|
deleted file mode 100644
 | 
						|
index 01fb7150d..000000000
 | 
						|
--- a/docs/build/conan.md
 | 
						|
+++ /dev/null
 | 
						|
@@ -1,114 +0,0 @@
 | 
						|
-## A crash course in CMake and Conan
 | 
						|
-
 | 
						|
-To better understand how to use Conan,
 | 
						|
-we should first understand _why_ we use Conan,
 | 
						|
-and to understand that,
 | 
						|
-we need to understand how we use CMake.
 | 
						|
-
 | 
						|
-
 | 
						|
-### CMake
 | 
						|
-
 | 
						|
-Technically, you don't need CMake to build this project.
 | 
						|
-You could manually compile every translation unit into an object file,
 | 
						|
-using the right compiler options,
 | 
						|
-and then manually link all those objects together,
 | 
						|
-using the right linker options.
 | 
						|
-However, that is very tedious and error-prone,
 | 
						|
-which is why we lean on tools like CMake.
 | 
						|
-
 | 
						|
-We have written CMake configuration files
 | 
						|
-([`CMakeLists.txt`](./CMakeLists.txt) and friends)
 | 
						|
-for this project so that CMake can be used to correctly compile and link
 | 
						|
-all of the translation units in it.
 | 
						|
-Or rather, CMake will generate files for a separate build system
 | 
						|
-(e.g. Make, Ninja, Visual Studio, Xcode, etc.)
 | 
						|
-that compile and link all of the translation units.
 | 
						|
-Even then, CMake has parameters, some of which are platform-specific.
 | 
						|
-In CMake's parlance, parameters are specially-named **variables** like
 | 
						|
-[`CMAKE_BUILD_TYPE`][build_type] or
 | 
						|
-[`CMAKE_MSVC_RUNTIME_LIBRARY`][runtime].
 | 
						|
-Parameters include:
 | 
						|
-
 | 
						|
-- what build system to generate files for
 | 
						|
-- where to find the compiler and linker
 | 
						|
-- where to find dependencies, e.g. libraries and headers
 | 
						|
-- how to link dependencies, e.g. any special compiler or linker flags that
 | 
						|
-    need to be used with them, including preprocessor definitions
 | 
						|
-- how to compile translation units, e.g. with optimizations, debug symbols,
 | 
						|
-    position-independent code, etc.
 | 
						|
-- on Windows, which runtime library to link with
 | 
						|
-
 | 
						|
-For some of these parameters, like the build system and compiler,
 | 
						|
-CMake goes through a complicated search process to choose default values.
 | 
						|
-For others, like the dependencies,
 | 
						|
-_we_ had written in the CMake configuration files of this project
 | 
						|
-our own complicated process to choose defaults.
 | 
						|
-For most developers, things "just worked"... until they didn't, and then
 | 
						|
-you were left trying to debug one of these complicated processes, instead of
 | 
						|
-choosing and manually passing the parameter values yourself.
 | 
						|
-
 | 
						|
-You can pass every parameter to CMake on the command line,
 | 
						|
-but writing out these parameters every time we want to configure CMake is
 | 
						|
-a pain.
 | 
						|
-Most humans prefer to put them into a configuration file, once, that
 | 
						|
-CMake can read every time it is configured.
 | 
						|
-For CMake, that file is a [toolchain file][toolchain].
 | 
						|
-
 | 
						|
-
 | 
						|
-### Conan
 | 
						|
-
 | 
						|
-These next few paragraphs on Conan are going to read much like the ones above
 | 
						|
-for CMake.
 | 
						|
-
 | 
						|
-Technically, you don't need Conan to build this project.
 | 
						|
-You could manually download, configure, build, and install all of the
 | 
						|
-dependencies yourself, and then pass all of the parameters necessary for
 | 
						|
-CMake to link to those dependencies.
 | 
						|
-To guarantee ABI compatibility, you must be sure to use the same set of
 | 
						|
-compiler and linker options for all dependencies _and_ this project.
 | 
						|
-However, that is very tedious and error-prone, which is why we lean on tools
 | 
						|
-like Conan.
 | 
						|
-
 | 
						|
-We have written a Conan configuration file ([`conanfile.py`](./conanfile.py))
 | 
						|
-so that Conan can be used to correctly download, configure, build, and install
 | 
						|
-all of the dependencies for this project,
 | 
						|
-using a single set of compiler and linker options for all of them.
 | 
						|
-It generates files that contain almost all of the parameters that CMake
 | 
						|
-expects.
 | 
						|
-Those files include:
 | 
						|
-
 | 
						|
-- A single toolchain file.
 | 
						|
-- For every dependency, a CMake [package configuration file][pcf],
 | 
						|
-    [package version file][pvf], and for every build type, a package
 | 
						|
-    targets file.
 | 
						|
-    Together, these files implement version checking and define `IMPORTED`
 | 
						|
-    targets for the dependencies.
 | 
						|
-
 | 
						|
-The toolchain file itself amends the search path
 | 
						|
-([`CMAKE_PREFIX_PATH`][prefix_path]) so that [`find_package()`][find_package]
 | 
						|
-will [discover][search] the generated package configuration files.
 | 
						|
-
 | 
						|
-**Nearly all we must do to properly configure CMake is pass the toolchain
 | 
						|
-file.**
 | 
						|
-What CMake parameters are left out?
 | 
						|
-You'll still need to pick a build system generator,
 | 
						|
-and if you choose a single-configuration generator,
 | 
						|
-you'll need to pass the `CMAKE_BUILD_TYPE`,
 | 
						|
-which should match the `build_type` setting you gave to Conan.
 | 
						|
-
 | 
						|
-Even then, Conan has parameters, some of which are platform-specific.
 | 
						|
-In Conan's parlance, parameters are either settings or options.
 | 
						|
-**Settings** are shared by all packages, e.g. the build type.
 | 
						|
-**Options** are specific to a given package, e.g. whether to build and link
 | 
						|
-OpenSSL as a shared library.
 | 
						|
-
 | 
						|
-For settings, Conan goes through a complicated search process to choose
 | 
						|
-defaults.
 | 
						|
-For options, each package recipe defines its own defaults.
 | 
						|
-
 | 
						|
-You can pass every parameter to Conan on the command line,
 | 
						|
-but it is more convenient to put them in a configuration file, once, that
 | 
						|
-Conan can read every time it is configured.
 | 
						|
-For Conan, that file is a [profile][profile].
 | 
						|
-**All we must do to properly configure Conan is edit and pass the profile.**
 | 
						|
-By default, Conan will use the profile named "default".
 | 
						|
diff --git a/docs/build/depend.md b/docs/build/depend.md
 | 
						|
deleted file mode 100644
 | 
						|
index 42fd41a26..000000000
 | 
						|
--- a/docs/build/depend.md
 | 
						|
+++ /dev/null
 | 
						|
@@ -1,98 +0,0 @@
 | 
						|
-We recommend two different methods to depend on libxrpl in your own [CMake][]
 | 
						|
-project.
 | 
						|
-Both methods add a CMake library target named `xrpl::libxrpl`.
 | 
						|
-
 | 
						|
-
 | 
						|
-## Conan requirement 
 | 
						|
-
 | 
						|
-The first method adds libxrpl as a [Conan][] requirement.
 | 
						|
-With this method, there is no need for a Git [submodule][].
 | 
						|
-It is good for when you just need a dependency on libxrpl as-is.
 | 
						|
-
 | 
						|
-```
 | 
						|
-# This conanfile.txt is just an example.
 | 
						|
-[requires]
 | 
						|
-xrpl/1.10.0
 | 
						|
-
 | 
						|
-[generators]
 | 
						|
-CMakeDeps
 | 
						|
-CMakeToolchain
 | 
						|
-```
 | 
						|
-
 | 
						|
-```
 | 
						|
-# If you want to depend on a version of libxrpl that is not in ConanCenter,
 | 
						|
-# then you can export the recipe from the rippled project.
 | 
						|
-conan export <path>
 | 
						|
-```
 | 
						|
-
 | 
						|
-```cmake
 | 
						|
-# Find and link the library in your CMake project.
 | 
						|
-find_package(xrpl)
 | 
						|
-target_link_libraries(<target> PUBLIC xrpl::libxrpl)
 | 
						|
-```
 | 
						|
-
 | 
						|
-```
 | 
						|
-# Download, build, and connect dependencies with Conan.
 | 
						|
-mkdir .build
 | 
						|
-cd .build
 | 
						|
-mkdir -p build/generators
 | 
						|
-conan install \
 | 
						|
-  --install-folder build/generators \
 | 
						|
-  --build missing \
 | 
						|
-  --settings build_type=Release \
 | 
						|
-  ..
 | 
						|
-cmake \
 | 
						|
-  -DCMAKE_TOOLCHAIN_FILE=build/generators/conan_toolchain.cmake \
 | 
						|
-  -DCMAKE_BUILD_TYPE=Release \
 | 
						|
-  ..
 | 
						|
-cmake --build . --parallel
 | 
						|
-```
 | 
						|
-
 | 
						|
-
 | 
						|
-## CMake subdirectory
 | 
						|
-
 | 
						|
-The second method adds the [rippled][] project as a CMake
 | 
						|
-[subdirectory][add_subdirectory].
 | 
						|
-This method works well when you keep the rippled project as a Git
 | 
						|
-[submodule][].
 | 
						|
-It's good for when you want to make changes to libxrpl as part of your own
 | 
						|
-project.
 | 
						|
-Be careful, though.
 | 
						|
-Your project will inherit all of the same CMake options,
 | 
						|
-so watch out for name collisions.
 | 
						|
-We still recommend using [Conan][] to download, build, and connect dependencies.
 | 
						|
-
 | 
						|
-```
 | 
						|
-# Add the project as a Git submodule.
 | 
						|
-mkdir submodules
 | 
						|
-git submodule add https://github.com/XRPLF/rippled.git submodules/rippled
 | 
						|
-```
 | 
						|
-
 | 
						|
-```cmake
 | 
						|
-# Add and link the library in your CMake project.
 | 
						|
-add_subdirectory(submodules/rippled)
 | 
						|
-target_link_libraries(<target> PUBLIC xrpl::libxrpl)
 | 
						|
-```
 | 
						|
-
 | 
						|
-```
 | 
						|
-# Download, build, and connect dependencies with Conan.
 | 
						|
-mkdir .build
 | 
						|
-cd .build
 | 
						|
-conan install \
 | 
						|
-  --output-folder . \
 | 
						|
-  --build missing \
 | 
						|
-  --settings build_type=Release \
 | 
						|
-  ../submodules/rippled
 | 
						|
-cmake \
 | 
						|
-  -DCMAKE_TOOLCHAIN_FILE=build/generators/conan_toolchain.cmake \
 | 
						|
-  -DCMAKE_BUILD_TYPE=Release \
 | 
						|
-  ..
 | 
						|
-cmake --build . --parallel
 | 
						|
-```
 | 
						|
-
 | 
						|
-
 | 
						|
-[add_subdirectory]: https://cmake.org/cmake/help/latest/command/add_subdirectory.html
 | 
						|
-[submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
 | 
						|
-[rippled]: https://github.com/ripple/rippled
 | 
						|
-[Conan]: https://docs.conan.io/
 | 
						|
-[CMake]: https://cmake.org/cmake/help/latest/
 | 
						|
diff --git a/docs/build/environment.md b/docs/build/environment.md
 | 
						|
deleted file mode 100644
 | 
						|
index 8e6ba45aa..000000000
 | 
						|
--- a/docs/build/environment.md
 | 
						|
+++ /dev/null
 | 
						|
@@ -1,83 +0,0 @@
 | 
						|
-Our [build instructions][BUILD.md] assume you have a C++ development
 | 
						|
-environment complete with Git, Python, Conan, CMake, and a C++ compiler.
 | 
						|
-This document exists to help readers set one up on any of the Big Three
 | 
						|
-platforms: Linux, macOS, or Windows.
 | 
						|
-
 | 
						|
-[BUILD.md]: ../../BUILD.md
 | 
						|
-
 | 
						|
-
 | 
						|
-## Linux
 | 
						|
-
 | 
						|
-Package ecosystems vary across Linux distributions,
 | 
						|
-so there is no one set of instructions that will work for every Linux user.
 | 
						|
-These instructions are written for Ubuntu 22.04.
 | 
						|
-They are largely copied from the [script][1] used to configure our Docker
 | 
						|
-container for continuous integration.
 | 
						|
-That script handles many more responsibilities.
 | 
						|
-These instructions are just the bare minimum to build one configuration of
 | 
						|
-rippled.
 | 
						|
-You can check that codebase for other Linux distributions and versions.
 | 
						|
-If you cannot find yours there,
 | 
						|
-then we hope that these instructions can at least guide you in the right
 | 
						|
-direction.
 | 
						|
-
 | 
						|
-```
 | 
						|
-apt update
 | 
						|
-apt install --yes curl git libssl-dev python3.10-dev python3-pip make g++-11
 | 
						|
-
 | 
						|
-curl --location --remote-name \
 | 
						|
-  "https://github.com/Kitware/CMake/releases/download/v3.25.1/cmake-3.25.1.tar.gz"
 | 
						|
-tar -xzf cmake-3.25.1.tar.gz
 | 
						|
-rm cmake-3.25.1.tar.gz
 | 
						|
-cd cmake-3.25.1
 | 
						|
-./bootstrap --parallel=$(nproc)
 | 
						|
-make --jobs $(nproc)
 | 
						|
-make install
 | 
						|
-cd ..
 | 
						|
-
 | 
						|
-pip3 install 'conan<2'
 | 
						|
-```
 | 
						|
-
 | 
						|
-[1]: https://github.com/thejohnfreeman/rippled-docker/blob/master/ubuntu-22.04/install.sh
 | 
						|
-
 | 
						|
-
 | 
						|
-## macOS
 | 
						|
-
 | 
						|
-Open a Terminal and enter the below command to bring up a dialog to install
 | 
						|
-the command line developer tools.
 | 
						|
-Once it is finished, this command should return a version greater than the
 | 
						|
-minimum required (see [BUILD.md][]).
 | 
						|
-
 | 
						|
-```
 | 
						|
-clang --version
 | 
						|
-```
 | 
						|
-
 | 
						|
-The command line developer tools should include Git too:
 | 
						|
-
 | 
						|
-```
 | 
						|
-git --version
 | 
						|
-```
 | 
						|
-
 | 
						|
-Install [Homebrew][],
 | 
						|
-use it to install [pyenv][],
 | 
						|
-use it to install Python,
 | 
						|
-and use it to install Conan:
 | 
						|
-
 | 
						|
-[Homebrew]: https://brew.sh/
 | 
						|
-[pyenv]: https://github.com/pyenv/pyenv
 | 
						|
-
 | 
						|
-```
 | 
						|
-/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
 | 
						|
-brew update
 | 
						|
-brew install pyenv
 | 
						|
-pyenv install 3.10-dev
 | 
						|
-pyenv global 3.10-dev
 | 
						|
-eval "$(pyenv init -)"
 | 
						|
-pip install 'conan<2'
 | 
						|
-```
 | 
						|
-
 | 
						|
-Install CMake with Homebrew too:
 | 
						|
-
 | 
						|
-```
 | 
						|
-brew install cmake
 | 
						|
-```
 | 
						|
diff --git a/docs/build/install.md b/docs/build/install.md
 | 
						|
deleted file mode 100644
 | 
						|
index 1bdc456b6..000000000
 | 
						|
--- a/docs/build/install.md
 | 
						|
+++ /dev/null
 | 
						|
@@ -1,13 +0,0 @@
 | 
						|
-## From source
 | 
						|
-
 | 
						|
-From a source build, you can install rippled and libxrpl using CMake's
 | 
						|
-`--install` mode:
 | 
						|
-
 | 
						|
-```
 | 
						|
-cmake --install . --prefix /opt/local
 | 
						|
-```
 | 
						|
-
 | 
						|
-The default [prefix][1] is typically `/usr/local` on Linux and macOS and
 | 
						|
-`C:/Program Files/rippled` on Windows.
 | 
						|
-
 | 
						|
-[1]: https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html
 | 
						|
diff --git a/src/ed25519-donna/CMakeLists.txt b/src/ed25519-donna/CMakeLists.txt
 | 
						|
deleted file mode 100644
 | 
						|
index 418dc3832..000000000
 | 
						|
--- a/src/ed25519-donna/CMakeLists.txt
 | 
						|
+++ /dev/null
 | 
						|
@@ -1,48 +0,0 @@
 | 
						|
-cmake_minimum_required(VERSION 3.11)
 | 
						|
-
 | 
						|
-project(ed25519
 | 
						|
-  LANGUAGES C
 | 
						|
-)
 | 
						|
-
 | 
						|
-if(PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME)
 | 
						|
-  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/output/$<CONFIG>/lib")
 | 
						|
-endif()
 | 
						|
-
 | 
						|
-if(NOT TARGET OpenSSL::SSL)
 | 
						|
-  find_package(OpenSSL)
 | 
						|
-endif()
 | 
						|
-
 | 
						|
-add_library(ed25519 STATIC
 | 
						|
-  ed25519.c
 | 
						|
-)
 | 
						|
-add_library(ed25519::ed25519 ALIAS ed25519)
 | 
						|
-target_link_libraries(ed25519 PUBLIC OpenSSL::SSL)
 | 
						|
-
 | 
						|
-include(GNUInstallDirs)
 | 
						|
-
 | 
						|
-#[=========================================================[
 | 
						|
-   NOTE for macos:
 | 
						|
-   https://github.com/floodyberry/ed25519-donna/issues/29
 | 
						|
-   our source for ed25519-donna-portable.h has been
 | 
						|
-   patched to workaround this.
 | 
						|
-#]=========================================================]
 | 
						|
-target_include_directories(ed25519 PUBLIC
 | 
						|
-  $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
 | 
						|
-  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
 | 
						|
-)
 | 
						|
-
 | 
						|
-install(
 | 
						|
-  TARGETS ed25519
 | 
						|
-  EXPORT ${PROJECT_NAME}-exports
 | 
						|
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
 | 
						|
-)
 | 
						|
-install(
 | 
						|
-  EXPORT ${PROJECT_NAME}-exports
 | 
						|
-  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
 | 
						|
-  FILE ${PROJECT_NAME}-targets.cmake
 | 
						|
-  NAMESPACE ${PROJECT_NAME}::
 | 
						|
-)
 | 
						|
-install(
 | 
						|
-  FILES ed25519.h
 | 
						|
-  DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
 | 
						|
-)
 | 
						|
diff --git a/src/ripple/protocol/impl/PublicKey.cpp b/src/ripple/protocol/impl/PublicKey.cpp
 | 
						|
index 8ab1bd46c..ac86634f1 100644
 | 
						|
--- a/src/ripple/protocol/impl/PublicKey.cpp
 | 
						|
+++ b/src/ripple/protocol/impl/PublicKey.cpp
 | 
						|
@@ -23,8 +23,7 @@
 | 
						|
 #include <ripple/protocol/digest.h>
 | 
						|
 #include <ripple/protocol/impl/secp256k1.h>
 | 
						|
 #include <boost/multiprecision/cpp_int.hpp>
 | 
						|
-#include <ed25519.h>
 | 
						|
-#include <type_traits>
 | 
						|
+#include <ed25519-donna/ed25519.h>
 | 
						|
 
 | 
						|
 namespace ripple {
 | 
						|
 
 | 
						|
diff --git a/src/ripple/protocol/impl/SecretKey.cpp b/src/ripple/protocol/impl/SecretKey.cpp
 | 
						|
index 63661888f..13aafdb1f 100644
 | 
						|
--- a/src/ripple/protocol/impl/SecretKey.cpp
 | 
						|
+++ b/src/ripple/protocol/impl/SecretKey.cpp
 | 
						|
@@ -26,7 +26,7 @@
 | 
						|
 #include <ripple/protocol/digest.h>
 | 
						|
 #include <ripple/protocol/impl/secp256k1.h>
 | 
						|
 #include <cstring>
 | 
						|
-#include <ed25519.h>
 | 
						|
+#include <ed25519-donna/ed25519.h>
 | 
						|
 
 | 
						|
 namespace ripple {
 | 
						|
 
 | 
						|
diff --git a/src/ripple/rpc/handlers/WalletPropose.cpp b/src/ripple/rpc/handlers/WalletPropose.cpp
 | 
						|
index 624c5c83c..012ed5c16 100644
 | 
						|
--- a/src/ripple/rpc/handlers/WalletPropose.cpp
 | 
						|
+++ b/src/ripple/rpc/handlers/WalletPropose.cpp
 | 
						|
@@ -29,7 +29,7 @@
 | 
						|
 #include <ripple/rpc/handlers/WalletPropose.h>
 | 
						|
 #include <ripple/rpc/impl/RPCHelpers.h>
 | 
						|
 #include <cmath>
 | 
						|
-#include <ed25519.h>
 | 
						|
+#include <ed25519-donna/ed25519.h>
 | 
						|
 #include <map>
 | 
						|
 
 | 
						|
 namespace ripple {
 | 
						|
diff --git a/src/secp256k1/CMakeLists.txt b/src/secp256k1/CMakeLists.txt
 | 
						|
deleted file mode 100644
 | 
						|
index 6b41b66c8..000000000
 | 
						|
--- a/src/secp256k1/CMakeLists.txt
 | 
						|
+++ /dev/null
 | 
						|
@@ -1,52 +0,0 @@
 | 
						|
-cmake_minimum_required(VERSION 3.11)
 | 
						|
-
 | 
						|
-project(secp256k1
 | 
						|
-  LANGUAGES C
 | 
						|
-)
 | 
						|
-
 | 
						|
-if(PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME)
 | 
						|
-  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/output/$<CONFIG>/lib")
 | 
						|
-endif()
 | 
						|
-
 | 
						|
-add_library(secp256k1 STATIC
 | 
						|
-  src/secp256k1.c
 | 
						|
-)
 | 
						|
-add_library(secp256k1::secp256k1 ALIAS secp256k1)
 | 
						|
-
 | 
						|
-include(GNUInstallDirs)
 | 
						|
-
 | 
						|
-target_compile_definitions(secp256k1 PRIVATE
 | 
						|
-  USE_NUM_NONE
 | 
						|
-  USE_FIELD_10X26
 | 
						|
-  USE_FIELD_INV_BUILTIN
 | 
						|
-  USE_SCALAR_8X32
 | 
						|
-  USE_SCALAR_INV_BUILTIN
 | 
						|
-)
 | 
						|
-target_include_directories(secp256k1
 | 
						|
-  PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
 | 
						|
-  PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
 | 
						|
-)
 | 
						|
-target_compile_options(secp256k1 PRIVATE
 | 
						|
-  $<$<C_COMPILER_ID:MSVC>:-wd4319>
 | 
						|
-  $<$<NOT:$<C_COMPILER_ID:MSVC>>:
 | 
						|
-  -Wno-deprecated-declarations
 | 
						|
-  -Wno-unused-function
 | 
						|
-  >
 | 
						|
-  $<$<C_COMPILER_ID:GNU>:-Wno-nonnull-compare>
 | 
						|
-)
 | 
						|
-
 | 
						|
-install(
 | 
						|
-  TARGETS secp256k1
 | 
						|
-  EXPORT ${PROJECT_NAME}-exports
 | 
						|
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
 | 
						|
-)
 | 
						|
-install(
 | 
						|
-  EXPORT ${PROJECT_NAME}-exports
 | 
						|
-  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
 | 
						|
-  FILE ${PROJECT_NAME}-targets.cmake
 | 
						|
-  NAMESPACE ${PROJECT_NAME}::
 | 
						|
-)
 | 
						|
-install(
 | 
						|
-  FILES include/secp256k1.h
 | 
						|
-  DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
 | 
						|
-)
 | 
						|
diff --git a/src/test/core/SociDB_test.cpp b/src/test/core/SociDB_test.cpp
 | 
						|
index c0365ad9a..875af9aa0 100644
 | 
						|
--- a/src/test/core/SociDB_test.cpp
 | 
						|
+++ b/src/test/core/SociDB_test.cpp
 | 
						|
@@ -226,15 +226,13 @@ public:
 | 
						|
                 // SOCI requires boost::optional (not std::optional) as
 | 
						|
                 // parameters.
 | 
						|
                 boost::optional<std::int32_t> ig;
 | 
						|
-                // Known bug: https://github.com/SOCI/soci/issues/926
 | 
						|
-                // boost::optional<std::uint32_t> uig;
 | 
						|
-                uint32_t uig = 0;
 | 
						|
+                boost::optional<std::uint32_t> uig;
 | 
						|
                 boost::optional<std::int64_t> big;
 | 
						|
                 boost::optional<std::uint64_t> ubig;
 | 
						|
                 s << "SELECT I, UI, BI, UBI from STT;", soci::into(ig),
 | 
						|
                     soci::into(uig), soci::into(big), soci::into(ubig);
 | 
						|
                 BEAST_EXPECT(
 | 
						|
-                    *ig == id[0] && uig == uid[0] && *big == bid[0] &&
 | 
						|
+                    *ig == id[0] && *uig == uid[0] && *big == bid[0] &&
 | 
						|
                     *ubig == ubid[0]);
 | 
						|
             }
 | 
						|
             catch (std::exception&)
 | 
						|
@@ -359,13 +357,18 @@ public:
 | 
						|
             bfs::remove(dbPath);
 | 
						|
     }
 | 
						|
     void
 | 
						|
-    run() override
 | 
						|
+    testSQLite()
 | 
						|
     {
 | 
						|
         testSQLiteFileNames();
 | 
						|
         testSQLiteSession();
 | 
						|
         testSQLiteSelect();
 | 
						|
         testSQLiteDeleteWithSubselect();
 | 
						|
     }
 | 
						|
+    void
 | 
						|
+    run() override
 | 
						|
+    {
 | 
						|
+        testSQLite();
 | 
						|
+    }
 | 
						|
 };
 | 
						|
 
 | 
						|
 BEAST_DEFINE_TESTSUITE(SociDB, core, ripple);
 | 
						|
diff --git a/src/test/rpc/NodeToShardRPC_test.cpp b/src/test/rpc/NodeToShardRPC_test.cpp
 | 
						|
index 7736d7769..867f2cfe3 100644
 | 
						|
--- a/src/test/rpc/NodeToShardRPC_test.cpp
 | 
						|
+++ b/src/test/rpc/NodeToShardRPC_test.cpp
 | 
						|
@@ -409,6 +409,6 @@ public:
 | 
						|
     }
 | 
						|
 };
 | 
						|
 
 | 
						|
-BEAST_DEFINE_TESTSUITE_MANUAL(NodeToShardRPC, rpc, ripple);
 | 
						|
+BEAST_DEFINE_TESTSUITE(NodeToShardRPC, rpc, ripple);
 | 
						|
 }  // namespace test
 | 
						|
 }  // namespace ripple
 | 
						|
-- 
 | 
						|
2.39.0
 | 
						|
 |