summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/beast/tools
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
commit19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch)
tree42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/boost/libs/beast/tools
parentInitial commit. (diff)
downloadceph-upstream.tar.xz
ceph-upstream.zip
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/beast/tools')
-rw-r--r--src/boost/libs/beast/tools/blacklist.supp30
-rwxr-xr-xsrc/boost/libs/beast/tools/build-and-test.sh162
-rwxr-xr-xsrc/boost/libs/beast/tools/coverage.sh9
-rw-r--r--src/boost/libs/beast/tools/field.txt352
-rwxr-xr-xsrc/boost/libs/beast/tools/get-boost.sh89
-rwxr-xr-xsrc/boost/libs/beast/tools/install-dependencies.sh47
-rwxr-xr-xsrc/boost/libs/beast/tools/local-travis.sh8
-rwxr-xr-xsrc/boost/libs/beast/tools/make_field.sh22
-rwxr-xr-xsrc/boost/libs/beast/tools/retry.sh9
-rw-r--r--src/boost/libs/beast/tools/user-config.jam13
-rw-r--r--src/boost/libs/beast/tools/valgrind.supp31
11 files changed, 772 insertions, 0 deletions
diff --git a/src/boost/libs/beast/tools/blacklist.supp b/src/boost/libs/beast/tools/blacklist.supp
new file mode 100644
index 000000000..669f3eb64
--- /dev/null
+++ b/src/boost/libs/beast/tools/blacklist.supp
@@ -0,0 +1,30 @@
+
+# Remember that this blacklist file is GLOBAL to all sanitizers
+# Be therefore extremely careful when considering to add a sanitizer
+# filter here instead of using a runtime suppression
+#
+# Remember also that filters here quite literally completely
+# remove instrumentation altogether, so filtering here means
+# that sanitizers such as tsan will false positive on problems
+# introduced by code filtered here.
+#
+# The main use for this file is ubsan, as it's the only sanitizer
+# without a runtime suppression facility.
+#
+# Be ESPECIALLY careful when filtering out entire source files!
+# Try if at all possible to filter only functions using fun:regex
+# Remember you must use mangled symbol names with fun:regex
+
+# boost/lexical_cast.hpp:1625:43: runtime error: downcast of address 0x7fbb4fffbce8 which does not point to an object of type 'buffer_t' (aka 'parser_buf<std::basic_streambuf<char, char_traits<char> >, char>')
+# Fixed in Boost 1.63.0 https://svn.boost.org/trac/boost/ticket/12889
+#
+fun:*shl_input_streamable*
+
+## The well known ubsan failure in libstdc++ extant for years :)
+# Line 96:24: runtime error: load of value 4294967221, which is not a valid value for type 'std::_Ios_Fmtflags'
+#
+#fun:*_Ios_Fmtflags*
+
+# boost/any.hpp:259:16: runtime error: downcast of address 0x000004392e70 which does not point to an object of type 'any::holder<int>'
+#
+#fun:*any_cast* \ No newline at end of file
diff --git a/src/boost/libs/beast/tools/build-and-test.sh b/src/boost/libs/beast/tools/build-and-test.sh
new file mode 100755
index 000000000..7d95f6f3d
--- /dev/null
+++ b/src/boost/libs/beast/tools/build-and-test.sh
@@ -0,0 +1,162 @@
+#!/usr/bin/env bash
+
+# add 'x' for command tracing
+set -eu
+
+#-------------------------------------------------------------------------------
+#
+# Utilities
+#
+
+# For builds not triggered by a pull request TRAVIS_BRANCH is the name of the
+# branch currently being built; whereas for builds triggered by a pull request
+# it is the name of the branch targeted by the pull request (in many cases this
+# will be master).
+MAIN_BRANCH="0"
+if [[ $TRAVIS_BRANCH == "master" || $TRAVIS_BRANCH == "develop" ]]; then
+ MAIN_BRANCH="1"
+fi
+
+if [[ "${BEAST_RETRY}" == "true" ]]; then
+ JOBS=1
+elif [[ "${TRAVIS}" == "true" ]]; then
+ JOBS="2"
+elif [[ $(uname -s) == "Linux" ]]; then
+ # Physical cores
+ JOBS=$(lscpu -p | grep -v '^#' | sort -u -t, -k 2,4 | wc -l)
+elif [[ $(uname) == "Darwin" ]]; then
+ # Physical cores
+ JOBS=$(sysctl -n hw.physicalcpu)
+else
+ JOBS=1
+fi
+
+# run with a debugger
+function debug_run ()
+{
+ if [[ $TRAVIS_OS_NAME == "osx" ]]; then
+ # -o runs after loading the binary
+ # -k runs after any crash
+ # We use a ghetto appromixation of --return-child-result, exiting with
+ # 1 on a crash
+ lldb \
+ --batch \
+ -o 'run' \
+ -k 'thread backtrace all' \
+ -k 'script import os; os._exit(1)' \
+ $@
+ else
+ gdb \
+ --silent \
+ --batch \
+ --return-child-result \
+ -ex="set print thread-events off" \
+ -ex=run \
+ -ex="thread apply all bt full" \
+ --args $@
+ fi
+}
+
+function valgrind_run ()
+{
+ valgrind \
+ --track-origins=yes \
+ --max-stackframe=16000000 \
+ --suppressions=$BOOST_ROOT/libs/beast/tools/valgrind.supp \
+ --error-exitcode=1 \
+ $@
+}
+
+function run_tests_with_debugger ()
+{
+ find "$1" -name "$2" -print0 | while read -d $'\0' f
+ do
+ debug_run "$f"
+ done
+}
+
+function run_tests_with_valgrind ()
+{
+ find "$1" -name "$2" -print0 | while read -d $'\0' f
+ do
+ valgrind_run "$f"
+ done
+}
+
+function run_tests ()
+{
+ find "$1" -name "$2" -print0 | while read -d $'\0' f
+ do
+ "$f"
+ done
+}
+
+#-------------------------------------------------------------------------------
+
+BIN_DIR="$BOOST_ROOT/bin.v2/libs/beast/test"
+LIB_DIR="$BOOST_ROOT/libs/beast"
+INC_DIR="$BOOST_ROOT/boost/beast"
+
+function build_bjam ()
+{
+ if [[ $VARIANT == "beast_coverage" ]] || \
+ [[ $VARIANT == "beast_valgrind" ]] || \
+ [[ $VARIANT == "beast_ubasan" ]]; then
+ b2 \
+ define=BOOST_COROUTINES_NO_DEPRECATION_WARNING=1 \
+ cxxstd=$CXXSTD \
+ libs/beast/test/beast/core//fat-tests \
+ libs/beast/test/beast/http//fat-tests \
+ libs/beast/test/beast/websocket//fat-tests \
+ libs/beast/test/beast/zlib//fat-tests \
+ toolset=$TOOLSET \
+ variant=$VARIANT \
+ link=static \
+ -j${JOBS}
+ elif [[ $VARIANT == "debug" ]]; then
+ b2 \
+ define=BOOST_COROUTINES_NO_DEPRECATION_WARNING=1 \
+ cxxstd=$CXXSTD \
+ libs/beast/test//fat-tests \
+ libs/beast/example \
+ toolset=$TOOLSET \
+ variant=$VARIANT \
+ -j${JOBS}
+ else
+ b2 \
+ define=BOOST_COROUTINES_NO_DEPRECATION_WARNING=1 \
+ cxxstd=$CXXSTD \
+ libs/beast/test//fat-tests \
+ toolset=$TOOLSET \
+ variant=$VARIANT \
+ -j${JOBS}
+ fi
+}
+
+build_bjam
+
+if [[ $VARIANT == "beast_coverage" ]]; then
+ # for lcov to work effectively, the paths and includes
+ # passed to the compiler should not contain "." or "..".
+ # (this runs in $BOOST_ROOT)
+ lcov --version
+ find "$BOOST_ROOT" -name "*.gcda" | xargs rm -f
+ rm -f "$BOOST_ROOT/*.info"
+ lcov --no-external -c -i -d "$BOOST_ROOT" -o baseline.info > /dev/null
+ run_tests "$BIN_DIR" fat-tests
+ # https://bugs.launchpad.net/ubuntu/+source/lcov/+bug/1163758
+ lcov --no-external -c -d "$BOOST_ROOT" -o testrun-all.info > /dev/null 2>&1
+ lcov -a baseline.info -a testrun-all.info -o lcov-diff.info > /dev/null
+ lcov -e "lcov-diff.info" "$INC_DIR/*" -o lcov.info > /dev/null
+ lcov --remove "lcov.info" "$INC_DIR/_experimental/*" -o lcov.info > /dev/null
+ ~/.local/bin/codecov -X gcov -f lcov.info
+ find "$BOOST_ROOT" -name "*.gcda" | xargs rm -f
+
+elif [[ $VARIANT == "beast_valgrind" ]]; then
+ run_tests_with_valgrind "$BIN_DIR" fat-tests
+
+else
+ #run_tests_with_debugger "$BIN_DIR" fat-tests
+ run_tests "$BIN_DIR" fat-tests
+
+fi
diff --git a/src/boost/libs/beast/tools/coverage.sh b/src/boost/libs/beast/tools/coverage.sh
new file mode 100755
index 000000000..508e83d6b
--- /dev/null
+++ b/src/boost/libs/beast/tools/coverage.sh
@@ -0,0 +1,9 @@
+#! /bin/bash
+set -e
+lcov --directory bin.v2 --capture --no-external --directory $(pwd) --output-file coverage.info > /dev/null 2>&1
+lcov --extract coverage.info $(pwd)'/boost/beast/*' --output-file coverage.info > /dev/null
+lcov --remove coverage.info $(pwd)'/boost/beast/_experimental/*' --output-file coverage.info > /dev/null
+lcov --list coverage.info
+# Codecov improperly detects project root in AzP, so we need to upload from beast git repo
+cd libs/beast
+curl -s https://codecov.io/bash -o codecov && bash ./codecov -X gcov -f ../../coverage.info -t $CODECOV_TOKEN
diff --git a/src/boost/libs/beast/tools/field.txt b/src/boost/libs/beast/tools/field.txt
new file mode 100644
index 000000000..bc7926ce7
--- /dev/null
+++ b/src/boost/libs/beast/tools/field.txt
@@ -0,0 +1,352 @@
+Accept
+Accept-Additions
+Accept-Charset
+Accept-Datetime
+Accept-Encoding
+Accept-Features
+Accept-Language
+Accept-Patch
+Accept-Post
+Accept-Ranges
+Access-Control
+Access-Control-Allow-Credentials
+Access-Control-Allow-Headers
+Access-Control-Allow-Methods
+Access-Control-Allow-Origin
+Access-Control-Expose-Headers
+Access-Control-Max-Age
+Access-Control-Request-Headers
+Access-Control-Request-Method
+Age
+A-IM
+Allow
+ALPN
+Also-Control
+Alternate-Recipient
+Alternates
+Alt-Svc
+Alt-Used
+Apparently-To
+Apply-To-Redirect-Ref
+Approved
+Archive
+Archived-At
+Article-Names
+Article-Updates
+Authentication-Control
+Authentication-Info
+Authentication-Results
+Authorization
+Autoforwarded
+Autosubmitted
+Auto-Submitted
+Base
+Bcc
+Body
+Cache-Control
+CalDAV-Timezones
+Cancel-Key
+Cancel-Lock
+Cc
+C-Ext
+Close
+C-Man
+Comments
+Compliance
+Connection
+Content-Alternative
+Content-Base
+Content-Description
+Content-Disposition
+Content-Duration
+Content-Encoding
+Content-features
+Content-ID
+Content-Identifier
+Content-Language
+Content-Length
+Content-Location
+Content-MD5
+Content-Range
+Content-Return
+Content-Script-Type
+Content-Style-Type
+Content-Transfer-Encoding
+Content-Type
+Content-Version
+Control
+Conversion
+Conversion-With-Loss
+Cookie
+Cookie2
+C-Opt
+Cost
+C-PEP
+C-PEP-Info
+DASL
+Date
+Date-Received
+DAV
+Default-Style
+Deferred-Delivery
+Delivery-Date
+Delta-Base
+Depth
+Derived-From
+Destination
+Differential-ID
+Digest
+Discarded-X400-IPMS-Extensions
+Discarded-X400-MTS-Extensions
+Disclose-Recipients
+Disposition-Notification-Options
+Disposition-Notification-To
+Distribution
+DKIM-Signature
+DL-Expansion-History
+Downgraded-Bcc
+Downgraded-Cc
+Downgraded-Disposition-Notification-To
+Downgraded-Final-Recipient
+Downgraded-From
+Downgraded-In-Reply-To
+Downgraded-Mail-From
+Downgraded-Message-Id
+Downgraded-Original-Recipient
+Downgraded-Rcpt-To
+Downgraded-References
+Downgraded-Reply-To
+Downgraded-Resent-Bcc
+Downgraded-Resent-Cc
+Downgraded-Resent-From
+Downgraded-Resent-Reply-To
+Downgraded-Resent-Sender
+Downgraded-Resent-To
+Downgraded-Return-Path
+Downgraded-Sender
+Downgraded-To
+EDIINT-Features
+Eesst-Version
+Encoding
+Encrypted
+Errors-To
+ETag
+Expect
+Expires
+Expiry-Date
+Ext
+Followup-To
+Forwarded
+From
+Generate-Delivery-Report
+GetProfile
+Hobareg
+Host
+HTTP2-Settings
+If
+If-Match
+If-Modified-Since
+If-None-Match
+If-Range
+If-Schedule-Tag-Match
+If-Unmodified-Since
+IM
+Importance
+Incomplete-Copy
+Injection-Date
+Injection-Info
+In-Reply-To
+Jabber-ID
+Keep-Alive
+Keywords
+Label
+Language
+Last-Modified
+Latest-Delivery-Time
+Lines
+Link
+List-Archive
+List-Help
+List-ID
+List-Owner
+List-Post
+List-Subscribe
+List-Unsubscribe
+List-Unsubscribe-Post
+Location
+Lock-Token
+Man
+Max-Forwards
+Memento-Datetime
+Message-Context
+Message-ID
+Message-Type
+Meter
+Method-Check
+Method-Check-Expires
+MIME-Version
+MMHS-Acp127-Message-Identifier
+MMHS-Authorizing-Users
+MMHS-Codress-Message-Indicator
+MMHS-Copy-Precedence
+MMHS-Exempted-Address
+MMHS-Extended-Authorisation-Info
+MMHS-Handling-Instructions
+MMHS-Message-Instructions
+MMHS-Message-Type
+MMHS-Originator-PLAD
+MMHS-Originator-Reference
+MMHS-Other-Recipients-Indicator-CC
+MMHS-Other-Recipients-Indicator-To
+MMHS-Primary-Precedence
+MMHS-Subject-Indicator-Codes
+MT-Priority
+Negotiate
+Newsgroups
+NNTP-Posting-Date
+NNTP-Posting-Host
+Non-Compliance
+Obsoletes
+Opt
+Optional
+Optional-WWW-Authenticate
+Ordering-Type
+Organization
+Origin
+Original-Encoded-Information-Types
+Original-From
+Original-Message-ID
+Original-Recipient
+Original-Sender
+Original-Subject
+Originator-Return-Address
+Overwrite
+P3P
+Path
+PEP
+Pep-Info
+PICS-Label
+Position
+Posting-Version
+Pragma
+Prefer
+Preference-Applied
+Prevent-NonDelivery-Report
+Priority
+Privicon
+ProfileObject
+Protocol
+Protocol-Info
+Protocol-Query
+Protocol-Request
+Proxy-Authenticate
+Proxy-Authentication-Info
+Proxy-Authorization
+Proxy-Connection
+Proxy-Features
+Proxy-Instruction
+Public
+Public-Key-Pins
+Public-Key-Pins-Report-Only
+Range
+Received
+Received-SPF
+Redirect-Ref
+References
+Referer
+Referer-Root
+Relay-Version
+Reply-By
+Reply-To
+Require-Recipient-Valid-Since
+Resent-Bcc
+Resent-Cc
+Resent-Date
+Resent-From
+Resent-Message-ID
+Resent-Reply-To
+Resent-Sender
+Resent-To
+Resolution-Hint
+Resolver-Location
+Retry-After
+Return-Path
+Safe
+Schedule-Reply
+Schedule-Tag
+Security-Scheme
+Sec-WebSocket-Accept
+Sec-WebSocket-Extensions
+Sec-WebSocket-Key
+Sec-WebSocket-Protocol
+Sec-WebSocket-Version
+See-Also
+Sender
+Sensitivity
+Server
+Set-Cookie
+Set-Cookie2
+SetProfile
+SIO-Label
+SIO-Label-History
+SLUG
+SoapAction
+Solicitation
+Status-URI
+Strict-Transport-Security
+Subject
+SubOK
+Subst
+Summary
+Supersedes
+Surrogate-Capability
+Surrogate-Control
+TCN
+TE
+Timeout
+Title
+To
+Topic
+Trailer
+Transfer-Encoding
+TTL
+UA-Color
+UA-Media
+UA-Pixels
+UA-Resolution
+UA-Windowpixels
+Upgrade
+Urgency
+URI
+User-Agent
+Variant-Vary
+Vary
+VBR-Info
+Version
+Via
+Want-Digest
+Warning
+WWW-Authenticate
+X400-Content-Identifier
+X400-Content-Return
+X400-Content-Type
+X400-MTS-Identifier
+X400-Originator
+X400-Received
+X400-Recipients
+X400-Trace
+X-Archived-At
+X-Device-Accept
+X-Device-Accept-Charset
+X-Device-Accept-Encoding
+X-Device-Accept-Language
+X-Device-User-Agent
+X-Frame-Options
+X-Mittente
+X-PGP-Sig
+Xref
+X-Ricevuta
+X-Riferimento-Message-ID
+X-TipoRicevuta
+X-Trasporto
+X-VerificaSicurezza
diff --git a/src/boost/libs/beast/tools/get-boost.sh b/src/boost/libs/beast/tools/get-boost.sh
new file mode 100755
index 000000000..c614a486a
--- /dev/null
+++ b/src/boost/libs/beast/tools/get-boost.sh
@@ -0,0 +1,89 @@
+#! /bin/sh
+
+set -e
+
+build_dir=$2
+
+branch="master"
+
+if [ "$1" != "master" -a "$1" != "refs/heads/master" ]; then
+ branch="develop"
+fi
+
+echo "BUILD_DIR: $build_dir"
+echo "BRANCH: $branch"
+
+git clone -b $branch --depth 1 https://github.com/boostorg/boost.git boost-root
+cd boost-root
+
+# Use a reasonably large depth to prevent intermittent update failures due to
+# commits being on a submodule's master before the superproject is updated.
+git submodule update --init --depth 20 --jobs 4 \
+ libs/array \
+ libs/headers \
+ tools/build \
+ tools/boost_install \
+ tools/boostdep \
+ libs/align \
+ libs/asio \
+ libs/assert \
+ libs/config \
+ libs/core \
+ libs/endian \
+ libs/filesystem \
+ libs/intrusive \
+ libs/locale \
+ libs/optional \
+ libs/smart_ptr \
+ libs/static_assert \
+ libs/system \
+ libs/throw_exception \
+ libs/type_traits \
+ libs/utility \
+ libs/winapi \
+ libs/algorithm \
+ libs/array \
+ libs/atomic \
+ libs/bind \
+ libs/chrono \
+ libs/concept_check \
+ libs/container \
+ libs/container_hash \
+ libs/context \
+ libs/conversion \
+ libs/coroutine \
+ libs/date_time \
+ libs/detail \
+ libs/exception \
+ libs/function \
+ libs/function_types \
+ libs/functional \
+ libs/fusion \
+ libs/integer \
+ libs/io \
+ libs/iterator \
+ libs/lambda \
+ libs/lexical_cast \
+ libs/logic \
+ libs/math \
+ libs/move \
+ libs/mp11 \
+ libs/mpl \
+ libs/numeric/conversion \
+ libs/pool \
+ libs/predef \
+ libs/preprocessor \
+ libs/random \
+ libs/range \
+ libs/ratio \
+ libs/rational \
+ libs/thread \
+ libs/tuple \
+ libs/type_index \
+ libs/typeof \
+ libs/unordered
+
+echo Submodule update complete
+
+rm -rf libs/beast
+cp -r $build_dir libs/beast
diff --git a/src/boost/libs/beast/tools/install-dependencies.sh b/src/boost/libs/beast/tools/install-dependencies.sh
new file mode 100755
index 000000000..e865187ba
--- /dev/null
+++ b/src/boost/libs/beast/tools/install-dependencies.sh
@@ -0,0 +1,47 @@
+#!/usr/bin/env bash
+# Exit if anything fails.
+set -eux
+
+HERE=$PWD
+
+# Override gcc version to $GCC_VER.
+# Put an appropriate symlink at the front of the path.
+mkdir -pv $HOME/bin
+for g in gcc g++ gcov gcc-ar gcc-nm gcc-ranlib
+do
+ test -x $( type -p ${g}-$GCC_VER )
+ ln -sv $(type -p ${g}-$GCC_VER) $HOME/bin/${g}
+done
+
+if [[ -n ${CLANG_VER:-} ]]; then
+ # There are cases where the directory exists, but the exe is not available.
+ # Use this workaround for now.
+ if [[ ! -x llvm-${LLVM_VERSION}/bin/llvm-config ]] && [[ -d llvm-${LLVM_VERSION} ]]; then
+ rm -fr llvm-${LLVM_VERSION}
+ fi
+ if [[ ! -d llvm-${LLVM_VERSION} ]]; then
+ mkdir llvm-${LLVM_VERSION}
+ LLVM_URL="http://llvm.org/releases/${LLVM_VERSION}/clang+llvm-${LLVM_VERSION}-x86_64-linux-gnu-ubuntu-14.04.tar.xz"
+ wget -O - ${LLVM_URL} | tar -Jxvf - --strip 1 -C llvm-${LLVM_VERSION}
+ fi
+ llvm-${LLVM_VERSION}/bin/llvm-config --version;
+ export LLVM_CONFIG="llvm-${LLVM_VERSION}/bin/llvm-config";
+fi
+
+# NOTE, changed from PWD -> HOME
+export PATH=$HOME/bin:$PATH
+
+# What versions are we ACTUALLY running?
+if [ -x $HOME/bin/g++ ]; then
+ $HOME/bin/g++ -v
+fi
+if [ -x $HOME/bin/clang ]; then
+ $HOME/bin/clang -v
+fi
+
+# Avoid `spurious errors` caused by ~/.npm permission issues
+# Does it already exist? Who owns? What permissions?
+ls -lah ~/.npm || mkdir ~/.npm
+
+# Make sure we own it
+chown -Rc $USER ~/.npm
diff --git a/src/boost/libs/beast/tools/local-travis.sh b/src/boost/libs/beast/tools/local-travis.sh
new file mode 100755
index 000000000..8dd79da58
--- /dev/null
+++ b/src/boost/libs/beast/tools/local-travis.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+export VARIANT=ubasan
+export TOOLSET=clang
+export TRAVIS=0
+export BOOST_ROOT="`pwd`"
+
+"$1"
diff --git a/src/boost/libs/beast/tools/make_field.sh b/src/boost/libs/beast/tools/make_field.sh
new file mode 100755
index 000000000..8e54c1372
--- /dev/null
+++ b/src/boost/libs/beast/tools/make_field.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+export LC_COLLATE=C
+
+echo "// string constants"
+echo ' "<unknown-field>",'
+cat $1 | sort -f | uniq | sed 's/^/ \"/; s/$/\",/'
+echo
+
+echo "enum class field : unsigned short"
+echo "{"
+echo " unknown = 0,"
+echo
+#cat $1 | uniq | sort -f | sed 's/./\L&/g; s/^/\t/; s/$/,/'
+cat $1 | sort -f | uniq | sed 's/\(.*\)/ \L\1,/; s/-/_/g'
+echo "};"
+echo
+
+echo "// pairs"
+#cat $1 | uniq | sort -f | sed 's/\(.*\)/\tmatch\(field::\L\1, \"\E\1\"\);/; s/-/_/'
+cat $1 | sort -f | uniq | perl -nE 'chomp; $a=lc($_); $a=~s/-/_/g; say " match(field::$a, \"$_\");";' | tr -d "\015"
+
diff --git a/src/boost/libs/beast/tools/retry.sh b/src/boost/libs/beast/tools/retry.sh
new file mode 100755
index 000000000..13b30e8e1
--- /dev/null
+++ b/src/boost/libs/beast/tools/retry.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+for i in {1..3}
+do
+ $1 "${@:2:99}" && exit 0;
+ export BEAST_RETRY="true"
+done
+
+exit 1
diff --git a/src/boost/libs/beast/tools/user-config.jam b/src/boost/libs/beast/tools/user-config.jam
new file mode 100644
index 000000000..215e5adb7
--- /dev/null
+++ b/src/boost/libs/beast/tools/user-config.jam
@@ -0,0 +1,13 @@
+# Used on CI
+
+import os ;
+
+local OPENSSL_ROOT = [ os.environ OPENSSL_ROOT ] ;
+
+project
+ : requirements
+ <include>$(OPENSSL_ROOT)/include
+ <variant>debug:<library-path>$(OPENSSL_ROOT)/lib
+ <target-os>windows<variant>debug:<library-path>$(OPENSSL_ROOT)/debug/lib
+ <variant>release:<library-path>$(OPENSSL_ROOT)/lib
+ ;
diff --git a/src/boost/libs/beast/tools/valgrind.supp b/src/boost/libs/beast/tools/valgrind.supp
new file mode 100644
index 000000000..aa699b741
--- /dev/null
+++ b/src/boost/libs/beast/tools/valgrind.supp
@@ -0,0 +1,31 @@
+{
+ zlib_fill_window_no_init
+ Memcheck:Cond
+ fun:fill_window
+}
+
+{
+ zlib_deflate_fast
+ Memcheck:Cond
+ fun:deflate_fast
+}
+
+{
+ Ignore OpenSSL malloc
+ Memcheck:Leak
+ fun:malloc
+ fun:CRYPTO_malloc
+ obj:*libcrypto*
+}
+{
+ Ignore OpenSSL realloc
+ Memcheck:Leak
+ fun:realloc
+ fun:CRYPTO_realloc
+ obj:*libcrypto*
+}
+{
+ OpenSSL Non-Purify
+ Memcheck:Cond
+ obj:*libcrypto*
+}