Browse Source

Merge pull request #5051

Maxim Biro (10):
      chore(windows): bump OpenSSL version to the latest (1.0.2o)
      chore(windows): bump Qt 5.9 version to the latest (5.9.4)
      chore(windows): bump SQLCipher version to the latest (3.4.2)
      chore(windows): bump FFmpeg 3.2 version to the latest (3.2.10)
      chore(windows): bump QREncode version to the latest (4.0.0)
      chore(windows): bump Sodium version to the latest (1.0.16)
      chore(windows): bump VPX version to the latest (1.7.0)
      chore(windows): use NSIS 3 and cache NSIS ShellExecAsUser plugin
      chore(windows): create a zip with qTox to be used in release publishing
      chore(windows): add architecture to installer's and zip's filenames
reviewable/pr5057/r1
sudden6 7 years ago
parent
commit
ff578413c1
No known key found for this signature in database
GPG Key ID: 279509B499E032B9
  1. 177
      windows/cross-compile/build.sh

177
windows/cross-compile/build.sh

@ -124,12 +124,13 @@ apt-get install -y --no-install-recommends \
cmake \ cmake \
git \ git \
libtool \ libtool \
nsis \
pkg-config \ pkg-config \
tclsh \ tclsh \
unzip \ unzip \
wget \ wget \
yasm yasm \
zip
if [[ "$ARCH" == "i686" ]] if [[ "$ARCH" == "i686" ]]
then then
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
@ -219,8 +220,9 @@ strip_all()
# OpenSSL # OpenSSL
OPENSSL_PREFIX_DIR="$DEP_DIR/libopenssl" OPENSSL_PREFIX_DIR="$DEP_DIR/libopenssl"
OPENSSL_VERSION=1.0.2m OPENSSL_VERSION=1.0.2o
OPENSSL_HASH="8c6ff15ec6b319b50788f42c7abc2890c08ba5a1cdcd3810eb9092deada37b0f" # hash from https://www.openssl.org/source/
OPENSSL_HASH="ec3f5c9714ba0fd45cb4e087301eb1336c317e0d20b575a125050470e8089e4d"
if [ ! -f "$OPENSSL_PREFIX_DIR/done" ] if [ ! -f "$OPENSSL_PREFIX_DIR/done" ]
then then
rm -rf "$OPENSSL_PREFIX_DIR" rm -rf "$OPENSSL_PREFIX_DIR"
@ -260,9 +262,10 @@ fi
QT_PREFIX_DIR="$DEP_DIR/libqt5" QT_PREFIX_DIR="$DEP_DIR/libqt5"
QT_MAJOR=5 QT_MAJOR=5
QT_MINOR=9 QT_MINOR=9
QT_PATCH=3 QT_PATCH=4
QT_VERSION=$QT_MAJOR.$QT_MINOR.$QT_PATCH QT_VERSION=$QT_MAJOR.$QT_MINOR.$QT_PATCH
QT_HASH="57acd8f03f830c2d7dc29fbe28aaa96781b2b9bdddce94196e6761a0f88c6046" # hash from https://download.qt.io/archive/qt/5.9/5.9.4/single/qt-everywhere-opensource-src-5.9.4.tar.xz.mirrorlist
QT_HASH="e3acd9cbeafba3aed9f14592f4d70bf0b255e0203943e8d2b4235002268274d5"
if [ ! -f "$QT_PREFIX_DIR/done" ] if [ ! -f "$QT_PREFIX_DIR/done" ]
then then
rm -rf "$QT_PREFIX_DIR" rm -rf "$QT_PREFIX_DIR"
@ -277,11 +280,19 @@ then
export PKG_CONFIG_PATH="$OPENSSL_PREFIX_DIR/lib/pkgconfig" export PKG_CONFIG_PATH="$OPENSSL_PREFIX_DIR/lib/pkgconfig"
export OPENSSL_LIBS="$(pkg-config --libs openssl)" export OPENSSL_LIBS="$(pkg-config --libs openssl)"
# Fix https://bugreports.qt.io/browse/QTBUG-66123 present in Qt 5.9.4
cd qtbase
wget https://github.com/qt/qtbase/commit/40e87491886957696486b87dc2dedec2adaf6e1a.patch -O "QTBUG-66123.patch"
check_sha256 "15c4e6f0eba90a67fee3faabd86ca670a3021ac49d19fd9b311e16615bce87a6" "QTBUG-66123.patch"
patch -p1 < "QTBUG-66123.patch"
rm "QTBUG-66123.patch"
cd ..
# Fix https://bugreports.qt.io/browse/QTBUG-63637 present in Qt 5.9.2 # Fix https://bugreports.qt.io/browse/QTBUG-63637 present in Qt 5.9.2
echo "QMAKE_LINK_OBJECT_MAX = 10" >> qtbase/mkspecs/win32-g++/qmake.conf echo "QMAKE_LINK_OBJECT_MAX = 10" >> qtbase/mkspecs/win32-g++/qmake.conf
echo "QMAKE_LINK_OBJECT_SCRIPT = object_script" >> qtbase/mkspecs/win32-g++/qmake.conf echo "QMAKE_LINK_OBJECT_SCRIPT = object_script" >> qtbase/mkspecs/win32-g++/qmake.conf
# So, apparently Travis CI terminate a build if it generates more than 4mb of output # So, apparently Travis CI terminates a build if it generates more than 4mb of stdout output
# which happens when building Qt # which happens when building Qt
CONFIGURE_EXTRA="" CONFIGURE_EXTRA=""
set +u set +u
@ -379,8 +390,8 @@ set -u
# SQLCipher # SQLCipher
SQLCIPHER_PREFIX_DIR="$DEP_DIR/libsqlcipher" SQLCIPHER_PREFIX_DIR="$DEP_DIR/libsqlcipher"
SQLCIPHER_VERSION=v3.4.1 SQLCIPHER_VERSION=v3.4.2
SQLCIPHER_HASH="4172cc6e5a79d36e178d36bd5cc467a938e08368952659bcd95eccbaf0fa4ad4" SQLCIPHER_HASH="69897a5167f34e8a84c7069f1b283aba88cdfa8ec183165c4a5da2c816cfaadb"
if [ ! -f "$SQLCIPHER_PREFIX_DIR/done" ] if [ ! -f "$SQLCIPHER_PREFIX_DIR/done" ]
then then
rm -rf "$SQLCIPHER_PREFIX_DIR" rm -rf "$SQLCIPHER_PREFIX_DIR"
@ -438,8 +449,8 @@ fi
# FFmpeg # FFmpeg
FFMPEG_PREFIX_DIR="$DEP_DIR/libffmpeg" FFMPEG_PREFIX_DIR="$DEP_DIR/libffmpeg"
FFMPEG_VERSION=3.2.9 FFMPEG_VERSION=3.2.10
FFMPEG_HASH="1131d37890ed3dcbc3970452b200a56ceb36b73eaa51d1c23c770c90f928537f" FFMPEG_HASH="3c1626220c7b68ff6be7312559f77f3c65ff6809daf645d4470ac0189926bdbc"
if [ ! -f "$FFMPEG_PREFIX_DIR/done" ] if [ ! -f "$FFMPEG_PREFIX_DIR/done" ]
then then
rm -rf "$FFMPEG_PREFIX_DIR" rm -rf "$FFMPEG_PREFIX_DIR"
@ -709,8 +720,8 @@ fi
# QREncode # QREncode
QRENCODE_PREFIX_DIR="$DEP_DIR/libqrencode" QRENCODE_PREFIX_DIR="$DEP_DIR/libqrencode"
QRENCODE_VERSION=3.4.4 QRENCODE_VERSION=4.0.0
QRENCODE_HASH="efe5188b1ddbcbf98763b819b146be6a90481aac30cfc8d858ab78a19cde1fa5" QRENCODE_HASH="c90035e16921117d4086a7fdee65aab85be32beb4a376f6b664b8a425d327d0b"
if [ ! -f "$QRENCODE_PREFIX_DIR/done" ] if [ ! -f "$QRENCODE_PREFIX_DIR/done" ]
then then
rm -rf "$QRENCODE_PREFIX_DIR" rm -rf "$QRENCODE_PREFIX_DIR"
@ -809,8 +820,8 @@ fi
# Sodium # Sodium
SODIUM_PREFIX_DIR="$DEP_DIR/libsodium" SODIUM_PREFIX_DIR="$DEP_DIR/libsodium"
SODIUM_VERSION=1.0.15 SODIUM_VERSION=1.0.16
SODIUM_HASH="fb6a9e879a2f674592e4328c5d9f79f082405ee4bb05cb6e679b90afe9e178f4" SODIUM_HASH="eeadc7e1e1bcef09680fb4837d448fbdf57224978f865ac1c16745868fbd0533"
if [ ! -f "$SODIUM_PREFIX_DIR/done" ] if [ ! -f "$SODIUM_PREFIX_DIR/done" ]
then then
rm -rf "$SODIUM_PREFIX_DIR" rm -rf "$SODIUM_PREFIX_DIR"
@ -841,17 +852,17 @@ fi
# VPX # VPX
VPX_PREFIX_DIR="$DEP_DIR/libvpx" VPX_PREFIX_DIR="$DEP_DIR/libvpx"
VPX_VERSION=1.6.1 VPX_VERSION=v1.7.0
VPX_HASH="1c2c0c2a97fba9474943be34ee39337dee756780fc12870ba1dc68372586a819" VPX_HASH="1fec931eb5c94279ad219a5b6e0202358e94a93a90cfb1603578c326abfc1238"
if [ ! -f "$VPX_PREFIX_DIR/done" ] if [ ! -f "$VPX_PREFIX_DIR/done" ]
then then
rm -rf "$VPX_PREFIX_DIR" rm -rf "$VPX_PREFIX_DIR"
mkdir -p "$VPX_PREFIX_DIR" mkdir -p "$VPX_PREFIX_DIR"
wget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-$VPX_VERSION.tar.bz2 wget https://github.com/webmproject/libvpx/archive/$VPX_VERSION.tar.gz -O libvpx-$VPX_VERSION.tar.gz
check_sha256 "$VPX_HASH" "libvpx-$VPX_VERSION.tar.bz2" check_sha256 "$VPX_HASH" "libvpx-$VPX_VERSION.tar.gz"
bsdtar --no-same-owner --no-same-permissions -xf libvpx-*.tar.bz2 bsdtar --no-same-owner --no-same-permissions -xf libvpx-*.tar.gz
rm libvpx*.tar.bz2 rm libvpx*.tar.gz
cd libvpx* cd libvpx*
if [[ "$ARCH" == "x86_64" ]] if [[ "$ARCH" == "x86_64" ]]
@ -966,6 +977,104 @@ else
fi fi
# NSIS
NSIS_PREFIX_DIR="$DEP_DIR/nsis"
NSIS_VERSION="Debian Unstable"
#NSIS_HASH=
if [ ! -f "$NSIS_PREFIX_DIR/done" ]
then
rm -rf "$NSIS_PREFIX_DIR"
mkdir -p "$NSIS_PREFIX_DIR"
# We want to use NSIS 3, instead of NSIS 2, because it added Windows 8 and 10
# support, as well as unicode support. NSIS 3 is not packaged in Debian Stretch
# and building it manually appears to be quite a challenge. Luckly it's
# packaged in Debian Unstable, so we can backport it to our Debian version
# with little effort, utilizing maintainer's build script.
# Kepp the indentation of the next echo command as it is, as apt seems to
# ignore preferences starting with whitespace.
echo "
Package: *
Pin: Release a=unstable
Pin-Priority: -1
" >> /etc/apt/preferences
echo "
# Needed for NSIS 3
deb http://httpredir.debian.org/debian unstable main
deb-src http://httpredir.debian.org/debian unstable main
" >> /etc/apt/sources.list
apt-get update
# Get dependencies required for building NSIS
apt-get install -y --no-install-recommends \
build-essential \
devscripts \
docbook-xsl-ns \
docbook5-xml \
dpkg-dev \
fakeroot \
html2text \
libcppunit-dev \
mingw-w64 \
scons \
xsltproc \
zlib1g-dev
apt-get -t unstable install -y --no-install-recommends debhelper
mkdir nsis-build
cd nsis-build
apt-get -t unstable source nsis
cd nsis-*
# The build script is not parallel enough, this speeds things up greatly
sed -i "s/scons / scons -j `nproc` /" debian/rules
DEB_BUILD_OPTIONS="parallel=`nproc` nocheck" debuild -b -uc -us
cd ..
mv nsis-common_*.deb "$NSIS_PREFIX_DIR"
mv nsis-doc_*.deb "$NSIS_PREFIX_DIR"
mv nsis_*.deb "$NSIS_PREFIX_DIR"
mv nsis-pluginapi_*.deb "$NSIS_PREFIX_DIR"
cd ..
rm -rf ./nsis-build
echo -n $NSIS_VERSION > $NSIS_PREFIX_DIR/done
else
echo "Using cached build of NSIS `cat $NSIS_PREFIX_DIR/done`"
fi
# Install NSIS
dpkg -i "$NSIS_PREFIX_DIR"/nsis-common_*.deb
dpkg -i "$NSIS_PREFIX_DIR"/nsis-doc_*.deb
dpkg -i "$NSIS_PREFIX_DIR"/nsis_*.deb
dpkg -i "$NSIS_PREFIX_DIR"/nsis-pluginapi_*.deb
# NSIS ShellExecAsUser plugin
NSISSHELLEXECASUSER_PREFIX_DIR="$DEP_DIR/nsis_shellexecuteasuser"
NSISSHELLEXECASUSER_VERSION=" "
NSISSHELLEXECASUSER_HASH="8fc19829e144716a422b15a85e718e1816fe561de379b2b5ae87ef9017490799"
if [ ! -f "$NSISSHELLEXECASUSER_PREFIX_DIR/done" ]
then
rm -rf "$NSISSHELLEXECASUSER_PREFIX_DIR"
mkdir -p "$NSISSHELLEXECASUSER_PREFIX_DIR"
# Backup: https://web.archive.org/web/20171008011417/http://nsis.sourceforge.net/mediawiki/images/c/c7/ShellExecAsUser.zip
wget http://nsis.sourceforge.net/mediawiki/images/c/c7/ShellExecAsUser.zip
check_sha256 "$NSISSHELLEXECASUSER_HASH" "ShellExecAsUser.zip"
unzip ShellExecAsUser.zip 'ShellExecAsUser.dll'
mkdir "$NSISSHELLEXECASUSER_PREFIX_DIR/bin"
mv ShellExecAsUser.dll "$NSISSHELLEXECASUSER_PREFIX_DIR/bin"
rm ShellExecAsUser*
echo -n $NSISSHELLEXECASUSER_VERSION > $NSISSHELLEXECASUSER_PREFIX_DIR/done
else
echo "Using cached build of NSIS ShellExecAsUser plugin `cat $NSISSHELLEXECASUSER_PREFIX_DIR/done`"
fi
# Install ShellExecAsUser plugin
cp "$NSISSHELLEXECASUSER_PREFIX_DIR/bin/ShellExecAsUser.dll" /usr/share/nsis/Plugins/x86-ansi/
# Stop here if running the second stage on Travis CI # Stop here if running the second stage on Travis CI
set +u set +u
if [[ "$TRAVIS_CI_STAGE" == "stage2" ]] if [[ "$TRAVIS_CI_STAGE" == "stage2" ]]
@ -1102,33 +1211,31 @@ $ARCH-w64-mingw32-strip -s $QTOX_PREFIX_DIR/*.dll
$ARCH-w64-mingw32-strip -s $QTOX_PREFIX_DIR/*/*.dll $ARCH-w64-mingw32-strip -s $QTOX_PREFIX_DIR/*/*.dll
set -e set -e
# Create installer for releases # Create zip
SHELLEXECASUSER_HASH=8fc19829e144716a422b15a85e718e1816fe561de379b2b5ae87ef9017490799 cd $QTOX_PREFIX_DIR
zip qtox-"$ARCH"-"$BUILD_TYPE".zip -r *
cd -
# Create installer
if [[ "$BUILD_TYPE" == "release" ]] if [[ "$BUILD_TYPE" == "release" ]]
then then
cd windows cd windows
# we need the NSIS plugin "ShellExecAsUser" which is not included in the Debian nsis package
mkdir nsis-plugins
wget http://nsis.sourceforge.net/mediawiki/images/c/c7/ShellExecAsUser.zip
check_sha256 "$SHELLEXECASUSER_HASH" "ShellExecAsUser.zip"
NSIS_PLUGINDIR="./nsis-plugins"
unzip "ShellExecAsUser.zip" -d "$NSIS_PLUGINDIR"
NSIS_PLUGIN_CMD='!'"addplugindir $NSIS_PLUGINDIR"
# the installer creation script expects all the files in qtox/* # The installer creation script expects all the files to be in qtox/*
mkdir qtox mkdir qtox
cp -R $QTOX_PREFIX_DIR/* ./qtox cp -r $QTOX_PREFIX_DIR/* ./qtox
rm ./qtox/*.zip
# Select the installer script for the correct architecture # Select the installer script for the correct architecture
if [[ "$ARCH" == "i686" ]] if [[ "$ARCH" == "i686" ]]
then then
makensis -X"$NSIS_PLUGIN_CMD" qtox.nsi makensis qtox.nsi
elif [[ "$ARCH" == "x86_64" ]] elif [[ "$ARCH" == "x86_64" ]]
then then
makensis -X"$NSIS_PLUGIN_CMD" qtox64.nsi makensis qtox64.nsi
fi fi
cp setup-qtox.exe $QTOX_PREFIX_DIR/setup-qtox-"$ARCH".exe cp setup-qtox.exe $QTOX_PREFIX_DIR/setup-qtox-"$ARCH"-"$BUILD_TYPE".exe
cd .. cd ..
fi fi

Loading…
Cancel
Save