shadowproject/shadow

View on GitHub
contrib/gitian-descriptors/gitian-win.yml

Summary

Maintainability
Test Coverage
---
name: "shadow"
suites:
- "trusty"
architectures:
- "amd64"
packages:
- "mingw-w64"
- "g++-mingw-w64"
- "git-core"
- "nsis"
- "faketime"
- "autoconf2.13"
- "libtool"
- "automake"
- "pkg-config"
- "bsdmainutils"
reference_datetime: "2013-06-01 00:00:00"
remotes:
- "url": "https://github.com/ShadowProject/shadowcoin.git"
  "dir": "shadowcoin"
files:
- "qt-win32-5.5.0-gitian.tar.xz"
- "qt-win64-5.5.0-gitian.tar.xz"
- "shadow-deps-win32-gitian.tar.xz"
- "shadow-deps-win64-gitian.tar.xz"
script: |
  # Defines
  export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1
  export FAKETIME=$REFERENCE_DATETIME
  export TZ=UTC
  INDIR=$HOME/build
  OPTFLAGS='-O2'
  TEMPDIR="$HOME/tempdir"
  
  NEEDDIST=1
  # Qt: workaround for determinism in resource ordering
  #  Qt5's rcc uses a QHash to store the files for the resource.
  #  A security fix in QHash makes the ordering of keys to be different on every run
  #  (https://qt.gitorious.org/qt/qtbase/commit/c01eaa438200edc9a3bbcd8ae1e8ded058bea268).
  #  This is good in general but qrc shouldn't be doing a traversal over a randomized container.
  #  The thorough solution would be to use QMap instead of QHash, but this requires patching Qt.
  #  For now luckily there is a test mode that forces a fixed seed.
  export QT_RCC_TEST=1
  for BITS in 32 64; do # for architectures
    #
    STAGING=$HOME/staging${BITS}
    BUILDDIR=$HOME/build${BITS}
    BINDIR=$OUTDIR/$BITS
    DEPSDIR=$HOME/deps${BITS}
    if [ "$BITS" == "32" ]; then
      HOST=i686-w64-mingw32
      DISTNAME=i686-win
    else
      HOST=x86_64-w64-mingw32
      DISTNAME=x86_64-win
    fi
    export PATH=$STAGING/host/bin:$PATH
    rm -rf $DEPSDIR
    rm -rf $BUILDDIR
    rm -rf $STAGING
    mkdir -p $STAGING $BUILDDIR $BINDIR $DEPSDIR
    #
    cd $STAGING
    #mkdir qt
    #cd qt
    #5edf8d14e47eb6438d3b5a20ed577343a07512eb220e6f83cbb3fbd33112a776  qt-win32-5.5.0-gitian-r3.zip
    #75a3b425f08969983b2faf0af83b01fd753f99a15ced0b6f998d4db0a1c077f3  qt-win64-5.5.0-gitian-r3.zip

    tar xf $INDIR/qt-win${BITS}-5.5.0-gitian.tar.xz
    cd $DEPSDIR
    tar xf $INDIR/shadow-deps-win${BITS}-gitian.tar.xz
    #
    cd $BUILDDIR
    cp -r ../build/shadowcoin .
    cd shadowcoin
    mkdir -p $OUTDIR/src
    git archive HEAD | tar -x -C $OUTDIR/src
    cp $OUTDIR/src/doc/README_windows.txt $OUTDIR/readme.txt
    cp $OUTDIR/src/COPYING $OUTDIR/COPYING.txt
    #
    cd src
    make -f makefile.linux-mingw HOST="$HOST" DEPSDIR="$DEPSDIR" CURDIR="$BUILDDIR/shadowcoin/src" STATIC=1 $MAKEOPTS USE_UPNP=1 BOOST_LIB_SUFFIX="-mt-s" DEBUGFLAGS= 
    cp shadowcoind.exe $BINDIR/
    cd ..
    #
    #$DEPSDIR/qt/host/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/lib BOOST_INCLUDE_PATH=$HOME/build/include BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1h OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1h/include INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1
    $STAGING/host/bin/qmake -xplatform win32-g++ RELEASE=1 QMAKE_LRELEASE="$STAGING/host/bin/lrelease" MINIUPNPC_LIB_PATH="$DEPSDIR/lib" MINIUPNPC_INCLUDE_PATH="$DEPSDIR/include" BDB_LIB_PATH="$DEPSDIR/lib" BDB_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_PATH="$DEPSDIR/lib" BOOST_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="_win32-mt-s" OPENSSL_LIB_PATH="$DEPSDIR/lib" OPENSSL_INCLUDE_PATH="$DEPSDIR/include" INCLUDEPATH="$DEPSDIR/include" DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_CXXFLAGS=-frandom-seed=shadow USE_BUILD_INFO=1
    make $MAKEOPTS
    cp release/shadow.exe $BINDIR/
    #
    unset LD_PRELOAD
    unset FAKETIME
  done # for BITS in
  #
  # sort distribution tar file and normalize user/group/mtime information for deterministic output
  mkdir -p $OUTDIR/src
  rm -rf $TEMPDIR
  mkdir -p $TEMPDIR
  cd $TEMPDIR
  cd $BINDIR
  #tar -xvf $HOME/build/shadowcoin/$DISTNAME | sort | tar --no-recursion -cT /dev/stdin --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 --mtime="$REFERENCE_DATETIME" | gzip -n > $OUTDIR/src/$DISTNAME