mirror of
				https://github.com/Xahau/xahaud.git
				synced 2025-11-04 10:45:50 +00:00 
			
		
		
		
	Use the Conan package manager (#4367)
Introduces a conanfile.py (and a Conan recipe for RocksDB) to enable building the package with Conan, choosing more recent default versions of dependencies. It removes almost all of the CMake build files related to dependencies, and the configurations for Travis CI and GitLab CI. A new set of cross-platform build instructions are written in BUILD.md. Includes example GitHub Actions workflow for each of Linux, macOS, Windows. * Test on macos-12 We use the <concepts> library which was not added to Apple Clang until version 13.1.6. The default Clang on macos-11 (the sometimes current version of macos-latest) is 13.0.0, and the default Clang on macos-12 is 14.0.0. Closes #4223.
This commit is contained in:
		
							
								
								
									
										95
									
								
								.github/workflows/nix.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								.github/workflows/nix.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,95 @@
 | 
			
		||||
name: nix
 | 
			
		||||
on: [push, pull_request]
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
 | 
			
		||||
  test:
 | 
			
		||||
    strategy:
 | 
			
		||||
      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.0'
 | 
			
		||||
      - 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 RocksDB
 | 
			
		||||
        run: conan export external/rocksdb
 | 
			
		||||
      - name: install dependencies
 | 
			
		||||
        run: |
 | 
			
		||||
          mkdir ${build_dir}
 | 
			
		||||
          cd ${build_dir}
 | 
			
		||||
          conan install .. --build missing --settings build_type=${{ matrix.configuration }} --profile:build default --profile:host default
 | 
			
		||||
      - 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)
 | 
			
		||||
							
								
								
									
										89
									
								
								.github/workflows/windows.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								.github/workflows/windows.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
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]
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
 | 
			
		||||
  test:
 | 
			
		||||
    strategy:
 | 
			
		||||
      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.0'
 | 
			
		||||
      - 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 RocksDB
 | 
			
		||||
        run: conan export external/rocksdb
 | 
			
		||||
      - 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
 | 
			
		||||
							
								
								
									
										169
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						
									
										169
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							@@ -1,169 +0,0 @@
 | 
			
		||||
# 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
 | 
			
		||||
							
								
								
									
										460
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										460
									
								
								.travis.yml
									
									
									
									
									
								
							@@ -1,460 +0,0 @@
 | 
			
		||||
# 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
 | 
			
		||||
							
								
								
									
										351
									
								
								BUILD.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										351
									
								
								BUILD.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,351 @@
 | 
			
		||||
## 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
 | 
			
		||||
 | 
			
		||||
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 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
 | 
			
		||||
 | 
			
		||||
To build this package, you will need Python (>= 3.7),
 | 
			
		||||
[Conan][] (>= 1.52), and [CMake][] (>= 3.16).
 | 
			
		||||
If you are unfamiliar with Conan,
 | 
			
		||||
there is a crash course at the end of this document.
 | 
			
		||||
 | 
			
		||||
[Conan]: https://conan.io/downloads.html
 | 
			
		||||
[CMake]: https://cmake.org/download/
 | 
			
		||||
 | 
			
		||||
You'll need to compile in the C++20 dialect:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan profile update settings.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
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 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:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan export external/rocksdb
 | 
			
		||||
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:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan export external/rocksdb
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Here we explain the individual steps:
 | 
			
		||||
 | 
			
		||||
1. Export our [Conan recipe for RocksDB](./external/rocksdb).
 | 
			
		||||
 | 
			
		||||
    It builds version 6.27.3, which, as of July 8, 2022,
 | 
			
		||||
    is not available in [Conan Center](https://conan.io/center/rocksdb).
 | 
			
		||||
 | 
			
		||||
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`.
 | 
			
		||||
 | 
			
		||||
5. 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].
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Troubleshooting
 | 
			
		||||
 | 
			
		||||
If you get a linker error like the one below 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`.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
/usr/bin/ld.gold: error: /home/username/.conan/data/boost/1.77.0/_/_/package/dc8aedd23a0f0a773a5fcdcfe1ae3e89c4205978/lib/libboost_container.a(alloc_lib.o): requires unsupported dynamic reloc 11; recompile with -fPIC
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 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.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 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 [profile][profile].
 | 
			
		||||
**All we must do to properly configure Conan is edit and pass the profile.**
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[1]: https://github.com/conan-io/conan-center-index/issues/13168
 | 
			
		||||
[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
 | 
			
		||||
@@ -1,62 +0,0 @@
 | 
			
		||||
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})
 | 
			
		||||
