#!/bin/bash root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/.." cd "${root_dir}" options=`cat ${root_dir}/bin/config_options.sh` os_dir=$(./platform/os.sh osdir) get_patch_file () { if test -e "${root_dir/PATCH_VERSION}"; then tag=`cat "${root_dir}/PATCH_VERSION" | xargs` else echo "no tag file found, please create it in the root of the project as so: 'echo \"v0.10.2\" > PATCH_VERSION'" exit 1 fi } compare_patch () { cd "${root_dir}/libbitcoind" get_patch_file echo "running the diff command from HEAD to ${tag}" git diff ${tag}..HEAD > /tmp/tmp.patch #uncommitted changes won't affect things here matching_patch=`diff -w /tmp/tmp.patch "${root_dir}/etc/bitcoin.patch"` } #set the LD_LIBRARY_PATH for the linux clients. export LD_LIBRARY_PATH="${root_dir}/libbitcoind/src/leveldb":"${os_dir}":$LD_LIBRARY_PATH debug= if [ "${BITCOINDJS_ENV}" == "debug" ]; then options=`cat ${root_dir}/bin/config_options_debug.sh` fi test= if [ "${BITCOINDJS_ENV}" == "test" ]; then options=`cat ${root_dir}/bin/config_options_test.sh` fi btc_dir="${root_dir}/libbitcoind" echo "Using BTC directory: ${btc_dir}" rm -f "${os_dir}/libbitcoind.*" only_make=false if [ -d "${root_dir}/libbitcoind" ]; then echo "running compare patch..." compare_patch repatch=false if [[ "${matching_patch}" =~ [^\s\\] ]]; then echo "Warning! libbitcoind is not patched with:\ ${root_dir}/etc/bitcoin.patch." echo -n "Would you like to remove the current patch, checkout the tag: ${tag} and \ apply the current patch from "${root_dir}"/etc/bitcoin.patch? (y/N): " if [ $ASSUME_YES = true ]; then input=y echo "" else read input fi if [[ "${input}" =~ ^y|^Y ]]; then repatch=true echo "Removing directory: \"${root_dir}/libbitcoind\" and starting over!" rm -fr "${root_dir}"/libbitcoind fi fi if [ "${repatch}" = false ]; then echo "Running make inside libbitcoind (assuming you've previously patched and configured libbitcoind)..." cd "${btc_dir}" only_make=true fi fi set -e if [ "${only_make}" = false ]; then echo "Removing cloning, patching, and building libbitcoind..." get_patch_file echo "attempting to checkout tag: ${tag} of bitcoin from github..." cd "${root_dir}" git clone --depth 1 --branch "${tag}" https://github.com/bitcoin/bitcoin.git libbitcoind cd "${btc_dir}" echo '../patch-bitcoin.sh' "${btc_dir}" ../bin/patch-bitcoin "${btc_dir}" if ! test -d .git; then echo 'Please point this script to an upstream bitcoin git repo.' exit 1 fi fi echo './autogen.sh' ./autogen.sh full_options="${options}${os_dir}" echo "running the configure script with the following options:\n :::[\"${full_options}\"]:::" ${full_options} echo 'make V=1' make V=1 ext=$($root_dir/platform/os.sh ext) echo 'Copying libbitcoind.{so|dylib} to its appropriate location.' if test -e "${root_dir}/libbitcoind/src/.libs/libbitcoind.${ext}"; then if [ "$ext" = "dylib" ]; then if [ ! -d "${os_dir}/lib" ]; then mkdir -p "${os_dir}/lib" fi cp -R "${root_dir}"/libbitcoind/src/.libs/libbitcoind.*dylib "${os_dir}/lib/" else if [ ! -d "${os_dir}" ]; then mkdir -p "${os_dir}" fi cp -P "${root_dir}"/libbitcoind/src/.libs/libbitcoind.so* "${os_dir}/" fi fi echo 'Build finished successfully.'