From f0b9506617416766c605fccfde051660076de16d Mon Sep 17 00:00:00 2001 From: Brad Chase Date: Fri, 2 Mar 2018 14:18:03 -0500 Subject: [PATCH] Remove scons support --- .travis.yml | 10 +- Builds/ArchLinux/PKGBUILD | 38 - Builds/Docker/Dockerfile | 30 - Builds/Docker/Dockerfile-testnet | 23 - Builds/Docker/build-ci.sh | 13 - Builds/Docker/push-to-hub.sh | 16 - Builds/Eclipse/README.md | 31 - Builds/Eclipse/debug.png | Bin 18404 -> 0 bytes Builds/Eclipse/scons.png | Bin 17625 -> 0 bytes .../Fedora/install_rippled_depends_fedora.sh | 22 - Builds/QtCreator/.gitignore | 5 - Builds/QtCreator/rippled.pro | 112 - Builds/Test.py | 234 +- Builds/Ubuntu/build_clang_libs.sh | 82 - Builds/Ubuntu/install_boost.sh | 39 - .../Ubuntu/install_rippled_depends_ubuntu.sh | 47 - Builds/VisualStudio2015/.gitattributes | 4 - Builds/VisualStudio2015/README.md | 255 - Builds/VisualStudio2015/RippleD.vcxproj | 5684 --------------- .../VisualStudio2015/RippleD.vcxproj.filters | 6466 ----------------- .../images/NoDebugHeapPropPage.png | Bin 34285 -> 0 bytes .../images/VS2015x64IncludeDirs.png | Bin 68334 -> 0 bytes .../images/VS2015x64LibraryDirs.png | Bin 68136 -> 0 bytes .../images/VS2015x64Properties.png | Bin 15609 -> 0 bytes .../images/VSCommandArgsPropPage.png | Bin 19676 -> 0 bytes Builds/VisualStudio2015/ripple.sln | 36 - Builds/build_all.sh | 1 - Builds/linux/README.md | 147 + Builds/travis/clang.boost.patch | 13 - Builds/travis/static_error.boost.patch | 10 - CMakeLists.txt | 97 +- README.md | 2 +- SConstruct | 1314 ---- appveyor.yml | 53 +- bin/ci/ubuntu/build-and-test.sh | 131 +- bin/ci/windows/install-dependencies.bat | 13 - circle.yml | 29 - src/ripple/beast/site_scons/Beast.py | 188 - .../beast/site_scons/site_tools/Protoc.py | 97 - .../beast/site_scons/site_tools/VSProject.py | 894 --- src/ripple/core/SociDB.h | 5 - src/ripple/site_scons/scons_to_ninja.py | 84 - 42 files changed, 312 insertions(+), 15913 deletions(-) delete mode 100644 Builds/ArchLinux/PKGBUILD delete mode 100644 Builds/Docker/Dockerfile delete mode 100644 Builds/Docker/Dockerfile-testnet delete mode 100755 Builds/Docker/build-ci.sh delete mode 100755 Builds/Docker/push-to-hub.sh delete mode 100644 Builds/Eclipse/README.md delete mode 100644 Builds/Eclipse/debug.png delete mode 100644 Builds/Eclipse/scons.png delete mode 100755 Builds/Fedora/install_rippled_depends_fedora.sh delete mode 100644 Builds/QtCreator/.gitignore delete mode 100644 Builds/QtCreator/rippled.pro delete mode 100755 Builds/Ubuntu/build_clang_libs.sh delete mode 100755 Builds/Ubuntu/install_boost.sh delete mode 100755 Builds/Ubuntu/install_rippled_depends_ubuntu.sh delete mode 100644 Builds/VisualStudio2015/.gitattributes delete mode 100644 Builds/VisualStudio2015/README.md delete mode 100644 Builds/VisualStudio2015/RippleD.vcxproj delete mode 100644 Builds/VisualStudio2015/RippleD.vcxproj.filters delete mode 100644 Builds/VisualStudio2015/images/NoDebugHeapPropPage.png delete mode 100644 Builds/VisualStudio2015/images/VS2015x64IncludeDirs.png delete mode 100644 Builds/VisualStudio2015/images/VS2015x64LibraryDirs.png delete mode 100644 Builds/VisualStudio2015/images/VS2015x64Properties.png delete mode 100644 Builds/VisualStudio2015/images/VSCommandArgsPropPage.png delete mode 100644 Builds/VisualStudio2015/ripple.sln create mode 100644 Builds/linux/README.md delete mode 100644 Builds/travis/clang.boost.patch delete mode 100644 Builds/travis/static_error.boost.patch delete mode 100644 SConstruct delete mode 100644 bin/ci/windows/install-dependencies.bat delete mode 100644 circle.yml delete mode 100644 src/ripple/beast/site_scons/Beast.py delete mode 100644 src/ripple/beast/site_scons/site_tools/Protoc.py delete mode 100644 src/ripple/beast/site_scons/site_tools/VSProject.py delete mode 100644 src/ripple/site_scons/scons_to_ninja.py diff --git a/.travis.yml b/.travis.yml index 69ef6e1569..840eafca09 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,27 +34,27 @@ matrix: include: - compiler: gcc - env: GCC_VER=5 BUILD=cmake TARGET=debug + env: GCC_VER=5 TARGET=debug # - APP_ARGS="--unittest-jobs=2" # - compiler: gcc # env: GCC_VER=5 TARGET=debug.nounity # - compiler: gcc - # env: GCC_VER=5 BUILD=cmake TARGET=coverage PATH=$PWD/cmake/bin:$PATH + # env: GCC_VER=5 TARGET=coverage PATH=$PWD/cmake/bin:$PATH - compiler: clang - env: GCC_VER=5 BUILD=cmake TARGET=debug + env: GCC_VER=5 TARGET=debug # - compiler: clang # env: GCC_VER=5 TARGET=debug.nounity # The clang cmake builds do not link. # - compiler: clang - # env: GCC_VER=5 BUILD=cmake TARGET=debug + # env: GCC_VER=5 TARGET=debug CLANG_VER=3.8 PATH=$PWD/llvm-$LLVM_VERSION/bin:$PWD/cmake/bin:$PATH # - compiler: clang - # env: GCC_VER=5 BUILD=cmake TARGET=debug.nounity + # env: GCC_VER=5 TARGET=debug.nounity CLANG_VER=3.8 PATH=$PWD/llvm-$LLVM_VERSION/bin:$PWD/cmake/bin:$PATH cache: directories: diff --git a/Builds/ArchLinux/PKGBUILD b/Builds/ArchLinux/PKGBUILD deleted file mode 100644 index 384d982c64..0000000000 --- a/Builds/ArchLinux/PKGBUILD +++ /dev/null @@ -1,38 +0,0 @@ -# Maintainer: Roberto Catini - -pkgname=rippled -pkgrel=1 -pkgver=0 -pkgdesc="Ripple peer-to-peer network daemon" -arch=('i686' 'x86_64') -url="https://github.com/ripple/rippled" -license=('custom:ISC') -depends=('protobuf' 'openssl' 'boost-libs') -makedepends=('git' 'scons' 'boost') -backup=("etc/$pkgname/rippled.cfg") -source=("git://github.com/ripple/rippled.git#branch=master") -sha512sums=('SKIP') - -pkgver() { - cd "$srcdir/$pkgname" - git describe --long --tags | sed -r 's/([^-]*-g)/r\1/;s/-/./g' -} - -build() { - cd "$srcdir/$pkgname" - scons -} - -check() { - cd "$srcdir/$pkgname" - build/rippled --unittest -} - -package() { - cd "$srcdir/$pkgname" - install -D -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" - install -D build/rippled "$pkgdir/usr/bin/rippled" - install -D -m644 cfg/rippled-example.cfg "$pkgdir/etc/$pkgname/rippled.cfg" - mkdir -p "$pkgdir/var/lib/$pkgname/db" - mkdir -p "$pkgdir/var/log/$pkgname" -} diff --git a/Builds/Docker/Dockerfile b/Builds/Docker/Dockerfile deleted file mode 100644 index aeca3105d9..0000000000 --- a/Builds/Docker/Dockerfile +++ /dev/null @@ -1,30 +0,0 @@ -# rippled - -# use the ubuntu base image -FROM ubuntu -MAINTAINER Roberto Catini roberto.catini@gmail.com - -# make sure the package repository is up to date -RUN apt-get update -RUN apt-get -y upgrade - -# install the dependencies -RUN apt-get -y install git scons pkg-config protobuf-compiler libprotobuf-dev libssl-dev libboost1.55-all-dev - -# download source code from official repository -RUN git clone https://github.com/ripple/rippled.git src; cd src/; git checkout master - -# compile -RUN cd src/; scons build/rippled - -# move to root directory and strip -RUN cp src/build/rippled rippled; strip rippled - -# copy default config -RUN cp src/cfg/rippled-example.cfg rippled.cfg - -# clean source -RUN rm -r src - -# launch rippled when launching the container -ENTRYPOINT ./rippled diff --git a/Builds/Docker/Dockerfile-testnet b/Builds/Docker/Dockerfile-testnet deleted file mode 100644 index 3ac9a15216..0000000000 --- a/Builds/Docker/Dockerfile-testnet +++ /dev/null @@ -1,23 +0,0 @@ -FROM ubuntu -MAINTAINER Torrie Fischer - -RUN apt-get update -qq &&\ - apt-get install -qq software-properties-common &&\ - apt-add-repository -y ppa:ubuntu-toolchain-r/test &&\ - apt-add-repository -y ppa:afrank/boost &&\ - apt-get update -qq - -RUN apt-get purge -qq libboost1.48-dev &&\ - apt-get install -qq libprotobuf8 libboost1.57-all-dev - -RUN mkdir -p /srv/rippled/data - -VOLUME /srv/rippled/data/ - -ENTRYPOINT ["/srv/rippled/bin/rippled"] -CMD ["--conf", "/srv/rippled/data/rippled.cfg"] -EXPOSE 51235/udp -EXPOSE 5005/tcp - -ADD ./rippled.cfg /srv/rippled/data/rippled.cfg -ADD ./rippled /srv/rippled/bin/ diff --git a/Builds/Docker/build-ci.sh b/Builds/Docker/build-ci.sh deleted file mode 100755 index d7bccd43af..0000000000 --- a/Builds/Docker/build-ci.sh +++ /dev/null @@ -1,13 +0,0 @@ -set -e - -mkdir -p build/docker/ -cp cfg/rippled-example.cfg build/clang.debug/rippled build/docker/ -cp Builds/Docker/Dockerfile-testnet build/docker/Dockerfile -mv build/docker/rippled-example.cfg build/docker/rippled.cfg -strip build/docker/rippled -docker build -t ripple/rippled:$CIRCLE_SHA1 build/docker/ -docker tag ripple/rippled:$CIRCLE_SHA1 ripple/rippled:latest - -if [ -z "$CIRCLE_PR_NUMBER" ]; then - docker tag ripple/rippled:$CIRCLE_SHA1 ripple/rippled:$CIRCLE_BRANCH -fi diff --git a/Builds/Docker/push-to-hub.sh b/Builds/Docker/push-to-hub.sh deleted file mode 100755 index 45738c4c62..0000000000 --- a/Builds/Docker/push-to-hub.sh +++ /dev/null @@ -1,16 +0,0 @@ -set -e - -if [ -z "$DOCKER_EMAIL" -o -z "$DOCKER_USERNAME" -o -z "$DOCKER_PASSWORD" ];then - echo "Docker credentials are not set. Can't login to docker, no containers will be pushed." - exit 0 -fi - -if [ -n "$CIRCLE_PR_NUMBER" ]; then - echo "Not pushing results of a pull request build." - exit 0 -fi - -docker login -e $DOCKER_EMAIL -u $DOCKER_USERNAME -p $DOCKER_PASSWORD -docker push ripple/rippled:$CIRCLE_SHA1 -docker push ripple/rippled:$CIRCLE_BRANCH -docker push ripple/rippled:latest diff --git a/Builds/Eclipse/README.md b/Builds/Eclipse/README.md deleted file mode 100644 index fbadb8b123..0000000000 --- a/Builds/Eclipse/README.md +++ /dev/null @@ -1,31 +0,0 @@ -**Requirements** - -1. Java Runtime Environment (JRE) -2. Eclipse with CDT (tested on Luna): -http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/lunasr2 -3. Eclipse SCons plugin: http://sconsolidator.com/ -**WARNING**: by default the SCons plugin uses 16 threads. Go to -*Window->Preferences->SCons->Build Settings* in Eclipse and make it -use only 4-8 jobs(threads) or whatever you feel confortable with. It will -positively freeze your system if you run with 16 threads/jobs. - -![scons](scons.png) - -**Getting Started** - -After setting up Eclipse just do a File->New->Other... -Select: C/C++ / New SCons project from existing source -Point the importer to the folder where the SConstruct resides (the root -folder of your git workspace normally) - -**Build** - -Just hit Project->Build All in Eclipse to get started. And remember to not -let it run 16 threads! - -**Debug** - -Start a new Eclipse debug configuration and set binary to run to build/rippled -(assuming you have built it). - -![debug](debug.png) diff --git a/Builds/Eclipse/debug.png b/Builds/Eclipse/debug.png deleted file mode 100644 index 24e2ba8c91fff2eb83e24298996fbb1ad7c19496..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18404 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 KpUXO@geCw0!tt5_ diff --git a/Builds/Eclipse/scons.png b/Builds/Eclipse/scons.png deleted file mode 100644 index 84836a88fe6fe993534b86120497469ea5ab2013..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17625 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 G5}E)o+-@@f diff --git a/Builds/Fedora/install_rippled_depends_fedora.sh b/Builds/Fedora/install_rippled_depends_fedora.sh deleted file mode 100755 index 5803188aad..0000000000 --- a/Builds/Fedora/install_rippled_depends_fedora.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -# -# This scripts installs the dependencies needed by rippled. It should be run -# with sudo. -# - -if [ ! -f /etc/fedora-release ]; then - echo "This script is meant to be run on fedora" - exit 1 -fi - -fedora_release=$(grep -o '[0-9]*' /etc/fedora-release) - -if (( $(bc <<< "${fedora_release} < 22") )); then - echo "This script is meant to run on fedora 22 or greater" - exit 1 -fi - -yum -y update -yum -y group install "Development Tools" -yum -y install gcc-c++ scons openssl-devel openssl-static protobuf-devel protobuf-static boost-devel boost-static libstdc++-static diff --git a/Builds/QtCreator/.gitignore b/Builds/QtCreator/.gitignore deleted file mode 100644 index 20e0d48afd..0000000000 --- a/Builds/QtCreator/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# QTCreator - -Makefile -*.user - diff --git a/Builds/QtCreator/rippled.pro b/Builds/QtCreator/rippled.pro deleted file mode 100644 index 4c4a96b3cf..0000000000 --- a/Builds/QtCreator/rippled.pro +++ /dev/null @@ -1,112 +0,0 @@ - -# Ripple protocol buffers - -PROTOS = ../../src/ripple_data/protocol/ripple.proto -PROTOS_DIR = ../../build/proto - -# Google Protocol Buffers support - -protobuf_h.name = protobuf header -protobuf_h.input = PROTOS -protobuf_h.output = $${PROTOS_DIR}/${QMAKE_FILE_BASE}.pb.h -protobuf_h.depends = ${QMAKE_FILE_NAME} -protobuf_h.commands = protoc --cpp_out=$${PROTOS_DIR} --proto_path=${QMAKE_FILE_PATH} ${QMAKE_FILE_NAME} -protobuf_h.variable_out = HEADERS -QMAKE_EXTRA_COMPILERS += protobuf_h - -protobuf_cc.name = protobuf implementation -protobuf_cc.input = PROTOS -protobuf_cc.output = $${PROTOS_DIR}/${QMAKE_FILE_BASE}.pb.cc -protobuf_cc.depends = $${PROTOS_DIR}/${QMAKE_FILE_BASE}.pb.h -protobuf_cc.commands = $$escape_expand(\\n) -#protobuf_cc.variable_out = SOURCES -QMAKE_EXTRA_COMPILERS += protobuf_cc - -# Ripple compilation - -DESTDIR = ../../build/QtCreator -OBJECTS_DIR = ../../build/QtCreator/obj - -TEMPLATE = app -CONFIG += console thread warn_off -CONFIG -= qt gui - -DEFINES += _DEBUG - -linux-g++:QMAKE_CXXFLAGS += \ - -Wall \ - -Wno-sign-compare \ - -Wno-char-subscripts \ - -Wno-invalid-offsetof \ - -Wno-unused-parameter \ - -Wformat \ - -O0 \ - -std=c++11 \ - -pthread - -INCLUDEPATH += \ - "../../src/leveldb/" \ - "../../src/leveldb/port" \ - "../../src/leveldb/include" \ - $${PROTOS_DIR} - -OTHER_FILES += \ -# $$files(../../src/*, true) \ -# $$files(../../src/beast/*) \ -# $$files(../../src/beast/modules/beast_basics/diagnostic/*) -# $$files(../../src/beast/modules/beast_core/, true) - -UI_HEADERS_DIR += ../../src/ripple_basics - -# --------- -# New style -# -SOURCES += \ - ../../src/ripple/beast/ripple_beast.unity.cpp \ - ../../src/ripple/beast/ripple_beastc.c \ - ../../src/ripple/common/ripple_common.unity.cpp \ - ../../src/ripple/http/ripple_http.unity.cpp \ - ../../src/ripple/json/ripple_json.unity.cpp \ - ../../src/ripple/peerfinder/ripple_peerfinder.unity.cpp \ - ../../src/ripple/radmap/ripple_radmap.unity.cpp \ - ../../src/ripple/resource/ripple_resource.unity.cpp \ - ../../src/ripple/sitefiles/ripple_sitefiles.unity.cpp \ - ../../src/ripple/sslutil/ripple_sslutil.unity.cpp \ - ../../src/ripple/testoverlay/ripple_testoverlay.unity.cpp \ - ../../src/ripple/types/ripple_types.unity.cpp \ - ../../src/ripple/validators/ripple_validators.unity.cpp - -# --------- -# Old style -# -SOURCES += \ - ../../src/ripple_app/ripple_app.unity.cpp \ - ../../src/ripple_app/ripple_app_pt1.unity.cpp \ - ../../src/ripple_app/ripple_app_pt2.unity.cpp \ - ../../src/ripple_app/ripple_app_pt3.unity.cpp \ - ../../src/ripple_app/ripple_app_pt4.unity.cpp \ - ../../src/ripple_app/ripple_app_pt5.unity.cpp \ - ../../src/ripple_app/ripple_app_pt6.unity.cpp \ - ../../src/ripple_app/ripple_app_pt7.unity.cpp \ - ../../src/ripple_app/ripple_app_pt8.unity.cpp \ - ../../src/ripple_basics/ripple_basics.unity.cpp \ - ../../src/ripple_core/ripple_core.unity.cpp \ - ../../src/ripple_data/ripple_data.unity.cpp \ - ../../src/ripple_hyperleveldb/ripple_hyperleveldb.unity.cpp \ - ../../src/ripple_leveldb/ripple_leveldb.unity.cpp \ - ../../src/ripple_net/ripple_net.unity.cpp \ - ../../src/ripple_overlay/ripple_overlay.unity.cpp \ - ../../src/ripple_rpc/ripple_rpc.unity.cpp \ - ../../src/ripple_websocket/ripple_websocket.unity.cpp - -LIBS += \ - -lboost_date_time-mt\ - -lboost_filesystem-mt \ - -lboost_program_options-mt \ - -lboost_regex-mt \ - -lboost_system-mt \ - -lboost_thread-mt \ - -lboost_random-mt \ - -lprotobuf \ - -lssl \ - -lrt diff --git a/Builds/Test.py b/Builds/Test.py index 639902dbf2..5c6a9b3e40 100755 --- a/Builds/Test.py +++ b/Builds/Test.py @@ -22,15 +22,10 @@ Invocation: The build must succeed without shell aliases for this to work. -To pass flags to scons, put them at the very end of the command line, after +To pass flags to cmake, put them at the very end of the command line, after the -- flag - like this: - ./Builds/Test.py -- -j4 # Pass -j4 to scons. - -To build with CMake, use the --cmake flag, or any of the specific configuration -flags - - ./Builds/Test.py --cmake -- -j4 # Pass -j4 to cmake --build + ./Builds/Test.py -- -j4 # Pass -j4 to cmake --build Common problems: @@ -39,11 +34,7 @@ Common problems: 2) OpenSSL not found. Solution: export OPENSSL_ROOT=[path to OpenSSL folder] -3) scons is an alias. Solution: Create a script named "scons" somewhere in - your $PATH (eg. ~/bin/scons will often work). - - #!/bin/sh - python /C/Python27/Scripts/scons.py "${@}" +3) cmake is not found. Solution: Be sure cmake directory is on your $PATH """ from __future__ import absolute_import, division, print_function, unicode_literals @@ -97,28 +88,6 @@ else: [tuple(x) for x in powerset(['-GNinja', '-Dstatic=true', '-Dassert=true', '-Dsan=address'])] + [tuple(x) for x in powerset(['-GNinja', '-Dstatic=true', '-Dassert=true', '-Dsan=thread'])])) -# Scons -if IS_WINDOWS or IS_OS_X: - ALL_TARGETS = [('debug',), ('release',)] -else: - ALL_TARGETS = [(cc + "." + target,) - for cc in ['gcc', 'clang'] - for target in ['debug', 'release', 'coverage', 'profile', - 'debug.nounity', 'release.nounity', 'coverage.nounity', 'profile.nounity']] - -# list of tuples of all possible options -if IS_WINDOWS or IS_OS_X: - ALL_OPTIONS = [tuple(x) for x in powerset(['--ninja', '--assert'])] -else: - ALL_OPTIONS = list(set( - [tuple(x) for x in powerset(['--ninja', '--static', '--assert', '--sanitize=address'])] + - [tuple(x) for x in powerset(['--ninja', '--static', '--assert', '--sanitize=thread'])])) - -# list of tuples of all possible options + all possible targets -ALL_BUILDS = [options + target - for target in ALL_TARGETS - for options in ALL_OPTIONS] - parser = argparse.ArgumentParser( description='Test.py - run ripple tests' ) @@ -173,26 +142,11 @@ parser.add_argument( help='Reduce output where possible (unit tests)', ) -# Scons and CMake parameters are too different to run -# both side-by-side -pgroup = parser.add_mutually_exclusive_group() - -pgroup.add_argument( - '--cmake', - action='store_true', - help='Build using CMake.', -) - -pgroup.add_argument( - '--scons', - action='store_true', - help='Build using Scons. Default behavior.') - parser.add_argument( '--dir', '-d', default=(), nargs='*', - help='Specify one or more CMake dir names. Implies --cmake. ' + help='Specify one or more CMake dir names. ' 'Will also be used as -Dtarget=