@@ -1,18 +0,0 @@
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
@@ -135,8 +135,8 @@ target_link_libraries (xrpl_core
 | 
			
		||||
    OpenSSL::Crypto
 | 
			
		||||
    Ripple::boost
 | 
			
		||||
    Ripple::syslibs
 | 
			
		||||
    NIH::secp256k1
 | 
			
		||||
    NIH::ed25519-donna
 | 
			
		||||
    secp256k1::secp256k1
 | 
			
		||||
    ed25519::ed25519
 | 
			
		||||
    date::date
 | 
			
		||||
    Ripple::opts)
 | 
			
		||||
#[=================================[
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,13 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   docs target (optional)
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
# Early return if the `docs` directory is missing,
 | 
			
		||||
# e.g. when we are building a Conan package.
 | 
			
		||||
if(NOT EXISTS docs)
 | 
			
		||||
  return()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if (tests)
 | 
			
		||||
  find_package (Doxygen)
 | 
			
		||||
  if (NOT TARGET Doxygen::doxygen)
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@
 | 
			
		||||
 | 
			
		||||
install (
 | 
			
		||||
  TARGETS
 | 
			
		||||
    ed25519-donna
 | 
			
		||||
    common
 | 
			
		||||
    opts
 | 
			
		||||
    ripple_syslibs
 | 
			
		||||
@@ -16,17 +15,6 @@ 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::
 | 
			
		||||
 
 | 
			
		||||
@@ -35,17 +35,10 @@ target_link_libraries (opts
 | 
			
		||||
    $<$<BOOL:${profile}>:-pg>
 | 
			
		||||
    $<$<AND:$<BOOL:${is_gcc}>,$<BOOL:${profile}>>:-p>)
 | 
			
		||||
 | 
			
		||||
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})
 | 
			
		||||
if(jemalloc)
 | 
			
		||||
  find_package(jemalloc REQUIRED)
 | 
			
		||||
  target_compile_definitions(opts INTERFACE PROFILE_JEMALLOC)
 | 
			
		||||
  target_link_libraries(opts INTERFACE jemalloc::jemalloc)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if (san)
 | 
			
		||||
 
 | 
			
		||||
@@ -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 ed25519-donna pbufs xrpl_core rippled)
 | 
			
		||||
  foreach (_target secp256k1::secp256k1 ed25519::ed25519 pbufs xrpl_core rippled)
 | 
			
		||||
    get_target_property (_type ${_target} TYPE)
 | 
			
		||||
    if(_type STREQUAL "INTERFACE_LIBRARY")
 | 
			
		||||
      continue()
 | 
			
		||||
 
 | 
			
		||||
@@ -1,33 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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)
 | 
			
		||||
@@ -2,6 +2,12 @@
 | 
			
		||||
   package/container targets - (optional)
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
# Early return if the `containers` directory is missing,
 | 
			
		||||
# e.g. when we are building a Conan package.
 | 
			
		||||
if(NOT EXISTS containers)
 | 
			
		||||
  return()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if (is_root_project)
 | 
			
		||||
  if (NOT DOCKER)
 | 
			
		||||
    find_program (DOCKER docker)
 | 
			
		||||
@@ -16,7 +22,6 @@ 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
 | 
			
		||||
@@ -62,8 +67,6 @@ 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
 | 
			
		||||
        "$<$<BOOL:${map_user}>:--volume=/etc/passwd:/etc/passwd;--volume=/etc/group:/etc/group;--user=${DOCKER_USER_ID}:${DOCKER_GROUP_ID}>"
 | 
			
		||||
@@ -137,8 +140,6 @@ 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
 | 
			
		||||
        "$<$<BOOL:${map_user}>:--volume=/etc/passwd:/etc/passwd;--volume=/etc/group:/etc/group;--user=${DOCKER_USER_ID}:${DOCKER_GROUP_ID}>"
 | 
			
		||||
 
 | 
			
		||||
@@ -10,12 +10,7 @@ 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)
 | 
			
		||||
if (is_multiconfig STREQUAL "NOTFOUND")
 | 
			
		||||
  if (${CMAKE_GENERATOR} STREQUAL "Xcode" OR ${CMAKE_GENERATOR} MATCHES "^Visual Studio")
 | 
			
		||||
    set (is_multiconfig TRUE)
 | 
			
		||||
  endif ()
 | 
			
		||||
endif ()
 | 
			
		||||
get_property(is_multiconfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
 | 
			
		||||
 | 
			
		||||
set (CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
 | 
			
		||||
if (NOT is_multiconfig)
 | 
			
		||||
@@ -49,9 +44,6 @@ 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)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,49 +1,3 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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
 | 
			
		||||
@@ -55,11 +9,12 @@ 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(is_xcode)
 | 
			
		||||
if(XCODE)
 | 
			
		||||
  target_include_directories(ripple_boost BEFORE INTERFACE ${Boost_INCLUDE_DIRS})
 | 
			
		||||
  target_compile_options(ripple_boost INTERFACE --system-header-prefix="boost/")
 | 
			
		||||
else()
 | 
			
		||||
 
 | 
			
		||||
@@ -1,28 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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)
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,47 +0,0 @@
 | 
			
		||||
# - 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)
 | 
			
		||||
@@ -1,22 +0,0 @@
 | 
			
		||||
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)
 | 
			
		||||
@@ -1,24 +0,0 @@
 | 
			
		||||
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)
 | 
			
		||||
@@ -1,24 +0,0 @@
 | 
			
		||||
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)
 | 
			
		||||
@@ -1,24 +0,0 @@
 | 
			
		||||
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)
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
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)
 | 
			
		||||
@@ -1,24 +0,0 @@
 | 
			
		||||
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)
 | 
			
		||||
@@ -1,163 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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)
 | 
			
		||||
@@ -1,79 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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)
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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 ()
 | 
			
		||||
@@ -1,48 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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 ()
 | 
			
		||||
@@ -1,70 +0,0 @@
 | 
			
		||||
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()
 | 
			
		||||
@@ -1,155 +1,22 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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.
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
find_package(Protobuf 3.8)
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
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 (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
 | 
			
		||||
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
 | 
			
		||||
  PUBLIC
 | 
			
		||||
    $<$<BOOL:${is_xcode}>:
 | 
			
		||||
    $<$<BOOL:${XCODE}>:
 | 
			
		||||
      --system-header-prefix="google/protobuf"
 | 
			
		||||
      -Wno-deprecated-dynamic-exception-spec
 | 
			
		||||
    >)
 | 
			
		||||
add_library (Ripple::pbufs ALIAS pbufs)
 | 
			
		||||
target_link_libraries (ripple_libs INTERFACE Ripple::pbufs)
 | 
			
		||||
exclude_if_included (pbufs)
 | 
			
		||||
    >
 | 
			
		||||
)
 | 
			
		||||
add_library(Ripple::pbufs ALIAS pbufs)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,177 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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)
 | 
			
		||||
@@ -1,58 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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()
 | 
			
		||||
@@ -1,77 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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)
 | 
			
		||||
@@ -1,165 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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)
 | 
			
		||||
@@ -1,93 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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})
 | 
			
		||||
@@ -1,167 +0,0 @@
 | 
			
		||||
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()
 | 
			
		||||
@@ -1,18 +0,0 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   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 ()
 | 
			
		||||
@@ -1,319 +1,15 @@
 | 
			
		||||
 | 
			
		||||
# 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 ()
 | 
			
		||||
find_package(gRPC 1.23)
 | 
			
		||||
 | 
			
		||||
#[=================================[
 | 
			
		||||
   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)
 | 
			
		||||
@@ -324,10 +20,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
 | 
			
		||||
@@ -345,20 +41,22 @@ 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 protobuf::libprotobuf "gRPC::grpc++${grpc_suffix}")
 | 
			
		||||
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
 | 
			
		||||
  "gRPC::grpc++"
 | 
			
		||||
  # libgrpc is missing references.
 | 
			
		||||
  absl::random_random
 | 
			
		||||
)
 | 
			
		||||
target_compile_options(grpc_pbufs
 | 
			
		||||
  PRIVATE
 | 
			
		||||
    $<$<BOOL:${MSVC}>:-wd4065>
 | 
			
		||||
    $<$<NOT:$<BOOL:${MSVC}>>:-Wno-deprecated-declarations>
 | 
			
		||||
  PUBLIC
 | 
			
		||||
    $<$<BOOL:${MSVC}>:-wd4996>
 | 
			
		||||
    $<$<BOOL:${is_xcode}>:
 | 
			
		||||
    $<$<BOOL:${XCODE}>:
 | 
			
		||||
      --system-header-prefix="google/protobuf"
 | 
			
		||||
      -Wno-deprecated-dynamic-exception-spec
 | 
			
		||||
    >)
 | 
			
		||||
add_library (Ripple::grpc_pbufs ALIAS grpc_pbufs)
 | 
			
		||||
target_link_libraries (ripple_libs INTERFACE Ripple::grpc_pbufs)
 | 
			
		||||
exclude_if_included (grpc_pbufs)
 | 
			
		||||
add_library(Ripple::grpc_pbufs ALIAS grpc_pbufs)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +0,0 @@
 | 
			
		||||
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()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1,71 +0,0 @@
 | 
			
		||||
// 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
 | 
			
		||||
 | 
			
		||||
@@ -1,49 +0,0 @@
 | 
			
		||||
# 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)
 | 
			
		||||
 | 
			
		||||
@@ -1,10 +1,17 @@
 | 
			
		||||
cmake_minimum_required (VERSION 3.16)
 | 
			
		||||
cmake_minimum_required(VERSION 3.16)
 | 
			
		||||
 | 
			
		||||
if (POLICY CMP0074)
 | 
			
		||||
if(POLICY CMP0074)
 | 
			
		||||
  cmake_policy(SET CMP0074 NEW)
 | 
			
		||||
endif ()
 | 
			
		||||
endif()
 | 
			
		||||
if(POLICY CMP0077)
 | 
			
		||||
  cmake_policy(SET CMP0077 NEW)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
project (rippled)
 | 
			
		||||
# 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")
 | 
			
		||||
 | 
			
		||||
project(rippled)
 | 
			
		||||
set(CMAKE_CXX_EXTENSIONS OFF)
 | 
			
		||||
set(CMAKE_CXX_STANDARD 20)
 | 
			
		||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
			
		||||
@@ -21,15 +28,12 @@ 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)
 | 
			
		||||
@@ -42,7 +46,6 @@ 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
 | 
			
		||||
@@ -58,21 +61,57 @@ include(RippledInterface)
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
include(deps/Boost)
 | 
			
		||||
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)
 | 
			
		||||
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/Protobuf)
 | 
			
		||||
include(deps/gRPC)
 | 
			
		||||
include(deps/cassandra)
 | 
			
		||||
