From cb60c52981d68e0ac15d374761b1dafcb6ca875d Mon Sep 17 00:00:00 2001 From: Calle Laakkonen Date: Tue, 11 Apr 2017 20:22:03 +0300 Subject: [PATCH] Build AppImage Qt from sources Fixes unicode error in QJsonDocument. (EPEL's Qt build is broken) https://bugzilla.redhat.com/show_bug.cgi?id=1376832 --- desktop/drawpile-48x48.png | Bin 0 -> 2735 bytes pkg/appimage/Build-client | 12 ++++++++---- pkg/appimage/Build-deps | 8 +++----- pkg/appimage/Build-qt | 19 +++++++++++++++++++ pkg/appimage/Build-server | 11 +++++------ pkg/appimage/Dockerfile | 16 +++++++++++----- pkg/appimage/build.sh | 19 +++++++++++++++++-- 7 files changed, 63 insertions(+), 22 deletions(-) create mode 100644 desktop/drawpile-48x48.png create mode 100644 pkg/appimage/Build-qt diff --git a/desktop/drawpile-48x48.png b/desktop/drawpile-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..068b45627cfde328e40e965f93133b2af7230fe9 GIT binary patch literal 2735 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 pE*Fl1r9$<8K>hp5zvBNr{uc" | awk '{print $3}' | xargs -I '{}' cp -vL '{}' ./usr/lib || true @@ -70,12 +71,15 @@ mkdir -p $ICONDIR/16x16/apps cp $SRCDIR/desktop/drawpile-16x16.png $ICONDIR/16x16/apps/drawpile.png mkdir -p $ICONDIR/32x32/apps cp $SRCDIR/desktop/drawpile-32x32.png $ICONDIR/32x32/apps/drawpile.png +mkdir -p $ICONDIR/48x48/apps +cp $SRCDIR/desktop/drawpile-48x48.png $ICONDIR/48x48/apps/drawpile.png mkdir -p $ICONDIR/64x64/apps cp $SRCDIR/desktop/drawpile-64x64.png $ICONDIR/64x64/apps/drawpile.png mkdir -p $ICONDIR/128x128/apps cp $SRCDIR/desktop/drawpile-128x128.png $ICONDIR/128x128/apps/drawpile.png mkdir -p $ICONDIR/scalable/apps cp $SRCDIR/desktop/drawpile.svg $ICONDIR/scalable/apps/drawpile.svg +cp $SRCDIR/desktop/drawpile.svg $APPDIR # Build Appimage diff --git a/pkg/appimage/Build-deps b/pkg/appimage/Build-deps index 660723b67..139027bb1 100644 --- a/pkg/appimage/Build-deps +++ b/pkg/appimage/Build-deps @@ -7,13 +7,11 @@ set -e set -x - -export LD_LIBRARY_PATH=/opt/rh/devtoolset-2/root/usr/lib:$LD_LIBRARY_PATH -export PATH=/opt/rh/devtoolset-2/root/usr/bin/:$CMAKE_PATH:$PATH +. /opt/rh/devtoolset-3/enable # Non-repo deps: ECM (needed to build KF5 libs) cd / -wget -O ecm.tar.xz http://download.kde.org/stable/frameworks/5.29/extra-cmake-modules-5.29.0.tar.xz +wget -O ecm.tar.xz http://download.kde.org/stable/frameworks/5.33/extra-cmake-modules-5.33.0.tar.xz tar xfJ ecm.tar.xz cd extra-cmake-modules*/ cmake3 . -DCMAKE_INSTALL_PREFIX=/usr @@ -21,7 +19,7 @@ make install # Non-repo deps: Get and build KArchive cd / -wget -O karchive.tar.xz http://download.kde.org/stable/frameworks/5.29/karchive-5.29.0.tar.xz +wget -O karchive.tar.xz http://download.kde.org/stable/frameworks/5.33/karchive-5.33.0.tar.xz tar xfJ karchive.tar.xz cd karchive*/ mkdir build diff --git a/pkg/appimage/Build-qt b/pkg/appimage/Build-qt new file mode 100644 index 000000000..1661e327c --- /dev/null +++ b/pkg/appimage/Build-qt @@ -0,0 +1,19 @@ +#!/bin/bash + +set -e +set -x +. /opt/rh/devtoolset-3/enable + + +# Build Qt +cd /opt +tar xfJ qt.tar.xz +cd qt-everywhere-opensource-src-5.7.1 +yes | ./configure -opensource -prefix /usr -libdir /usr/lib64 -archdatadir /usr/lib64/qt5 -datadir /usr/share/qt5 -headerdir /usr/include/qt5 -xkb-config-root /usr/share/X11/xkb -openssl-linked -skip qt3d -skip qtcanvas3d -skip qtcharts -skip qtwebengine -skip qtwebview -skip gamepad -skip qtscxml -skip qtdeclarative -no-compile-examples + +gmake +gmake install + +cd .. +rm -rf qt-everywhere-opensource-src-5.7.1 + diff --git a/pkg/appimage/Build-server b/pkg/appimage/Build-server index 93cd9f4ec..16545bbe0 100644 --- a/pkg/appimage/Build-server +++ b/pkg/appimage/Build-server @@ -7,9 +7,7 @@ set -e set -x - -export LD_LIBRARY_PATH=/opt/rh/devtoolset-2/root/usr/lib:$LD_LIBRARY_PATH # Needed for bundling the libraries into AppDir below -export PATH=/opt/rh/devtoolset-2/root/usr/bin/:$CMAKE_PATH:$PATH # Needed at compile time to find Qt and cmake +. /opt/rh/devtoolset-3/enable SRCDIR=/Drawpile WORKDIR=/work @@ -44,11 +42,12 @@ chmod a+x AppRun # Copy libraries mkdir -p usr/lib/qt5/plugins +cd usr +ln -s lib lib64 +cd .. cp -r /usr/lib64/qt5/plugins/sqldrivers usr/lib/qt5/plugins ldd usr/bin/drawpile-srv | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -vL '{}' ./usr/lib/ || true -#ldd usr/lib/qt5/plugins/platforms/libqxcb.so | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -vL '{}' ./usr/lib || true - cd usr/ ; find . -type f -exec sed -i -e 's|/usr/lib|././/lib|g' {} \; ; cd .. @@ -79,7 +78,7 @@ Terminal=true END -cp $SRCDIR/desktop/drawpile-64x64.png drawpile.png +cp $SRCDIR/desktop/drawpile-48x48.png $APPDIR/drawpile.png # Build Appimage diff --git a/pkg/appimage/Dockerfile b/pkg/appimage/Dockerfile index c8b3de9eb..806736de9 100644 --- a/pkg/appimage/Dockerfile +++ b/pkg/appimage/Dockerfile @@ -1,11 +1,17 @@ FROM centos:6 RUN yum -y install epel-release wget -RUN wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo -RUN yum -y install devtoolset-2-gcc devtoolset-2-gcc-c++ devtoolset-2-binutils zlib-devel qt5-qtbase-devel qt5-qtsvg-devel qt5-qtmultimedia-devel qt5-linguist cmake3 make giflib-devel wget unzip git xz binutils fuse glibc-devel glib2-devel fuse-devel zlib-devel libpng12 libmicrohttpd-devel +RUN yum -y install tar bzip2 git libtool which fuse fuse-devel libpng-devel automake libtool mesa-libEGL cppunit-devel cmake3 glibc-headers libstdc++-devel freetype-devel fontconfig-devel libxml2-devel libstdc++-devel libXrender-devel patch xcb-util-keysyms-devel libXi-devel mesa-libGL-devel libxcb libxcb-devel xcb-util xcb-util-devel openssl-devel xz unzip glibc-devel glib2-devel libmicrohttpd-devel pulseaudio-libs-devel +RUN yum -y install libxcb libxcb-devel libXrender libXrender-devel xcb-util-wm xcb-util-wm-devel xcb-util xcb-util-devel xcb-util-image xcb-util-image-devel xcb-util-keysyms xcb-util-keysyms-devel -ADD Build-deps / -ADD appimage.patch / +# Newer compiler than what comes with CentOS 6 +RUN yum -y install centos-release-scl-rh +RUN yum -y install devtoolset-3-gcc devtoolset-3-gcc-c++ -RUN bash -ex Build-deps +RUN wget http://download.qt.io/archive/qt/5.7/5.7.1/single/qt-everywhere-opensource-src-5.7.1.tar.xz -O /opt/qt.tar.xz + +ADD Build-qt / +RUN bash -ex Build-qt +ADD Build-deps / +RUN bash -ex Build-deps diff --git a/pkg/appimage/build.sh b/pkg/appimage/build.sh index 52ec14507..5ba519b44 100755 --- a/pkg/appimage/build.sh +++ b/pkg/appimage/build.sh @@ -1,6 +1,11 @@ #!/bin/bash set -e +if [ $# -ne 1 ]; then + echo "Usage: ./build.sh " + exit 1 +fi + mkdir -p out cd ../.. @@ -8,6 +13,16 @@ IMAGE=drawpile2 SRCVOL="$(pwd):/Drawpile:ro" OUTVOL="$(pwd)/pkg/appimage/out:/out" -docker run --rm -ti -v "$SRCVOL" -v "$OUTVOL" $IMAGE bash /Drawpile/pkg/appimage/Build-client -docker run --rm -ti -v "$SRCVOL" -v "$OUTVOL" $IMAGE bash /Drawpile/pkg/appimage/Build-server +if [ "$1" == "shell" ]; then + CMD="" +elif [ "$1" == "client" ]; then + CMD="/Drawpile/pkg/appimage/Build-client" +elif [ "$1" == "server" ]; then + CMD="/Drawpile/pkg/appimage/Build-server" +else + echo "Unknown build target: $1" + exit 1 +fi + +docker run --rm -ti -v "$SRCVOL" -v "$OUTVOL" $IMAGE bash $CMD