#!/usr/bin/env bash # # Copyright (c) 2018-2020 The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. # # Build previous releases. export LC_ALL=C CONFIG_FLAGS="" FUNCTIONAL_TESTS=0 DELETE_EXISTING=0 USE_DEPENDS=0 DOWNLOAD_BINARY=0 CONFIG_FLAGS="" TARGET="releases" while getopts ":hfrdbt:" opt; do case $opt in h) echo "Usage: .previous_release.sh [options] tag1 tag2" echo " options:" echo " -h Print this message" echo " -f Configure for functional tests" echo " -r Remove existing directory" echo " -d Use depends" echo " -b Download release binary" echo " -t Target directory (default: releases)" exit 0 ;; f) FUNCTIONAL_TESTS=1 CONFIG_FLAGS="$CONFIG_FLAGS --without-gui --disable-tests --disable-bench" ;; r) DELETE_EXISTING=1 ;; d) USE_DEPENDS=1 ;; b) DOWNLOAD_BINARY=1 ;; t) TARGET=$OPTARG ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; esac done shift $((OPTIND-1)) if [ -z "$1" ]; then echo "Specify release tag(s), e.g.: .previous_release v0.15.1" exit 1 fi if [ ! -d "$TARGET" ]; then mkdir -p $TARGET fi if [ "$DOWNLOAD_BINARY" -eq "1" ]; then HOST="${HOST:-$(./depends/config.guess)}" case "$HOST" in x86_64-*-linux*) PLATFORM=x86_64-linux-gnu ;; x86_64-apple-darwin*) PLATFORM=osx64 ;; *) echo "Not sure which binary to download for $HOST." exit 1 ;; esac fi echo "Releases directory: $TARGET" pushd "$TARGET" || exit 1 { for tag in "$@" do if [ "$DELETE_EXISTING" -eq "1" ]; then if [ -d "$tag" ]; then rm -r "$tag" fi fi if [ "$DOWNLOAD_BINARY" -eq "0" ]; then if [ ! -d "$tag" ]; then if [ -z $(git tag -l "$tag") ]; then echo "Tag $tag not found" exit 1 fi git clone https://github.com/bitcoin/bitcoin "$tag" pushd "$tag" || exit 1 { git checkout "$tag" if [ "$USE_DEPENDS" -eq "1" ]; then pushd depends || exit 1 { if [ "$FUNCTIONAL_TESTS" -eq "1" ]; then make NO_QT=1 else make fi HOST="${HOST:-$(./config.guess)}" } popd || exit 1 CONFIG_FLAGS="--prefix=$PWD/depends/$HOST $CONFIG_FLAGS" fi ./autogen.sh ./configure $CONFIG_FLAGS make # Move binaries, so they're in the same place as in the release download: mkdir bin mv src/bitcoind src/bitcoin-cli src/bitcoin-tx bin if [ "$FUNCTIONAL_TESTS" -eq "0" ]; then mv src/qt/bitcoin-qt bin fi } popd || exit 1 fi else if [ -d "$tag" ]; then echo "Using cached $tag" else mkdir "$tag" if [[ "$tag" =~ v(.*)(rc[0-9]+)$ ]]; then BIN_PATH="bin/bitcoin-core-${BASH_REMATCH[1]}/test.${BASH_REMATCH[2]}" else BIN_PATH="bin/bitcoin-core-${tag:1}" fi URL="https://bitcoin.org/$BIN_PATH/bitcoin-${tag:1}-$PLATFORM.tar.gz" echo "Fetching: $URL" if ! curl -O -f $URL; then echo "Download failed." exit 1 fi tar -zxf "bitcoin-${tag:1}-$PLATFORM.tar.gz" -C "$tag" --strip-components=1 "bitcoin-${tag:1}" rm "bitcoin-${tag:1}-$PLATFORM.tar.gz" fi fi done } popd || exit 1