include(deps/Postgres)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(ripple_libs INTERFACE
 | 
			
		||||
  ed25519::ed25519
 | 
			
		||||
  LibArchive::LibArchive
 | 
			
		||||
  lz4::lz4
 | 
			
		||||
  nudb::core
 | 
			
		||||
  OpenSSL::Crypto
 | 
			
		||||
  OpenSSL::SSL
 | 
			
		||||
  Ripple::grpc_pbufs
 | 
			
		||||
  Ripple::pbufs
 | 
			
		||||
  secp256k1::secp256k1
 | 
			
		||||
  soci::soci
 | 
			
		||||
  SQLite::SQLite3
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if(reporting)
 | 
			
		||||
  find_package(cassandra-cpp-driver REQUIRED)
 | 
			
		||||
  find_package(PostgreSQL REQUIRED)
 | 
			
		||||
  target_link_libraries(ripple_libs INTERFACE
 | 
			
		||||
    cassandra-cpp-driver::cassandra-cpp-driver
 | 
			
		||||
    PostgreSQL::PostgreSQL
 | 
			
		||||
  )
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										149
									
								
								conanfile.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								conanfile.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,149 @@
 | 
			
		||||
from conans 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.44.0',
 | 
			
		||||
        '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/CMake/*', '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):
 | 
			
		||||
        self.cpp_info.libs = [
 | 
			
		||||
            'libxrpl_core.a',
 | 
			
		||||
            'libed25519-donna.a',
 | 
			
		||||
            'libsecp256k1.a',
 | 
			
		||||
        ]
 | 
			
		||||
							
								
								
									
										193
									
								
								external/rocksdb/conanfile.py
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								external/rocksdb/conanfile.py
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,193 @@
 | 
			
		||||
import os
 | 
			
		||||
import shutil
 | 
			
		||||
from conans import ConanFile, CMake
 | 
			
		||||
from conan.tools import microsoft as ms
 | 
			
		||||
 | 
			
		||||
class RocksDB(ConanFile):
 | 
			
		||||
    name = 'rocksdb'
 | 
			
		||||
    version = '6.27.3'
 | 
			
		||||
 | 
			
		||||
    license = ('GPL-2.0-only', 'Apache-2.0')
 | 
			
		||||
    url = 'https://github.com/conan-io/conan-center-index'
 | 
			
		||||
    description = 'A library that provides an embeddable, persistent key-value store for fast storage'
 | 
			
		||||
    topics = ('rocksdb', 'database', 'leveldb', 'facebook', 'key-value')
 | 
			
		||||
 | 
			
		||||
    settings = 'os', 'compiler', 'build_type', 'arch'
 | 
			
		||||
    options = {
 | 
			
		||||
        'enable_sse': [False, 'sse42', 'avx2'],
 | 
			
		||||
        'fPIC': [True, False],
 | 
			
		||||
        'lite': [True, False],
 | 
			
		||||
        'shared': [True, False],
 | 
			
		||||
        'use_rtti': [True, False],
 | 
			
		||||
        'with_gflags': [True, False],
 | 
			
		||||
        'with_jemalloc': [True, False],
 | 
			
		||||
        'with_lz4': [True, False],
 | 
			
		||||
        'with_snappy': [True, False],
 | 
			
		||||
        'with_tbb': [True, False],
 | 
			
		||||
        'with_zlib': [True, False],
 | 
			
		||||
        'with_zstd': [True, False],
 | 
			
		||||
    }
 | 
			
		||||
    default_options = {
 | 
			
		||||
        'enable_sse': False,
 | 
			
		||||
        'fPIC': True,
 | 
			
		||||
        'lite': False,
 | 
			
		||||
        'shared': False,
 | 
			
		||||
        'use_rtti': False,
 | 
			
		||||
        'with_gflags': False,
 | 
			
		||||
        'with_jemalloc': False,
 | 
			
		||||
        'with_lz4': False,
 | 
			
		||||
        'with_snappy': False,
 | 
			
		||||
        'with_tbb': False,
 | 
			
		||||
        'with_zlib': False,
 | 
			
		||||
        'with_zstd': False,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    def requirements(self):
 | 
			
		||||
        if self.options.with_gflags:
 | 
			
		||||
            self.requires('gflags/2.2.2')
 | 
			
		||||
        if self.options.with_jemalloc:
 | 
			
		||||
            self.requires('jemalloc/5.2.1')
 | 
			
		||||
        if self.options.with_lz4:
 | 
			
		||||
            self.requires('lz4/1.9.3')
 | 
			
		||||
        if self.options.with_snappy:
 | 
			
		||||
            self.requires('snappy/1.1.9')
 | 
			
		||||
        if self.options.with_tbb:
 | 
			
		||||
            self.requires('onetbb/2020.3')
 | 
			
		||||
        if self.options.with_zlib:
 | 
			
		||||
            self.requires('zlib/1.2.11')
 | 
			
		||||
        if self.options.with_zstd:
 | 
			
		||||
            self.requires('zstd/1.5.2')
 | 
			
		||||
 | 
			
		||||
    def config_options(self):
 | 
			
		||||
        if self.settings.os == 'Windows':
 | 
			
		||||
            del self.options.fPIC
 | 
			
		||||
 | 
			
		||||
    def configure(self):
 | 
			
		||||
        if self.options.shared:
 | 
			
		||||
            del self.options.fPIC
 | 
			
		||||
 | 
			
		||||
    generators = 'cmake', 'cmake_find_package'
 | 
			
		||||
 | 
			
		||||
    scm = {
 | 
			
		||||
        'type': 'git',
 | 
			
		||||
        'url': 'https://github.com/facebook/rocksdb.git',
 | 
			
		||||
        'revision': 'v6.27.3',
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    exports_sources = 'thirdparty.inc'
 | 
			
		||||
    # For out-of-source build.
 | 
			
		||||
    no_copy_source = True
 | 
			
		||||
 | 
			
		||||
    _cmake = None
 | 
			
		||||
 | 
			
		||||
    def _configure_cmake(self):
 | 
			
		||||
        if self._cmake:
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        self._cmake = CMake(self)
 | 
			
		||||
 | 
			
		||||
        self._cmake.definitions['CMAKE_POSITION_INDEPENDENT_CODE'] = True
 | 
			
		||||
 | 
			
		||||
        self._cmake.definitions['DISABLE_STALL_NOTIF'] = False
 | 
			
		||||
        self._cmake.definitions['FAIL_ON_WARNINGS'] = False
 | 
			
		||||
        self._cmake.definitions['OPTDBG'] = True
 | 
			
		||||
        self._cmake.definitions['WITH_TESTS'] = False
 | 
			
		||||
        self._cmake.definitions['WITH_TOOLS'] = False
 | 
			
		||||
 | 
			
		||||
        self._cmake.definitions['WITH_GFLAGS'] = self.options.with_gflags
 | 
			
		||||
        self._cmake.definitions['WITH_JEMALLOC'] = self.options.with_jemalloc
 | 
			
		||||
        self._cmake.definitions['WITH_LZ4'] = self.options.with_lz4
 | 
			
		||||
        self._cmake.definitions['WITH_SNAPPY'] = self.options.with_snappy
 | 
			
		||||
        self._cmake.definitions['WITH_TBB'] = self.options.with_tbb
 | 
			
		||||
        self._cmake.definitions['WITH_ZLIB'] = self.options.with_zlib
 | 
			
		||||
        self._cmake.definitions['WITH_ZSTD'] = self.options.with_zstd
 | 
			
		||||
 | 
			
		||||
        self._cmake.definitions['USE_RTTI'] = self.options.use_rtti
 | 
			
		||||
        self._cmake.definitions['ROCKSDB_LITE'] = self.options.lite
 | 
			
		||||
        self._cmake.definitions['ROCKSDB_INSTALL_ON_WINDOWS'] = (
 | 
			
		||||
            self.settings.os == 'Windows'
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if not self.options.enable_sse:
 | 
			
		||||
            self._cmake.definitions['PORTABLE'] = True
 | 
			
		||||
            self._cmake.definitions['FORCE_SSE42'] = False
 | 
			
		||||
        elif self.options.enable_sse == 'sse42':
 | 
			
		||||
            self._cmake.definitions['PORTABLE'] = True
 | 
			
		||||
            self._cmake.definitions['FORCE_SSE42'] = True
 | 
			
		||||
        elif self.options.enable_sse == 'avx2':
 | 
			
		||||
            self._cmake.definitions['PORTABLE'] = False
 | 
			
		||||
            self._cmake.definitions['FORCE_SSE42'] = False
 | 
			
		||||
 | 
			
		||||
        self._cmake.definitions['WITH_ASAN'] = False
 | 
			
		||||
        self._cmake.definitions['WITH_BZ2'] = False
 | 
			
		||||
        self._cmake.definitions['WITH_JNI'] = False
 | 
			
		||||
        self._cmake.definitions['WITH_LIBRADOS'] = False
 | 
			
		||||
        if ms.is_msvc(self):
 | 
			
		||||
            self._cmake.definitions['WITH_MD_LIBRARY'] = (
 | 
			
		||||
                ms.msvc_runtime_flag(self).startswith('MD')
 | 
			
		||||
            )
 | 
			
		||||
            self._cmake.definitions['WITH_RUNTIME_DEBUG'] = (
 | 
			
		||||
                ms.msvc_runtime_flag(self).endswith('d')
 | 
			
		||||
            )
 | 
			
		||||
        self._cmake.definitions['WITH_NUMA'] = False
 | 
			
		||||
        self._cmake.definitions['WITH_TSAN'] = False
 | 
			
		||||
        self._cmake.definitions['WITH_UBSAN'] = False
 | 
			
		||||
        self._cmake.definitions['WITH_WINDOWS_UTF8_FILENAMES'] = False
 | 
			
		||||
        self._cmake.definitions['WITH_XPRESS'] = False
 | 
			
		||||
        self._cmake.definitions['WITH_FALLOCATE'] = True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def build(self):
 | 
			
		||||
        if ms.is_msvc(self):
 | 
			
		||||
            file = os.path.join(
 | 
			
		||||
                self.recipe_folder, '..', 'export_source', 'thirdparty.inc'
 | 
			
		||||
            )
 | 
			
		||||
            shutil.copy(file, self.build_folder)
 | 
			
		||||
        self._configure_cmake()
 | 
			
		||||
        self._cmake.configure()
 | 
			
		||||
        self._cmake.build()
 | 
			
		||||
 | 
			
		||||
    def package(self):
 | 
			
		||||
        self._configure_cmake()
 | 
			
		||||
        self._cmake.install()
 | 
			
		||||
 | 
			
		||||
    def package_info(self):
 | 
			
		||||
        self.cpp_info.filenames['cmake_find_package'] = 'RocksDB'
 | 
			
		||||
        self.cpp_info.filenames['cmake_find_package_multi'] = 'RocksDB'
 | 
			
		||||
        self.cpp_info.set_property('cmake_file_name', 'RocksDB')
 | 
			
		||||
 | 
			
		||||
        self.cpp_info.names['cmake_find_package'] = 'RocksDB'
 | 
			
		||||
        self.cpp_info.names['cmake_find_package_multi'] = 'RocksDB'
 | 
			
		||||
 | 
			
		||||
        self.cpp_info.components['librocksdb'].names['cmake_find_package'] = 'rocksdb'
 | 
			
		||||
        self.cpp_info.components['librocksdb'].names['cmake_find_package_multi'] = 'rocksdb'
 | 
			
		||||
        self.cpp_info.components['librocksdb'].set_property(
 | 
			
		||||
            'cmake_target_name', 'RocksDB::rocksdb'
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.cpp_info.components['librocksdb'].libs = ['rocksdb']
 | 
			
		||||
 | 
			
		||||
        if self.settings.os == "Windows":
 | 
			
		||||
            self.cpp_info.components["librocksdb"].system_libs = ["shlwapi", "rpcrt4"]
 | 
			
		||||
            if self.options.shared:
 | 
			
		||||
                self.cpp_info.components["librocksdb"].defines = ["ROCKSDB_DLL"]
 | 
			
		||||
        elif self.settings.os in ["Linux", "FreeBSD"]:
 | 
			
		||||
            self.cpp_info.components["librocksdb"].system_libs = ["pthread", "m"]
 | 
			
		||||
 | 
			
		||||
        if self.options.lite:
 | 
			
		||||
            self.cpp_info.components["librocksdb"].defines.append("ROCKSDB_LITE")
 | 
			
		||||
 | 
			
		||||
        if self.options.with_gflags:
 | 
			
		||||
            self.cpp_info.components["librocksdb"].requires.append("gflags::gflags")
 | 
			
		||||
        if self.options.with_jemalloc:
 | 
			
		||||
            self.cpp_info.components["librocksdb"].requires.append("jemalloc::jemalloc")
 | 
			
		||||
        if self.options.with_lz4:
 | 
			
		||||
            self.cpp_info.components["librocksdb"].requires.append("lz4::lz4")
 | 
			
		||||
        if self.options.with_snappy:
 | 
			
		||||
            self.cpp_info.components["librocksdb"].requires.append("snappy::snappy")
 | 
			
		||||
        if self.options.with_tbb:
 | 
			
		||||
            self.cpp_info.components["librocksdb"].requires.append("onetbb::onetbb")
 | 
			
		||||
        if self.options.with_zlib:
 | 
			
		||||
            self.cpp_info.components["librocksdb"].requires.append("zlib::zlib")
 | 
			
		||||
        if self.options.with_zstd:
 | 
			
		||||
            self.cpp_info.components["librocksdb"].requires.append("zstd::zstd")
 | 
			
		||||
							
								
								
									
										62
									
								
								external/rocksdb/thirdparty.inc
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								external/rocksdb/thirdparty.inc
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
if(WITH_GFLAGS)
 | 
			
		||||
  # Config with namespace available since gflags 2.2.2
 | 
			
		||||
  find_package(gflags REQUIRED)
 | 
			
		||||
  set(GFLAGS_LIB gflags::gflags)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS ${GFLAGS_LIB})
 | 
			
		||||
  add_definitions(-DGFLAGS=1)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(WITH_SNAPPY)
 | 
			
		||||
  find_package(Snappy REQUIRED)
 | 
			
		||||
  add_definitions(-DSNAPPY)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS Snappy::snappy)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(WITH_LZ4)
 | 
			
		||||
  find_package(lz4 REQUIRED)
 | 
			
		||||
  add_definitions(-DLZ4)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS lz4::lz4)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(WITH_ZLIB)
 | 
			
		||||
  find_package(ZLIB REQUIRED)
 | 
			
		||||
  add_definitions(-DZLIB)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS ZLIB::ZLIB)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
option(WITH_BZ2 "build with bzip2" OFF)
 | 
			
		||||
if(WITH_BZ2)
 | 
			
		||||
  find_package(BZip2 REQUIRED)
 | 
			
		||||
  add_definitions(-DBZIP2)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS BZip2::BZip2)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(WITH_ZSTD)
 | 
			
		||||
  find_package(zstd REQUIRED)
 | 
			
		||||
  add_definitions(-DZSTD)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS zstd::zstd)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# ================================================== XPRESS ==================================================
 | 
			
		||||
