#!/bin/sh # Slackware build script for qt5 # Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Merged some ideas from Alex Sarmardzic's script for qt4 at SlackBuilds.org # ^^ Modified by Robby Workman for QT4 & KDE4 # Modifications 2010, 2011, 2012, 2013, 2014 Eric Hameleers, Eindhoven, NL # Tailored to Qt5 by Larry Hajali 2013, 2014. PKGNAM=qt5 SRCNAM=qt5 VERSION=${VERSION:-5.2.1} BUILD=${BUILD:-1} CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-$PKGNAM if [ -e $CWD/machine.conf ]; then . $CWD/machine.conf ] elif [ -e /etc/slackbuild/machine.conf ]; then . /etc/slackbuild/machine.conf ] else # Automatically determine the architecture we're building on: MARCH=$( uname -m ) if [ -z "$ARCH" ]; then case "$MARCH" in i?86) export ARCH=i486 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$MARCH ;; esac fi # Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX: if [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" elif [ "$ARCH" = "arm" ]; then SLKCFLAGS="-O2 -march=armv5te" LIBDIRSUFFIX="" elif [ "$ARCH" = "armv7hl" ]; then # To prevent "qatomic_armv6.h error: output number 2 not directly addressable" # More permanent solution is to patch gcc: # http://bazaar.launchpad.net/~linaro-toolchain-dev/gcc-linaro/4.6/revision/106731 SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16 -fno-strict-volatile-bitfields" LIBDIRSUFFIX="" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi fi case "$ARCH" in arm*) TARGET=$ARCH-slackware-linux-gnueabi ;; *) TARGET=$ARCH-slackware-linux ;; esac rm -rf $PKG mkdir -p $TMP $PKG cd $TMP rm -rf ${SRCNAM}-everywhere-opensource-src-$VERSION || exit 1 tar xvf $CWD/${SRCNAM}-everywhere-opensource-src-$VERSION.tar.xz || exit 1 cd ${SRCNAM}-everywhere-opensource-src-$VERSION || exit 1 chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; # Fix path to mysql header zcat $CWD/patches/qt5.mysql.h.diff.gz | patch -p1 --verbose || exit 1 # Install path fix for libplatformplugin.so. # https://bugs.webkit.org/show_bug.cgi?id=117077 zcat $CWD/patches/platformplugin-install-path-fix.patch.gz | patch -p1 --verbose || exit 1 if [ $ARCH = "i486" ]; then sed -i -e "s/QMAKE_CFLAGS_RELEASE += -O2/QMAKE_CFLAGS_RELEASE += $SLKCFLAGS/" mkspecs/common/gcc-base.conf || exit 1 fi export CFLAGS="$SLKCFLAGS" export CXXFLAGS="$SLKCFLAGS" export OPENSOURCE_CXXFLAGS="$SLKCFLAGS" ./configure \ -confirm-license \ -opensource \ -release \ -prefix "/usr/lib${LIBDIRSUFFIX}/$PKGNAM" \ -sysconfdir "/etc/xdg" \ -docdir "/usr/doc/$PKGNAM-$VERSION" \ -accessibility \ -dbus-linked \ -glib \ -icu \ -javascript-jit \ -openssl \ -optimized-qmake \ -plugin-sql-sqlite \ -qpa xcb \ -reduce-relocations \ -verbose \ -xcb \ -nomake examples \ -no-pch \ -no-rpath \ -no-separate-debug-info \ -no-strip \ -system-harfbuzz \ -system-libjpeg \ -system-libpng \ -system-pcre \ -system-sqlite \ -system-zlib # Sometimes a failure happens when parallelizing make. Try again if make fails, # but make a failure the second time around (single threaded) a fatal error: make $NUMJOBS || make || exit 1 make install INSTALL_ROOT=$PKG || exit 1 # The infamous qt -> qt-${VERSION} link that keeps the full path out of .la files: ln -s $PKGNAM $PKG/usr/lib${LIBDIRSUFFIX}/qt-$VERSION mkdir -p $PKG/usr/bin for BIN in $PKG/usr/lib${LIBDIRSUFFIX}/$PKGNAM/bin/*; do TMP_FILE=$(echo $BIN | sed -e "s|$PKG||") case $(basename $BIN) in syncqt.pl) ln -s $TMP_FILE $PKG/usr/bin/$(basename $BIN) ;; *) ln -s $TMP_FILE $PKG/usr/bin/$(basename $BIN)-$PKGNAM ;; esac done for LIBS in $PKG/usr/lib${LIBDIRSUFFIX}/$PKGNAM/lib/*so*; do TMP_FILE=$(echo $LIBS | sed -e "s|$PKG||") ln -s $TMP_FILE $PKG/usr/lib${LIBDIRSUFFIX}/$(basename $LIBS) done # Create Environment variables mkdir -p $PKG/etc/profile.d sed -e "s|@LIBDIRSUFFIX@|${LIBDIRSUFFIX}|g" $CWD/profile.d/$PKGNAM.sh \ > $PKG/etc/profile.d/$PKGNAM.sh sed -e "s|@LIBDIRSUFFIX@|${LIBDIRSUFFIX}|g" $CWD/profile.d/$PKGNAM.csh \ > $PKG/etc/profile.d/$PKGNAM.csh chmod 0755 $PKG/etc/profile.d/* find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true # Add a missing Qt.pc which is needed by KDE applications: mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/qt/lib/pkgconfig cat < $PKG/usr/lib${LIBDIRSUFFIX}/$PKGNAM/lib/pkgconfig/Qt5.pc prefix=/usr/lib${LIBDIRSUFFIX}/$PKGNAM bindir=\${prefix}/bin datadir=\${prefix} docdir=/usr/doc/$PKGNAM-$VERSION archdatadir=\${prefix} examplesdir=\${prefix}/examples headerdir=\${prefix}/include importdir=\${prefix}/imports qmldir=\${prefix}/qml libdir=\${prefix}/lib libexec=\${prefix}/libexec moc=\${bindir}/moc plugindir=\${prefix}/plugins qmake=\${bindir}/qmake sysconfdir=/etc/xdg translationdir=\${prefix}/translations Name: Qt5 Description: Qt5 Configuration Version: $VERSION EOF # Fix internal linking for Qt5WebKit.pc. sed -i \ -e "s|-Wl,-whole-archive -lWebKit1 -Wl,-no-whole-archive -L${PWD}/qtwebkit/Source/WebKit[^ ]* ||" \ -e "s|-Wl,-whole-archive -lWebKit2 -Wl,-no-whole-archive -L${PWD}/qtwebkit/Source/WebKit2[^ ]* ||" \ -e "s|-Wl,-whole-archive -lWebCore -Wl,-no-whole-archive -L${PWD}/qtwebkit/Source/WebCore[^ ]* ||" \ -e "s|-Wl,-whole-archive -lANGLE -Wl,-no-whole-archive -L${PWD}/qtwebkit/Source/ThirdParty/ANGLE[^ ]* ||" \ -e "s|-Wl,-whole-archive -lJavaScriptCore -Wl,-no-whole-archive -L${PWD}/qtwebkit/Source/JavaScriptCore[^ ]* ||" \ -e "s|-Wl,-whole-archive -lWTF -Wl,-no-whole-archive -L${PWD}/qtwebkit/Source/WTF[^ ]* ||" \ $PKG/usr/lib${LIBDIRSUFFIX}/$PKGNAM/lib/pkgconfig/Qt5WebKit.pc # While we are at it, there isn't any reason to keep references to $PKG in the *.prl files. for PRL in $PKG/usr/lib${LIBDIRSUFFIX}/$PKGNAM/lib/*.prl; do sed -i '/^QMAKE_PRL_BUILD_DIR/d' $PRL done # One more for the road. sed -i "s|$PWD/qtbase|/usr/lib${LIBDIRSUFFIX}/$PKGNAM|" \ $PKG/usr/lib${LIBDIRSUFFIX}/$PKGNAM/mkspecs/modules/qt_lib_bootstrap_private.pri mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig for PKGCONFIG in $PKG/usr/lib${LIBDIRSUFFIX}/$PKGNAM/lib/pkgconfig/*.pc; do TMP_FILE=$(echo $PKGCONFIG | sed -e "s|$PKG||") ln -s $TMP_FILE $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig/$(basename $PKGCONFIG) done mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/cmake for CMAKE in $(find $PKG/usr/lib${LIBDIRSUFFIX}/$PKGNAM/lib/cmake -maxdepth 1); do TMP_FILE=$(echo $CMAKE | sed -e "s|$PKG||") ln -s $TMP_FILE $PKG/usr/lib${LIBDIRSUFFIX}/cmake/$(basename $CMAKE) done for i in $CWD/desktop/*.desktop; do install -D -m 0644 $i $PKG/usr/share/applications/$(basename $i) done sed -i "s|@LIBDIR@|$LIBDIRSUFFIX|" $PKG/usr/share/applications/* for i in $(find . -name "assistant.ico" -o -name "designer.ico" \ -o -name "linguist.ico" -o -name "qdbusviewer.ico"); do for j in 16 24 32 48 64 96 128; do convert $i -resize ${j}x${j}! $(basename $i)-$j.png install -D -m 0644 $(basename $i)-$j-0.png \ $PKG/usr/share/icons/hicolor/${j}x${j}/apps/$(basename $i | sed 's|.ico||')-$PKGNAM.png done done # Remove executable bits from files. find $PKG \( -name "*.qml" -o -name "*.app" \) -perm 755 -exec chmod 644 '{}' \; mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION cp -a \ README qtbase/{header*,LGPL_EXCEPTION.txt,LICENSE.*L} \ $PKG/usr/doc/$PKGNAM-$VERSION cat $CWD/$PKGNAM.SlackBuild > $PKG/usr/doc/$PKGNAM-$VERSION/$PKGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz