From b798f9bab99891cbc779f1c05502b76f8b7d3cea Mon Sep 17 00:00:00 2001
From: "Wladimir J. van der Laan" <laanwj@gmail.com>
Date: Tue, 19 Dec 2017 12:53:34 +0100
Subject: [PATCH 1/4] contrib: New clang patch for install_db4

Replace the clang patch with a new and improved version that also fixes
the build issues with OpenBSD and FreeBSD's clang, and apply it
unconditionally.

This needs testing on OSX.
---
 contrib/install_db4.sh | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/contrib/install_db4.sh b/contrib/install_db4.sh
index 319c74b43..7cfbf9ffb 100755
--- a/contrib/install_db4.sh
+++ b/contrib/install_db4.sh
@@ -60,15 +60,11 @@ http_get "${BDB_URL}" "${BDB_VERSION}.tar.gz" "${BDB_HASH}"
 tar -xzvf ${BDB_VERSION}.tar.gz -C "$BDB_PREFIX"
 cd "${BDB_PREFIX}/${BDB_VERSION}/"
 
-# Apply a patch when building on OS X to make the build work with Xcode.
-#
-if [ "$(uname)" = "Darwin" ]; then
-  BDB_OSX_ATOMIC_PATCH_URL='https://raw.githubusercontent.com/narkoleptik/os-x-berkeleydb-patch/0007e2846ae3fc9757849f5277018f4179ad17ef/atomic.patch'
-  BDB_OSX_ATOMIC_PATCH_HASH='ba0e2b4f53e9cb0ec58f60a979b53b8567b4565f0384886196f1fc1ef111d151'
-
-  http_get "${BDB_OSX_ATOMIC_PATCH_URL}" atomic.patch "${BDB_OSX_ATOMIC_PATCH_HASH}"
-  patch -p1 < atomic.patch
-fi
+# Apply a patch necessary when building with clang and c++11 (see https://community.oracle.com/thread/3952592)
+CLANG_CXX11_PATCH_URL='https://gist.githubusercontent.com/LnL7/5153b251fd525fe15de69b67e63a6075/raw/7778e9364679093a32dec2908656738e16b6bdcb/clang.patch'
+CLANG_CXX11_PATCH_HASH='7a9a47b03fd5fb93a16ef42235fa9512db9b0829cfc3bdf90edd3ec1f44d637c'
+http_get "${CLANG_CXX11_PATCH_URL}" clang.patch "${CLANG_CXX11_PATCH_HASH}"
+patch -p2 < clang.patch
 
 cd build_unix/
 

From c0298b06e5b58ed8b177c39354a0c3f8b1b88263 Mon Sep 17 00:00:00 2001
From: "Wladimir J. van der Laan" <laanwj@gmail.com>
Date: Tue, 19 Dec 2017 12:53:45 +0100
Subject: [PATCH 2/4] contrib: Make X=Y arguments work in install_db4

Trailing X=Y arguments are supposed to be passed through unchanged
to bdb's configure. This was not the case, at least with OpenBSD
6.2's shell.

Fix this by not storing the arguments in a temporary variable but
passing "$@" through directly.
---
 contrib/install_db4.sh | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/contrib/install_db4.sh b/contrib/install_db4.sh
index 7cfbf9ffb..909fa2eab 100755
--- a/contrib/install_db4.sh
+++ b/contrib/install_db4.sh
@@ -17,7 +17,6 @@ expand_path() {
 }
 
 BDB_PREFIX="$(expand_path ${1})/db4"; shift;
-BDB_EXTRA_CONFIGURE_FLAGS="${@}"
 BDB_VERSION='db-4.8.30.NC'
 BDB_HASH='12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef'
 BDB_URL="https://download.oracle.com/berkeley-db/${BDB_VERSION}.tar.gz"
@@ -70,7 +69,7 @@ cd build_unix/
 
 "${BDB_PREFIX}/${BDB_VERSION}/dist/configure" \
   --enable-cxx --disable-shared --with-pic --prefix="${BDB_PREFIX}" \
-  "${BDB_EXTRA_CONFIGURE_FLAGS}"
+  "${@}"
 
 make install
 

From d95c83d193d4f16dc85cb4a81ab481cbbe41a033 Mon Sep 17 00:00:00 2001
From: "Wladimir J. van der Laan" <laanwj@gmail.com>
Date: Wed, 20 Dec 2017 13:33:58 +0000
Subject: [PATCH 3/4] contrib: FreeBSD compatibility in install_db4.sh

Unfortunately, FreeBSD uses yet another syntax for `sha256`.

Support FreeBSD's syntax too. Using `uname` is a bit of a hack but it
works and I found no way to distinguish the two.
---
 contrib/install_db4.sh | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/contrib/install_db4.sh b/contrib/install_db4.sh
index 909fa2eab..b57ade139 100755
--- a/contrib/install_db4.sh
+++ b/contrib/install_db4.sh
@@ -31,7 +31,11 @@ sha256_check() {
   if check_exists sha256sum; then
     echo "${1}  ${2}" | sha256sum -c
   elif check_exists sha256; then
-    echo "${1}  ${2}" | sha256 -c
+    if [ "$(uname)" = "FreeBSD" ]; then
+      sha256 -c "${1}" "${2}"
+    else
+      echo "${1}  ${2}" | sha256 -c
+    fi
   else
     echo "${1}  ${2}" | shasum -a 256 -c
   fi

From 2712742ef2947feef4a142f7d1360d1e821597dc Mon Sep 17 00:00:00 2001
From: "Wladimir J. van der Laan" <laanwj@gmail.com>
Date: Wed, 20 Dec 2017 15:16:01 +0100
Subject: [PATCH 4/4] doc: Update FreeBSD build instructions to use bdb4

Use Berkeley DB 4 as recommended on other platforms.
---
 doc/build-unix.md | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/doc/build-unix.md b/doc/build-unix.md
index 5d3329e2c..51ff3f89e 100644
--- a/doc/build-unix.md
+++ b/doc/build-unix.md
@@ -312,17 +312,13 @@ You need to use GNU make (`gmake`) instead of `make`.
 
 For the wallet (optional):
 
-    pkg install db5
-
-This will give a warning "configure: WARNING: Found Berkeley DB other
-than 4.8; wallets opened by this build will not be portable!", but as FreeBSD never
-had a binary release, this may not matter. If backwards compatibility
-with 4.8-built Bitcoin Core is needed follow the steps under "Berkeley DB" above.
+    ./contrib/install_db4.sh `pwd`
+    setenv BDB_PREFIX $PWD/db4
 
 Then build using:
 
     ./autogen.sh
-    ./configure --with-incompatible-bdb BDB_CFLAGS="-I/usr/local/include/db5" BDB_LIBS="-L/usr/local/lib -ldb_cxx-5"
+    ./configure BDB_CFLAGS="-I${BDB_PREFIX}/include" BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx"
     gmake
 
 *Note on debugging*: The version of `gdb` installed by default is [ancient and considered harmful](https://wiki.freebsd.org/GdbRetirement).