# This makes use of built-in Windows API, no additional includes, links to a system lib
 | 
			
		||||
 | 
			
		||||
if(WITH_XPRESS)
 | 
			
		||||
  message(STATUS "XPRESS is enabled")
 | 
			
		||||
  add_definitions(-DXPRESS)
 | 
			
		||||
  # We are using the implementation provided by the system
 | 
			
		||||
  list(APPEND SYSTEM_LIBS Cabinet.lib)
 | 
			
		||||
else()
 | 
			
		||||
  message(STATUS "XPRESS is disabled")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# ================================================== JEMALLOC ==================================================
 | 
			
		||||
if(WITH_JEMALLOC)
 | 
			
		||||
  message(STATUS "JEMALLOC library is enabled")
 | 
			
		||||
  add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_EXPORT= -DJEMALLOC_NO_RENAME)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS jemalloc::jemalloc)
 | 
			
		||||
  set(ARTIFACT_SUFFIX "_je")
 | 
			
		||||
 | 
			
		||||
else ()
 | 
			
		||||
  set(ARTIFACT_SUFFIX "")
 | 
			
		||||
  message(STATUS "JEMALLOC library is disabled")
 | 
			
		||||
endif ()
 | 
			
		||||
							
								
								
									
										48
									
								
								src/ed25519-donna/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/ed25519-donna/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
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}"
 | 
			
		||||
)
 | 
			
		||||