running cmake.' ) @@ -200,7 +154,7 @@ parser.add_argument( '--target', default=(), nargs='*', - help='Specify one or more CMake build targets. Implies --cmake. ' + help='Specify one or more CMake build targets. ' 'Will be used as --target running cmake --build.' ) @@ -208,7 +162,7 @@ parser.add_argument( '--config', default=(), nargs='*', - help='Specify one or more CMake build configs. Implies --cmake. ' + help='Specify one or more CMake build configs. ' 'Will be used as --config running cmake --build.' ) @@ -216,14 +170,14 @@ parser.add_argument( '--generator_option', action='append', help='Specify a CMake generator option. Repeat for multiple options. ' - 'Implies --cmake. Will be passed to the cmake generator. ' + 'Will be passed to the cmake generator. ' 'Due to limits of the argument parser, arguments starting with \'-\' ' 'must be attached to this option. e.g. --generator_option=-GNinja.') parser.add_argument( '--build_option', action='append', - help='Specify a build option. Repeat for multiple options. Implies --cmake. ' + help='Specify a build option. Repeat for multiple options. ' 'Will be passed to the build tool via cmake --build. ' 'Due to limits of the argument parser, arguments starting with \'-\' ' 'must be attached to this option. e.g. --build_option=-j8.') @@ -253,7 +207,7 @@ def shell(cmd, args=(), silent=False): command = (cmd,) + args - # shell is needed in Windows to find scons in the path + # shell is needed in Windows to find executable in the path process = subprocess.Popen( command, stdin=subprocess.PIPE, @@ -284,58 +238,6 @@ def shell(cmd, args=(), silent=False): process.wait() return process.returncode, lines - -def run_tests(args): - failed = [] - if IS_WINDOWS: - binary_re = re.compile(r'build\\([^\\]+)\\rippled.exe') - else: - binary_re = re.compile(r'build/([^/]+)/rippled') - _, lines = shell('scons', ('-n', '--tree=derived',) + args, silent=True) - for line in lines: - match = binary_re.search(line) - if match: - executable, target = match.group(0, 1) - - print('Unit tests for', target) - testflag = '--unittest' - quiet = '' - if ARGS.test: - testflag += ('=' + ARGS.test) - if ARGS.quiet: - quiet = '-q' - if ARGS.testjobs: - testjobs = ('--unittest-jobs=' + str(ARGS.testjobs)) - resultcode, lines = shell(executable, (testflag, quiet, testjobs,)) - - if resultcode: - if not ARGS.verbose: - print('ERROR:', *lines, sep='') - failed.append([target, 'unittest']) - if not ARGS.keep_going: - break - - return failed - - -def run_build(args=None): - print('Building:', *args or ('(default)',)) - resultcode, lines = shell('scons', args) - - if resultcode: - print('Build FAILED:') - if not ARGS.verbose: - print(*lines, sep='') - sys.exit(1) - if '--ninja' in args: - resultcode, lines = shell('ninja') - - if resultcode: - print('Ninja build FAILED:') - if not ARGS.verbose: - print(*lines, sep='') - sys.exit(1) - def get_cmake_dir(cmake_dir): return os.path.join('build' , 'cmake' , cmake_dir) @@ -407,92 +309,54 @@ def run_cmake_tests(directory, target, config): def main(): all_failed = [] - - if ARGS.dir or ARGS.target or ARGS.config or ARGS.build_option or ARGS.generator_option: - ARGS.cmake=True - - if not ARGS.cmake: - if ARGS.all: - to_build = ALL_BUILDS - else: - to_build = [tuple(ARGS.extra_args)] - - for build in to_build: - args = () - # additional arguments come first - for arg in list(ARGS.extra_args): - if arg not in build: - args += (arg,) - args += build - - run_build(args) - failed = run_tests(args) - - if failed: - print('FAILED:', *(':'.join(f) for f in failed)) - if not ARGS.keep_going: - sys.exit(1) - else: - all_failed.extend([','.join(build), ':'.join(f)] - for f in failed) - else: - print('Success') - - if ARGS.clean: - shutil.rmtree('build') - if '--ninja' in args: - os.remove('build.ninja') - os.remove('.ninja_deps') - os.remove('.ninja_log') + if ARGS.all: + build_dir_targets = CMAKE_DIR_TARGETS + generator_options = CMAKE_ALL_GENERATE_OPTIONS else: - if ARGS.all: - build_dir_targets = CMAKE_DIR_TARGETS - generator_options = CMAKE_ALL_GENERATE_OPTIONS + build_dir_targets = { tuple(ARGS.dir) : [ARGS.target, ARGS.config] } + if ARGS.generator_option: + generator_options = [tuple(ARGS.generator_option)] else: - build_dir_targets = { tuple(ARGS.dir) : [ARGS.target, ARGS.config] } - if ARGS.generator_option: - generator_options = [tuple(ARGS.generator_option)] - else: - generator_options = [tuple()] + generator_options = [tuple()] - if not build_dir_targets: - # Let CMake choose the build tool. - build_dir_targets = { () : [] } + if not build_dir_targets: + # Let CMake choose the build tool. + build_dir_targets = { () : [] } - if ARGS.build_option: - ARGS.build_option = ARGS.build_option + list(ARGS.extra_args) - else: - ARGS.build_option = list(ARGS.extra_args) + if ARGS.build_option: + ARGS.build_option = ARGS.build_option + list(ARGS.extra_args) + else: + ARGS.build_option = list(ARGS.extra_args) - for args in generator_options: - for build_dirs, (build_targets, build_configs) in build_dir_targets.items(): - if not build_dirs: - build_dirs = ('default',) - if not build_targets: - build_targets = ('rippled',) - if not build_configs: - build_configs = ('',) - for cmake_dir in build_dirs: - cmake_full_dir = get_cmake_dir(cmake_dir) - run_cmake(cmake_full_dir, cmake_dir, args) + for args in generator_options: + for build_dirs, (build_targets, build_configs) in build_dir_targets.items(): + if not build_dirs: + build_dirs = ('default',) + if not build_targets: + build_targets = ('rippled',) + if not build_configs: + build_configs = ('',) + for cmake_dir in build_dirs: + cmake_full_dir = get_cmake_dir(cmake_dir) + run_cmake(cmake_full_dir, cmake_dir, args) - for target in build_targets: - for config in build_configs: - run_cmake_build(cmake_full_dir, target, config, ARGS.build_option) - failed = run_cmake_tests(cmake_full_dir, target, config) + for target in build_targets: + for config in build_configs: + run_cmake_build(cmake_full_dir, target, config, ARGS.build_option) + failed = run_cmake_tests(cmake_full_dir, target, config) - if failed: - print('FAILED:', *(':'.join(f) for f in failed)) - if not ARGS.keep_going: - sys.exit(1) - else: - all_failed.extend([decodeString(cmake_dir + - "." + target + "." + config), ':'.join(f)] - for f in failed) + if failed: + print('FAILED:', *(':'.join(f) for f in failed)) + if not ARGS.keep_going: + sys.exit(1) else: - print('Success') - if ARGS.clean: - shutil.rmtree(cmake_full_dir) + all_failed.extend([decodeString(cmake_dir + + "." + target + "." + config), ':'.join(f)] + for f in failed) + else: + print('Success') + if ARGS.clean: + shutil.rmtree(cmake_full_dir) if all_failed: if len(all_failed) > 1: diff --git a/Builds/Ubuntu/build_clang_libs.sh b/Builds/Ubuntu/build_clang_libs.sh deleted file mode 100755 index 42b07005a3..0000000000 --- a/Builds/Ubuntu/build_clang_libs.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash - -# -# This scripts installs boost and protobuf built with clang. This is needed on -# ubuntu 15.10 when building with clang -# It will build these in a 'clang' subdirectory that it creates below the directory -# this script is run from. If a clang directory already exists the script will refuse -# to run. - -if hash lsb_release 2>/dev/null; then - if [ $(lsb_release -si) == "Ubuntu" ]; then - ubuntu_release=$(lsb_release -sr) - fi -fi - -if [ -z "${ubuntu_release}" ]; then - echo "System not supported" - exit 1 -fi - -if ! hash clang 2>/dev/null; then - clang_version=3.7 - if [ ${ubuntu_release} == "16.04" ]; then - clang_version=3.8 - fi - sudo apt-get -y install clang-${clang_version} - update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${clang_version} 99 clang++ - hash -r - if ! hash clang 2>/dev/null; then - echo "Please install clang" - exit 1 - fi -fi - -if [ ${ubuntu_release} != "16.04" ] && [ ${ubuntu_release} != "15.10" ]; then - echo "clang specific boost and protobuf not needed" - exit 0 -fi - -if [ -d clang ]; then - echo "clang directory already exists. Cowardly refusing to run" - exit 1 -fi - -if ! hash wget 2>/dev/null; then - sudo apt-get -y install wget - hash -r - if ! hash wget 2>/dev/null; then - echo "Please install wget" - exit 1 - fi -fi - -num_procs=$(lscpu -p | grep -v '^#' | sort -u -t, -k 2,4 | wc -l) # pysical cores - -mkdir clang -pushd clang > /dev/null - -# Install protobuf -pb=protobuf-2.6.1 -pb_tar=${pb}.tar.gz -wget -O ${pb_tar} https://github.com/google/protobuf/releases/download/v2.6.1/${pb_tar} -tar xf ${pb_tar} -rm ${pb_tar} -pushd ${pb} > /dev/null -./configure CC=clang CXX=clang++ CXXFLAGS='-std=c++14 -O3 -g' -make -j${num_procs} -popd > /dev/null - -# Install boost -boost_ver=1.60.0 -bd=boost_${boost_ver//./_} -bd_tar=${bd}.tar.gz -wget -O ${bd_tar} http://sourceforge.net/projects/boost/files/boost/${boost_ver}/${bd_tar} -tar xf ${bd_tar} -rm ${bd_tar} -pushd ${bd} > /dev/null -./bootstrap.sh -./b2 toolset=clang -j${num_procs} -popd > /dev/null - -popd > /dev/null diff --git a/Builds/Ubuntu/install_boost.sh b/Builds/Ubuntu/install_boost.sh deleted file mode 100755 index f1911b1181..0000000000 --- a/Builds/Ubuntu/install_boost.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash - -# -# This script builds boost with the correct ABI flags for ubuntu -# - -version=63 -patch=0 - -if hash lsb_release 2>/dev/null; then - if [ $(lsb_release -si) == "Ubuntu" ]; then - ubuntu_release=$(lsb_release -sr) - fi -fi - -if [ -z "${ubuntu_release}" ]; then - echo "System not supported" - exit 1 -fi - -extra_defines="" -if (( $(bc <<< "${ubuntu_release} < 15.1") )); then - extra_defines="define=_GLIBCXX_USE_CXX11_ABI=0" -fi -num_procs=$(lscpu -p | grep -v '^#' | sort -u -t, -k 2,4 | wc -l) # pysical cores -printf "\nBuild command will be: ./b2 -j${num_procs} ${extra_defines}\n\n" - -boost_dir="boost_1_${version}_${patch}" -boost_tag="boost-1.${version}.${patch}" -git clone -b "${boost_tag}" --recursive https://github.com/boostorg/boost.git "${boost_dir}" - -cd ${boost_dir} -git checkout --force ${boost_tag} -git submodule foreach git checkout --force ${boost_tag} -./bootstrap.sh -./b2 headers -./b2 -j${num_procs} ${extra_defines} -echo "Build command was: ./b2 -j${num_procs} ${extra_defines}" -echo "Don't forget to set BOOST_ROOT!" diff --git a/Builds/Ubuntu/install_rippled_depends_ubuntu.sh b/Builds/Ubuntu/install_rippled_depends_ubuntu.sh deleted file mode 100755 index dec8967157..0000000000 --- a/Builds/Ubuntu/install_rippled_depends_ubuntu.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bash - -# -# This scripts installs the dependencies needed by rippled. It should be run -# with sudo. For ubuntu < 15.10, it installs gcc 5 as the default compiler. gcc -# 5 is ABI incompatable with gcc 4. If needed, the following will switch back to -# gcc-4: `sudo update-alternatives --config gcc` and choosing the gcc-4 -# option. -# - -if hash lsb_release 2>/dev/null; then - if [ $(lsb_release -si) == "Ubuntu" ]; then - ubuntu_release=$(lsb_release -sr) - fi -fi - -if [ -z "${ubuntu_release}" ]; then - echo "System not supported" - exit 1 -fi - -if [ ${ubuntu_release} == "14.04" ] || [ ${ubuntu_release} == "15.04" ]; then - apt-get install python-software-properties - echo "deb [arch=amd64] https://mirrors.ripple.com/ubuntu/ trusty stable contrib" | sudo tee /etc/apt/sources.list.d/ripple.list - wget -O- -q https://mirrors.ripple.com/mirrors.ripple.com.gpg.key | sudo apt-key add - - add-apt-repository ppa:ubuntu-toolchain-r/test - apt-get update - apt-get -y upgrade - apt-get -y install curl git cmake ctags pkg-config protobuf-compiler libprotobuf-dev libssl-dev python-software-properties boost-all-dev g++-5 g++-4.9 - update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 99 --slave /usr/bin/g++ g++ /usr/bin/g++-5 - update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 99 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9 - exit 0 -fi - -# Test if 0th parameter has a version number greater than or equal to the 1st param -function version_check() { test "$(printf '%s\n' "$@" | sort -V | tail -n 1)" == "$1"; } - -# this should work for versions greater than 15.10 -if version_check ${ubuntu_release} 15.10; then - apt-get update - apt-get -y upgrade - apt-get -y install python-software-properties curl git cmake ctags pkg-config protobuf-compiler libprotobuf-dev libssl-dev python-software-properties libboost-all-dev - exit 0 -fi - -echo "System not supported" -exit 1 diff --git a/Builds/VisualStudio2015/.gitattributes b/Builds/VisualStudio2015/.gitattributes deleted file mode 100644 index d9117c325a..0000000000 --- a/Builds/VisualStudio2015/.gitattributes +++ /dev/null @@ -1,4 +0,0 @@ -RippleD.vcxproj -text -RippleD.vcxproj.filters -text - - diff --git a/Builds/VisualStudio2015/README.md b/Builds/VisualStudio2015/README.md deleted file mode 100644 index 10fa4fd171..0000000000 --- a/Builds/VisualStudio2015/README.md +++ /dev/null @@ -1,255 +0,0 @@ -# Visual Studio 2015 Build Instructions - -## Important - -We do not recommend Windows for rippled production use at this time. Currently, the Ubuntu -platform has received the highest level of quality assurance, testing, and support. -Additionally, 32-bit Windows versions are not supported. - -## Prerequisites - -To clone the source code repository, create branches for inspection or modification, -build rippled under Visual Studio, and run the unit tests you will need these -software components: - -* [Visual Studio 2015](README.md#install-visual-studio-2015) -* [Git for Windows](README.md#install-git-for-windows) -* [Google Protocol Buffers Compiler](README.md#install-google-protocol-buffers-compiler) -* (Optional) [Python and Scons](README.md#optional-install-python-and-scons) -* [OpenSSL Library](README.md#install-openssl) -* [Boost library](README.md#build-boost) - -## Install Software - -### Install Visual Studio 2015 - -If not already installed on your system, download your choice of installer from the -[Visual Studio 2015 Download](https://www.visualstudio.com/downloads/download-visual-studio-vs) -page, run the installer, and follow the directions. You may need to choose a "Custom" -installation and ensure that "Visual C++" is selected under "Programming Languages". - -Any version of Visual Studio 2015 may be used to build rippled. -The **Visual Studio 2015 Community** edition is available free of charge (see -[the product page](https://www.visualstudio.com/products/visual-studio-community-vs) -for licensing details), while paid editions may be used for an free initial trial period. - -### Install Git for Windows - -Git is a distributed revision control system. The Windows version also provides the -bash shell and many Windows versions of Unix commands. While there are other -varieties of Git (such as TortoiseGit, which has a native Windows interface and -integrates with the Explorer shell), we recommend installing -[Git for Windows](https://git-scm.com/) since -it provides a Unix-like command line environment useful for running shell scripts. -Use of the bash shell under Windows is mandatory for running the unit tests. - -* NOTE: To gain full featured access to the - [git-subtree](https://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/) - functionality used in the rippled repository we suggest Git version 2.6.2 or later. - -### Install Google Protocol Buffers Compiler - -Building rippled requires **protoc.exe** version 2.5.1 or later. At your option you -may build it yourself from the sources in the -[Google Protocol Buffers](https://github.com/google/protobuf) repository, -or you may download a -[protoc.exe](https://ripple.github.io/Downloads/protoc/2.5.1/protoc.exe) -([alternate link](https://github.com/ripple/Downloads/raw/gh-pages/protoc/2.5.1/protoc.exe)) -precompiled Windows executable from the -[Ripple Organization](https://github.com/ripple). - -Either way, once you have the required version of **protoc.exe**, copy it into -a folder in your command line `%PATH%`. - -* **NOTE:** If you use an older version of the compiler, the build will - fail with errors related to a mismatch of the version of protocol - buffer headers versus the compiler. - -### (Optional) Install Python and Scons - -[Python](https://www.python.org/downloads/) and -[Scons](http://scons.org/download.php) are not required to build -rippled with Visual Studio, but can be used to build from the -command line and in scripts, and are required to properly update -the `RippleD.vcxproj` file. - -If you wish to build with scons, a version after 2.3.5 is required -for Visual Studio 2015 support. - -## Configure Dependencies - -### Install OpenSSL - -[Download OpenSSL.](http://slproweb.com/products/Win32OpenSSL.html) -There will be four variants available: - -1. 64-bit. Use this if you are running 64-bit windows. As of this writing, the link is called: "Win64 OpenSSL v1.0.2j". -2. 64-bit light - Don't use this. It is missing files needed to build rippled. As of this writing, the link is called: "Win64 OpenSSL v1.0.2j Light" - -Run the installer, and choose an appropriate location for your OpenSSL -installation. In this guide we use **C:\lib\OpenSSL-Win64** as the -destination location. - -You may be informed on running the installer that "Visual C++ 2008 -Redistributables" must first be installed first. If so, download it -from the [same page](http://slproweb.com/products/Win32OpenSSL.html), -again making sure to get the correct 32-/64-bit variant. - -* NOTE: Since rippled links statically to OpenSSL, it does not matter - where the OpenSSL .DLL files are placed, or what version they are. - rippled does not use or require any external .DLL files to run - other than the standard operating system ones. - -### Build Boost - -After [downloading boost](http://www.boost.org/users/download/) and -unpacking it, open a **Developer Command Prompt** for -Visual Studio, change to the directory containing boost, then -bootstrap the build tools: - -(As of this writing, the most recent version of boost is 1.62.0, which -will unpack into a directory named `boost_1_62_0`. For higher versions -of boost, adjust the directories provided in these examples as -appropriate.) - -```powershell -cd C:\lib\boost_1_62_0 -bootstrap -``` - -The rippled application is linked statically to the standard runtimes and external -dependencies on Windows, to ensure that the behavior of the executable is not -affected by changes in outside files. Therefore, it is necessary to build the -required boost static libraries using this command: - -```powershell -bjam --toolset=msvc-14.0 address-model=64 architecture=x86 link=static threading=multi runtime-link=shared,static stage --stagedir=stage64 -``` - -Building the boost libraries may take considerable time. When the build process -is completed, take note of both the reported compiler include paths and linker -library paths as they will be required later. - -* NOTE: If older versions of Visual Studio are also installed, the build may fail. - If this happens, make sure that only Visual Studio 2015 is installed. Due to - defects in the uninstallation procedures of these Microsoft products, it may - be necessary to start with a fresh install of the operating system with only - the necessary development environment components installed to have a successful build. - -### Clone the rippled repository - -If you are familiar with cloning github repositories, just follow your normal process -and clone `git@github.com:ripple/rippled.git`. Otherwise follow this section for instructions. - -1. If you don't have a github account, sign up for one at - [github.com](https://github.com/). -2. Make sure you have Github ssh keys. For help see - [generating-ssh-keys](https://help.github.com/articles/generating-ssh-keys). - -Open the "Git Bash" shell that was installed with "Git for Windows" in the -step above. Navigate to the directory where you want to clone rippled (git -bash uses `/c` for windows's `C:` and forward slash where windows uses -backslash, so `C:\Users\joe\projs` would be `/c/Users/joe/projs` in git bash). -Now clone the repository and optionally switch to the *master* branch. -Type the following at the bash prompt: - -```powershell -git clone git@github.com:ripple/rippled.git -cd rippled -git checkout master -``` - -* If you receive an error about not having the "correct access rights" - make sure you have Github ssh keys, as described above. - -### Configure Library Paths - -Open the solution file located at **Builds/Visual Studio 2015/ripple.sln** -and select the "View->Property Manager" to bring up the Property Manager. -Expand the *debug | x64* section and -double click the *Microsoft.Cpp.x64.user* property sheet to bring up the -*Property Pages* dialog. These are global properties applied to all -64-bit build targets: - -![Visual Studio 2015 Global Properties](images/VS2015x64Properties.png) - -Go to *C/C++, General, Additional Include Directories* and add the -location of the boost installation: - -![Visual Studio 2015 Include Directories](images/VS2015x64IncludeDirs.png) - -Then, go to *Linker, General, Additional Library Directories* and add -the location of the compiled boost libraries reported at the completion -of building the boost libraries: - -![Visual Studio 2015 Library Directories](images/VS2015x64LibraryDirs.png) - -Follow the same procedure for adding the `Additional Include Directories` -and `Additional Library Directories` required for OpenSSL. In our example -these directories are **C:\lib\OpenSSL-Win64\include** and -**C:\lib\OpenSSL-Win64\lib** respectively. - -# Setup Environment - -## Create a working directory for rippled.cfg - -The rippled server uses the [Rippled.cfg](https://wiki.ripple.com/Rippled.cfg) -file to read its configuration parameters. This section describes setting up -a directory to hold the config file. The next sections describe how to tell -the rippled server where that file is. - -1. Create a directory to hold the configuration file. In this example, the - ripple config directory was created in `C:\Users\joe\ripple\config`. -2. Copy the example config file located in `cfg\rippled-example.cfg` to the - new directory and rename it "rippled.cfg". -3. Read the rippled.cfg file and edit as appropriate. - -## Change the Visual Studio Projects Debugging Properties - -1. If not already open, open the solution file located at **Builds/Visual Studio 2015/Ripple.sln** -2. Select the correct solution platform in the solution platform dropdown (either *x64* - or *Win32* depending on machine type). -3. Select the "Project->Properties" menu item to bring up RippleD's Properties Pages -4. In "Configuration Properties" select "Debugging". -5. In the upper-left Configurations drop down, select "All Configurations". -6. In "Debugger to Launch" select "Local Windows Debugger". - -### Tell rippled where to find the configuration file. - -The `--conf` command-line switch to tell rippled where to find this file. -In the "Command Arguments" field in the properties dialog (that you opened -in the above section), add: `--conf="C:/Users/joe/ripple/config/rippled.cfg"` -(of course replacing that path with the path you set up above). - -![Visual Studio 2013 Command Args Prop Page](images/VSCommandArgsPropPage.png) - -### Set the _NO_DEBUG_HEAP Environment Variable - -Rippled can run very slowly in the debugger when using the Windows Debug Heap. -Set the `_NO_DEBUG_HEAP` environment variable to one to disable the debug heap. -In the "Environment" field (that you opened in the above section), add: -`_NO_DEBUG_HEAP=1` - -![Visual Studio 2013 No Debug Heap Prop Page](images/NoDebugHeapPropPage.png) - -# Build - -After these steps are complete, rippled should be ready to build. Simply -set rippled as the startup project by right clicking on it in the -Visual Studio Solution Explorer, choose **Set as Startup Project**, -and then choose the **Build->Build Solution** menu item. - -# Unit Tests (Recommended) - -The rippled unit tests are written in C++ and are part -of the rippled executable. - -From a Windows console, run the unit tests: - -``` -./build/msvc.debug/rippled.exe --unittest -``` - -Substitute the correct path to the executable to test different builds. - - diff --git a/Builds/VisualStudio2015/RippleD.vcxproj b/Builds/VisualStudio2015/RippleD.vcxproj deleted file mode 100644 index 3d982a810c..0000000000 --- a/Builds/VisualStudio2015/RippleD.vcxproj +++ /dev/null @@ -1,5684 +0,0 @@ - - - - {26B7D9AC-1A80-8EF8-6703-D061F1BECB75} - Win32Proj - RippleD - true - - - - debug.classic - x64 - - - debug - x64 - - - release.classic - x64 - - - release - x64 - - - - - MultiByte - Application - v140 - False - False - False - false - ..\..\build\msvc.debug.nounity\src\ - ..\..\build\msvc.debug.nounity\ - - - MultiByte - Application - v140 - False - False - False - false - ..\..\build\msvc.debug\src\ - ..\..\build\msvc.debug\ - - - MultiByte - Application - v140 - False - False - False - false - ..\..\build\msvc.release.nounity\src\ - ..\..\build\msvc.release.nounity\ - - - MultiByte - Application - v140 - False - False - False - false - ..\..\build\msvc.release\src\ - ..\..\build\msvc.release\ - - - - - - - - - - - - - - - - - - - HAVE_USLEEP=1;SOCI_CXX_C11=1;_WIN32_WINNT=0x6000;BOOST_COROUTINES_NO_DEPRECATION_WARNING;BOOST_COROUTINE_NO_DEPRECATION_WARNING;BOOST_NO_AUTO_PTR;DEBUG;DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;NOMINMAX;OPENSSL_NO_SSL2;WIN32_CONSOLE;_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;_DEBUG;_SCL_SECURE_NO_WARNINGS;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;%(PreprocessorDefinitions) - ..\..\build\proto;..\..\src;..\..\src\beast;..\..\src\beast\extras;..\..\src\beast\include;..\..\src\nudb\include;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\soci\include;..\..\src\soci\src;%(AdditionalIncludeDirectories) - 4800;4244;4267;4503;4018 - Async - MultiThreadedDebug - Precise - False - EnableFastChecks - None - True - True - True - False - True - Disabled - False - False - ProgramDatabase - Cdecl - True - Level3 - /bigobj /FS %(AdditionalOptions) - - - advapi32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;kernel32.lib;legacy_stdio_definitions.lib;odbc32.lib;odbccp32.lib;ole32.lib;oleaut32.lib;shell32.lib;Shlwapi.lib;user32.lib;uuid.lib;VC/static/libeay32MTd.lib;VC/static/ssleay32MTd.lib;winspool.lib;%(AdditionalDependencies) - True - NoErrorReport - Console - True - true - True - MachineX64 - /MANIFEST /TLBID:1 %(AdditionalOptions) - - - - - HAVE_USLEEP=1;SOCI_CXX_C11=1;_WIN32_WINNT=0x6000;BOOST_COROUTINES_NO_DEPRECATION_WARNING;BOOST_COROUTINE_NO_DEPRECATION_WARNING;BOOST_NO_AUTO_PTR;DEBUG;DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;NOMINMAX;OPENSSL_NO_SSL2;WIN32_CONSOLE;_CRTDBG_MAP_ALLOC;_CRT_SECURE_NO_WARNINGS;_DEBUG;_SCL_SECURE_NO_WARNINGS;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;%(PreprocessorDefinitions) - ..\..\build\proto;..\..\src;..\..\src\beast;..\..\src\beast\extras;..\..\src\beast\include;..\..\src\nudb\include;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\soci\include;..\..\src\soci\src;%(AdditionalIncludeDirectories) - 4800;4244;4267;4503;4018 - Async - MultiThreadedDebug - Precise - False - EnableFastChecks - None - True - True - True - False - True - Disabled - False - False - ProgramDatabase - Cdecl - True - Level3 - /bigobj /FS %(AdditionalOptions) - - - advapi32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;kernel32.lib;legacy_stdio_definitions.lib;odbc32.lib;odbccp32.lib;ole32.lib;oleaut32.lib;shell32.lib;Shlwapi.lib;user32.lib;uuid.lib;VC/static/libeay32MTd.lib;VC/static/ssleay32MTd.lib;winspool.lib;%(AdditionalDependencies) - True - NoErrorReport - Console - True - true - True - MachineX64 - /MANIFEST /TLBID:1 %(AdditionalOptions) - - - - - HAVE_USLEEP=1;SOCI_CXX_C11=1;_WIN32_WINNT=0x6000;BOOST_COROUTINES_NO_DEPRECATION_WARNING;BOOST_COROUTINE_NO_DEPRECATION_WARNING;BOOST_NO_AUTO_PTR;DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;NDEBUG;NOMINMAX;OPENSSL_NO_SSL2;WIN32_CONSOLE;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;%(PreprocessorDefinitions) - ..\..\build\proto;..\..\src;..\..\src\beast;..\..\src\beast\extras;..\..\src\beast\include;..\..\src\nudb\include;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\soci\include;..\..\src\soci\src;%(AdditionalIncludeDirectories) - 4800;4244;4267;4503;4018 - Async - Precise - False - None - True - True - MultiThreaded - False - True - False - False - ProgramDatabase - Cdecl - True - Full - Level3 - /bigobj /FS %(AdditionalOptions) - - - advapi32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;kernel32.lib;legacy_stdio_definitions.lib;odbc32.lib;odbccp32.lib;ole32.lib;oleaut32.lib;shell32.lib;Shlwapi.lib;user32.lib;uuid.lib;VC/static/libeay32MT.lib;VC/static/ssleay32MT.lib;winspool.lib;%(AdditionalDependencies) - True - NoErrorReport - Console - True - true - True - MachineX64 - /MANIFEST /TLBID:1 %(AdditionalOptions) - - - - - HAVE_USLEEP=1;SOCI_CXX_C11=1;_WIN32_WINNT=0x6000;BOOST_COROUTINES_NO_DEPRECATION_WARNING;BOOST_COROUTINE_NO_DEPRECATION_WARNING;BOOST_NO_AUTO_PTR;DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;NDEBUG;NOMINMAX;OPENSSL_NO_SSL2;WIN32_CONSOLE;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS;%(PreprocessorDefinitions) - ..\..\build\proto;..\..\src;..\..\src\beast;..\..\src\beast\extras;..\..\src\beast\include;..\..\src\nudb\include;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\soci\include;..\..\src\soci\src;%(AdditionalIncludeDirectories) - 4800;4244;4267;4503;4018 - Async - Precise - False - None - True - True - MultiThreaded - False - True - False - False - ProgramDatabase - Cdecl - True - Full - Level3 - /bigobj /FS %(AdditionalOptions) - - - advapi32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;kernel32.lib;legacy_stdio_definitions.lib;odbc32.lib;odbccp32.lib;ole32.lib;oleaut32.lib;shell32.lib;Shlwapi.lib;user32.lib;uuid.lib;VC/static/libeay32MT.lib;VC/static/ssleay32MT.lib;winspool.lib;%(AdditionalDependencies) - True - NoErrorReport - Console - True - true - True - MachineX64 - /MANIFEST /TLBID:1 %(AdditionalOptions) - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - - - - - - - - - True - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - - - - - - - - - - - - - - - True - - - - - True - - - - - - - - - True - - - - - - - - - True - - - - - True - - - True - - - - - True - - - - - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - - - True - True - - - - - - - True - True - - - - - - - True - True - - - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - True - True - - - - - - - - - True - True - - - - - - - True - True - - - - - - - - - - - - - - - True - True - - - - - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - True - True - - - - - True - True - - - - - - - - - True - True - - - - - - - - - - - - - - - True - True - - - True - True - - - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - True - True - - - - - - - - - True - True - - - - - - - - - - - - - - - True - True - - - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - - - True - True - - - True - True - - - True - True - - - - - True - True - - - - - - - True - True - - - True - True - - - - - True - True - - - - - - - - - True - True - - - True - True - - - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - - - - - - - - - True - True - - - True - True - - - - - True - True - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - - - True - - - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - True - - - True - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - - - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - - - True - True - - - True - True - - - - - True - True - - - - - - - True - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - - - True - True - - - - - True - True - - - True - True - - - True - True - - - - - True - True - - - - - - - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - - - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - - - - - - - - - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - - - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - - - - - - - - - - - - - - - - - - - - - True - True - - - True - True - - - - - True - True - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - - - - - - - - - - - - - - - - - - - True - True - - - - - - - - - True - True - - - - - - - - - - - - - True - True - - - True - True - - - - - True - True - - - - - - - True - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Document - protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity) - ..\..\build\proto\ripple.pb.h;..\..\build\proto\ripple.pb.cc - protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity) - false - Document - protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity) - ..\..\build\proto\ripple.pb.h;..\..\build\proto\ripple.pb.cc - protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity) - false - Document - protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity) - ..\..\build\proto\ripple.pb.h;..\..\build\proto\ripple.pb.cc - protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity) - false - Document - protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity) - ..\..\build\proto\ripple.pb.h;..\..\build\proto\ripple.pb.cc - protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity) - false - - - - - - - - - - - - - True - - - True - - - - - True - - - - - - - - - - - True - - - - - - - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - - - True - True - - - True - True - - - True - True - - - - - True - True - - - - - True - True - - - True - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - - - - - - - - - True - True - - - - - - - - - - - - - - - - - - - - - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - ..\..\src\ed25519-donna;%(AdditionalIncludeDirectories) - ..\..\src\ed25519-donna;%(AdditionalIncludeDirectories) - ..\..\src\ed25519-donna;%(AdditionalIncludeDirectories) - ..\..\src\ed25519-donna;%(AdditionalIncludeDirectories) - - - True - True - - - True - True - - - - - True - True - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - - - True - True - - - True - True - - - - - True - True - - - - - - - ..\..\src\rocksdb2;..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2;..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2;..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2;..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - - - True - True - - - True - True - - - ..\..\src\secp256k1;%(AdditionalIncludeDirectories) - ..\..\src\secp256k1;%(AdditionalIncludeDirectories) - ..\..\src\secp256k1;%(AdditionalIncludeDirectories) - ..\..\src\secp256k1;%(AdditionalIncludeDirectories) - - - True - True - - - True - True - - - ..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - ..\..\src\soci\include\private;..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\include\private;..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\include\private;..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\include\private;..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\soci\include\private;..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\include\private;..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - - True - - - - - True - - - - - True - - - - - True - - - True - - - - - True - - - - - True - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - True - - - - - True - - - True - - - - - True - - - True - - - True - - - True - - - True - - - True - - - - - True - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - True - - - - - - - True - - - - - True - - - - - True - - - True - - - True - - - True - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - - - True - - - - - True - - - - - True - - - - - - - - - True - - - - - True - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - True - - - - - True - - - - - True - - - - - - - - - True - - - - - True - - - - - - - - - - - - - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - True - - - True - - - - - - - True - - - - - True - - - - - True - - - - - - - True - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - True - - - - - - - True - - - - - - - True - - - - - - - - - - - - - - - - - True - - - True - - - - - True - - - True - - - True - - - True - - - - - - - True - - - True - - - - - True - - - - - True - - - True - - - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - True - - - - - - - - - True - - - - - - - True - - - - - True - - - - - - - - - True - - - - - True - - - True - - - - - True - - - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - True - - - - - - - - - - - - - True - - - - - - - True - - - - - - - True - - - - - True - - - - - True - - - True - - - - - True - - - True - - - - - True - - - - - True - - - - - True - - - - - True - - - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - - - - - - - - - True - - - - - True - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - - - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - - - - - True - - - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - True - True - - - - - - - - - True - True - - - - - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - True - True - - - - - - - - - - - - - - - - - True - True - - - True - True - - - True - True - - - - - True - True - - - - - - - - - - - - - - - - - - - - - - - True - True - - - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - ..\..\src\rocksdb2\include;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories) - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - True - True - - - - - - - - diff --git a/Builds/VisualStudio2015/RippleD.vcxproj.filters b/Builds/VisualStudio2015/RippleD.vcxproj.filters deleted file mode 100644 index d8a7c1a1ee..0000000000 --- a/Builds/VisualStudio2015/RippleD.vcxproj.filters +++ /dev/null @@ -1,6466 +0,0 @@ - - - - - {B4CFBB41-DA25-70B1-E486-4F869E226E12} - - - {6DD9EDCB-63DB-D377-3F12-12825FA8437E} - - - {3CBEFECB-9A7C-B235-BA05-30D41AB8827D} - - - {79EFD023-52CA-3A59-E21D-E73328FA46EA} - - - {2A1F4F78-5521-936E-8CE2-BA798D578A14} - - - {7138D215-DA65-98D5-EF7D-C9896685201E} - - - {3E84AA4C-CB48-99F0-EB35-5603FF633A51} - - - {932F732F-F09E-5C50-C8A1-D62342CCAA1F} - - - {0ED4CDBE-296D-2599-04B3-095BFD1668A4} - - - {2762284D-66E5-8B48-1F8E-67116DB1FC6B} - - - {AC49CD8A-C2A7-FBEC-CA36-635A5303E73E} - - - {D05C2DB7-CE99-9326-23E6-4C7828632E0E} - - - {FB0BEDED-4C83-F0AF-0450-3DB01A05BD0B} - - - {A7FC9CC0-AB8D-4252-CCB2-B67F7BE99CF5} - - - {9455431B-BD48-F8C8-B53B-D9BCAF355341} - - - {508136FB-F124-7376-5A6F-F28EDEB18389} - - - {F85F4A52-7A2A-700C-4804-97FFC11E99FD} - - - {9DEED977-2072-A182-5BD9-CEBF206E8C91} - - - {B211F8F1-22D2-47BA-C39E-F9846A844D11} - - - {4F65E5BD-7EC4-113A-4603-B4625F16BC18} - - - {A5499F4E-D602-E9BA-FBB6-DCF5ED7C0D61} - - - {B97D2E02-83E3-F589-90C1-1B3398703938} - - - {F71FA1B4-4F94-A225-CFD2-C7A7B7966A9C} - - - {133EFD69-2398-8391-8995-ADF0FDB69A27} - - - {C535C933-C404-7C0F-2AB9-059F92DE0A80} - - - {BEF4689C-DF44-FE00-8811-EF00F064682D} - - - {8547002E-FB54-7C5D-EA27-12C3E50CE8D2} - - - {C1C81078-724B-2D05-0709-E1BA96B0C510} - - - {B7D055A3-42C2-904A-B3DC-966418EE6C5B} - - - {825BC971-25C9-82E3-4397-DDDB862500F2} - - - {26CC768D-6309-8C03-DB71-29E3BCA255A8} - - - {1FDEB2E3-854A-6C63-09E9-1B4E00FD16A1} - - - {5DA545F5-86B2-6120-E3A6-8D0875402F4D} - - - {C99E2B0C-64FF-A4A9-6FCF-DF19BE8E4C66} - - - {83B96C00-A786-6597-826D-E12FA6187AA8} - - - {0E8BC18A-9853-B13E-1A9D-C55FA29DA60F} - - - {CE126498-A44D-30A2-345B-0F672BCDF947} - - - {0EF1A571-94CC-4D70-E004-48579DF8AF2B} - - - {91D5931B-D981-52BC-BC12-08DA9F7BF606} - - - {5A1509B2-871B-A7AC-1E60-544D3F398741} - - - {2919FCCC-A707-22B8-FFB4-89494A8AC070} - - - {C4BDB9F8-7DB7-E304-D286-098085D5D16E} - - - {03533509-DAC6-636F-9F7E-288894549E95} - - - {9AD8D049-10A8-704C-D51A-FAD55B1F235F} - - - {38932157-7DA1-A9CC-CABC-2A3D9CACF188} - - - {50FDCDC1-EC9C-9F3B-34C9-EF4137E132B4} - - - {4849F8A8-26D5-8416-2D59-F4CA49F0100C} - - - {B8720E2F-21B1-2847-F96C-4E00A45DC639} - - - {1B5E3484-E132-ADEA-8A38-01B0F4ABAC58} - - - {B75D9C70-388A-3FA5-53E7-8F37FDF4704B} - - - {18E2EE25-691B-C8C6-CE50-559012D120C5} - - - {B19A7492-A21F-6398-8E2C-CB226DAB2AB5} - - - {55CEA641-A406-D50E-17E4-0617F38C4279} - - - {D17C7530-EB8E-2A5E-6900-050BBEAD7C9F} - - - {2878154F-A12B-FAF9-2731-F1E554045252} - - - {FD4D1806-56C7-EFD3-8177-B77ECCB62673} - - - {D2FEF8DB-10F1-40FD-149C-2929726AB662} - - - {462217CD-F700-FBAF-6337-9B66824D1964} - - - {EFCF517A-692C-C748-5A6B-E7A80A245AE8} - - - {A434A188-4373-CE55-6995-BA4EC86D2125} - - - {A0CD1F88-1FA8-FDBF-8C82-A5427B6E10AE} - - - {1CB945B8-4655-2C56-1C03-24281400ABD8} - - - {061B26E1-FD5A-69B2-F70A-DC6B19CD7068} - - - {4CC44F87-2E4D-81E7-CB8C-027C2928EC7D} - - - {7A1954FE-9751-AE24-A1AF-C282F14B5757} - - - {38E875CA-FF93-DCC2-393B-1E2E128AD077} - - - {D7812F07-CB10-3361-544B-EB66B18F2D7F} - - - {411729E2-D597-D511-9CCB-A9E0FF697232} - - - {C94B6C51-E253-633B-0AA8-8D18CD695D5E} - - - {44E216F9-ACFD-B770-C6C9-BFFAD162566D} - - - {155DC1A3-8A60-BC74-A7E4-1AC1A679FFF9} - - - {75481992-909B-CAA9-859B-91F15AFD2AD0} - - - {235DCF23-2CF8-4F03-1A54-C159823A7E8D} - - - {D9A8899A-B47C-E5BB-DDF1-32A50545A7D3} - - - {165391B0-6CF7-0ECF-2566-2F12A922148E} - - - {8EF07519-1C32-2E82-D707-702EB0157733} - - - {BEDCC703-A2C8-FF25-7E1E-3471BD39ED98} - - - {32043215-B959-04E5-00FF-F97C7F597235} - - - {33BBF793-1734-8439-B367-C4A48AB37EFC} - - - {3F9EB11B-A89B-C878-201C-5F1113B3A6E8} - - - {EA35E0D0-6876-9DC8-10FA-1E6A0486C574} - - - {6649BD29-BE86-723F-501A-045E39310112} - - - {18A4343E-EF40-5824-86E0-6374708FDDBC} - - - {D3E78215-1C49-D4FB-E9FC-5074083D184F} - - - {B79A9145-D4DD-8A3C-59ED-AF8BEE7AD7A3} - - - {9D691DE1-17A1-5989-3E2E-F69B3E43152F} - - - {51E817F6-DC2E-045A-9009-37E3D16D0990} - - - {07E4BC73-2B68-D0D1-D922-FEBBB573F503} - - - {186385AD-A056-FA3A-7E0E-759EB55E9EAB} - - - {26FDAE33-6FB7-5B19-3F9D-3F635A0C93BA} - - - {F1CDEBFB-0510-764D-010B-F14BCA9456EB} - - - {8016685C-6468-9514-D06F-F95060DB5F10} - - - {AAA1F4C4-829E-8085-A768-FB4DC3670296} - - - {0AFA29AA-2CF8-9A4D-112E-AA1044C005EC} - - - {7F5082C0-3323-CAC3-1868-CA49C7F63A34} - - - {A05858D1-18F0-3A7E-ECFD-7729C370F65B} - - - {BCDBB833-2810-D5F5-A023-4E346AD0EED3} - - - {98D31BEB-9D82-93F8-6AC3-70AC5A1EA2E1} - - - {93AC3675-D183-4DB4-021E-8F4CA1586866} - - - {8A61DBF7-69CB-9043-8312-D44C40EC6AE9} - - - {B0649154-4449-1172-FF4F-9F7A46908774} - - - {81841155-E173-EABC-D87B-5DDBE199F8E3} - - - {92AC870A-6B4B-9CD5-4F7F-648C72CFA0D3} - - - {5DB3CD0B-B361-B301-9562-697CA8A52B68} - - - {15B4B65A-0F03-7BA9-38CD-42A5712392CB} - - - {00C69D4E-70C5-4176-9C4E-C0D48BDEBDDA} - - - {6D89B6B8-9214-EC35-55E9-8F23F38CA4BD} - - - {B54F0FEA-9D8B-74FB-589C-3B76405DA954} - - - {667DE39F-2604-4FE8-A614-819EEB24732D} - - - {52E62747-3597-E27D-DFB4-56139A352DB9} - - - {42869C0B-56BC-B32F-1916-4A4080D2417E} - - - {D3C48D7F-1D8E-CE9E-27C8-D55F5E5A5B87} - - - {B32195A5-B4BA-3777-CCB9-2574EC4D434F} - - - {61E3ED6A-AC3E-1B94-A7B9-351B1F6F0553} - - - {C2E2A611-388D-7241-C2BB-317691062D69} - - - {0E10D53B-8D04-FF58-45C4-0ABCB1D35E7F} - - - {DBFD954A-0008-4956-927A-B944200D245D} - - - {FC54DB48-EF4D-7E0F-DDFE-B3F38B0B7738} - - - {A746507A-5BC2-4D28-1548-27C4A985BA1F} - - - {2F1E5091-DE86-9818-9678-CD46520BB6FF} - - - {F99E2CD5-39AC-2E47-504E-7E90C0337658} - - - {D1AC8B4A-AD89-99FE-E006-C5216043BF1C} - - - {105DC146-D508-21EC-FFEA-1D161832CCEF} - - - {9127B497-2610-2304-EEC9-8BEFBE9EA84E} - - - {948DD1FB-8935-5D38-8772-3147CF2453B9} - - - {54BB5EB5-AAE6-285E-E486-052F58B9C667} - - - {3B09A7F7-FA71-6AF1-D990-01EB9B1F903D} - - - {0671E6E7-996E-D7C7-CF71-11A7A8F34F1F} - - - {393C9B81-CD6C-8E75-2B17-ED6ED04E4C28} - - - {A69B6BFC-CCCF-679E-555F-CE2E562DD85B} - - - {ED8A5019-B4FC-AE9E-E99A-10137DCF03C1} - - - {3743C661-4B1A-EDF5-5F7D-74FD09F6C0F7} - - - {395EACFC-5313-28FC-4686-B001C679D86A} - - - {9EAFF616-0390-6B5C-34FD-9A98D7E01EE7} - - - {91DD523A-1974-4AD0-719D-F02BF0544FA3} - - - {ECE6F4C7-0F1A-FC81-6DE9-76BC48243350} - - - {E25BE380-48B7-7EA9-DFD6-F38F1E8A22FF} - - - {6BE34C70-DCAB-96D1-487C-ADC692DA720B} - - - {46FCBB68-FE6A-0EB7-98C9-C695B05E6503} - - - {0B56B4A9-D9BC-B7FB-DD09-ADAF9DDE4895} - - - {26306562-F81D-B6CD-B192-22BA51E1A96B} - - - {A018809C-BAF9-A68D-5AF9-2B7E0ADF444E} - - - {575659AE-C11F-C7F6-CEA1-3F2FBB560918} - - - {E5334950-60C3-CE41-4DD7-535029F143F7} - - - {326BC235-4389-131A-EFCF-B54C652509F1} - - - {95BB48F7-02FF-05FA-0112-506B0BB188FE} - - - {227F15C2-FEEE-AFD6-835C-989647DBEBE2} - - - {AEF95E82-C569-5213-CEFC-7546DD7CDD77} - - - {5A1D8022-39F2-67E1-FFBE-EA7D5BF9FBDB} - - - {AA927DBA-1AF8-6600-04B7-D1C1EBFB4103} - - - {75E6832F-A6F7-8360-FA3A-7427A06A9959} - - - {D4BF99B9-6486-2124-6103-825710EDD595} - - - {FA8496D0-0D5F-AC6F-3422-DEAB4BA19ACA} - - - {D2A046B6-8986-92AC-082F-15B3A01B8E40} - - - {D5859751-012E-81F5-D121-159FE9A25436} - - - {CB62DF03-8B06-99E3-905E-DE9E4444A179} - - - {E1429BDE-60F8-9F50-97E2-A4533D1F3DA4} - - - {8B0B95AC-5386-EE34-AA85-E1C7974E6E93} - - - {F421E9A0-BB69-E638-F7AC-A3BD9B7D4827} - - - {330C919A-D367-9106-B0FF-BCE5B46A76B2} - - - {26D7F11B-5BF1-54BC-8BF5-D45F68A6A408} - - - {8E0BEDEF-0473-BB6D-7AD3-877644873E62} - - - {2B6B8B80-5419-52D9-8CB9-758C3FB7FD0A} - - - {87249A3B-D8F5-1A8C-6C1D-F1CDCCF5242B} - - - {1B5596EA-E920-0BF3-81F5-D0D3A1786006} - - - {EE178E31-46DB-6ED5-D5F4-81BDC7A96765} - - - {272EB630-1801-CFB7-68ED-3FD2AF1FEF87} - - - {D245AFF2-E02A-AB08-85C6-632FFB77D25B} - - - {0198696A-8575-E86B-C683-4ACB35406C22} - - - {643C570C-14A2-D7AB-6B2C-61C011864D8F} - - - {48FBA929-C7B7-CE6C-4074-D440347DCEBC} - - - {3E8DC74A-BEA9-DE65-C5AE-F7F7F9373552} - - - {FDF959A9-11D3-61C5-07F6-077C556E1A8E} - - - {6CFCE215-49E3-9407-C201-479021338F6C} - - - {2E37F2EA-49FC-1F02-C3EA-D7EB608603A1} - - - {4FD99791-5191-0BFF-8D77-19500238E44E} - - - {D4796FCA-4A81-C3A8-FC86-FEF2CEEFC056} - - - - - proto - - - proto - - - . - - - beast\test - - - beast\unit_test - - - beast\unit_test\detail - - - beast\unit_test - - - beast\unit_test - - - beast\unit_test - - - beast\unit_test - - - beast\unit_test - - - beast\unit_test - - - beast\unit_test - - - beast\unit_test - - - beast\unit_test - - - beast\unit_test - - - beast\unit_test - - - beast - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core\detail - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core\impl - - - beast\core\impl - - - beast\core\impl - - - beast\core\impl - - - beast\core\impl - - - beast\core\impl - - - beast\core\impl - - - beast\core\impl - - - beast\core\impl - - - beast\core\impl - - - beast\core\impl - - - beast\core\impl - - - beast\core\impl - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast\core - - - beast - - - beast\http - - - beast\http - - - beast\http\detail - - - beast\http\detail - - - beast\http\detail - - - beast\http\detail - - - beast\http\detail - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast\http\impl - - - beast\http\impl - - - beast\http\impl - - - beast\http\impl - - - beast\http\impl - - - beast\http\impl - - - beast\http\impl - - - beast\http\impl - - - beast\http\impl - - - beast\http\impl - - - beast\http\impl - - - beast\http\impl - - - beast\http\impl - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast\http - - - beast - - - beast - - - beast\websocket\detail - - - beast\websocket\detail - - - beast\websocket\detail - - - beast\websocket\detail - - - beast\websocket\detail - - - beast\websocket\detail - - - beast\websocket\detail - - - beast\websocket - - - beast\websocket\impl - - - beast\websocket\impl - - - beast\websocket\impl - - - beast\websocket\impl - - - beast\websocket\impl - - - beast\websocket\impl - - - beast\websocket\impl - - - beast\websocket\impl - - - beast\websocket\impl - - - beast\websocket\impl - - - beast\websocket\impl - - - beast\websocket - - - beast\websocket - - - beast\websocket - - - beast\websocket - - - beast\websocket - - - beast\zlib - - - beast\zlib\detail - - - beast\zlib\detail - - - beast\zlib\detail - - - beast\zlib\detail - - - beast\zlib\detail - - - beast\zlib - - - beast\zlib\impl - - - beast\zlib - - - beast\zlib - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - ed25519-donna - - - lz4\lib - - - lz4\lib - - - lz4\lib - - - lz4\lib - - - nudb - - - nudb - - - nudb - - - nudb\detail - - - nudb\detail - - - nudb\detail - - - nudb\detail - - - nudb\detail - - - nudb\detail - - - nudb\detail - - - nudb\detail - - - nudb\detail - - - nudb\detail - - - nudb\detail - - - nudb\detail - - - nudb\detail - - - nudb - - - nudb - - - nudb\impl - - - nudb\impl - - - nudb\impl - - - nudb\impl - - - nudb\impl - - - nudb\impl - - - nudb\impl - - - nudb\impl - - - nudb\impl - - - nudb - - - nudb - - - nudb - - - nudb - - - nudb - - - nudb - - - nudb - - - nudb - - - nudb - - - nudb - - - nudb - - - nudb - - - nudb - - - protobuf\src\google\protobuf\compiler - - - protobuf\src\google\protobuf\compiler - - - protobuf\src\google\protobuf\compiler - - - protobuf\src\google\protobuf\compiler - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf\io - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\stubs - - - protobuf\src\google\protobuf\testing - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\src\google\protobuf - - - protobuf\vsprojects - - - ripple\app\consensus - - - ripple\app\consensus - - - ripple\app\consensus - - - ripple\app\consensus - - - ripple\app\consensus - - - ripple\app\consensus - - - ripple\app\consensus - - - ripple\app\consensus - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger\impl - - - ripple\app\ledger\impl - - - ripple\app\ledger\impl - - - ripple\app\ledger\impl - - - ripple\app\ledger\impl - - - ripple\app\ledger\impl - - - ripple\app\ledger\impl - - - ripple\app\ledger\impl - - - ripple\app\ledger\impl - - - ripple\app\ledger\impl - - - ripple\app\ledger\impl - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\ledger - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\main - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc\detail - - - ripple\app\misc\detail - - - ripple\app\misc\detail - - - ripple\app\misc\detail - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc\impl - - - ripple\app\misc\impl - - - ripple\app\misc\impl - - - ripple\app\misc\impl - - - ripple\app\misc\impl - - - ripple\app\misc\impl - - - ripple\app\misc\impl - - - ripple\app\misc\impl - - - ripple\app\misc\impl - - - ripple\app\misc\impl - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\misc - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths\cursor - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths\impl - - - ripple\app\paths\impl - - - ripple\app\paths\impl - - - ripple\app\paths\impl - - - ripple\app\paths\impl - - - ripple\app\paths\impl - - - ripple\app\paths\impl - - - ripple\app\paths\impl - - - ripple\app\paths\impl - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\paths - - - ripple\app\tx - - - ripple\app\tx - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\app\tx\impl - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics\impl - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\basics - - - ripple\beast\asio - - - ripple\beast\asio - - - ripple\beast\asio - - - ripple\beast\clock - - - ripple\beast\clock - - - ripple\beast\clock - - - ripple\beast\clock - - - ripple\beast\container - - - ripple\beast\container - - - ripple\beast\container - - - ripple\beast\container - - - ripple\beast\container - - - ripple\beast\container - - - ripple\beast\container - - - ripple\beast\container - - - ripple\beast\container - - - ripple\beast\container - - - ripple\beast\container\detail - - - ripple\beast\container\detail - - - ripple\beast\container\detail - - - ripple\beast\container\detail - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\core - - - ripple\beast\crypto\detail - - - ripple\beast\crypto\detail - - - ripple\beast\crypto\detail - - - ripple\beast\crypto - - - ripple\beast\crypto - - - ripple\beast\crypto - - - ripple\beast\cxx17 - - - ripple\beast\hash - - - ripple\beast\hash - - - ripple\beast\hash - - - ripple\beast\hash\impl - - - ripple\beast\hash\impl - - - ripple\beast\hash\impl - - - ripple\beast\hash\impl - - - ripple\beast\hash\impl - - - ripple\beast\hash - - - ripple\beast\hash - - - ripple\beast\hash - - - ripple\beast\hash\tests - - - ripple\beast\hash - - - ripple\beast\hash - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight\impl - - - ripple\beast\insight\impl - - - ripple\beast\insight\impl - - - ripple\beast\insight\impl - - - ripple\beast\insight\impl - - - ripple\beast\insight\impl - - - ripple\beast\insight\impl - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\insight - - - ripple\beast\net\detail - - - ripple\beast\net\impl - - - ripple\beast\net\impl - - - ripple\beast\net\impl - - - ripple\beast\net\impl - - - ripple\beast\net - - - ripple\beast\net - - - ripple\beast\net - - - ripple\beast\net - - - ripple\beast\net - - - ripple\beast - - - ripple\beast - - - ripple\beast\unity - - - ripple\beast\unity - - - ripple\beast\unity - - - ripple\beast\unity - - - ripple\beast - - - ripple\beast\utility - - - ripple\beast\utility - - - ripple\beast\utility - - - ripple\beast\utility - - - ripple\beast\utility - - - ripple\beast\utility\src - - - ripple\beast\utility\src - - - ripple\beast\utility\src - - - ripple\beast\utility - - - ripple\beast\utility - - - ripple\beast\utility - - - ripple\beast\utility - - - ripple\beast - - - ripple\conditions - - - ripple\conditions - - - ripple\conditions\impl - - - ripple\conditions\impl - - - ripple\conditions\impl - - - ripple\conditions\impl - - - ripple\conditions\impl - - - ripple\conditions\impl - - - ripple\consensus - - - ripple\consensus - - - ripple\consensus - - - ripple\consensus - - - ripple\consensus - - - ripple\consensus - - - ripple\consensus - - - ripple\consensus - - - ripple\consensus - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core\impl - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\core - - - ripple\crypto - - - ripple\crypto - - - ripple\crypto\impl - - - ripple\crypto\impl - - - ripple\crypto\impl - - - ripple\crypto\impl - - - ripple\crypto\impl - - - ripple\crypto\impl - - - ripple\crypto\impl - - - ripple\crypto\impl - - - ripple\crypto - - - ripple\crypto - - - ripple\crypto - - - ripple\json\impl - - - ripple\json\impl - - - ripple\json\impl - - - ripple\json\impl - - - ripple\json\impl - - - ripple\json\impl - - - ripple\json\impl - - - ripple\json\impl - - - ripple\json\impl - - - ripple\json\impl - - - ripple\json - - - ripple\json - - - ripple\json - - - ripple\json - - - ripple\json - - - ripple\json - - - ripple\json - - - ripple\json - - - ripple\json - - - ripple\ledger - - - ripple\ledger - - - ripple\ledger - - - ripple\ledger - - - ripple\ledger - - - ripple\ledger - - - ripple\ledger\detail - - - ripple\ledger\detail - - - ripple\ledger\detail - - - ripple\ledger\detail - - - ripple\ledger\detail - - - ripple\ledger - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger\impl - - - ripple\ledger - - - ripple\ledger - - - ripple\ledger - - - ripple\ledger - - - ripple\ledger - - - ripple\ledger - - - ripple\ledger - - - ripple\net - - - ripple\net - - - ripple\net\impl - - - ripple\net\impl - - - ripple\net\impl - - - ripple\net\impl - - - ripple\net\impl - - - ripple\net\impl - - - ripple\net - - - ripple\net - - - ripple\net - - - ripple\net - - - ripple\net - - - ripple\nodestore - - - ripple\nodestore\backend - - - ripple\nodestore\backend - - - ripple\nodestore\backend - - - ripple\nodestore\backend - - - ripple\nodestore\backend - - - ripple\nodestore - - - ripple\nodestore - - - ripple\nodestore - - - ripple\nodestore - - - ripple\nodestore - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore\impl - - - ripple\nodestore - - - ripple\nodestore - - - ripple\nodestore - - - ripple\nodestore - - - ripple\nodestore - - - ripple\overlay - - - ripple\overlay - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay\impl - - - ripple\overlay - - - ripple\overlay - - - ripple\overlay - - - ripple\overlay - - - ripple\overlay - - - ripple\overlay - - - ripple\overlay - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder\impl - - - ripple\peerfinder - - - ripple\peerfinder - - - ripple\peerfinder - - - ripple\peerfinder\sim - - - ripple\peerfinder\sim - - - ripple\peerfinder\sim - - - ripple\peerfinder\sim - - - ripple\peerfinder\sim - - - ripple\peerfinder\sim - - - ripple\peerfinder - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol\impl - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\protocol - - - ripple\proto - - - ripple\resource - - - ripple\resource - - - ripple\resource - - - ripple\resource - - - ripple\resource - - - ripple\resource\impl - - - ripple\resource\impl - - - ripple\resource\impl - - - ripple\resource\impl - - - ripple\resource\impl - - - ripple\resource\impl - - - ripple\resource\impl - - - ripple\resource\impl - - - ripple\resource\impl - - - ripple\resource\impl - - - ripple\resource - - - ripple\resource - - - ripple\rpc - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\handlers - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc\impl - - - ripple\rpc - - - ripple\rpc - - - ripple\rpc - - - ripple\rpc - - - ripple\rpc - - - ripple\server - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server\impl - - - ripple\server - - - ripple\server - - - ripple\server - - - ripple\server - - - ripple\server - - - ripple\server - - - ripple\shamap - - - ripple\shamap - - - ripple\shamap\impl - - - ripple\shamap\impl - - - ripple\shamap\impl - - - ripple\shamap\impl - - - ripple\shamap\impl - - - ripple\shamap\impl - - - ripple\shamap\impl - - - ripple\shamap - - - ripple\shamap - - - ripple\shamap - - - ripple\shamap - - - ripple\shamap - - - ripple\shamap - - - ripple\shamap - - - ripple\shamap - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - ripple\unity - - - rocksdb2\cache - - - rocksdb2\cache - - - rocksdb2\cache - - - rocksdb2\cache - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\db - - - rocksdb2\env - - - rocksdb2\env - - - rocksdb2\env - - - rocksdb2\env - - - rocksdb2\env - - - rocksdb2\env - - - rocksdb2\env - - - rocksdb2\env - - - rocksdb2\hdfs - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb\utilities - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\include\rocksdb - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\memtable - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\monitoring - - - rocksdb2\options - - - rocksdb2\options - - - rocksdb2\options - - - rocksdb2\options - - - rocksdb2\options - - - rocksdb2\options - - - rocksdb2\options - - - rocksdb2\options - - - rocksdb2\options - - - rocksdb2\options - - - rocksdb2\options - - - rocksdb2\port - - - rocksdb2\port - - - rocksdb2\port - - - rocksdb2\port - - - rocksdb2\port - - - rocksdb2\port - - - rocksdb2\port - - - rocksdb2\port - - - rocksdb2\port\win - - - rocksdb2\port\win - - - rocksdb2\port\win - - - rocksdb2\port\win - - - rocksdb2\port - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\table - - - rocksdb2\third-party\fbson - - - rocksdb2\third-party\fbson - - - rocksdb2\third-party\fbson - - - rocksdb2\third-party\fbson - - - rocksdb2\third-party\fbson - - - rocksdb2\tools - - - rocksdb2\utilities\backupable - - - rocksdb2\utilities\checkpoint - - - rocksdb2\utilities\checkpoint - - - rocksdb2\utilities\document - - - rocksdb2\utilities\document - - - rocksdb2\utilities\document - - - rocksdb2\utilities\geodb - - - rocksdb2\utilities\geodb - - - rocksdb2\utilities - - - rocksdb2\utilities\merge_operators - - - rocksdb2\utilities\merge_operators\string_append - - - rocksdb2\utilities\merge_operators\string_append - - - rocksdb2\utilities\merge_operators\string_append - - - rocksdb2\utilities\merge_operators\string_append - - - rocksdb2\utilities\merge_operators - - - rocksdb2\utilities\redis - - - rocksdb2\utilities\redis - - - rocksdb2\utilities\redis - - - rocksdb2\utilities\redis - - - rocksdb2\utilities\spatialdb - - - rocksdb2\utilities\spatialdb - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\transactions - - - rocksdb2\utilities\ttl - - - rocksdb2\utilities\ttl - - - rocksdb2\utilities\write_batch_with_index - - - rocksdb2\utilities\write_batch_with_index - - - rocksdb2\utilities\write_batch_with_index - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - rocksdb2\util - - - secp256k1\include - - - secp256k1\include - - - secp256k1\include - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src\modules\ecdh - - - secp256k1\src\modules\recovery - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - secp256k1\src - - - snappy\config - - - snappy\snappy - - - snappy\snappy - - - snappy\snappy - - - snappy\snappy - - - snappy\snappy - - - snappy\snappy - - - snappy\snappy - - - soci\include\private - - - soci\include\private - - - soci\include\private - - - soci\include\private - - - soci\include\private - - - soci\include\private - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci\sqlite3 - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\include\soci - - - soci\src\backends\sqlite3 - - - soci\src\backends\sqlite3 - - - soci\src\backends\sqlite3 - - - soci\src\backends\sqlite3 - - - soci\src\backends\sqlite3 - - - soci\src\backends\sqlite3 - - - soci\src\backends\sqlite3 - - - soci\src\backends\sqlite3 - - - soci\src\backends\sqlite3 - - - soci\src\backends\sqlite3 - - - soci\src\backends\sqlite3 - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - soci\src\core - - - sqlite - - - sqlite - - - sqlite\sqlite - - - sqlite\sqlite - - - sqlite - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\app - - - test\basics - - - test\basics - - - test\basics - - - test\basics - - - test\basics - - - test\basics - - - test\basics - - - test\basics - - - test\basics - - - test\basics - - - test\basics - - - test\basics - - - test\basics - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\beast - - - test\conditions - - - test\consensus - - - test\consensus - - - test\consensus - - - test\consensus - - - test\consensus - - - test\consensus - - - test\consensus - - - test\core - - - test\core - - - test\core - - - test\core - - - test\core - - - test\core - - - test\core - - - test\core - - - test\core - - - test - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf\impl - - - test\csf\impl - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\csf - - - test\json - - - test\json - - - test\json - - - test\json - - - test\json - - - test - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx\impl - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\jtx - - - test\ledger - - - test\ledger - - - test\ledger - - - test\ledger - - - test\ledger - - - test\ledger - - - test\ledger - - - test\ledger - - - test\ledger - - - test\nodestore - - - test\nodestore - - - test\nodestore - - - test\nodestore - - - test\nodestore - - - test\nodestore - - - test\nodestore - - - test\overlay - - - test\overlay - - - test\overlay - - - test\peerfinder - - - test\peerfinder - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\protocol - - - test\resource - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\rpc - - - test\server - - - test\server - - - test\shamap - - - test\shamap - - - test\shamap - - - test\shamap - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unity - - - test\unit_test - - - test\unit_test - - - diff --git a/Builds/VisualStudio2015/images/NoDebugHeapPropPage.png b/Builds/VisualStudio2015/images/NoDebugHeapPropPage.png deleted file mode 100644 index 63f5e252faad4b81e27d4a8ae7cf61b743e59db9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34285 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 diff --git a/Builds/VisualStudio2015/images/VS2015x64IncludeDirs.png b/Builds/VisualStudio2015/images/VS2015x64IncludeDirs.png deleted file mode 100644 index 6d9b490db3813e9b61130413d929df18673aa62b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68334 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 diff --git a/Builds/VisualStudio2015/images/VS2015x64LibraryDirs.png b/Builds/VisualStudio2015/images/VS2015x64LibraryDirs.png deleted file mode 100644 index c6546a79e4c49cc96055bf999690a01ca345acd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68136 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 diff --git a/Builds/VisualStudio2015/images/VS2015x64Properties.png b/Builds/VisualStudio2015/images/VS2015x64Properties.png deleted file mode 100644 index c0c35803e77b2b0d8d2bd52998272ee9dd321988..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15609 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 ASO5S3 diff --git a/Builds/VisualStudio2015/images/VSCommandArgsPropPage.png b/Builds/VisualStudio2015/images/VSCommandArgsPropPage.png deleted file mode 100644 index 7bb6d602706c35cc37273e6cb1dca78425ac08d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19676 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 +``` + +### (Optional) Dependencies for Building Source Documentation + +Source code documentation is not required for running/debugging rippled. That +said, the documentation contains some helpful information about specific +components of the application. For more information on how to install and run +the necessary components, see [this document](../../docs/README.md) + +## Build + +### Clone the rippled repository + +From a shell: + +``` +git clone git@github.com:ripple/rippled.git +cd rippled +``` + +For a stable release, choose the `master` branch or one of the tagged releases +listed on [GitHub](https://github.com/ripple/rippled/releases). + +``` +git checkout master +``` + +or to test the latest release candidate, choose the `release` branch. + +``` +git checkout release +``` + +If you are doing development work and want the latest set of untested +features, you can consider using the `develop` branch instead. + +``` +git checkout develop +``` + +### Configure Library Paths + +If you didn't persistently set the `BOOST_ROOT` environment variable to the +directory in which you compiled boost, then you should set it temporarily. + +For example, you built Boost in your home directory `~/boost_1_65_1`, you +would do for any shell in which you want to build: + +``` +export BOOST_ROOT=~/boost_1_65_1 +``` + +Alternatively, you can add `DBOOST_ROOT=~/boost_1_65_1` to the command line when +invoking `cmake`. + +### Generate and Build + +All builds should be done in a separate directory from the source tree root +(a subdirectory is fine). For example, from the root of the ripple source tree: + +``` +mkdir my_build +cd my_build +``` + +followed by: + +``` +cmake -Dtarget=gcc.debug.unity .. +``` + +The target variable can be adjusted as needed for `gcc` vs `clang`, `debug` vs. +`release` and `unity` vs. `nounity` builds. `unity` builds are typically faster +to compile but run the risk of ODR violations given that multiple compilation +units are merged together at compile time. `nounity` builds will take longer to +compile but align more closely with language standards. + +Once you have generated the build system, you can run the build via cmake: + +``` +cmake --build . -- -j +``` + +the `-j` parameter in this example tells the build tool to compile several +files in parallel. This value should be chosen roughly based on the number of +cores you have available and/or want to use for building. + +When the build completes succesfully, you will have a `rippled` executable in +the current directory, which can be used to connect to the network (when +properly configured) or to run unit tests. + +#### Options During Configuration: + +There are a number of config variables that our CMake files support. These +can be added to the cmake generation command as needed: + +* `-Dassert=ON` to enable asserts +* `-Djemalloc=ON` to enable jemalloc support for heap checking +* `-Dsan=thread` to enable the thread sanitizer with clang +* `-Dsan=address` to enable the address sanitizer with clang +* `-Dstatic=ON` to enable static linking library dependencies + +## Unit Tests (Recommended) + +`rippled` builds a set of unit tests into the server executable. To run these unit +tests after building, pass the `--unittest` option to the compiled `rippled` +executable. The executable will exit with summary info after running the unit tests. + + diff --git a/Builds/travis/clang.boost.patch b/Builds/travis/clang.boost.patch deleted file mode 100644 index 7234a99970..0000000000 --- a/Builds/travis/clang.boost.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- /usr/include/boost/config/compiler/clang.hpp 2013-07-20 13:17:10.000000000 -0400 -+++ /usr/include/boost/config/compiler/clang.rippled.hpp 2014-03-11 16:40:51.000000000 -0400 -@@ -39,6 +39,10 @@ - // Clang supports "long long" in all compilation modes. - #define BOOST_HAS_LONG_LONG - -+#if defined(__SIZEOF_INT128__) -+# define BOOST_HAS_INT128 -+#endif -+ - // - // Dynamic shared object (DSO) and dynamic-link library (DLL) support - // diff --git a/Builds/travis/static_error.boost.patch b/Builds/travis/static_error.boost.patch deleted file mode 100644 index 68a34b1796..0000000000 --- a/Builds/travis/static_error.boost.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- /usr/include/boost/bimap/detail/debug/static_error.hpp 2008-03-22 17:45:55.000000000 -0400 -+++ /usr/include/boost/bimap/detail/debug/static_error.rippled.hpp 2014-03-12 19:40:05.000000000 -0400 -@@ -25,7 +25,6 @@ - // a static error. - /*===========================================================================*/ - #define BOOST_BIMAP_STATIC_ERROR(MESSAGE,VARIABLES) \ -- struct BOOST_PP_CAT(BIMAP_STATIC_ERROR__,MESSAGE) {}; \ - BOOST_MPL_ASSERT_MSG(false, \ - BOOST_PP_CAT(BIMAP_STATIC_ERROR__,MESSAGE), \ - VARIABLES) diff --git a/CMakeLists.txt b/CMakeLists.txt index c8c4a2fd41..15f9bc7aab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,63 +1,58 @@ -# !!! The official build system is SConstruct !!! -# This is an experimental cmake build file for rippled +# cmake support for building rippled. The rippled specific settings +# below can be set at the command line as `-D=`. # -# cmake support in rippled. Currently supports: +# * `target` is a period separated tuple from the sets +# {gcc,clang,msvc} x {debug, release} x {unity, nounity} x {coverage} x {profile} # -# * unity/nounity debug/release -# * running protobuf -# * sanitizer builds -# * optional release build with assert turned on -# * `target` variable to easily set compiler/debug/unity -# (i.e. -Dtarget=gcc.debug.nounity) -# * gcc/clang/visual studio/xcode -# * linux/mac/win -# * gcc 4 ABI, when needed -# * ninja builds -# * check openssl version on linux -# * static builds (swd TBD: needs to be tested by building & deploying on different systems) -# * jemalloc enabled builds (linux and macos only) -# * perf builds (linux only) - which just sets recommended compiler flags -# for running perf on the executable +# Example, build gcc debug nonunity build +# -Dtarget=gcc.debug.nounity +# Example, clang release unity build +# -Dtarget=clang.release.unity +# Example, visual studio debug unity build +# -Dtarget=msvc.release.unity +# Example, build gcc release unity build suited for profiling with perf +# -Dtarget=gcc.release.unity.profile +# Example, build gcc debug unity build suited for measuring code coverage +# with gcov +# -Dtarget=gcc.release.unity.coverage # -# Notes: -# * Use the -G"Visual Studio 14 2015 Win64" generator, or the "VS2015 x86 x64 -# Cross Tools" Command Prompt on Windows. Without this a 32-bit project will be -# created. There is no way to set the generator or force a 64-bit build in -# CMakeLists.txt (setting CMAKE_GENERATOR_PLATFORM won't work). The best solution -# may be to wrap cmake with a script. # -# * Ninja command line builds seem to work under Windows, but only from within -# the "VS2015 x86 x64 Cross Tools" Command Prompt. +# The default is a unity debug build using gcc (linux), clang (osx), and +# msvc (windows). # -# * It is not possible to generate a visual studio project on linux or -# mac. The visual studio generator is only available on windows. +# Note the generated Visual Studio solution will always have two projects, +# one unity and one non-unity. If the `target` is unity, the default project +# will be named `rippled` and second non-default (non-unity) project +# will be called `rippled_classic`. Likewise, if the `target` is non-unity, +# the project will have a default project called `rippled` (now non-unity) +# and second non-default (unity) project `rippled_unity`. In either +# case, only the `rippled` build will be enabled by default. # -# * The Visual Studio solution will be generated with two projects, one -# unity, one non-unity. Which is default depends on the nounity flag in -# -Dtarget. Unity targets will create `rippled` and `rippled_classic`. -# Non-unity targets will create `rippled` and `rippled_unity`. In either -# case, only the `rippled` build will be enabled by default. It does -# not appear possible to include both unity and non-unity configs in one -# project and disable compilation based on configuration. +# * `assert` whether to enable asserts in release build # -# * Language is _much_ worse than python, poor documentation and "quirky" -# language support (for example, generator expressions can only be used -# in limited contexts and seem to work differently based on -# context (set_property can set multiple values, add_compile_options -# can not/or is buggy) +# Example, enable asserts even in release builds +# -Dassert=True # -# * Could not call out to `sed` because cmake messed with the regular -# expression before calling the external command. I did not see a way -# around this. +# Default is not to enable asserts in release builds. +# +# * `san` enable clang sanitizers +# +# Example, enable thread sanitizer +# -Dsan=thread +# Example, enable address sanitizer +# -Dsan=address +# +# * `static`, on linux, link protobuf, openssl, libc++, and boost +# statically. +# +# Example, enable static linking +# -Dstatic=True +# +# * `jemalloc`, on linux, enables jemalloc for heap profiling. +# +# Example, enable jemalloc +# -Djemallc=True # -# * Makefile generators want to be single target. It wants a separate -# directory for each target type. I saw some mentions on the web for -# ways around this bug haven't look into it. The visual studio project -# does support debug/release configurations in the same project (but -# not unity/non-unity). - -############################################################ - ######################################################### # CMAKE_C_COMPILER and CMAKE_CXX_COMPILER must be defined # before the project statement; However, the project diff --git a/README.md b/README.md index da59daccc5..de7e8cbdb1 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ ISC license. See the LICENSE file for more details. |---------|----------| | ./bin | Scripts and data files for Ripple integrators. | | ./build | Intermediate and final build outputs. | -| ./Builds| Platform or IDE-specific project files. | +| ./Builds| Platform-specific guides for building rippled. | | ./docs | Source documentation files and doxygen config. | | ./cfg | Example configuration files. | | ./src | Source code. | diff --git a/SConstruct b/SConstruct deleted file mode 100644 index 7d485dfd98..0000000000 --- a/SConstruct +++ /dev/null @@ -1,1314 +0,0 @@ -# rippled SConstruct -# -''' - - Target Builds - ---------------------------------------------------------------------------- - - Same as 'install' - install Default target and copies it to build/rippled (default) - - all All available variants - debug All available debug variants - release All available release variants - profile All available profile variants - - clang All clang variants - clang.debug clang debug variant - clang.coverage clang coverage variant - clang.release clang release variant - clang.profile clang profile variant - - gcc All gcc variants - gcc.debug gcc debug variant - gcc.coverage gcc coverage variant - gcc.release gcc release variant - gcc.profile gcc profile variant - - msvc All msvc variants - msvc.debug MSVC debug variant - msvc.release MSVC release variant - - vcxproj Generate Visual Studio 2013 project file - - count Show line count metrics - - Any individual target can also have ".nounity" appended for a classic, - non unity build. Example: - - scons gcc.debug.nounity - -If the clang toolchain is detected, then the default target will use it, else -the gcc toolchain will be used. On Windows environments, the MSVC toolchain is -also detected. - -The following environment variables modify the build environment: - CLANG_CC - CLANG_CXX - CLANG_LINK - If set, a clang toolchain will be used. These must all be set together. - - GNU_CC - GNU_CXX - GNU_LINK - If set, a gcc toolchain will be used (unless a clang toolchain is - detected first). These must all be set together. - - CXX - If set, used to detect a toolchain. - - BOOST_ROOT - Path to the boost directory. - OPENSSL_ROOT - Path to the openssl directory. - PROTOBUF_ROOT - Path to the protobuf directory. - CLANG_PROTOBUF_ROOT - Override the path to the protobuf directory for the clang toolset. This is - usually only needed when the installed protobuf library uses a different - ABI than clang (as with ubuntu 15.10). - CLANG_BOOST_ROOT - Override the path to the boost directory for the clang toolset. This is - usually only needed when the installed protobuf library uses a different - ABI than clang (as with ubuntu 15.10). - -The following extra options may be used: - --ninja Generate a `build.ninja` build file for the specified target - (see: https://martine.github.io/ninja/). Only gcc and clang targets - are supported. - - --static On linux, link protobuf, openssl, libc++, and boost statically - - --sanitize=[address, thread] On gcc & clang, add sanitizer instrumentation - - --assert Enable asserts, even in release builds. - -GCC 5: If the gcc toolchain is used, gcc version 5 or better is required. On - linux distros that ship with gcc 4 (ubuntu < 15.10), rippled will force gcc - to use gcc4's ABI (there was an ABI change between versions). This allows us - to use the package manager to install rippled dependencies. It also means if - the user builds C++ dependencies themselves - such as boost - they must - either be built with gcc 4 or with the preprocessor flag - `_GLIBCXX_USE_CXX11_ABI` set to zero. - -Clang on linux: Clang cannot use the new gcc 5 ABI (clang does not know about - the `abi_tag` attribute). On linux distros that ship with the gcc 5 ABI - (ubuntu >= 15.10), building with clang requires building boost and protobuf - with the old ABI (best to build them with clang). It is best to statically - link rippled in this scenario (use the `--static` with scons), as dynamic - linking may use a library with the incorrect ABI. - - -''' -# -''' - -TODO - -- Fix git-describe support -- Fix printing exemplar command lines -- Fix toolchain detection - - -''' -#------------------------------------------------------------------------------- - -import collections -import os -import platform -import subprocess -import sys -import textwrap -import time -import glob -import SCons.Action - -if (not platform.machine().endswith('64')): - print('Warning: Detected {} architecture. Rippled requires a 64-bit OS.'.format( - platform.machine())); - -sys.path.append(os.path.join('src', 'ripple', 'beast', 'site_scons')) -sys.path.append(os.path.join('src', 'ripple', 'site_scons')) - -import Beast -import scons_to_ninja - -#------------------------------------------------------------------------------ - -AddOption('--ninja', dest='ninja', action='store_true', - help='generate ninja build file build.ninja') - -AddOption('--sanitize', dest='sanitize', choices=['address', 'thread'], - help='Build with sanitizer support (gcc and clang only).') - -AddOption('--static', dest='static', action='store_true', - help='On linux, link protobuf, openssl, libc++, and boost statically') - -AddOption('--assert', dest='assert', action='store_true', - help='Enable asserts, even in release mode') - -def parse_time(t): - l = len(t.split()) - if l==5: - return time.strptime(t, '%a %b %d %H:%M:%S %Y') - elif l==3: - return time.strptime(t, '%d %b %Y') - else: - return time.strptime(t, '%a %b %d %H:%M:%S %Z %Y') - -UNITY_BUILD_DIRECTORY = 'src/ripple/unity/' - -def memoize(function): - memo = {} - def wrapper(*args): - if args in memo: - return memo[args] - else: - rv = function(*args) - memo[args] = rv - return rv - return wrapper - -def check_openssl(): - if Beast.system.platform not in ['Debian', 'Ubuntu']: - return - line = subprocess.check_output('openssl version -b'.split()).strip() - check_line = 'built on: ' - if not line.startswith(check_line): - raise Exception("Didn't find any '%s' line in '$ %s'" % - (check_line, 'openssl version -b')) - d = line[len(check_line):] - if 'date unspecified' in d: - words = subprocess.check_output('openssl version'.split()).split() - if len(words)!=5: - raise Exception("Didn't find version date in '$ openssl version'") - d = ' '.join(words[-3:]) - build_time = 'Mon Apr 7 20:33:19 UTC 2014' - if parse_time(d) < parse_time(build_time): - raise Exception('Your openSSL was built on %s; ' - 'rippled needs a version built on or after %s.' - % (line, build_time)) - - -def set_implicit_cache(): - '''Use implicit_cache on some targets to improve build times. - - By default, scons scans each file for include dependecies. The implicit - cache flag lets you cache these dependencies for later builds, and will - only rescan files that change. - - Failure cases are: - 1) If the include search paths are changed (i.e. CPPPATH), then a file - may not be rebuilt. - 2) If a same-named file has been added to a directory that is earlier in - the search path than the directory in which the file was found. - Turn on if this build is for a specific debug target (i.e. clang.debug) - - If one of the failure cases applies, you can force a rescan of dependencies - using the command line option `--implicit-deps-changed` - ''' - if len(COMMAND_LINE_TARGETS) == 1: - s = COMMAND_LINE_TARGETS[0].split('.') - if len(s) > 1 and 'debug' in s: - SetOption('implicit_cache', 1) - - -def import_environ(env): - '''Imports environment settings into the construction environment''' - def set(keys): - if type(keys) == list: - for key in keys: - set(key) - return - if keys in os.environ: - value = os.environ[keys] - env[keys] = value - set(['GNU_CC', 'GNU_CXX', 'GNU_LINK']) - set(['CLANG_CC', 'CLANG_CXX', 'CLANG_LINK']) - -def detect_toolchains(env): - def is_compiler(comp_from, comp_to): - return comp_from and comp_to in comp_from - - def detect_clang(env): - n = sum(x in env for x in ['CLANG_CC', 'CLANG_CXX', 'CLANG_LINK']) - if n > 0: - if n == 3: - return True - raise ValueError('CLANG_CC, CLANG_CXX, and CLANG_LINK must be set together') - cc = env.get('CC') - cxx = env.get('CXX') - link = env.subst(env.get('LINK')) - if (cc and cxx and link and - is_compiler(cc, 'clang') and - is_compiler(cxx, 'clang') and - is_compiler(link, 'clang')): - env['CLANG_CC'] = cc - env['CLANG_CXX'] = cxx - env['CLANG_LINK'] = link - return True - cc = env.WhereIs('clang') - cxx = env.WhereIs('clang++') - link = cxx - if (is_compiler(cc, 'clang') and - is_compiler(cxx, 'clang') and - is_compiler(link, 'clang')): - env['CLANG_CC'] = cc - env['CLANG_CXX'] = cxx - env['CLANG_LINK'] = link - return True - env['CLANG_CC'] = 'clang' - env['CLANG_CXX'] = 'clang++' - env['CLANG_LINK'] = env['LINK'] - return False - - def detect_gcc(env): - n = sum(x in env for x in ['GNU_CC', 'GNU_CXX', 'GNU_LINK']) - if n > 0: - if n == 3: - return True - raise ValueError('GNU_CC, GNU_CXX, and GNU_LINK must be set together') - cc = env.get('CC') - cxx = env.get('CXX') - link = env.subst(env.get('LINK')) - if (cc and cxx and link and - is_compiler(cc, 'gcc') and - is_compiler(cxx, 'g++') and - is_compiler(link, 'g++')): - env['GNU_CC'] = cc - env['GNU_CXX'] = cxx - env['GNU_LINK'] = link - return True - cc = env.WhereIs('gcc') - cxx = env.WhereIs('g++') - link = cxx - if (is_compiler(cc, 'gcc') and - is_compiler(cxx, 'g++') and - is_compiler(link, 'g++')): - env['GNU_CC'] = cc - env['GNU_CXX'] = cxx - env['GNU_LINK'] = link - return True - env['GNU_CC'] = 'gcc' - env['GNU_CXX'] = 'g++' - env['GNU_LINK'] = env['LINK'] - return False - - toolchains = [] - if detect_clang(env): - toolchains.append('clang') - if detect_gcc(env): - toolchains.append('gcc') - if env.Detect('cl'): - toolchains.append('msvc') - return toolchains - -def files(base): - def _iter(base): - for parent, _, files in os.walk(base): - for path in files: - path = os.path.join(parent, path) - yield os.path.normpath(path) - return list(_iter(base)) - -def print_coms(target, source, env): - '''Display command line exemplars for an environment''' - print ('Target: ' + Beast.yellow(str(target[0]))) - # TODO Add 'PROTOCCOM' to this list and make it work - Beast.print_coms(['CXXCOM', 'CCCOM', 'LINKCOM'], env) - -def is_debug_variant(variant): - return variant in ('debug', 'coverage') - -@memoize -def is_ubuntu(): - try: - return "Ubuntu" == subprocess.check_output(['lsb_release', '-si'], - stderr=subprocess.STDOUT).strip() - except: - return False - -@memoize -def use_gcc4_abi(cc_cmd): - if os.getenv('RIPPLED_OLD_GCC_ABI'): - return True - gcc_ver = '' - ubuntu_ver = None - try: - if 'gcc' in cc_cmd: - gcc_ver = subprocess.check_output([cc_cmd, '-dumpversion'], - stderr=subprocess.STDOUT).strip() - else: - gcc_ver = '5' # assume gcc 5 for ABI purposes for clang - - if is_ubuntu(): - ubuntu_ver = float( - subprocess.check_output(['lsb_release', '-sr'], - stderr=subprocess.STDOUT).strip()) - except: - print("Unable to determine gcc version. Assuming native ABI.") - return False - if ubuntu_ver and ubuntu_ver < 15.1 and gcc_ver.startswith('5'): - return True - return False - -#------------------------------------------------------------------------------- - -# Set construction variables for the base environment -def config_base(env): - if False: - env.Replace( - CCCOMSTR='Compiling ' + Beast.blue('$SOURCES'), - CXXCOMSTR='Compiling ' + Beast.blue('$SOURCES'), - LINKCOMSTR='Linking ' + Beast.blue('$TARGET'), - ) - check_openssl() - - env.Append(CPPDEFINES=[ - 'OPENSSL_NO_SSL2' - ,'DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER' - ,{'HAVE_USLEEP' : '1'} - ,{'SOCI_CXX_C11' : '1'} - ,'_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS' - ,'BOOST_NO_AUTO_PTR' - ]) - - if Beast.system.windows: - try: - OPENSSL_ROOT = os.path.normpath(os.environ['OPENSSL_ROOT']) - env.Append(CPPPATH=[ - os.path.join(OPENSSL_ROOT, 'include'), - ]) - env.Append(LIBPATH=[ - os.path.join(OPENSSL_ROOT, 'lib'), - ]) - except KeyError: - pass - elif Beast.system.osx: - try: - openssl = subprocess.check_output(['brew', '--prefix','openssl'], - stderr=subprocess.STDOUT).strip() - env.Prepend(CPPPATH='%s/include' % openssl) - env.Prepend(LIBPATH=['%s/lib' % openssl]) - except: - pass - - # handle command-line arguments - profile_jemalloc = ARGUMENTS.get('profile-jemalloc') - if profile_jemalloc: - env.Append(CPPDEFINES={'PROFILE_JEMALLOC' : profile_jemalloc}) - env.Append(LIBS=['jemalloc']) - env.Append(LIBPATH=[os.path.join(profile_jemalloc, 'lib')]) - env.Append(CPPPATH=[os.path.join(profile_jemalloc, 'include')]) - env.Append(LINKFLAGS=['-Wl,-rpath,' + os.path.join(profile_jemalloc, 'lib')]) - -def add_static_libs(env, static_libs, dyn_libs=None): - if not 'HASSTATICLIBS' in env: - env['HASSTATICLIBS'] = True - env.Replace(LINKCOM=env['LINKCOM'] + " -Wl,-Bstatic $STATICLIBS -Wl,-Bdynamic $DYNAMICLIBS") - for k,l in [('STATICLIBS', static_libs or []), ('DYNAMICLIBS', dyn_libs or [])]: - c = env.get(k, '') - for f in l: - c += ' -l' + f - env[k] = c - -def get_libs(lib, static): - '''Returns a tuple of lists. The first element is the static libs, - the second element is the dynamic libs - ''' - always_dynamic = ['dl', 'pthread', 'z', # for ubuntu - 'gssapi_krb5', 'krb5', 'com_err', 'k5crypto', # for fedora - ] - try: - cmd = ['pkg-config', '--static', '--libs', lib] - libs = subprocess.check_output(cmd, - stderr=subprocess.STDOUT).strip().decode("utf-8") - all_libs = [l[2:] for l in libs.split() if l.startswith('-l')] - if not static: - return ([], all_libs) - static_libs = [] - dynamic_libs = [] - for l in all_libs: - if l in always_dynamic: - dynamic_libs.append(l) - else: - static_libs.append(l) - return (static_libs, dynamic_libs) - except Exception as e: - raise Exception('pkg-config failed for ' + lib + '; Exception: ' + str(e)) - -def add_sanitizer (toolchain, env): - san = GetOption('sanitize') - if not san: return - san_to_lib = {'address': 'asan', 'thread': 'tsan'} - if toolchain not in Split('clang gcc'): - raise Exception("Sanitizers are only supported for gcc and clang") - env.Append(CCFLAGS=['-fsanitize='+san, '-fno-omit-frame-pointer']) - env.Append(LINKFLAGS=['-fsanitize='+san]) - if toolchain in['gcc']: - add_static_libs(env, [san_to_lib[san]]) - env.Append(CPPDEFINES=['SANITIZER='+san_to_lib[san].upper()]) - -def add_boost_and_protobuf(toolchain, env): - def get_environ_value(candidates): - for c in candidates: - try: - return os.environ[c] - except KeyError: - pass - raise KeyError('Environment variable not set') - - try: - br_cands = ['CLANG_BOOST_ROOT'] if toolchain == 'clang' else [] - br_cands.append('BOOST_ROOT') - BOOST_ROOT = os.path.normpath(get_environ_value(br_cands)) - stage64_path = os.path.join(BOOST_ROOT, 'stage64', 'lib') - if os.path.exists(stage64_path): - env.Append(LIBPATH=[ - stage64_path, - ]) - else: - env.Append(LIBPATH=[ - os.path.join(BOOST_ROOT, 'stage', 'lib'), - ]) - env['BOOST_ROOT'] = BOOST_ROOT - if toolchain in ['gcc', 'clang']: - env.Append(CCFLAGS=['-isystem' + env['BOOST_ROOT']]) - else: - env.Append(CPPPATH=[ - env['BOOST_ROOT'], - ]) - except KeyError: - pass - - try: - pb_cands = ['CLANG_PROTOBUF_ROOT'] if toolchain == 'clang' else [] - pb_cands.append('PROTOBUF_ROOT') - PROTOBUF_ROOT = os.path.normpath(get_environ_value(pb_cands)) - env.Append(LIBPATH=[PROTOBUF_ROOT + '/src/.libs']) - if not should_link_static() and toolchain in['clang', 'gcc']: - env.Append(LINKFLAGS=['-Wl,-rpath,' + PROTOBUF_ROOT + '/src/.libs']) - env['PROTOBUF_ROOT'] = PROTOBUF_ROOT - env.Append(CPPPATH=[env['PROTOBUF_ROOT'] + '/src',]) - except KeyError: - pass - -def enable_asserts (): - return GetOption('assert') - -# Set toolchain and variant specific construction variables -def config_env(toolchain, variant, env): - add_boost_and_protobuf(toolchain, env) - env.Append(CPPDEFINES=[ - 'BOOST_COROUTINE_NO_DEPRECATION_WARNING', - 'BOOST_COROUTINES_NO_DEPRECATION_WARNING' - ]) - if is_debug_variant(variant): - env.Append(CPPDEFINES=['DEBUG', '_DEBUG']) - - elif (variant == 'release' or variant == 'profile') and (not enable_asserts()): - env.Append(CPPDEFINES=['NDEBUG']) - - if should_link_static() and not Beast.system.linux: - raise Exception("Static linking is only implemented for linux.") - - add_sanitizer(toolchain, env) - - if toolchain in Split('clang gcc'): - if Beast.system.linux: - link_static = should_link_static() - for l in ['openssl', 'protobuf']: - static, dynamic = get_libs(l, link_static) - if link_static: - add_static_libs(env, static, dynamic) - else: - env.Append(LIBS=dynamic) - env.ParseConfig('pkg-config --static --cflags ' + l) - - env.Prepend(CFLAGS=['-Wall']) - env.Prepend(CXXFLAGS=['-Wall']) - - env.Append(CCFLAGS=[ - '-Wno-sign-compare', - '-Wno-char-subscripts', - '-Wno-format', - '-g' # generate debug symbols - ]) - - env.Append(LINKFLAGS=[ - '-rdynamic', - '-g', - ]) - - if variant == 'profile': - env.Append(CCFLAGS=[ - '-p', - '-pg', - ]) - env.Append(LINKFLAGS=[ - '-p', - '-pg', - ]) - - if toolchain == 'clang': - env.Append(CCFLAGS=['-Wno-redeclared-class-member']) - env.Append(CPPDEFINES=['BOOST_ASIO_HAS_STD_ARRAY']) - try: - ldd_ver = subprocess.check_output([env['CLANG_CXX'], '-fuse-ld=lld', '-Wl,--version'], - stderr=subprocess.STDOUT).strip() - # have lld - env.Append(LINKFLAGS=['-fuse-ld=lld']) - except: - pass - - env.Append(CXXFLAGS=[ - '-frtti', - '-std=c++14', - '-Wno-invalid-offsetof', - '-Wdeprecated' - ]) - - env.Append(CPPDEFINES=['_FILE_OFFSET_BITS=64']) - - if Beast.system.osx: - env.Append(CPPDEFINES={ - 'BEAST_COMPILE_OBJECTIVE_CPP': 1, - }) - - # These should be the same regardless of platform... - if Beast.system.osx: - env.Append(CCFLAGS=[ - '-Wno-deprecated-declarations', - '-Wno-unused-function', - ]) - else: - if should_link_static(): - env.Append(LINKFLAGS=[ - '-static-libstdc++', - ]) - if use_gcc4_abi(env['CC'] if 'CC' in env else 'gcc'): - env.Append(CPPDEFINES={ - '-D_GLIBCXX_USE_CXX11_ABI' : 0 - }) - if toolchain == 'gcc': - env.Append(CCFLAGS=[ - '-Wno-unused-but-set-variable', - '-Wno-deprecated', - ]) - try: - ldd_ver = subprocess.check_output([env['GNU_CXX'], '-fuse-ld=gold', '-Wl,--version'], - stderr=subprocess.STDOUT).strip() - # have ld.gold - env.Append(LINKFLAGS=['-fuse-ld=gold']) - except: - pass - - boost_libs = [ - # resist the temptation to alphabetize these. coroutine - # must come before context. - 'boost_chrono', - 'boost_coroutine', - 'boost_context', - 'boost_date_time', - 'boost_filesystem', - 'boost_program_options', - 'boost_regex', - 'boost_system', - 'boost_thread', - 'boost_serialization' - ] - env.Append(LIBS=['dl']) - - if should_link_static(): - add_static_libs(env, boost_libs) - else: - # We prefer static libraries for boost - if env.get('BOOST_ROOT'): - static_libs64 = ['%s/stage64/lib/lib%s.a' % (env['BOOST_ROOT'], l) for - l in boost_libs] - static_libs = ['%s/stage/lib/lib%s.a' % (env['BOOST_ROOT'], l) for - l in boost_libs] - if all(os.path.exists(f) for f in static_libs64): - boost_libs = [File(f) for f in static_libs64] - elif all(os.path.exists(f) for f in static_libs): - boost_libs = [File(f) for f in static_libs] - env.Append(LIBS=boost_libs) - - if Beast.system.osx: - env.Append(LIBS=[ - 'crypto', - 'protobuf', - 'ssl', - ]) - env.Append(FRAMEWORKS=[ - 'AppKit', - 'Foundation' - ]) - else: - env.Append(LIBS=['rt']) - - if variant == 'release': - env.Append(CCFLAGS=[ - '-O3', - '-fno-strict-aliasing' - ]) - - if variant == 'coverage': - env.Append(CXXFLAGS=[ - '-fprofile-arcs', '-ftest-coverage']) - env.Append(LINKFLAGS=[ - '-fprofile-arcs', '-ftest-coverage']) - - if toolchain == 'clang': - if Beast.system.osx: - env.Replace(CC='clang', CXX='clang++', LINK='clang++') - elif 'CLANG_CC' in env and 'CLANG_CXX' in env and 'CLANG_LINK' in env: - env.Replace(CC=env['CLANG_CC'], - CXX=env['CLANG_CXX'], - LINK=env['CLANG_LINK']) - # C and C++ - # Add '-Wshorten-64-to-32' - env.Append(CCFLAGS=[]) - # C++ only - env.Append(CXXFLAGS=[ - '-Wno-mismatched-tags', - '-Wno-deprecated-register', - '-Wno-unused-local-typedefs', - '-Wno-unknown-warning-option', - ]) - - elif toolchain == 'gcc': - if 'GNU_CC' in env and 'GNU_CXX' in env and 'GNU_LINK' in env: - env.Replace(CC=env['GNU_CC'], - CXX=env['GNU_CXX'], - LINK=env['GNU_LINK']) - # Why is this only for gcc?! - env.Append(CCFLAGS=['-Wno-unused-local-typedefs']) - - # If we are in debug mode, use GCC-specific functionality to add - # extra error checking into the code (e.g. std::vector will throw - # for out-of-bounds conditions) - if is_debug_variant(variant): - env.Append(CCFLAGS=[ - '-O0' - ]) - - elif toolchain == 'msvc': - env.Append (CPPPATH=[ - os.path.join('src', 'protobuf', 'src'), - os.path.join('src', 'protobuf', 'vsprojects'), - ]) - env.Append(CCFLAGS=[ - '/bigobj', # Increase object file max size - '/EHa', # ExceptionHandling all - '/fp:precise', # Floating point behavior - '/Gd', # __cdecl calling convention - '/Gm-', # Minimal rebuild: disabled - '/GR', # Enable RTTI - '/Gy-', # Function level linking: disabled - '/FS', - '/MP', # Multiprocessor compilation - '/openmp-', # pragma omp: disabled - '/Zc:forScope', # Language extension: for scope - '/Zi', # Generate complete debug info - '/errorReport:none', # No error reporting to Internet - '/nologo', # Suppress login banner - #'/Fd${TARGET}.pdb', # Path: Program Database (.pdb) - '/W3', # Warning level 3 - '/WX-', # Disable warnings as errors - '/wd"4018"', - '/wd"4244"', - '/wd"4267"', - '/wd"4800"', # Disable C4800 (int to bool performance) - '/wd"4503"', # Disable C4503 (Decorated name length exceeded) - ]) - env.Append(CPPDEFINES={ - '_WIN32_WINNT' : '0x6000', - }) - env.Append(CPPDEFINES=[ - '_SCL_SECURE_NO_WARNINGS', - '_CRT_SECURE_NO_WARNINGS', - 'WIN32_CONSOLE', - 'NOMINMAX' - ]) - if variant == 'debug': - env.Append(LIBS=[ - 'VC/static/ssleay32MTd.lib', - 'VC/static/libeay32MTd.lib', - ]) - else: - env.Append(LIBS=[ - 'VC/static/ssleay32MT.lib', - 'VC/static/libeay32MT.lib', - ]) - env.Append(LIBS=[ - 'legacy_stdio_definitions.lib', - 'Shlwapi.lib', - 'kernel32.lib', - 'user32.lib', - 'gdi32.lib', - 'winspool.lib', - 'comdlg32.lib', - 'advapi32.lib', - 'shell32.lib', - 'ole32.lib', - 'oleaut32.lib', - 'uuid.lib', - 'odbc32.lib', - 'odbccp32.lib', - 'crypt32.lib' - ]) - env.Append(LINKFLAGS=[ - '/DEBUG', - '/DYNAMICBASE', - '/ERRORREPORT:NONE', - #'/INCREMENTAL', - '/MACHINE:X64', - '/MANIFEST', - #'''/MANIFESTUAC:"level='asInvoker' uiAccess='false'"''', - '/nologo', - '/NXCOMPAT', - '/SUBSYSTEM:CONSOLE', - '/TLBID:1', - ]) - - if variant == 'debug': - env.Append(CCFLAGS=[ - '/GS', # Buffers security check: enable - '/MTd', # Language: Multi-threaded Debug CRT - '/Od', # Optimization: Disabled - '/RTC1', # Run-time error checks: - ]) - env.Append(CPPDEFINES=[ - '_CRTDBG_MAP_ALLOC' - ]) - else: - env.Append(CCFLAGS=[ - '/MT', # Language: Multi-threaded CRT - '/Ox', # Optimization: Full - ]) - - else: - raise SCons.UserError('Unknown toolchain == "%s"' % toolchain) - -#------------------------------------------------------------------------------- - -# Configure the base construction environment -root_dir = Dir('#').srcnode().get_abspath() # Path to this SConstruct file -build_dir = os.path.join('build') - -base = Environment( - toolpath=[os.path.join ('src', 'ripple', 'beast', 'site_scons', 'site_tools')], - tools=['default', 'Protoc', 'VSProject'], - ENV=os.environ, - TARGET_ARCH='x86_64') -import_environ(base) -config_base(base) -base.Append(CPPPATH=[ - 'src', - os.path.join('src', 'beast'), - os.path.join('src', 'beast', 'include'), - os.path.join('src', 'beast', 'extras'), - os.path.join('src', 'nudb', 'include'), - os.path.join(build_dir, 'proto'), - os.path.join('src','soci','src'), - os.path.join('src','soci','include'), - ]) - -base.Decider('MD5-timestamp') -set_implicit_cache() - -# Configure the toolchains, variants, default toolchain, and default target -variants = ['debug', 'coverage', 'release', 'profile'] -all_toolchains = ['clang', 'gcc', 'msvc'] -if Beast.system.osx: - toolchains = ['clang'] - default_toolchain = 'clang' -else: - toolchains = detect_toolchains(base) - if not toolchains: - raise ValueError('No toolchains detected!') - if 'msvc' in toolchains: - default_toolchain = 'msvc' - elif 'gcc' in toolchains: - if 'clang' in toolchains: - cxx = os.environ.get('CXX', 'g++') - default_toolchain = 'clang' if 'clang' in cxx else 'gcc' - else: - default_toolchain = 'gcc' - elif 'clang' in toolchains: - default_toolchain = 'clang' - else: - raise ValueError("Don't understand toolchains in " + str(toolchains)) - -default_tu_style = 'unity' -default_variant = 'release' -default_target = None - -for source in [ - 'src/ripple/proto/ripple.proto', - ]: - base.Protoc([], - source, - PROTOCPROTOPATH=[os.path.dirname(source)], - PROTOCOUTDIR=os.path.join(build_dir, 'proto'), - PROTOCPYTHONOUTDIR=None) - -#------------------------------------------------------------------------------- - -class ObjectBuilder(object): - def __init__(self, env, variant_dirs): - self.env = env - self.variant_dirs = variant_dirs - self.objects = [] - self.child_envs = [] - - def add_source_files(self, *filenames, **kwds): - for filename in filenames: - env = self.env - if kwds: - env = env.Clone() - env.Prepend(**kwds) - self.child_envs.append(env) - o = env.Object(Beast.variantFile(filename, self.variant_dirs)) - self.objects.append(o) - -def list_sources(base, suffixes): - def _iter(base): - for parent, dirs, files in os.walk(base): - files = [f for f in files if not f[0] == '.'] - dirs[:] = [d for d in dirs if not d[0] == '.'] - for path in files: - path = os.path.join(parent, path) - r = os.path.splitext(path) - if r[1] and r[1] in suffixes: - yield os.path.normpath(path) - return list(_iter(base)) - - -def append_sources(result, *filenames, **kwds): - result.append([filenames, kwds]) - - -def get_soci_sources(style): - result = [] - cpp_path = [ - 'src/soci/src/core', - 'src/soci/include/private', - 'src/sqlite', ] - append_sources(result, - 'src/ripple/unity/soci.cpp', - CPPPATH=cpp_path) - if style == 'unity': - append_sources(result, - 'src/ripple/unity/soci_ripple.cpp', - CPPPATH=cpp_path) - return result - -def use_shp(toolchain): - ''' - Return True if we want to use the --system-header-prefix command-line switch - ''' - if toolchain != 'clang': - return False - if use_shp.cache is None: - try: - ver = subprocess.check_output( - ['clang', '--version'], stderr=subprocess.STDOUT).strip() - use_shp.cache = 'version 3.4' not in ver and 'version 3.0' not in ver - except: - use_shp.cache = False - return use_shp.cache -use_shp.cache = None - -def get_common_sources(toolchain): - result = [] - if toolchain == 'msvc': - warning_flags = {} - else: - warning_flags = {'CCFLAGS': ['-Wno-unused-function']} - append_sources( - result, - 'src/ripple/unity/secp256k1.cpp', - CPPPATH=['src/secp256k1'], - **warning_flags) - return result - -def get_classic_sources(toolchain): - result = [] - append_sources( - result, - *list_sources('src/ripple/core', '.cpp'), - CPPPATH=[ - 'src/soci/src/core', - 'src/sqlite'] - ) - append_sources(result, *list_sources('src/ripple/beast/clock', '.cpp')) - append_sources(result, *list_sources('src/ripple/beast/container', '.cpp')) - append_sources(result, *list_sources('src/ripple/beast/insight', '.cpp')) - append_sources(result, *list_sources('src/ripple/beast/net', '.cpp')) - append_sources(result, *list_sources('src/ripple/beast/utility', '.cpp')) - append_sources(result, *list_sources('src/ripple/app', '.cpp')) - append_sources(result, *list_sources('src/ripple/basics', '.cpp')) - append_sources(result, *list_sources('src/ripple/conditions', '.cpp')) - append_sources(result, *list_sources('src/ripple/crypto', '.cpp')) - append_sources(result, *list_sources('src/ripple/consensus', '.cpp')) - append_sources(result, *list_sources('src/ripple/json', '.cpp')) - append_sources(result, *list_sources('src/ripple/ledger', '.cpp')) - append_sources(result, *list_sources('src/ripple/legacy', '.cpp')) - append_sources(result, *list_sources('src/ripple/net', '.cpp')) - append_sources(result, *list_sources('src/ripple/overlay', '.cpp')) - append_sources(result, *list_sources('src/ripple/peerfinder', '.cpp')) - append_sources(result, *list_sources('src/ripple/protocol', '.cpp')) - append_sources(result, *list_sources('src/ripple/rpc', '.cpp')) - append_sources(result, *list_sources('src/ripple/shamap', '.cpp')) - append_sources(result, *list_sources('src/ripple/server', '.cpp')) - append_sources(result, *list_sources('src/test/app', '.cpp')) - append_sources(result, *list_sources('src/test/basics', '.cpp')) - append_sources(result, *list_sources('src/test/beast', '.cpp')) - append_sources(result, *list_sources('src/test/conditions', '.cpp')) - append_sources(result, *list_sources('src/test/consensus', '.cpp')) - append_sources(result, *list_sources('src/test/core', '.cpp')) - append_sources(result, *list_sources('src/test/json', '.cpp')) - append_sources(result, *list_sources('src/test/ledger', '.cpp')) - append_sources(result, *list_sources('src/test/overlay', '.cpp')) - append_sources(result, *list_sources('src/test/peerfinder', '.cpp')) - append_sources(result, *list_sources('src/test/protocol', '.cpp')) - append_sources(result, *list_sources('src/test/resource', '.cpp')) - append_sources(result, *list_sources('src/test/rpc', '.cpp')) - append_sources(result, *list_sources('src/test/server', '.cpp')) - append_sources(result, *list_sources('src/test/shamap', '.cpp')) - append_sources(result, *list_sources('src/test/jtx', '.cpp')) - append_sources(result, *list_sources('src/test/csf', '.cpp')) - append_sources(result, *list_sources('src/test/unit_test', '.cpp')) - - - if use_shp(toolchain): - cc_flags = {'CCFLAGS': ['--system-header-prefix=rocksdb2']} - else: - cc_flags = {} - - append_sources( - result, - *(list_sources('src/ripple/nodestore', '.cpp') + list_sources('src/test/nodestore', '.cpp')), - CPPPATH=[ - 'src/rocksdb2/include', - 'src/snappy/snappy', - 'src/snappy/config', - ], - **cc_flags) - - result += get_soci_sources('classic') - result += get_common_sources(toolchain) - - return result - -def get_unity_sources(toolchain): - result = [] - append_sources( - result, - 'src/ripple/beast/unity/beast_insight_unity.cpp', - 'src/ripple/beast/unity/beast_net_unity.cpp', - 'src/ripple/beast/unity/beast_utility_unity.cpp', - 'src/ripple/unity/app_consensus.cpp', - 'src/ripple/unity/app_ledger.cpp', - 'src/ripple/unity/app_ledger_impl.cpp', - 'src/ripple/unity/app_main1.cpp', - 'src/ripple/unity/app_main2.cpp', - 'src/ripple/unity/app_misc.cpp', - 'src/ripple/unity/app_misc_impl.cpp', - 'src/ripple/unity/app_paths.cpp', - 'src/ripple/unity/app_tx.cpp', - 'src/ripple/unity/conditions.cpp', - 'src/ripple/unity/consensus.cpp', - 'src/ripple/unity/core.cpp', - 'src/ripple/unity/basics.cpp', - 'src/ripple/unity/crypto.cpp', - 'src/ripple/unity/ledger.cpp', - 'src/ripple/unity/net.cpp', - 'src/ripple/unity/overlay1.cpp', - 'src/ripple/unity/overlay2.cpp', - 'src/ripple/unity/peerfinder.cpp', - 'src/ripple/unity/json.cpp', - 'src/ripple/unity/protocol.cpp', - 'src/ripple/unity/rpcx1.cpp', - 'src/ripple/unity/rpcx2.cpp', - 'src/ripple/unity/shamap.cpp', - 'src/ripple/unity/server.cpp', - 'src/test/unity/app_test_unity1.cpp', - 'src/test/unity/app_test_unity2.cpp', - 'src/test/unity/basics_test_unity.cpp', - 'src/test/unity/beast_test_unity1.cpp', - 'src/test/unity/beast_test_unity2.cpp', - 'src/test/unity/consensus_test_unity.cpp', - 'src/test/unity/core_test_unity.cpp', - 'src/test/unity/conditions_test_unity.cpp', - 'src/test/unity/json_test_unity.cpp', - 'src/test/unity/ledger_test_unity.cpp', - 'src/test/unity/overlay_test_unity.cpp', - 'src/test/unity/peerfinder_test_unity.cpp', - 'src/test/unity/protocol_test_unity.cpp', - 'src/test/unity/resource_test_unity.cpp', - 'src/test/unity/rpc_test_unity.cpp', - 'src/test/unity/server_test_unity.cpp', - 'src/test/unity/server_status_test_unity.cpp', - 'src/test/unity/shamap_test_unity.cpp', - 'src/test/unity/jtx_unity1.cpp', - 'src/test/unity/jtx_unity2.cpp', - 'src/test/unity/csf_unity.cpp' - ) - - if use_shp(toolchain): - cc_flags = {'CCFLAGS': ['--system-header-prefix=rocksdb2']} - else: - cc_flags = {} - - append_sources( - result, - 'src/ripple/unity/nodestore.cpp', - 'src/test/unity/nodestore_test_unity.cpp', - CPPPATH=[ - 'src/rocksdb2/include', - 'src/snappy/snappy', - 'src/snappy/config', - ], - **cc_flags) - - result += get_soci_sources('unity') - result += get_common_sources(toolchain) - - return result - -# Declare the targets -aliases = collections.defaultdict(list) -msvc_configs = [] - - -def should_prepare_target(cl_target, - style, toolchain, variant): - if not cl_target: - # default target - return (style == default_tu_style and - toolchain == default_toolchain and - variant == default_variant) - if 'vcxproj' in cl_target: - return toolchain == 'msvc' - s = cl_target.split('.') - if style == 'unity' and 'nounity' in s: - return False - if len(s) == 1: - return ('all' in cl_target or - variant in cl_target or - toolchain in cl_target) - if len(s) == 2 or len(s) == 3: - return s[0] == toolchain and s[1] == variant - - return True # A target we don't know about, better prepare to build it - - -def should_prepare_targets(style, toolchain, variant): - if not COMMAND_LINE_TARGETS: - return should_prepare_target(None, style, toolchain, variant) - for t in COMMAND_LINE_TARGETS: - if should_prepare_target(t, style, toolchain, variant): - return True - -def should_link_static(): - """ - Return True if libraries should be linked statically - - """ - return GetOption('static') - -def should_build_ninja(style, toolchain, variant): - """ - Return True if a ninja build file should be generated. - - Typically, scons will be called as follows to generate a ninja build file: - `scons ninja=1 gcc.debug` where `gcc.debug` may be replaced with any of our - non-visual studio targets. Raise an exception if we cannot generate the - requested ninja build file (for example, if multiple targets are requested). - """ - if not GetOption('ninja'): - return False - if len(COMMAND_LINE_TARGETS) != 1: - raise Exception('Can only generate a ninja file for a single target') - cl_target = COMMAND_LINE_TARGETS[0] - if 'vcxproj' in cl_target: - raise Exception('Cannot generate a ninja file for a vcxproj') - s = cl_target.split('.') - if ( style == 'unity' and 'nounity' in s or - style == 'classic' and 'nounity' not in s or - len(s) == 1 ): - return False - if len(s) == 2 or len(s) == 3: - return s[0] == toolchain and s[1] == variant - return False - -for tu_style in ['classic', 'unity']: - for toolchain in all_toolchains: - for variant in variants: - if not should_prepare_targets(tu_style, toolchain, variant): - continue - if variant in ['profile', 'coverage'] and toolchain == 'msvc': - continue - # Configure this variant's construction environment - env = base.Clone() - config_env(toolchain, variant, env) - variant_name = '%s.%s' % (toolchain, variant) - if tu_style == 'classic': - variant_name += '.nounity' - variant_dir = os.path.join(build_dir, variant_name) - variant_dirs = { - os.path.join(variant_dir, 'src') : - 'src', - os.path.join(variant_dir, 'proto') : - os.path.join (build_dir, 'proto'), - } - for dest, source in variant_dirs.items(): - env.VariantDir(dest, source, duplicate=0) - - object_builder = ObjectBuilder(env, variant_dirs) - - if tu_style == 'classic': - sources = get_classic_sources(toolchain) - else: - sources = get_unity_sources(toolchain) - for s, k in sources: - object_builder.add_source_files(*s, **k) - - if use_shp(toolchain): - cc_flags = {'CCFLAGS': ['--system-header-prefix=rocksdb2']} - else: - cc_flags = {} - - object_builder.add_source_files( - 'src/ripple/beast/unity/beast_hash_unity.cpp', - 'src/ripple/unity/beast.cpp', - 'src/ripple/unity/lz4.c', - 'src/ripple/unity/protobuf.cpp', - 'src/ripple/unity/ripple.proto.cpp', - 'src/ripple/unity/resource.cpp', - **cc_flags - ) - - object_builder.add_source_files( - 'src/sqlite/sqlite_unity.c', - CCFLAGS = ([] if toolchain == 'msvc' else ['-Wno-array-bounds'])) - - if 'gcc' in toolchain: - cc_flags = {'CCFLAGS': ['-Wno-maybe-uninitialized']} - elif use_shp(toolchain): - cc_flags = {'CCFLAGS': ['--system-header-prefix=rocksdb2']} - else: - cc_flags = {} - - object_builder.add_source_files( - 'src/ripple/unity/ed25519_donna.c', - CPPPATH=[ - 'src/ed25519-donna', - ] - ) - - object_builder.add_source_files( - 'src/ripple/unity/rocksdb.cpp', - CPPPATH=[ - 'src/rocksdb2', - 'src/rocksdb2/include', - 'src/snappy/snappy', - 'src/snappy/config', - ], - **cc_flags - ) - - object_builder.add_source_files( - 'src/ripple/unity/snappy.cpp', - CCFLAGS=([] if toolchain == 'msvc' else ['-Wno-unused-function']), - CPPPATH=[ - 'src/snappy/snappy', - 'src/snappy/config', - ] - ) - - if toolchain == "clang" and Beast.system.osx: - object_builder.add_source_files('src/ripple/unity/beastobjc.mm') - - target = env.Program( - target=os.path.join(variant_dir, 'rippled'), - source=object_builder.objects - ) - - if tu_style == default_tu_style: - if toolchain == default_toolchain and ( - variant == default_variant): - default_target = target - install_target = env.Install (build_dir, source=default_target) - env.Alias ('install', install_target) - env.Default (install_target) - aliases['all'].extend(install_target) - if toolchain == 'msvc': - config = env.VSProjectConfig(variant, 'x64', target, env) - msvc_configs.append(config) - if toolchain in toolchains: - aliases['all'].extend(target) - aliases[toolchain].extend(target) - elif toolchain == 'msvc': - config = env.VSProjectConfig(variant + ".classic", 'x64', target, env) - msvc_configs.append(config) - - if toolchain in toolchains: - aliases[variant].extend(target) - env.Alias(variant_name, target) - - # ninja support - if should_build_ninja(tu_style, toolchain, variant): - print('Generating ninja: {}:{}:{}'.format(tu_style, toolchain, variant)) - scons_to_ninja.GenerateNinjaFile( - # add base env last to ensure protoc targets are added - [object_builder.env] + object_builder.child_envs + [base], - dest_file='build.ninja') - -for key, value in aliases.items(): - env.Alias(key, value) - -vcxproj = base.VSProject( - os.path.join('Builds', 'VisualStudio2015', 'RippleD'), - source = [], - VSPROJECT_ROOT_DIRS = [ - 'build/', - 'src/beast/extras', - 'src/beast/include', - 'src/nudb/include', - 'src', - '.'], - VSPROJECT_CONFIGS = msvc_configs) -base.Alias('vcxproj', vcxproj) - -#------------------------------------------------------------------------------- - -# Adds a phony target to the environment that always builds -# See: http://www.scons.org/wiki/PhonyTargets -def PhonyTargets(env = None, **kw): - if not env: env = DefaultEnvironment() - for target, action in kw.items(): - env.AlwaysBuild(env.Alias(target, [], action)) - -# Build the list of rippled source files that hold unit tests -def do_count(target, source, env): - def list_testfiles(base, suffixes): - def _iter(base): - for parent, _, files in os.walk(base): - for path in files: - path = os.path.join(parent, path) - r = os.path.splitext(path) - if r[1] in suffixes: - if r[0].endswith('_test'): - yield os.path.normpath(path) - return list(_iter(base)) - testfiles = list_testfiles(os.path.join('src', 'test'), env.get('CPPSUFFIXES')) - lines = 0 - for f in testfiles: - lines = lines + sum(1 for line in open(f)) - print ("Total unit test lines: %d" % lines) - -PhonyTargets(env, count = do_count) diff --git a/appveyor.yml b/appveyor.yml index 84b50c45b6..0d9288dd37 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,5 @@ # Set environment variables. environment: - PYTHON: C:/Python27-x64 # We bundle up protoc.exe and only the parts of boost and openssl we need so # that it's a small download. We also use appveyor's free cache, avoiding fees @@ -9,15 +8,7 @@ environment: RIPPLED_DEPS_PATH: rippled_deps17.01 RIPPLED_DEPS_URL: https://ripple.github.io/Downloads/appveyor/%RIPPLED_DEPS_PATH%.zip - # Other dependencies we just download each time. - PIP_PATH: get-pip.py - PIP_URL: https://bootstrap.pypa.io/%PIP_PATH% - # The % in this URL messes up variable substition, so any updates will - # need to update both PYWIN32_PATH and PYWIN32_URL - PYWIN32_PATH: pywin32-220.win-amd64-py2.7.exe - PYWIN32_URL: https://downloads.sourceforge.net/project/pywin32/pywin32/Build%20220/pywin32-220.win-amd64-py2.7.exe - - # Scons honours these environment variables, setting the include/lib paths. + # CMake honors these environment variables, setting the include/lib paths. BOOST_ROOT: C:/%RIPPLED_DEPS_PATH%/boost OPENSSL_ROOT: C:/%RIPPLED_DEPS_PATH%/openssl @@ -27,10 +18,6 @@ environment: appveyor_build_worker_cloud: gce matrix: - # This build works, but our current Appveyor config runs matrix builds - # sequentially, and the one build is already slow enough. - # - build: scons - # target: msvc.debug - build: cmake target: msvc.debug buildconfig: Debug @@ -42,30 +29,14 @@ os: Visual Studio 2017 # Resulting archive should not exceed 100 MB. cache: - 'C:\%RIPPLED_DEPS_PATH%' - - '%PIP_PATH%' - - '%PYWIN32_PATH%' # This means we'll download a zip of the branch we want, rather than the full # history. shallow_clone: true install: - # We want easy_install, python and protoc.exe on PATH. - - SET PATH=%PYTHON%;%PYTHON%/Scripts;C:/%RIPPLED_DEPS_PATH%;%PATH% - - # `ps` prefix means the command is executed by powershell. - - ps: | - if ($env:build -eq "scons") { - if(-not(Test-Path $env:PIP_PATH)) { - echo "Download from $env:PIP_URL" - Start-FileDownload $env:PIP_URL - } - if(-not(Test-Path $env:PYWIN32_PATH)) { - echo "Download from $env:PYWIN32_URL" - Start-FileDownload $env:PYWIN32_URL - } - } - - bin/ci/windows/install-dependencies.bat + # We want protoc.exe on PATH. + - SET PATH=C:/%RIPPLED_DEPS_PATH%;%PATH% # Download dependencies if appveyor didn't restore them from the cache. # Use 7zip to unzip. @@ -95,13 +66,6 @@ build_script: # Show which version of the compiler we are using. - cl - ps: | - if ($env:build -eq "scons") { - # Build with scons - scons $env:target -j%NUMBER_OF_PROCESSORS% - if ($LastExitCode -ne 0) { throw "scons build failed" } - } - else - { # Build with cmake cmake --version $cmake_target="$($env:target).ci" @@ -113,19 +77,10 @@ build_script: cmake --build . --config $env:buildconfig -- -m if ($LastExitCode -ne 0) { throw "CMake build failed" } Pop-Location - } after_build: - ps: | - if ($env:build -eq "scons") { - cp build/$($env:target)/rippled.exe build - ls build - $exe="build/rippled" - } - else - { - $exe="build/$cmake_target/$env:buildconfig/rippled" - } + $exe="build/$cmake_target/$env:buildconfig/rippled" "Exe is at $exe" test_script: diff --git a/bin/ci/ubuntu/build-and-test.sh b/bin/ci/ubuntu/build-and-test.sh index 7f77f4bc73..21ceda00a9 100755 --- a/bin/ci/ubuntu/build-and-test.sh +++ b/bin/ci/ubuntu/build-and-test.sh @@ -31,78 +31,67 @@ else time= fi -if [[ ${BUILD:-cmake} == "cmake" ]]; then - echo "cmake building ${APP}" - : ${CMAKE_EXTRA_ARGS:=""} - if [[ ${NINJA_BUILD:-} == true ]]; then - CMAKE_EXTRA_ARGS+=" -G Ninja" - fi - CMAKE_TARGET=${COMPNAME}.${TARGET} - if [[ ${CI:-} == true ]]; then - CMAKE_TARGET=$CMAKE_TARGET.ci - fi - # - # allow explicit setting of the name of the build - # dir, otherwise default to the CMAKE_TARGET value - # - : "${BUILD_DIR:=$CMAKE_TARGET}" - BUILDARGS=" -j${JOBS}" - if [[ ${VERBOSE_BUILD:-} == true ]]; then - CMAKE_EXTRA_ARGS+=" -DCMAKE_VERBOSE_MAKEFILE=ON" - - # TODO: if we use a different generator, this - # option to build verbose would need to change: - if [[ ${NINJA_BUILD:-} == true ]]; then - BUILDARGS+=" -v" - else - BUILDARGS+=" verbose=1" - fi - fi - if [[ ${USE_CCACHE:-} == true ]]; then - echo "using ccache with basedir [${CCACHE_BASEDIR:-}]" - CMAKE_EXTRA_ARGS+=" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache" - fi - if [ -d "build/${BUILD_DIR}" ]; then - rm -rf "build/${BUILD_DIR}" - fi - - mkdir -p "build/${BUILD_DIR}" - pushd "build/${BUILD_DIR}" - $time cmake ../.. -Dtarget=$CMAKE_TARGET ${CMAKE_EXTRA_ARGS} - if [[ ${TARGET} == "docs" ]]; then - $time cmake --build . --target docs -- $BUILDARGS - ## mimic the standard test output for docs build - ## to make controlling processes like jenkins happy - if [ -f html_doc/index.html ]; then - echo "1 case, 1 test total, 0 failures" - else - echo "1 case, 1 test total, 1 failures" - fi - exit - else - $time cmake --build . -- $BUILDARGS - if [[ ${BUILD_BOTH:-} == true ]]; then - if [[ ${TARGET} == *.unity ]]; then - cmake --build . --target rippled_classic -- $BUILDARGS - else - cmake --build . --target rippled_unity -- $BUILDARGS - fi - fi - fi - popd - export APP_PATH="$PWD/build/${BUILD_DIR}/${APP}" - echo "using APP_PATH: $APP_PATH" -else - export APP_PATH="$PWD/build/${COMPNAME}.${TARGET}/${APP}" - echo "using APP_PATH: $APP_PATH" - # Make sure vcxproj is up to date - $time scons vcxproj - git diff --exit-code - # $CC will be either `clang` or `gcc` - # http://docs.travis-ci.com/user/migrating-from-legacy/?utm_source=legacy-notice&utm_medium=banner&utm_campaign=legacy-upgrade - # indicates that 2 cores are available to containers. - $time scons -j${JOBS} ${COMPNAME}.$TARGET +echo "cmake building ${APP}" +: ${CMAKE_EXTRA_ARGS:=""} +if [[ ${NINJA_BUILD:-} == true ]]; then + CMAKE_EXTRA_ARGS+=" -G Ninja" fi +CMAKE_TARGET=${COMPNAME}.${TARGET} +if [[ ${CI:-} == true ]]; then + CMAKE_TARGET=$CMAKE_TARGET.ci +fi +# +# allow explicit setting of the name of the build +# dir, otherwise default to the CMAKE_TARGET value +# +: "${BUILD_DIR:=$CMAKE_TARGET}" +BUILDARGS=" -j${JOBS}" +if [[ ${VERBOSE_BUILD:-} == true ]]; then + CMAKE_EXTRA_ARGS+=" -DCMAKE_VERBOSE_MAKEFILE=ON" + + # TODO: if we use a different generator, this + # option to build verbose would need to change: + if [[ ${NINJA_BUILD:-} == true ]]; then + BUILDARGS+=" -v" + else + BUILDARGS+=" verbose=1" + fi +fi +if [[ ${USE_CCACHE:-} == true ]]; then + echo "using ccache with basedir [${CCACHE_BASEDIR:-}]" + CMAKE_EXTRA_ARGS+=" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache" +fi +if [ -d "build/${BUILD_DIR}" ]; then + rm -rf "build/${BUILD_DIR}" +fi + +mkdir -p "build/${BUILD_DIR}" +pushd "build/${BUILD_DIR}" +$time cmake ../.. -Dtarget=$CMAKE_TARGET ${CMAKE_EXTRA_ARGS} +if [[ ${TARGET} == "docs" ]]; then + $time cmake --build . --target docs -- $BUILDARGS + ## mimic the standard test output for docs build + ## to make controlling processes like jenkins happy + if [ -f html_doc/index.html ]; then + echo "1 case, 1 test total, 0 failures" + else + echo "1 case, 1 test total, 1 failures" + fi + exit +else + $time cmake --build . -- $BUILDARGS + if [[ ${BUILD_BOTH:-} == true ]]; then + if [[ ${TARGET} == *.unity ]]; then + cmake --build . --target rippled_classic -- $BUILDARGS + else + cmake --build . --target rippled_unity -- $BUILDARGS + fi + fi +fi +popd +export APP_PATH="$PWD/build/${BUILD_DIR}/${APP}" +echo "using APP_PATH: $APP_PATH" + # See what we've actually built ldd $APP_PATH diff --git a/bin/ci/windows/install-dependencies.bat b/bin/ci/windows/install-dependencies.bat deleted file mode 100644 index 407faf0005..0000000000 --- a/bin/ci/windows/install-dependencies.bat +++ /dev/null @@ -1,13 +0,0 @@ -if "%build%" == "scons" ( - rem Installing pip will install setuptools/easy_install. - python "%PIP_PATH%" - - rem Pip has some problems installing scons on windows so we use easy install. - rem - easy_install scons - rem Workaround - easy_install https://pypi.python.org/packages/source/S/SCons/scons-2.5.0.tar.gz#md5=bda5530a70a41a7831d83c8b191c021e - - rem Scons has problems with parallel builds on windows without pywin32. - easy_install "%PYWIN32_PATH%" - rem (easy_install can do headless installs of .exe wizards) -) diff --git a/circle.yml b/circle.yml deleted file mode 100644 index 67ba0a0ba2..0000000000 --- a/circle.yml +++ /dev/null @@ -1,29 +0,0 @@ -machine: - services: - - docker -dependencies: - pre: - - sudo apt-add-repository -y ppa:ubuntu-toolchain-r/test - - echo "deb [arch=amd64 trusted=yes] https://test-mirrors.ripple.com/ubuntu/ trusty testing" | sudo tee /etc/apt/sources.list.d/ripple.list - - sudo apt-get update -qq - - sudo apt-get purge -qq libboost1.48-dev - - sudo apt-get install -qq libboost1.60-all-dev - - sudo apt-get install -qq clang-3.6 gcc-5 g++-5 libobjc-5-dev libgcc-5-dev libstdc++-5-dev libclang1-3.6 libgcc1 libgomp1 libstdc++6 scons protobuf-compiler libprotobuf-dev libssl-dev exuberant-ctags texinfo - - lsb_release -a - - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 99 - - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 99 - - sudo update-alternatives --force --install /usr/bin/clang clang /usr/bin/clang-3.6 99 --slave /usr/bin/clang++ clang++ /usr/bin/clang++-3.6 - - gcc --version - - clang --version - - clang++ --version - - if [[ ! -e gdb-8.0 ]]; then wget https://ftp.gnu.org/gnu/gdb/gdb-8.0.tar.xz && tar xf gdb-8.0.tar.xz && cd gdb-8.0 && ./configure && make && cd ..; fi - - pushd gdb-8.0 && sudo make install && popd - - gdb --version - cache_directories: - - gdb-8.0 -test: - pre: - - scons clang.debug - override: - # Execute unit tests under gdb - - gdb -return-child-result -quiet -batch -ex "set env MALLOC_CHECK_=3" -ex "set print thread-events off" -ex run -ex "thread apply all backtrace full" -ex "quit" --args build/clang.debug/rippled --unittest --quiet --unittest-log diff --git a/src/ripple/beast/site_scons/Beast.py b/src/ripple/beast/site_scons/Beast.py deleted file mode 100644 index 315cec00c3..0000000000 --- a/src/ripple/beast/site_scons/Beast.py +++ /dev/null @@ -1,188 +0,0 @@ -# Beast.py -# Copyright 2014 by: -# Vinnie Falco -# Tom Ritchford -# Nik Bougalis -# This file is part of Beast: http://github.com/vinniefalco/Beast - -from __future__ import absolute_import, division, print_function, unicode_literals - -import os -import platform -import subprocess -import sys -import SCons.Node -import SCons.Util - -#------------------------------------------------------------------------------- -# -# Environment -# -#------------------------------------------------------------------------------- - -def _execute(args, include_errors=True, **kwds): - """Execute a shell command and return the value. If args is a string, - it's split on spaces - if some of your arguments contain spaces, args should - instead be a list of arguments.""" - def single_line(line, report_errors=True, joiner='+'): - """Force a string to be a single line with no carriage returns, and report - a warning if there was more than one line.""" - lines = line.strip().splitlines() - if report_errors and len(lines) > 1: - print('multiline result:', lines) - return joiner.join(lines) - def is_string(s): - """Is s a string? - in either Python 2.x or 3.x.""" - return isinstance(s, (str, unicode)) - if is_string(args): - args = args.split() - stderr = subprocess.STDOUT if include_errors else None - return single_line(subprocess.check_output(args, stderr=stderr, **kwds)) - -class __System(object): - """Provides information about the host platform""" - def __init__(self): - self.name = platform.system() - self.linux = self.name == 'Linux' - self.osx = self.name == 'Darwin' - self.windows = self.name == 'Windows' - self.distro = None - self.version = None - - # True if building under the Travis CI (http://travis-ci.org) - self.travis = ( - os.environ.get('TRAVIS', '0') == 'true') and ( - os.environ.get('CI', '0') == 'true') - - if self.linux: - self.distro, self.version, _ = platform.linux_distribution() - self.__display = '%s %s (%s)' % (self.distro, self.version, self.name) - - elif self.osx: - parts = platform.mac_ver()[0].split('.') - while len(parts) < 3: - parts.append('0') - self.__display = '%s %s' % (self.name, '.'.join(parts)) - elif self.windows: - release, version, csd, ptype = platform.win32_ver() - self.__display = '%s %s %s (%s)' % (self.name, release, version, ptype) - - else: - raise Exception('Unknown system platform "' + self.name + '"') - - self.platform = self.distro or self.name - - def __str__(self): - return self.__display - -class Git(object): - """Provides information about git and the repository we are called from""" - def __init__(self, env): - self.tags = self.branch = self.user = '' - self.exists = env.Detect('git') - if self.exists: - try: - self.tags = _execute('git describe --tags') - self.branch = _execute('git rev-parse --abbrev-ref HEAD') - remote = _execute('git config remote.origin.url') - self.user = remote.split(':')[1].split('/')[0] - except: - self.exists = False - -system = __System() - -#------------------------------------------------------------------------------- - -def printChildren(target): - def doPrint(tgt, level, found): - for item in tgt: - if SCons.Util.is_List(item): - doPrint(item, level, found) - else: - if item.abspath in found: - continue - found[item.abspath] = False - print('\t'*level + item.path) - #DoPrint(item.children(scan=1), level+1, found) - item.scan() - doPrint(item.all_children(), level+1, found) - doPrint(target, 0, {}) - -def variantFile(path, variant_dirs): - '''Returns the path to the corresponding dict entry in variant_dirs''' - path = str(path) - for dest, source in variant_dirs.items(): - common = os.path.commonprefix([path, source]) - if common == source: - return os.path.join(dest, path[len(common)+1:]) - return path - -def variantFiles(files, variant_dirs): - '''Returns a list of files remapped to their variant directories''' - result = [] - for path in files: - result.append(variantFile(path, variant_dirs)) - return result - -def printEnv(env, keys): - if type(keys) != list: - keys = list(keys) - s = '' - for key in keys: - if key in env: - value = env[key] - else: - value = '' - s+=('%s=%s, ' % (key, value)) - print('[' + s + ']') - -#------------------------------------------------------------------------------- -# -# Output -# -#------------------------------------------------------------------------------- - -# See https://stackoverflow.com/questions/7445658/how-to-detect-if-the-console-does-support-ansi-escape-codes-in-python -CAN_CHANGE_COLOR = ( - hasattr(sys.stderr, "isatty") - and sys.stderr.isatty() - and not system.windows - and not os.environ.get('INSIDE_EMACS') - ) - -# See https://en.wikipedia.org/wiki/ANSI_escape_code -BLUE = 94 -GREEN = 92 -RED = 91 -YELLOW = 93 - -def add_mode(text, *modes): - if CAN_CHANGE_COLOR: - modes = ';'.join(str(m) for m in modes) - return '\033[%sm%s\033[0m' % (modes, text) - else: - return text - -def blue(text): - return add_mode(text, BLUE) - -def green(text): - return add_mode(text, GREEN) - -def red(text): - return add_mode(text, RED) - -def yellow(text): - return add_mode(text, YELLOW) - -def warn(text, print=print): - print('%s %s' % (red('WARNING:'), text)) - -# Prints command lines using environment substitutions -def print_coms(coms, env): - if type(coms) is str: - coms=list(coms) - for key in coms: - cmdline = env.subst(env[key], 0, - env.File(''), env.File('')) - print (green(cmdline)) diff --git a/src/ripple/beast/site_scons/site_tools/Protoc.py b/src/ripple/beast/site_scons/site_tools/Protoc.py deleted file mode 100644 index 32d77f3a4c..0000000000 --- a/src/ripple/beast/site_scons/site_tools/Protoc.py +++ /dev/null @@ -1,97 +0,0 @@ -# -# Copyright (c) 2009 Scott Stafford -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -# Author : Scott Stafford -# Date : 2009-12-09 20:36:14 -# -# Changes : Vinnie Falco -# Date : 2014--4-25 - -""" -Protoc.py: Protoc Builder for SCons - -This Builder invokes protoc to generate C++ and Python from a .proto file. - -NOTE: Java is not currently supported. -""" - -__author__ = "Scott Stafford" - -import SCons.Action -import SCons.Builder -import SCons.Defaults -import SCons.Node.FS -import SCons.Util - -from SCons.Script import File, Dir - -import os.path - -protocs = 'protoc' - -ProtocAction = SCons.Action.Action('$PROTOCCOM', '$PROTOCCOMSTR') - -def ProtocEmitter(target, source, env): - PROTOCOUTDIR = env['PROTOCOUTDIR'] - PROTOCPYTHONOUTDIR = env['PROTOCPYTHONOUTDIR'] - for source_path in [str(x) for x in source]: - base = os.path.splitext(os.path.basename(source_path))[0] - if PROTOCOUTDIR: - target.extend([os.path.join(PROTOCOUTDIR, base + '.pb.cc'), - os.path.join(PROTOCOUTDIR, base + '.pb.h')]) - if PROTOCPYTHONOUTDIR: - target.append(os.path.join(PROTOCPYTHONOUTDIR, base + '_pb2.py')) - - try: - target.append(env['PROTOCFDSOUT']) - except KeyError: - pass - - #print "PROTOC SOURCE:", [str(s) for s in source] - #print "PROTOC TARGET:", [str(s) for s in target] - - return target, source - -ProtocBuilder = SCons.Builder.Builder( - action = ProtocAction, - emitter = ProtocEmitter, - srcsuffix = '$PROTOCSRCSUFFIX') - -def generate(env): - """Add Builders and construction variables for protoc to an Environment.""" - try: - bld = env['BUILDERS']['Protoc'] - except KeyError: - bld = ProtocBuilder - env['BUILDERS']['Protoc'] = bld - - env['PROTOC'] = env.Detect(protocs) or 'protoc' - env['PROTOCFLAGS'] = SCons.Util.CLVar('') - env['PROTOCPROTOPATH'] = SCons.Util.CLVar('') - env['PROTOCCOM'] = '$PROTOC ${["-I%s"%x for x in PROTOCPROTOPATH]} $PROTOCFLAGS --cpp_out=$PROTOCCPPOUTFLAGS$PROTOCOUTDIR ${PROTOCPYTHONOUTDIR and ("--python_out="+PROTOCPYTHONOUTDIR) or ""} ${PROTOCFDSOUT and ("-o"+PROTOCFDSOUT) or ""} ${SOURCES}' - env['PROTOCOUTDIR'] = '${SOURCE.dir}' - env['PROTOCPYTHONOUTDIR'] = "python" - env['PROTOCSRCSUFFIX'] = '.proto' - -def exists(env): - return env.Detect(protocs) \ No newline at end of file diff --git a/src/ripple/beast/site_scons/site_tools/VSProject.py b/src/ripple/beast/site_scons/site_tools/VSProject.py deleted file mode 100644 index 41f6ed56d1..0000000000 --- a/src/ripple/beast/site_scons/site_tools/VSProject.py +++ /dev/null @@ -1,894 +0,0 @@ -# Copyright 2014 Vinnie Falco (vinnie.falco@gmail.com) -# Portions Copyright The SCons Foundation -# Portions Copyright Google, Inc. -# This file is part of beast - -""" -A SCons tool to provide a family of scons builders that -generate Visual Studio project files -""" - -import collections -import hashlib -import io -import itertools -import ntpath -import os -import pprint -import random -import re - -import SCons.Builder -import SCons.Node.FS -import SCons.Node -import SCons.Script.Main -import SCons.Util - -#------------------------------------------------------------------------------- - -# Adapted from msvs.py - -UnicodeByteMarker = '\xEF\xBB\xBF' - -V14DSPHeader = """\ -\r -\r -""" - -V14DSPProjectConfiguration = """\ - \r - %(variant)s\r - %(platform)s\r - \r -""" - -V14DSPGlobals = """\ - \r - %(project_guid)s\r - Win32Proj\r - %(name)s\r - true\r - \r -""" - -V14DSPPropertyGroup = """\ - \r - MultiByte\r - Application\r - v140\r - False\r - %(use_debug_libs)s\r - False\r - false\r - %(int_dir)s\r - %(out_dir)s\r - \r -""" - -V14DSPImportGroup= """\ - \r - \r - \r -""" - -V14DSPItemDefinitionGroup= """\ - \r -""" - -V14CustomBuildProtoc= """\ - Document\r - protoc --cpp_out=%(cpp_out)s --proto_path=%%(RelativeDir) %%(Identity)\r - %(base_out)s.pb.h;%(base_out)s.pb.cc\r - protoc --cpp_out=%(cpp_out)s --proto_path=%%(RelativeDir) %%(Identity)\r - false\r -""" - -V14DSPFiltersHeader = ( -'''\r -\r -''') - -#------------------------------------------------------------------------------- - -def is_subdir(child, parent): - '''Determine if child is a subdirectory of parent''' - return os.path.commonprefix([parent, child]) == parent - -def _key(item): - if isinstance(item, (str, unicode)): - return ('s', item.upper(), item) - elif isinstance(item, (int, long, float)): - return ('n', item) - elif isinstance(item, (list, tuple)): - return ('l', map(_key, item)) - elif isinstance(item, dict): - return ('d', xsorted(item.keys()), xsorted(item.values())) - elif isinstance(item, Configuration): - return ('c', _key(item.name), _key(item.target), _key(item.variant), _key(item.platform)) - elif isinstance(item, Item): - return ('i', _key(winpath(item.path())), _key(item.is_compiled()), _key(item.builder()), _key(item.tag()), _key(item.is_excluded())) - elif isinstance(item, SCons.Node.FS.File): - return ('f', _key(item.name), _key(item.suffix)) - else: - return ('x', item) - -def xsorted(tosort, **kwargs): - '''Performs sorted in a deterministic manner.''' - if 'key' in kwargs: - map(kwargs['key'], tosort) - kwargs['key'] = _key - return sorted(tosort, **kwargs) - -def itemList(items, sep): - if type(items) == str: # Won't work in Python 3. - return items - def gen(): - for item in xsorted(items): - if isinstance(item, dict): - for k, v in xsorted(item.items()): - yield k + '=' + v - elif isinstance(item, (tuple, list)): - assert len(item) == 2, "Item shoud have exactly two elements: " + str(item) - yield '%s=%s' % tuple(item) - else: - yield item - yield sep - return ''.join(gen()) - -#------------------------------------------------------------------------------- - -class SwitchConverter(object): - '''Converts command line switches to MSBuild XML, using tables''' - - def __init__(self, table, booltable, retable=None): - self.table = {} - for key in table: - self.table[key] = table[key] - for key in booltable: - value = booltable[key] - self.table[key] = [value[0], 'True'] - self.table[key + '-'] = [value[0], 'False'] - if retable != None: - self.retable = retable - else: - self.retable = [] - - def getXml(self, switches, prefix = ''): - switches = list(set(switches)) # Filter dupes because on windows platforms, /nologo is added automatically to the environment. - xml = [] - for regex, tag in self.retable: - matches = [] - for switch in switches[:]: - match = regex.match(switch) - if None != match: - matches.append(match.group(1)) - switches.remove(switch) - if len(matches) > 0: - xml.append ( - '%s<%s>%s\r\n' % ( - prefix, tag, ';'.join(matches), tag)) - unknown = [] - for switch in switches: - try: - value = self.table[switch] - xml.append ( - '%s<%s>%s\r\n' % ( - prefix, value[0], value[1], value[0])) - except: - unknown.append(switch) - if unknown: - s = itemList(unknown, ' ') - tag = 'AdditionalOptions' - xml.append('%(prefix)s<%(tag)s>%(s)s%%(%(tag)s)\r\n' % locals()) - if xml: - return ''.join(xml) - return '' - -class ClSwitchConverter(SwitchConverter): - def __init__(self): - booltable = { - '/C' : ['KeepComments'], - '/doc' : ['GenerateXMLDocumentationFiles'], - '/FAu' : ['UseUnicodeForAssemblerListing'], - '/FC' : ['UseFullPaths'], - '/FR' : ['BrowseInformation'], - '/Fr' : ['BrowseInformation'], - '/Fx' : ['ExpandAttributedSource'], - '/GF' : ['StringPooling'], - '/GL' : ['WholeProgramOptimization'], - '/Gm' : ['MinimalRebuild'], - '/GR' : ['RuntimeTypeInfo'], - '/GS' : ['BufferSecurityCheck'], - '/GT' : ['EnableFiberSafeOptimizations'], - '/Gy' : ['FunctionLevelLinking'], - '/MP' : ['MultiProcessorCompilation'], - '/Oi' : ['IntrinsicFunctions'], - '/Oy' : ['OmitFramePointers'], - '/RTCc' : ['SmallerTypeCheck'], - '/u' : ['UndefineAllPreprocessorDefinitions'], - '/X' : ['IgnoreStandardIncludePath'], - '/WX' : ['TreatWarningAsError'], - '/Za' : ['DisableLanguageExtensions'], - '/Zl' : ['OmitDefaultLibName'], - '/fp:except' : ['FloatingPointExceptions'], - '/hotpatch' : ['CreateHotpatchableImage'], - '/nologo' : ['SuppressStartupBanner'], - '/openmp' : ['OpenMPSupport'], - '/showIncludes' : ['ShowIncludes'], - '/Zc:forScope' : ['ForceConformanceInForLoopScope'], - '/Zc:wchar_t' : ['TreatWChar_tAsBuiltInType'], - } - table = { - '/EHsc' : ['ExceptionHandling', 'Sync'], - '/EHa' : ['ExceptionHandling', 'Async'], - '/EHs' : ['ExceptionHandling', 'SyncCThrow'], - '/FA' : ['AssemblerOutput', 'AssemblyCode'], - '/FAcs' : ['AssemblerOutput', 'All'], - '/FAc' : ['AssemblerOutput', 'AssemblyAndMachineCode'], - '/FAs' : ['AssemblerOutput', 'AssemblyAndSourceCode'], - '/Gd' : ['CallingConvention', 'Cdecl'], - '/Gr' : ['CallingConvention', 'FastCall'], - '/Gz' : ['CallingConvention', 'StdCall'], - '/MT' : ['RuntimeLibrary', 'MultiThreaded'], - '/MTd' : ['RuntimeLibrary', 'MultiThreadedDebug'], - '/MD' : ['RuntimeLibrary', 'MultiThreadedDLL'], - '/MDd' : ['RuntimeLibrary', 'MultiThreadedDebugDLL'], - '/Od' : ['Optimization', 'Disabled'], - '/O1' : ['Optimization', 'MinSpace'], - '/O2' : ['Optimization', 'MaxSpeed'], - '/Ox' : ['Optimization', 'Full'], - '/Ob1' : ['InlineFunctionExpansion', 'OnlyExplicitInline'], - '/Ob2' : ['InlineFunctionExpansion', 'AnySuitable'], - '/Ot' : ['FavorSizeOrSpeed', 'Speed'], - '/Os' : ['FavorSizeOrSpeed', 'Size'], - '/RTCs' : ['BasicRuntimeChecks', 'StackFrameRuntimeCheck'], - '/RTCu' : ['BasicRuntimeChecks', 'UninitializedLocalUsageCheck'], - '/RTC1' : ['BasicRuntimeChecks', 'EnableFastChecks'], - '/TC' : ['CompileAs', 'CompileAsC'], - '/TP' : ['CompileAs', 'CompileAsCpp'], - '/W0' : [ 'WarningLevel', 'TurnOffAllWarnings'], - '/W1' : [ 'WarningLevel', 'Level1'], - '/W2' : [ 'WarningLevel', 'Level2'], - '/W3' : [ 'WarningLevel', 'Level3'], - '/W4' : [ 'WarningLevel', 'Level4'], - '/Wall' : [ 'WarningLevel', 'EnableAllWarnings'], - '/Yc' : ['PrecompiledHeader', 'Create'], - '/Yu' : ['PrecompiledHeader', 'Use'], - '/Z7' : ['DebugInformationFormat', 'OldStyle'], - '/Zi' : ['DebugInformationFormat', 'ProgramDatabase'], - '/ZI' : ['DebugInformationFormat', 'EditAndContinue'], - '/Zp1' : ['StructMemberAlignment', '1Byte'], - '/Zp2' : ['StructMemberAlignment', '2Bytes'], - '/Zp4' : ['StructMemberAlignment', '4Bytes'], - '/Zp8' : ['StructMemberAlignment', '8Bytes'], - '/Zp16' : ['StructMemberAlignment', '16Bytes'], - '/arch:IA32' : ['EnableEnhancedInstructionSet', 'NoExtensions'], - '/arch:SSE' : ['EnableEnhancedInstructionSet', 'StreamingSIMDExtensions'], - '/arch:SSE2' : ['EnableEnhancedInstructionSet', 'StreamingSIMDExtensions2'], - '/arch:AVX' : ['EnableEnhancedInstructionSet', 'AdvancedVectorExtensions'], - '/clr' : ['CompileAsManaged', 'True'], - '/clr:pure' : ['CompileAsManaged', 'Pure'], - '/clr:safe' : ['CompileAsManaged', 'Safe'], - '/clr:oldSyntax' : ['CompileAsManaged', 'OldSyntax'], - '/fp:fast' : ['FloatingPointModel', 'Fast'], - '/fp:precise' : ['FloatingPointModel', 'Precise'], - '/fp:strict' : ['FloatingPointModel', 'Strict'], - '/errorReport:none' : ['ErrorReporting', 'None'], - '/errorReport:prompt' : ['ErrorReporting', 'Prompt'], - '/errorReport:queue' : ['ErrorReporting', 'Queue'], - '/errorReport:send' : ['ErrorReporting', 'Send'], - } - retable = [ - (re.compile(r'/wd\"(\d+)\"'), 'DisableSpecificWarnings'), - ] - # Ideas from Google's Generate Your Project - ''' - _Same(_compile, 'AdditionalIncludeDirectories', _folder_list) # /I - - _Same(_compile, 'PreprocessorDefinitions', _string_list) # /D - _Same(_compile, 'ProgramDataBaseFileName', _file_name) # /Fd - - _Same(_compile, 'AdditionalOptions', _string_list) - _Same(_compile, 'AdditionalUsingDirectories', _folder_list) # /AI - _Same(_compile, 'AssemblerListingLocation', _file_name) # /Fa - _Same(_compile, 'BrowseInformationFile', _file_name) - _Same(_compile, 'ForcedIncludeFiles', _file_list) # /FI - _Same(_compile, 'ForcedUsingFiles', _file_list) # /FU - _Same(_compile, 'UndefinePreprocessorDefinitions', _string_list) # /U - _Same(_compile, 'XMLDocumentationFileName', _file_name) - '' : ['EnablePREfast', _boolean) # /analyze Visible='false' - _Renamed(_compile, 'ObjectFile', 'ObjectFileName', _file_name) # /Fo - _Renamed(_compile, 'PrecompiledHeaderThrough', 'PrecompiledHeaderFile', - _file_name) # Used with /Yc and /Yu - _Renamed(_compile, 'PrecompiledHeaderFile', 'PrecompiledHeaderOutputFile', - _file_name) # /Fp - _ConvertedToAdditionalOption(_compile, 'DefaultCharIsUnsigned', '/J') - _MSBuildOnly(_compile, 'ProcessorNumber', _integer) # the number of processors - _MSBuildOnly(_compile, 'TrackerLogDirectory', _folder_name) - _MSBuildOnly(_compile, 'TreatSpecificWarningsAsErrors', _string_list) # /we - _MSBuildOnly(_compile, 'PreprocessOutputPath', _string) # /Fi - ''' - SwitchConverter.__init__(self, table, booltable, retable) - -class LinkSwitchConverter(SwitchConverter): - def __init__(self): - # Based on code in Generate Your Project - booltable = { - '/DEBUG' : ['GenerateDebugInformation'], - '/DYNAMICBASE' : ['RandomizedBaseAddress'], - '/NOLOGO' : ['SuppressStartupBanner'], - '/nologo' : ['SuppressStartupBanner'], - } - table = { - '/ERRORREPORT:NONE' : ['ErrorReporting', 'NoErrorReport'], - '/ERRORREPORT:PROMPT' : ['ErrorReporting', 'PromptImmediately'], - '/ERRORREPORT:QUEUE' : ['ErrorReporting', 'QueueForNextLogin'], - '/ERRORREPORT:SEND' : ['ErrorReporting', 'SendErrorReport'], - '/MACHINE:X86' : ['TargetMachine', 'MachineX86'], - '/MACHINE:ARM' : ['TargetMachine', 'MachineARM'], - '/MACHINE:EBC' : ['TargetMachine', 'MachineEBC'], - '/MACHINE:IA64' : ['TargetMachine', 'MachineIA64'], - '/MACHINE:MIPS' : ['TargetMachine', 'MachineMIPS'], - '/MACHINE:MIPS16' : ['TargetMachine', 'MachineMIPS16'], - '/MACHINE:MIPSFPU' : ['TargetMachine', 'MachineMIPSFPU'], - '/MACHINE:MIPSFPU16' : ['TargetMachine', 'MachineMIPSFPU16'], - '/MACHINE:SH4' : ['TargetMachine', 'MachineSH4'], - '/MACHINE:THUMB' : ['TargetMachine', 'MachineTHUMB'], - '/MACHINE:X64' : ['TargetMachine', 'MachineX64'], - '/NXCOMPAT' : ['DataExecutionPrevention', 'true'], - '/NXCOMPAT:NO' : ['DataExecutionPrevention', 'false'], - '/SUBSYSTEM:CONSOLE' : ['SubSystem', 'Console'], - '/SUBSYSTEM:WINDOWS' : ['SubSystem', 'Windows'], - '/SUBSYSTEM:NATIVE' : ['SubSystem', 'Native'], - '/SUBSYSTEM:EFI_APPLICATION' : ['SubSystem', 'EFI Application'], - '/SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER' : ['SubSystem', 'EFI Boot Service Driver'], - '/SUBSYSTEM:EFI_ROM' : ['SubSystem', 'EFI ROM'], - '/SUBSYSTEM:EFI_RUNTIME_DRIVER' : ['SubSystem', 'EFI Runtime'], - '/SUBSYSTEM:WINDOWSCE' : ['SubSystem', 'WindowsCE'], - '/SUBSYSTEM:POSIX' : ['SubSystem', 'POSIX'], - } - ''' - /TLBID:1 /MANIFEST /MANIFESTUAC:level='asInvoker' uiAccess='false' - - _Same(_link, 'AllowIsolation', _boolean) # /ALLOWISOLATION - _Same(_link, 'CLRUnmanagedCodeCheck', _boolean) # /CLRUNMANAGEDCODECHECK - _Same(_link, 'DelaySign', _boolean) # /DELAYSIGN - _Same(_link, 'EnableUAC', _boolean) # /MANIFESTUAC - _Same(_link, 'GenerateMapFile', _boolean) # /MAP - _Same(_link, 'IgnoreAllDefaultLibraries', _boolean) # /NODEFAULTLIB - _Same(_link, 'IgnoreEmbeddedIDL', _boolean) # /IGNOREIDL - _Same(_link, 'MapExports', _boolean) # /MAPINFO:EXPORTS - _Same(_link, 'StripPrivateSymbols', _file_name) # /PDBSTRIPPED - _Same(_link, 'PerUserRedirection', _boolean) - _Same(_link, 'Profile', _boolean) # /PROFILE - _Same(_link, 'RegisterOutput', _boolean) - _Same(_link, 'SetChecksum', _boolean) # /RELEASE - _Same(_link, 'SupportUnloadOfDelayLoadedDLL', _boolean) # /DELAY:UNLOAD - - _Same(_link, 'SwapRunFromCD', _boolean) # /SWAPRUN:CD - _Same(_link, 'TurnOffAssemblyGeneration', _boolean) # /NOASSEMBLY - _Same(_link, 'UACUIAccess', _boolean) # /uiAccess='true' - _Same(_link, 'EnableCOMDATFolding', _newly_boolean) # /OPT:ICF - _Same(_link, 'FixedBaseAddress', _newly_boolean) # /FIXED - _Same(_link, 'LargeAddressAware', _newly_boolean) # /LARGEADDRESSAWARE - _Same(_link, 'OptimizeReferences', _newly_boolean) # /OPT:REF - _Same(_link, 'TerminalServerAware', _newly_boolean) # /TSAWARE - - _Same(_link, 'AdditionalDependencies', _file_list) - _Same(_link, 'AdditionalLibraryDirectories', _folder_list) # /LIBPATH - _Same(_link, 'AdditionalManifestDependencies', _file_list) # /MANIFESTDEPENDENCY: - _Same(_link, 'AdditionalOptions', _string_list) - _Same(_link, 'AddModuleNamesToAssembly', _file_list) # /ASSEMBLYMODULE - _Same(_link, 'AssemblyLinkResource', _file_list) # /ASSEMBLYLINKRESOURCE - _Same(_link, 'BaseAddress', _string) # /BASE - _Same(_link, 'DelayLoadDLLs', _file_list) # /DELAYLOAD - _Same(_link, 'EmbedManagedResourceFile', _file_list) # /ASSEMBLYRESOURCE - _Same(_link, 'EntryPointSymbol', _string) # /ENTRY - _Same(_link, 'ForceSymbolReferences', _file_list) # /INCLUDE - _Same(_link, 'FunctionOrder', _file_name) # /ORDER - _Same(_link, 'HeapCommitSize', _string) - _Same(_link, 'HeapReserveSize', _string) # /HEAP - _Same(_link, 'ImportLibrary', _file_name) # /IMPLIB - _Same(_link, 'KeyContainer', _file_name) # /KEYCONTAINER - _Same(_link, 'KeyFile', _file_name) # /KEYFILE - _Same(_link, 'ManifestFile', _file_name) # /ManifestFile - _Same(_link, 'MapFileName', _file_name) - _Same(_link, 'MergedIDLBaseFileName', _file_name) # /IDLOUT - _Same(_link, 'MergeSections', _string) # /MERGE - _Same(_link, 'MidlCommandFile', _file_name) # /MIDL - _Same(_link, 'ModuleDefinitionFile', _file_name) # /DEF - _Same(_link, 'OutputFile', _file_name) # /OUT - _Same(_link, 'ProfileGuidedDatabase', _file_name) # /PGD - _Same(_link, 'ProgramDatabaseFile', _file_name) # /PDB - _Same(_link, 'StackCommitSize', _string) - _Same(_link, 'StackReserveSize', _string) # /STACK - _Same(_link, 'TypeLibraryFile', _file_name) # /TLBOUT - _Same(_link, 'TypeLibraryResourceID', _integer) # /TLBID - _Same(_link, 'Version', _string) # /VERSION - - - _Same(_link, 'AssemblyDebug', - _Enumeration(['', - 'true', # /ASSEMBLYDEBUG - 'false'])) # /ASSEMBLYDEBUG:DISABLE - _Same(_link, 'CLRImageType', - _Enumeration(['Default', - 'ForceIJWImage', # /CLRIMAGETYPE:IJW - 'ForcePureILImage', # /Switch="CLRIMAGETYPE:PURE - 'ForceSafeILImage'])) # /Switch="CLRIMAGETYPE:SAFE - _Same(_link, 'CLRThreadAttribute', - _Enumeration(['DefaultThreadingAttribute', # /CLRTHREADATTRIBUTE:NONE - 'MTAThreadingAttribute', # /CLRTHREADATTRIBUTE:MTA - 'STAThreadingAttribute'])) # /CLRTHREADATTRIBUTE:STA - _Same(_link, 'Driver', - _Enumeration(['NotSet', - 'Driver', # /Driver - 'UpOnly', # /DRIVER:UPONLY - 'WDM'])) # /DRIVER:WDM - _Same(_link, 'LinkTimeCodeGeneration', - _Enumeration(['Default', - 'UseLinkTimeCodeGeneration', # /LTCG - 'PGInstrument', # /LTCG:PGInstrument - 'PGOptimization', # /LTCG:PGOptimize - 'PGUpdate'])) # /LTCG:PGUpdate - _Same(_link, 'ShowProgress', - _Enumeration(['NotSet', - 'LinkVerbose', # /VERBOSE - 'LinkVerboseLib'], # /VERBOSE:Lib - new=['LinkVerboseICF', # /VERBOSE:ICF - 'LinkVerboseREF', # /VERBOSE:REF - 'LinkVerboseSAFESEH', # /VERBOSE:SAFESEH - 'LinkVerboseCLR'])) # /VERBOSE:CLR - _Same(_link, 'UACExecutionLevel', - _Enumeration(['AsInvoker', # /level='asInvoker' - 'HighestAvailable', # /level='highestAvailable' - 'RequireAdministrator'])) # /level='requireAdministrator' - _Same(_link, 'MinimumRequiredVersion', _string) - _Same(_link, 'TreatLinkerWarningAsErrors', _boolean) # /WX - - - # Options found in MSVS that have been renamed in MSBuild. - _Renamed(_link, 'IgnoreDefaultLibraryNames', 'IgnoreSpecificDefaultLibraries', - _file_list) # /NODEFAULTLIB - _Renamed(_link, 'ResourceOnlyDLL', 'NoEntryPoint', _boolean) # /NOENTRY - _Renamed(_link, 'SwapRunFromNet', 'SwapRunFromNET', _boolean) # /SWAPRUN:NET - - _Moved(_link, 'GenerateManifest', '', _boolean) - _Moved(_link, 'IgnoreImportLibrary', '', _boolean) - _Moved(_link, 'LinkIncremental', '', _newly_boolean) - _Moved(_link, 'LinkLibraryDependencies', 'ProjectReference', _boolean) - _Moved(_link, 'UseLibraryDependencyInputs', 'ProjectReference', _boolean) - - # MSVS options not found in MSBuild. - _MSVSOnly(_link, 'OptimizeForWindows98', _newly_boolean) - _MSVSOnly(_link, 'UseUnicodeResponseFiles', _boolean) - - # MSBuild options not found in MSVS. - _MSBuildOnly(_link, 'BuildingInIDE', _boolean) - _MSBuildOnly(_link, 'ImageHasSafeExceptionHandlers', _boolean) # /SAFESEH - _MSBuildOnly(_link, 'LinkDLL', _boolean) # /DLL Visible='false' - _MSBuildOnly(_link, 'LinkStatus', _boolean) # /LTCG:STATUS - _MSBuildOnly(_link, 'PreventDllBinding', _boolean) # /ALLOWBIND - _MSBuildOnly(_link, 'SupportNobindOfDelayLoadedDLL', _boolean) # /DELAY:NOBIND - _MSBuildOnly(_link, 'TrackerLogDirectory', _folder_name) - _MSBuildOnly(_link, 'MSDOSStubFileName', _file_name) # /STUB Visible='false' - _MSBuildOnly(_link, 'SectionAlignment', _integer) # /ALIGN - _MSBuildOnly(_link, 'SpecifySectionAttributes', _string) # /SECTION - _MSBuildOnly(_link, 'ForceFileOutput', - _Enumeration([], new=['Enabled', # /FORCE - # /FORCE:MULTIPLE - 'MultiplyDefinedSymbolOnly', - 'UndefinedSymbolOnly'])) # /FORCE:UNRESOLVED - _MSBuildOnly(_link, 'CreateHotPatchableImage', - _Enumeration([], new=['Enabled', # /FUNCTIONPADMIN - 'X86Image', # /FUNCTIONPADMIN:5 - 'X64Image', # /FUNCTIONPADMIN:6 - 'ItaniumImage'])) # /FUNCTIONPADMIN:16 - _MSBuildOnly(_link, 'CLRSupportLastError', - _Enumeration([], new=['Enabled', # /CLRSupportLastError - 'Disabled', # /CLRSupportLastError:NO - # /CLRSupportLastError:SYSTEMDLL - 'SystemDlls'])) - - ''' - SwitchConverter.__init__(self, table, booltable) - -CLSWITCHES = ClSwitchConverter() -LINKSWITCHES = LinkSwitchConverter() - -#------------------------------------------------------------------------------- - -# Return a Windows path from a native path -def winpath(path): - drive, rest = ntpath.splitdrive(path) - result = [] - while rest and rest != ntpath.sep: - rest, part = ntpath.split(rest) - result.insert(0, part) - if rest: - result.insert(0, rest) - return ntpath.join(drive.upper(), *result) - -def makeList(x): - if not x: - return [] - if type(x) is not list: - return [x] - return x - -#------------------------------------------------------------------------------- - -class Configuration(object): - def __init__(self, variant, platform, target, env): - self.name = '%s|%s' % (variant, platform) - self.variant = variant - self.platform = platform - self.target = target - self.env = env - -#------------------------------------------------------------------------------- - -class Item(object): - '''Represents a file item in the Solution Explorer''' - def __init__(self, path, builder): - self._path = path - self._builder = builder - self.node = dict() - - if builder == 'Object': - self._tag = 'ClCompile' - self._excluded = False - elif builder == 'Protoc': - self._tag = 'CustomBuild' - self._excluded = False - else: - ext = os.path.splitext(self._path)[1] - if ext in ['.c', '.cc', '.cpp']: - self._tag = 'ClCompile' - self._excluded = True - else: - if ext in ['.h', '.hpp', '.hxx', '.inl', '.inc']: - self._tag = 'ClInclude' - else: - self._tag = 'None' - self._excluded = False; - - def __repr__(self): - return '' % ( - self.path, self.tag, str(self.node)) - - def path(self): - return self._path - - def tag(self): - return self._tag - - def builder(self): - return self._builder - - def is_compiled(self): - return self._builder == 'Object' - - def is_excluded(self): - return self._excluded - -#------------------------------------------------------------------------------- - -def _guid(seed, name = None): - m = hashlib.md5() - m.update(seed) - if name: - m.update(name) - d = m.hexdigest().upper() - guid = "{%s-%s-%s-%s-%s}" % (d[:8], d[8:12], d[12:16], d[16:20], d[20:32]) - return guid - -class _ProjectGenerator(object): - '''Generates a project file for Visual Studio 2013''' - - def __init__(self, project_node, filters_node, env): - try: - self.configs = xsorted(env['VSPROJECT_CONFIGS']) - except KeyError: - raise ValueError ('Missing VSPROJECT_CONFIGS') - self.root_dir = os.getcwd() - self.root_dirs = [os.path.abspath(x) for x in makeList(env['VSPROJECT_ROOT_DIRS'])] - self.project_dir = os.path.dirname(os.path.abspath(str(project_node))) - self.project_node = project_node - self.project_file = None - self.filters_node = filters_node - self.filters_file = None - self.guid = _guid(os.path.basename(str(self.project_node))) - self.buildItemList(env) - - def buildItemList(self, env): - '''Build the Item set associated with the configurations''' - items = {} - def _walk(target, items, prefix=''): - if os.path.isabs(str(target)): - return - if target.has_builder(): - builder = target.get_builder().get_name(env) - bsources = target.get_binfo().bsources - if builder == 'Program': - for child in bsources: - _walk(child, items, prefix+' ') - else: - for child in bsources: - item = items.setdefault(str(child), Item(str(child), builder=builder)) - item.node[config] = target - _walk(child, items, prefix+' ') - for child in target.children(scan=1): - if not os.path.isabs(str(child)): - item = items.setdefault(str(child), Item(str(child), builder=None)) - _walk(child, items, prefix+' ') - for config in self.configs: - targets = config.target - for target in targets: - _walk(target, items) - self.items = xsorted(items.values()) - - def makeListTag(self, items, prefix, tag, attrs, inherit=True): - '''Builds an XML tag string from a list of items. If items is - empty, then the returned string is empty.''' - if not items: - return '' - s = '%(prefix)s<%(tag)s%(attrs)s>' % locals() - s += ';'.join(items) - if inherit: - s += ';%%(%(tag)s)' % locals() - s += '\r\n' % locals() - return s - - def relPaths(self, paths): - items = [] - for path in paths: - if not os.path.isabs(path): - items.append(winpath(os.path.relpath(path, self.project_dir))) - return items - - def extraRelPaths(self, paths, base): - extras = [] - for path in paths: - if not path in base: - extras.append(path) - return self.relPaths(extras) - - def writeHeader(self): - global clSwitches - - encoding = 'utf-8' - project_guid = self.guid - name = os.path.splitext(os.path.basename(str(self.project_node)))[0] - - f = self.project_file - f.write(UnicodeByteMarker) - f.write(V14DSPHeader % locals()) - f.write(V14DSPGlobals % locals()) - f.write(' \r\n') - for config in self.configs: - variant = config.variant - platform = config.platform - f.write(V14DSPProjectConfiguration % locals()) - f.write(' \r\n') - - f.write(' \r\n') - for config in self.configs: - variant = config.variant - platform = config.platform - use_debug_libs = variant == 'Debug' - variant_dir = os.path.relpath(os.path.dirname( - config.target[0].get_abspath()), self.project_dir) - out_dir = winpath(variant_dir) + ntpath.sep - int_dir = winpath(ntpath.join(variant_dir, 'src')) + ntpath.sep - f.write(V14DSPPropertyGroup % locals()) - - f.write(' \r\n') - f.write(' \r\n') - for config in self.configs: - variant = config.variant - platform = config.platform - f.write(V14DSPImportGroup % locals()) - - f.write(' \r\n') - for config in self.configs: - variant = config.variant - platform = config.platform - f.write(V14DSPItemDefinitionGroup % locals()) - # Cl options - f.write(' \r\n') - f.write( - ' %s%%(PreprocessorDefinitions)\r\n' % ( - itemList(config.env['CPPDEFINES'], ';'))) - props = '' - props += self.makeListTag(self.relPaths(xsorted(config.env['CPPPATH'])), - ' ', 'AdditionalIncludeDirectories', '', True) - f.write(props) - f.write(CLSWITCHES.getXml(xsorted(config.env['CCFLAGS']), ' ')) - f.write(' \r\n') - - f.write(' \r\n') - props = '' - props += self.makeListTag(xsorted(config.env['LIBS']), - ' ', 'AdditionalDependencies', '', True) - try: - props += self.makeListTag(self.relPaths(xsorted(config.env['LIBPATH'])), - ' ', 'AdditionalLibraryDirectories', '', True) - except: - pass - f.write(props) - f.write(LINKSWITCHES.getXml(xsorted(config.env['LINKFLAGS']), ' ')) - f.write(' \r\n') - - f.write(' \r\n') - - def writeProject(self): - self.writeHeader() - - f = self.project_file - self.project_file.write(' \r\n') - for item in self.items: - path = winpath(os.path.relpath(item.path(), self.project_dir)) - tag = item.tag() - props = '' - if item.builder() == 'Object': - props = '' - for config in self.configs: - name = config.name - variant = config.variant - platform = config.platform - if not config in item.node: - props += \ - ''' True\r\n''' % locals() - for config, output in xsorted(item.node.items()): - name = config.name - env = output.get_build_env() - variant = config.variant - platform = config.platform - props += self.makeListTag(self.extraRelPaths(xsorted(env['CPPPATH']), config.env['CPPPATH']), - ' ', 'AdditionalIncludeDirectories', - ''' Condition="'$(Configuration)|$(Platform)'=='%(variant)s|%(platform)s'"''' % locals(), - True) - elif item.is_excluded(): - props = ' True\r\n' - elif item.builder() == 'Protoc': - for config, output in xsorted(item.node.items()): - name = config.name - out_dir = os.path.relpath(os.path.dirname(str(output)), self.project_dir) - cpp_out = winpath(out_dir) - out_parts = out_dir.split(os.sep) - out_parts.append(os.path.splitext(os.path.basename(item.path()))[0]) - base_out = ntpath.join(*out_parts) - props += V14CustomBuildProtoc % locals() - - f.write(' <%(tag)s Include="%(path)s">\r\n' % locals()) - f.write(props) - f.write(' \r\n' % locals()) - f.write(' \r\n') - - f.write( - ' \r\n' - ' \r\n' - ' \r\n' - '\r\n') - - def writeFilters(self): - def getGroup(abspath): - abspath = os.path.dirname(abspath) - for d in self.root_dirs: - common = os.path.commonprefix([abspath, d]) - if common == d: - return winpath(os.path.relpath(abspath, common)) - return winpath(os.path.split(abspath)[1]) - - f = self.filters_file - f.write(UnicodeByteMarker) - f.write(V14DSPFiltersHeader) - - f.write(' \r\n') - groups = set() - for item in self.items: - group = getGroup(os.path.abspath(item.path())) - while group != '': - groups.add(group) - group = ntpath.split(group)[0] - for group in xsorted(groups): - guid = _guid(self.guid, group) - f.write( - ' \r\n' - ' %(guid)s\r\n' - ' \r\n' % locals()) - f.write(' \r\n') - - f.write(' \r\n') - for item in self.items: - path = os.path.abspath(item.path()) - group = getGroup(path) - path = winpath(os.path.relpath(path, self.project_dir)) - tag = item.tag() - f.write ( - ' <%(tag)s Include="%(path)s">\r\n' - ' %(group)s\r\n' - ' \r\n' % locals()) - f.write(' \r\n') - f.write('\r\n') - - def build(self): - try: - self.project_file = open(str(self.project_node), 'wb') - except (IOError, detail): - raise SCons.Errors.InternalError('Unable to open "' + - str(self.project_node) + '" for writing:' + str(detail)) - try: - self.filters_file = open(str(self.filters_node), 'wb') - except (IOError, detail): - raise SCons.Errors.InternalError('Unable to open "' + - str(self.filters_node) + '" for writing:' + str(detail)) - self.writeProject() - self.writeFilters() - self.project_file.close() - self.filters_file.close() - -#------------------------------------------------------------------------------- - -class _SolutionGenerator(object): - def __init__(self, slnfile, projfile, env): - pass - - def build(self): - pass - -#------------------------------------------------------------------------------- - -# Generate the VS2013 project -def buildProject(target, source, env): - if env.get('auto_build_solution', 1): - if len(target) != 3: - raise ValueError ("Unexpected len(target) != 3") - if not env.get('auto_build_solution', 1): - if len(target) != 2: - raise ValueError ("Unexpected len(target) != 2") - - g = _ProjectGenerator (target[0], target[1], env) - g.build() - - if env.get('auto_build_solution', 1): - g = _SolutionGenerator (target[2], target[0], env) - g.build() - -def projectEmitter(target, source, env): - if len(target) != 1: - raise ValueError ("Exactly one target must be specified") - - # If source is unspecified this condition will be true - if not source or source[0] == target[0]: - source = [] - - outputs = [] - for node in list(target): - path = env.GetBuildPath(node) - outputs.extend([ - path + '.vcxproj', - path + '.vcxproj.filters']) - if env.get('auto_build_solution', 1): - outputs.append(path + '.sln') - return outputs, source - -projectBuilder = SCons.Builder.Builder( - action = SCons.Action.Action(buildProject, "Building ${TARGET}"), - emitter = projectEmitter) - -def createConfig(self, variant, platform, target, env): - return Configuration(variant, platform, target, env) - -def generate(env): - '''Add Builders and construction variables for Microsoft Visual - Studio project files to an Environment.''' - try: - env['BUILDERS']['VSProject'] - except KeyError: - env['BUILDERS']['VSProject'] = projectBuilder - env.AddMethod(createConfig, 'VSProjectConfig') - -def exists(env): - return True diff --git a/src/ripple/core/SociDB.h b/src/ripple/core/SociDB.h index 56ab8525cf..3904dd4495 100644 --- a/src/ripple/core/SociDB.h +++ b/src/ripple/core/SociDB.h @@ -138,11 +138,6 @@ std::unique_ptr makeCheckpointer (soci::session&, JobQueue&, Logs } // ripple -// Do not remove this dead code. It forces `scons vcxproj` to include version.h. -#if 0 -#include "version.h" -#endif - #if defined(__clang__) #pragma clang diagnostic pop #endif diff --git a/src/ripple/site_scons/scons_to_ninja.py b/src/ripple/site_scons/scons_to_ninja.py deleted file mode 100644 index fb17e86044..0000000000 --- a/src/ripple/site_scons/scons_to_ninja.py +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright (c) 2014 The Native Client Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -import atexit -import os -import sys -import SCons.Action -# This implements a Ninja backend for SCons. This allows SCons to be used -# as a Ninja file generator, similar to how Gyp will generate Ninja files. -# -# This is a way to bypass SCons's slow startup time. After running SCons -# to generate a Ninja file (which is fairly slow), you can rebuild targets -# quickly using Ninja, as long as the .scons files haven't changed. -# -# The implementation is fairly hacky: It hooks PRINT_CMD_LINE_FUNC to -# discover the build commands that SCons would normally run. -# -# A cleaner implementation would traverse the node graph instead. -# Traversing the node graph is itself straightforward, but finding the -# command associated with a node is not -- I couldn't figure out how to do -# that. -# This is necessary to handle SCons's "variant dir" feature. The filename -# associated with a Scons node can be ambiguous: it might come from the -# build dir or the source dir. -def GetRealNode(node): - src = node.srcnode() - if src.stat() is not None: - return src - return node -def GenerateNinjaFile(envs, dest_file): - # Tell SCons not to run any commands, just report what would be run. - for e in envs: - e.SetOption('no_exec', True) - # Tell SCons that everything needs rebuilding. - e.Decider(lambda dependency, target, prev_ni: True) - # Use a list to ensure that the output is ordered deterministically. - node_list = [] - node_map = {} - def CustomCommandPrinter(cmd, targets, source, env): - for node in targets: - # There can sometimes be multiple commands per target (e.g. ar+ranlib). - # We must collect these together to output a single Ninja rule. - if node not in node_map: - node_list.append(node) - node_map.setdefault(node, []).append(cmd) - for e in envs: - e.Append(PRINT_CMD_LINE_FUNC=CustomCommandPrinter) - def WriteFile(): - dest_temp = '%s.tmp' % dest_file - ninja_fh = open(dest_temp, 'w') - ninja_fh.write("""\ -# Generated by scons_to_ninja.py -# Generic rule for handling any command. -rule cmd - command = $cmd -# NaCl overrides SCons's Install() step to create hard links, for speed. -# To coexist with that, we must remove the file before copying, otherwise -# cp complains the source and dest "are the same file". We also create -# hard links here (with -l) for speed. -rule install - command = rm -f $out && cp -l $in $out -""") - for node in node_list: - dest_path = node.get_path() - cmds = node_map[node] - deps = [GetRealNode(dep).get_path() for dep in node.all_children()] - action = node.builder.action - if type(action) == SCons.Action.FunctionAction: - funcname = action.function_name() - if funcname == 'installFunc': - assert len(deps) == 1, len(deps) - ninja_fh.write('\nbuild %s: install %s\n' - % (dest_path, ' '.join(deps))) - continue - else: - sys.stderr.write('Unknown FunctionAction, %r: skipping target %r\n' - % (funcname, dest_path)) - continue - ninja_fh.write('\nbuild %s: cmd %s\n' - % (dest_path, ' '.join(deps))) - ninja_fh.write(' cmd = %s\n' % ' && '.join(cmds)) - # Make the result file visible atomically. - os.rename(dest_temp, dest_file) - atexit.register(WriteFile)