electrum

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

build_tools_util.sh (4015B)


      1 #!/usr/bin/env bash
      2 
      3 # Set a fixed umask as this leaks into docker containers
      4 umask 0022
      5 
      6 RED='\033[0;31m'
      7 BLUE='\033[0;34m'
      8 YELLOW='\033[0;33m'
      9 NC='\033[0m' # No Color
     10 function info {
     11     printf "\r💬 ${BLUE}INFO:${NC}  ${1}\n"
     12 }
     13 function fail {
     14     printf "\r🗯 ${RED}ERROR:${NC} ${1}\n"
     15     exit 1
     16 }
     17 function warn {
     18     printf "\r⚠️  ${YELLOW}WARNING:${NC}  ${1}\n"
     19 }
     20 
     21 
     22 # based on https://superuser.com/questions/497940/script-to-verify-a-signature-with-gpg
     23 function verify_signature() {
     24     local file=$1 keyring=$2 out=
     25     if out=$(gpg --no-default-keyring --keyring "$keyring" --status-fd 1 --verify "$file" 2>/dev/null) &&
     26        echo "$out" | grep -qs "^\[GNUPG:\] VALIDSIG "; then
     27         return 0
     28     else
     29         echo "$out" >&2
     30         exit 1
     31     fi
     32 }
     33 
     34 function verify_hash() {
     35     local file=$1 expected_hash=$2
     36     actual_hash=$(sha256sum $file | awk '{print $1}')
     37     if [ "$actual_hash" == "$expected_hash" ]; then
     38         return 0
     39     else
     40         echo "$file $actual_hash (unexpected hash)" >&2
     41         rm "$file"
     42         exit 1
     43     fi
     44 }
     45 
     46 function download_if_not_exist() {
     47     local file_name=$1 url=$2
     48     if [ ! -e $file_name ] ; then
     49         wget -O $file_name "$url"
     50     fi
     51 }
     52 
     53 # https://github.com/travis-ci/travis-build/blob/master/lib/travis/build/templates/header.sh
     54 function retry() {
     55   local result=0
     56   local count=1
     57   while [ $count -le 3 ]; do
     58     [ $result -ne 0 ] && {
     59       echo -e "\nThe command \"$@\" failed. Retrying, $count of 3.\n" >&2
     60     }
     61     ! { "$@"; result=$?; }
     62     [ $result -eq 0 ] && break
     63     count=$(($count + 1))
     64     sleep 1
     65   done
     66 
     67   [ $count -gt 3 ] && {
     68     echo -e "\nThe command \"$@\" failed 3 times.\n" >&2
     69   }
     70 
     71   return $result
     72 }
     73 
     74 function gcc_with_triplet()
     75 {
     76     TRIPLET="$1"
     77     CMD="$2"
     78     shift 2
     79     if [ -n "$TRIPLET" ] ; then
     80         "$TRIPLET-$CMD" "$@"
     81     else
     82         "$CMD" "$@"
     83     fi
     84 }
     85 
     86 function gcc_host()
     87 {
     88     gcc_with_triplet "$GCC_TRIPLET_HOST" "$@"
     89 }
     90 
     91 function gcc_build()
     92 {
     93     gcc_with_triplet "$GCC_TRIPLET_BUILD" "$@"
     94 }
     95 
     96 function host_strip()
     97 {
     98     if [ "$GCC_STRIP_BINARIES" -ne "0" ] ; then
     99         case "$BUILD_TYPE" in
    100             linux|wine)
    101                 gcc_host strip "$@"
    102                 ;;
    103             darwin)
    104                 # TODO: Strip on macOS?
    105                 ;;
    106         esac
    107     fi
    108 }
    109 
    110 # on MacOS, there is no realpath by default
    111 if ! [ -x "$(command -v realpath)" ]; then
    112     function realpath() {
    113         [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
    114     }
    115 fi
    116 
    117 
    118 export SOURCE_DATE_EPOCH=1530212462
    119 export PYTHONHASHSEED=22
    120 # Set the build type, overridden by wine build
    121 export BUILD_TYPE="${BUILD_TYPE:-$(uname | tr '[:upper:]' '[:lower:]')}"
    122 # Add host / build flags if the triplets are set
    123 if [ -n "$GCC_TRIPLET_HOST" ] ; then
    124     export AUTOCONF_FLAGS="$AUTOCONF_FLAGS --host=$GCC_TRIPLET_HOST"
    125 fi
    126 if [ -n "$GCC_TRIPLET_BUILD" ] ; then
    127     export AUTOCONF_FLAGS="$AUTOCONF_FLAGS --build=$GCC_TRIPLET_BUILD"
    128 fi
    129 
    130 export GCC_STRIP_BINARIES="${GCC_STRIP_BINARIES:-0}"
    131 
    132 
    133 function break_legacy_easy_install() {
    134     # We don't want setuptools sneakily installing dependencies, invisible to pip.
    135     # This ensures that if setuptools calls distutils which then calls easy_install,
    136     # easy_install will not download packages over the network.
    137     # see https://pip.pypa.io/en/stable/reference/pip_install/#controlling-setup-requires
    138     # see https://github.com/pypa/setuptools/issues/1916#issuecomment-743350566
    139     info "Intentionally breaking legacy easy_install."
    140     DISTUTILS_CFG="${HOME}/.pydistutils.cfg"
    141     DISTUTILS_CFG_BAK="${HOME}/.pydistutils.cfg.orig"
    142     # If we are not inside docker, we might be overwriting a config file on the user's system...
    143     if [ -e "$DISTUTILS_CFG" ] && [ ! -e "$DISTUTILS_CFG_BAK" ]; then
    144         warn "Overwriting python distutils config file at '$DISTUTILS_CFG'. A copy will be saved at '$DISTUTILS_CFG_BAK'."
    145         mv "$DISTUTILS_CFG" "$DISTUTILS_CFG_BAK"
    146     fi
    147     cat <<EOF > "$DISTUTILS_CFG"
    148 [easy_install]
    149 index_url = ''
    150 find_links = ''
    151 EOF
    152 }
    153