@@ -23,7 +23,8 @@
 | 
			
		||||
#include <ripple/protocol/digest.h>
 | 
			
		||||
#include <ripple/protocol/impl/secp256k1.h>
 | 
			
		||||
#include <boost/multiprecision/cpp_int.hpp>
 | 
			
		||||
#include <ed25519-donna/ed25519.h>
 | 
			
		||||
#include <ed25519.h>
 | 
			
		||||
#include <type_traits>
 | 
			
		||||
 | 
			
		||||
namespace ripple {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@
 | 
			
		||||
#include <ripple/protocol/digest.h>
 | 
			
		||||
#include <ripple/protocol/impl/secp256k1.h>
 | 
			
		||||
#include <cstring>
 | 
			
		||||
#include <ed25519-donna/ed25519.h>
 | 
			
		||||
#include <ed25519.h>
 | 
			
		||||
 | 
			
		||||
namespace ripple {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@
 | 
			
		||||
#include <ripple/rpc/handlers/WalletPropose.h>
 | 
			
		||||
#include <ripple/rpc/impl/RPCHelpers.h>
 | 
			
		||||
#include <cmath>
 | 
			
		||||
#include <ed25519-donna/ed25519.h>
 | 
			
		||||
#include <ed25519.h>
 | 
			
		||||
#include <map>
 | 
			
