electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 423d44bcaf533e93b0ac505f0b81f496f6130606
parent 6455f515f0556886a40f606c23e487882cd13bbe
Author: SomberNight <somber.night@protonmail.com>
Date:   Mon,  1 Jul 2019 20:18:30 +0200

build-wine: some clean-up. cache downloads. better status messages

Diffstat:
Mcontrib/build-wine/build-electrum-git.sh | 25+++++++++++--------------
Mcontrib/build-wine/build-secp256k1.sh | 27+++++++++++++++++++--------
Mcontrib/build-wine/build.sh | 28++++++++++++++++++----------
Mcontrib/build-wine/prepare-wine.sh | 54+++++++++++++++++++++++++++++-------------------------
4 files changed, 77 insertions(+), 57 deletions(-)

diff --git a/contrib/build-wine/build-electrum-git.sh b/contrib/build-wine/build-electrum-git.sh @@ -12,11 +12,11 @@ PYTHON="wine $PYHOME/python.exe -OO -B" # Let's begin! -cd `dirname $0` set -e -mkdir -p tmp -cd tmp +here="$(dirname "$(readlink -e "$0")")" + +. "$CONTRIB"/build_tools_util.sh pushd $WINEPREFIX/drive_c/electrum @@ -25,12 +25,11 @@ git submodule init git submodule update VERSION=`git describe --tags --dirty --always` -echo "Last commit: $VERSION" +info "Last commit: $VERSION" pushd ./contrib/deterministic-build/electrum-locale if ! which msgfmt > /dev/null 2>&1; then - echo "Please install gettext" - exit 1 + fail "Please install gettext" fi for i in ./locale/*; do dir=$WINEPREFIX/drive_c/electrum/electrum/$i/LC_MESSAGES @@ -42,24 +41,23 @@ popd find -exec touch -d '2000-11-11T11:11:11+00:00' {} + popd -cp $WINEPREFIX/drive_c/electrum/LICENCE . # Install frozen dependencies -$PYTHON -m pip install -r ../../deterministic-build/requirements.txt +$PYTHON -m pip install -r "$CONTRIB"/deterministic-build/requirements.txt -$PYTHON -m pip install -r ../../deterministic-build/requirements-hw.txt +$PYTHON -m pip install -r "$CONTRIB"/deterministic-build/requirements-hw.txt pushd $WINEPREFIX/drive_c/electrum # see https://github.com/pypa/pip/issues/2195 -- pip makes a copy of the entire directory -echo "Pip installing Electrum. This might take a long time if the project folder is large." +info "Pip installing Electrum. This might take a long time if the project folder is large." $PYTHON -m pip install . popd -cd .. rm -rf dist/ # build standalone and portable versions +info "Running pyinstaller..." wine "$PYHOME/scripts/pyinstaller.exe" --noconfirm --ascii --clean --name $NAME_ROOT-$VERSION -w deterministic.spec # set timestamps in dist, in order to make the installer reproducible @@ -67,7 +65,7 @@ pushd dist find -exec touch -d '2000-11-11T11:11:11+00:00' {} + popd -# build NSIS installer +info "building NSIS installer" # $VERSION could be passed to the electrum.nsi script, but this would require some rewriting in the script itself. wine "$WINEPREFIX/drive_c/Program Files (x86)/NSIS/makensis.exe" /DPRODUCT_VERSION=$VERSION electrum.nsi @@ -75,5 +73,4 @@ cd dist mv electrum-setup.exe $NAME_ROOT-$VERSION-setup.exe cd .. -echo "Done." -sha256sum dist/electrum*exe +sha256sum dist/electrum*.exe diff --git a/contrib/build-wine/build-secp256k1.sh b/contrib/build-wine/build-secp256k1.sh @@ -3,6 +3,14 @@ set -e +here="$(dirname "$(readlink -e "$0")")" +LIBSECP_VERSION="b408c6a8b287003d1ade5709e6f7bc3c7f1d5be7" + +. "$CONTRIB"/build_tools_util.sh + +info "building libsecp256k1..." + + build_dll() { #sudo apt-get install -y mingw-w64 export SOURCE_DATE_EPOCH=1530212462 @@ -19,23 +27,26 @@ build_dll() { } -cd /tmp/electrum-build +cd "$CACHEDIR" + +if [ -f "secp256k1/libsecp256k1.dll" ]; then + info "libsecp256k1.dll already built, skipping" + exit 0 +fi + if [ ! -d secp256k1 ]; then git clone https://github.com/bitcoin-core/secp256k1.git - cd secp256k1; -else - cd secp256k1 - git pull fi -LIBSECP_VERSION="b408c6a8b287003d1ade5709e6f7bc3c7f1d5be7" -git reset --hard "$LIBSECP_VERSION" +cd secp256k1 +git reset --hard git clean -f -x -q +git checkout $LIBSECP_VERSION build_dll i686-w64-mingw32 # 64-bit would be: x86_64-w64-mingw32 mv .libs/libsecp256k1-0.dll libsecp256k1.dll find -exec touch -d '2000-11-11T11:11:11+00:00' {} + -echo "building libsecp256k1 finished" +info "building libsecp256k1 finished" diff --git a/contrib/build-wine/build.sh b/contrib/build-wine/build.sh @@ -1,28 +1,36 @@ #!/bin/bash + +set -e + # Lucky number export PYTHONHASHSEED=22 -here=$(dirname "$0") +here="$(dirname "$(readlink -e "$0")")" test -n "$here" -a -d "$here" || exit -echo "Clearing $here/build and $here/dist..." +export CONTRIB="$here/.." +export CACHEDIR="$here/.cache" +export PIP_CACHE_DIR="$CACHEDIR/pip_cache" + +. "$CONTRIB"/build_tools_util.sh + +info "Clearing $here/build and $here/dist..." rm "$here"/build/* -rf rm "$here"/dist/* -rf -mkdir -p /tmp/electrum-build -mkdir -p /tmp/electrum-build/pip-cache -export PIP_CACHE_DIR="/tmp/electrum-build/pip-cache" +mkdir -p "$CACHEDIR" "$PIP_CACHE_DIR" -$here/build-secp256k1.sh || exit 1 +$here/build-secp256k1.sh || fail "build-secp256k1 failed" -$here/prepare-wine.sh || exit 1 +$here/prepare-wine.sh || fail "prepare-wine failed" -echo "Resetting modification time in C:\Python..." +info "Resetting modification time in C:\Python..." # (Because of some bugs in pyinstaller) pushd /opt/wine64/drive_c/python* find -exec touch -d '2000-11-11T11:11:11+00:00' {} + popd ls -l /opt/wine64/drive_c/python* -$here/build-electrum-git.sh && \ -echo "Done." +$here/build-electrum-git.sh || fail "build-electrum-git failed" + +info "Done." diff --git a/contrib/build-wine/prepare-wine.sh b/contrib/build-wine/prepare-wine.sh @@ -25,53 +25,57 @@ PYTHON="wine $PYHOME/python.exe -OO -B" # Let's begin! -here="$(dirname "$(readlink -e "$0")")" set -e -. "$here"/../build_tools_util.sh +here="$(dirname "$(readlink -e "$0")")" + +. "$CONTRIB"/build_tools_util.sh +info "Booting wine." wine 'wineboot' -cd /tmp/electrum-build +cd "$CACHEDIR" -# Install Python +info "Installing Python." # note: you might need "sudo apt-get install dirmngr" for the following # keys from https://www.python.org/downloads/#pubkeys KEYRING_PYTHON_DEV="keyring-electrum-build-python-dev.gpg" gpg --no-default-keyring --keyring $KEYRING_PYTHON_DEV --import "$here"/gpg_keys/7ED10B6531D7C8E1BC296021FC624643487034E5.asc +PYTHON_DOWNLOADS="$CACHEDIR/python$PYTHON_VERSION" +mkdir -p "$PYTHON_DOWNLOADS" for msifile in core dev exe lib pip tools; do echo "Installing $msifile..." - wget -N -c "https://www.python.org/ftp/python/$PYTHON_VERSION/win32/${msifile}.msi" - wget -N -c "https://www.python.org/ftp/python/$PYTHON_VERSION/win32/${msifile}.msi.asc" - verify_signature "${msifile}.msi.asc" $KEYRING_PYTHON_DEV - wine msiexec /i "${msifile}.msi" /qb TARGETDIR=$PYHOME + download_if_not_exist "$PYTHON_DOWNLOADS/${msifile}.msi" "https://www.python.org/ftp/python/$PYTHON_VERSION/win32/${msifile}.msi" + download_if_not_exist "$PYTHON_DOWNLOADS/${msifile}.msi.asc" "https://www.python.org/ftp/python/$PYTHON_VERSION/win32/${msifile}.msi.asc" + verify_signature "$PYTHON_DOWNLOADS/${msifile}.msi.asc" $KEYRING_PYTHON_DEV + wine msiexec /i "$PYTHON_DOWNLOADS/${msifile}.msi" /qb TARGETDIR=$PYHOME done -# Install dependencies specific to binaries +info "Installing dependencies specific to binaries." # note that this also installs pinned versions of both pip and setuptools -$PYTHON -m pip install -r "$here"/../deterministic-build/requirements-binaries.txt +$PYTHON -m pip install -r "$CONTRIB"/deterministic-build/requirements-binaries.txt -# Install PyInstaller +info "Installing PyInstaller." $PYTHON -m pip install pyinstaller==3.4 --no-use-pep517 -# Install ZBar -download_if_not_exist $ZBAR_FILENAME "$ZBAR_URL" -verify_hash $ZBAR_FILENAME "$ZBAR_SHA256" -wine "$PWD/$ZBAR_FILENAME" /S - -# Install NSIS installer -download_if_not_exist $NSIS_FILENAME "$NSIS_URL" -verify_hash $NSIS_FILENAME "$NSIS_SHA256" -wine "$PWD/$NSIS_FILENAME" /S +info "Installing ZBar." +download_if_not_exist "$CACHEDIR/$ZBAR_FILENAME" "$ZBAR_URL" +verify_hash "$CACHEDIR/$ZBAR_FILENAME" "$ZBAR_SHA256" +wine "$CACHEDIR/$ZBAR_FILENAME" /S -download_if_not_exist $LIBUSB_FILENAME "$LIBUSB_URL" -verify_hash $LIBUSB_FILENAME "$LIBUSB_SHA256" -7z x -olibusb $LIBUSB_FILENAME -aoa +info "Installing NSIS." +download_if_not_exist "$CACHEDIR/$NSIS_FILENAME" "$NSIS_URL" +verify_hash "$CACHEDIR/$NSIS_FILENAME" "$NSIS_SHA256" +wine "$CACHEDIR/$NSIS_FILENAME" /S +info "Installing libusb." +download_if_not_exist "$CACHEDIR/$LIBUSB_FILENAME" "$LIBUSB_URL" +verify_hash "$CACHEDIR/$LIBUSB_FILENAME" "$LIBUSB_SHA256" +7z x -olibusb "$CACHEDIR/$LIBUSB_FILENAME" -aoa cp libusb/MS32/dll/libusb-1.0.dll $WINEPREFIX/drive_c/$PYTHON_FOLDER/ mkdir -p $WINEPREFIX/drive_c/tmp -cp secp256k1/libsecp256k1.dll $WINEPREFIX/drive_c/tmp/ +cp "$CACHEDIR/secp256k1/libsecp256k1.dll" $WINEPREFIX/drive_c/tmp/ -echo "Wine is configured." +info "Wine is configured."