From b798f9bab99891cbc779f1c05502b76f8b7d3cea Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" 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 319c74b43d..7cfbf9ffb3 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" 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 7cfbf9ffb3..909fa2eabe 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" 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 909fa2eabe..b57ade139d 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" 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 5d3329e2cf..51ff3f89e8 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).