		||||
 | 
			
		||||
namespace ripple {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										52
									
								
								src/secp256k1/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/secp256k1/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
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}"
 | 
			
		||||
)
 | 
			
		||||
@@ -226,13 +226,15 @@ public:
 | 
			
		||||
                // SOCI requires boost::optional (not std::optional) as
 | 
			
		||||
                // parameters.
 | 
			
		||||
                boost::optional<std::int32_t> ig;
 | 
			
		||||
                boost::optional<std::uint32_t> uig;
 | 
			
		||||
                // Known bug: https://github.com/SOCI/soci/issues/926
 | 
			
		||||
                // boost::optional<std::uint32_t> uig;
 | 
			
		||||
                uint32_t uig = 0;
 | 
			
		||||
                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&)
 | 
			
		||||
@@ -357,18 +359,13 @@ public:
 | 
			
		||||
            bfs::remove(dbPath);
 | 
			
		||||
    }
 | 
			
		||||
    void
 | 
			
		||||
    testSQLite()
 | 
			
		||||
    run() override
 | 
			
		||||
    {
 | 
			
		||||
        testSQLiteFileNames();
 | 
			
		||||
        testSQLiteSession();
 | 
			
		||||
        testSQLiteSelect();
 | 
			
		||||
        testSQLiteDeleteWithSubselect();
 | 
			
		||||
    }
 | 
			
		||||
    void
 | 
			
		||||
    run() override
 | 
			
		||||
    {
 | 
			
		||||
        testSQLite();
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
BEAST_DEFINE_TESTSUITE(SociDB, core, ripple);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user