shadowproject/shadow

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

Summary

Maintainability
Test Coverage
---
name: "shadow-deps"
suites:
- "trusty"
architectures:
- "amd64"
packages:
- "mingw-w64"
- "g++-mingw-w64"
- "git-core"
- "faketime"
- "psmisc"
reference_datetime: "2011-01-30 00:00:00"
remotes: []
files:
- "openssl-1.0.2d.tar.gz"
- "db-4.8.30.NC.tar.gz"
- "miniupnpc-1.9.20151008.tar.gz"
- "zlib-1.2.8.tar.gz"
- "libpng-1.6.10.tar.gz"
- "icu4c-55_1-src.tgz"
- "boost_1_55_0.tar.bz2"
- "boost-mingw-gas-cross-compile-2013-03-03.patch"
script: |
  #
  export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1
  export FAKETIME=$REFERENCE_DATETIME
  export TZ=UTC
  INDIR=$HOME/build
  TEMPDIR=$HOME/tmp
  # Input Integrity Check
  echo "671c36487785628a703374c652ad2cebea45fa920ae5681515df25d9f2c9a8c8  openssl-1.0.2d.tar.gz"         | sha256sum -c
  echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef  db-4.8.30.NC.tar.gz"           | sha256sum -c
  echo "e444ac3b587ce82709c4d0cfca1fe71f44f9fc433e9f946b12b9e1bfe667a633  miniupnpc-1.9.20151008.tar.gz" | sha256sum -c
  echo "36658cb768a54c1d4dec43c3116c27ed893e88b02ecfcb44f2166f9c0b7f2a0d  zlib-1.2.8.tar.gz"             | sha256sum -c
  echo "b0206a22b49c91fc5521b2cfb1c251433a37aed0a645bc504ab3d061f27e4d51  libpng-1.6.10.tar.gz"          | sha256sum -c
  echo "e16b22cbefdd354bec114541f7849a12f8fc2015320ca5282ee4fd787571457b  icu4c-55_1-src.tgz"            | sha256sum -c
  echo "fff00023dd79486d444c8e29922f4072e1d451fc5a4d2b6075852ead7f2b7b52  boost_1_55_0.tar.bz2"          | sha256sum -c
  echo "d2b7f6a1d7051faef3c9cf41a92fa3671d905ef1e1da920d07651a43299f6268  boost-mingw-gas-cross-compile-2013-03-03.patch" \
                                                                                                         | sha256sum -c
  #
  for BITS in 32 64; do # for architectures
    #
    INSTALLPREFIX=$HOME/staging${BITS}
    BUILDDIR=$HOME/build${BITS}
    if [ "$BITS" == "32" ]; then
      HOST=i686-w64-mingw32
    else
      HOST=x86_64-w64-mingw32
    fi
    #
    mkdir -p $INSTALLPREFIX $BUILDDIR
    cd $BUILDDIR
    #
    tar xzf $INDIR/openssl-1.0.2d.tar.gz
    cd openssl-1.0.2d
    if [ "$BITS" == "32" ]; then
      OPENSSL_TGT=mingw
    else
      OPENSSL_TGT=mingw64
    fi
    ./Configure --cross-compile-prefix=$HOST- ${OPENSSL_TGT} no-shared no-dso --openssldir=$INSTALLPREFIX
    make
    make install_sw
    cd ..
    #
    tar xzf $INDIR/db-4.8.30.NC.tar.gz
    cd db-4.8.30.NC/build_unix
    ../dist/configure --prefix=$INSTALLPREFIX --enable-mingw --enable-cxx --host=$HOST --disable-shared --disable-replication
    make $MAKEOPTS library_build
    make install_lib install_include
    cd ../..
    #
    tar xzf $INDIR/miniupnpc-1.9.20151008.tar.gz
    cd miniupnpc-1.9.20151008
    echo "
  --- miniupnpc-1.9/Makefile.mingw.orig   2013-09-29 18:52:51.014087958 -1000
  +++ miniupnpc-1.9/Makefile.mingw        2013-09-29 19:09:29.663318691 -1000
  @@ -67,8 +67,8 @@
   
   wingenminiupnpcstrings.o:    wingenminiupnpcstrings.c
   
  -miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings
  -    wingenminiupnpcstrings \$< \$@
  +miniupnpcstrings.h: miniupnpcstrings.h.in 
  +    sed -e 's|OS/version|MSWindows/5.1.2600|' -e 's|MINIUPNPC_VERSION_STRING \"version\"|MINIUPNPC_VERSION_STRING \"VERSIONHERE\"|' \$< > \$@
   
   minixml.o:    minixml.c minixml.h miniupnpcstrings.h
   
  " | sed "s/VERSIONHERE/$(cat VERSION)/" | patch -p1
    mkdir -p dll
    make -f Makefile.mingw CC=$HOST-gcc AR=$HOST-ar libminiupnpc.a
    install -d $INSTALLPREFIX/include/miniupnpc
    install *.h $INSTALLPREFIX/include/miniupnpc
    install libminiupnpc.a  $INSTALLPREFIX/lib
    cd ..
    #
    #
    tar xzf $INDIR/zlib-1.2.8.tar.gz
    cd zlib-1.2.8
    CROSS_PREFIX=$HOST- ./configure --prefix=$INSTALLPREFIX --static
    make
    make install
    cd ..
    #
    tar xzf $INDIR/libpng-1.6.10.tar.gz
    cd libpng-1.6.10
    OPT="-O2"
    CPPFLAGS="${OPT} -I$INSTALLPREFIX/include" CFLAGS="${OPT} -I$INSTALLPREFIX/include" LDFLAGS="${OPT} -L$INSTALLPREFIX/lib" ./configure --disable-shared --prefix=$INSTALLPREFIX --host=$HOST
    make $MAKEOPTS
    make install
    cd ..
    #
    mkdir icuCross
    cd icuCross
    tar xzf $INDIR/icu4c-55_1-src.tgz
    cd icu/source
    mkdir -p $TEMPDIR/icu
    ./runConfigureICU MinGW --prefix=$TEMPDIR/icu --enable-static --disable-shared
    make
    make install
    cd ../../..
    #rm  -rf icu
    tar xzf $INDIR/icu4c-55_1-src.tgz
    cd icu/source
    ./runConfigureICU MinGW --host=$HOST --with-cross-build=$BUILDDIR/icuCross/icu/source --prefix=$INSTALLPREFIX --enable-static --disable-shared
    make
    make install
    cd ../..
    #
    tar --warning=no-timestamp -xjf $INDIR/boost_1_55_0.tar.bz2
    cd boost_1_55_0
    GCCVERSION=$($HOST-g++ -E -dM $(mktemp --suffix=.h) | grep __VERSION__ | cut -d ' ' -f 3 | cut -d '"' -f 2)
    echo "using gcc : $GCCVERSION : $HOST-g++
        :
        <rc>$HOST-windres
        <archiver>$HOST-ar
        <cxxflags>-frandom-seed=boost1
        <ranlib>$HOST-ranlib
  ;" > user-config.jam
    ./bootstrap.sh --without-icu

    # Workaround: Upstream boost dev refuses to include patch that would allow Free Software cross-compile toolchain to work
    #             This patch was authored by the Fedora package developer and ships in Fedora's mingw32-boost.
    #             Please obtain the exact patch that matches the above sha256sum from one of the following mirrors.
    #
    # Read History:   https://svn.boost.org/trac/boost/ticket/7262
    # History Mirror: http://rose.makesad.us/~paulproteus/mirrors/7262%20Boost.Context%20fails%20to%20build%20using%20MinGW.html
    #
    # Patch:          https://svn.boost.org/trac/boost/raw-attachment/ticket/7262/boost-mingw.patch
    # Patch Mirror:   http://wtogami.fedorapeople.org/boost-mingw-gas-cross-compile-2013-03-03.patch
    # Patch Mirror:   http://mindstalk.net/host/boost-mingw-gas-cross-compile-2013-03-03.patch
    # Patch Mirror:   http://rose.makesad.us/~paulproteus/mirrors/boost-mingw-gas-cross-compile-2013-03-03.patch
    patch -p0 < $INDIR/boost-mingw-gas-cross-compile-2013-03-03.patch

    # Bug Workaround: boost-1.54.0 broke the ability to disable zlib, still broken in 1.55
    # https://svn.boost.org/trac/boost/ticket/9156
    sed -i 's^\[ ac.check-library /zlib//zlib : <library>/zlib//zlib^^' libs/iostreams/build/Jamfile.v2
    sed -i 's^<source>zlib.cpp <source>gzip.cpp \]^^' libs/iostreams/build/Jamfile.v2

    # http://statmt.org/~s0565741/software/boost_1_52_0/libs/context/doc/html/context/requirements.html
    # "For cross-compiling the lib you must specify certain additional properties at bjam command line: target-os, abi, binary-format, architecture and address-model."
    ./bjam toolset=gcc binary-format=pe target-os=windows threadapi=win32 address-model=$BITS threading=multi variant=release link=static runtime-link=static --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged --build-type=complete --prefix="$INSTALLPREFIX" $MAKEOPTS install
    # post-process all generated libraries to be deterministic
    # extract them to a temporary directory then re-build them deterministically
    for LIB in $(find $INSTALLPREFIX -name \*.a); do
        rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR
        $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt
        rm $LIB
        $HOST-ar crsD $LIB $(cat /tmp/list.txt)
    done
    #
    cd $INSTALLPREFIX
    find include lib | sort | tar --no-recursion -cJf $OUTDIR/shadow-deps-win$BITS-gitian.tar.xz -T -  
  done # for BITS in