You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
334 lines
10 KiB
334 lines
10 KiB
5 years ago
|
#!/bin/sh
|
||
|
# Build script for Slackware
|
||
|
# Copyright (C) 2017 Damien Goutte-Gattat
|
||
|
# Copyright (C) 2006-2016 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.
|
||
|
#
|
||
|
# Adapted from Eric Hameleers' script.
|
||
|
#
|
||
|
# Latest Qt sourcecode is available at: <http://www.qt.io/>.
|
||
|
#
|
||
|
# Depends: l/libxkbcommon, l/libinput
|
||
|
|
||
|
# Source package infos
|
||
|
NAMESRC=${NAMESRC:-qt}
|
||
|
VERSION=${VERSION:-5.7.1}
|
||
|
ARCHIVE=${ARCHIVE:-$NAMESRC-everywhere-opensource-src-$VERSION.tar.xz}
|
||
|
WGET=${WGET:-http://download.qt.io/archive/qt/5.7/$VERSION/single/$ARCHIVE}
|
||
|
|
||
|
# Build infos
|
||
|
NAMEPKG=${NAMEPKG:-qt5}
|
||
|
BUILD=${BUILD:-1}
|
||
|
ARCH=${ARCH:-$(uname -m | sed 's/^i.86$/i486/;s/^arm.*/arm/')}
|
||
|
JOBS=${JOBS:-1}
|
||
|
EXT=${EXT:-txz}
|
||
|
|
||
|
# Directories
|
||
|
TMP=${TMP:-/tmp}
|
||
|
OUT=${OUT:-$TMP/build}
|
||
|
PKG=${PKG:-$OUT/$NAMEPKG}
|
||
|
CWD=$(pwd)
|
||
|
|
||
|
set -e # Quit if a command returns non-zero
|
||
|
|
||
|
# Sanity check
|
||
|
if [ $UID -eq 0 ]; then
|
||
|
echo "You should NOT run this script as ROOT!"
|
||
|
exit 1
|
||
|
fi
|
||
|
if [ ! -d $TMP ]; then
|
||
|
echo "$TMP does not exist or is not a directory!"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Compilation flags
|
||
|
if [ "$ARCH" = "i486" ]; then
|
||
|
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
|
||
|
SLKLDFLAGS=""
|
||
|
LIBDIRSUFFIX=""
|
||
|
elif [ "$ARCH" = "s390" ]; then
|
||
|
SLKCFLAGS="-O2"
|
||
|
SLKLDFLAGS=""
|
||
|
LIBDIRSUFFIX=""
|
||
|
elif [ "$ARCH" = "x86_64" ]; then
|
||
|
SLKCFLAGS="-O2 -fPIC"
|
||
|
SLKLDFLAGS=""
|
||
|
SLKLDFLAGS="-L/usr/lib64"
|
||
|
LIBDIRSUFFIX="64"
|
||
|
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"
|
||
|
SLKLDFLAGS=""
|
||
|
LIBDIRSUFFIX=""
|
||
|
else
|
||
|
SLKCFLAGS="-O2"
|
||
|
SLKLDFLAGS=""
|
||
|
LIBDIRSUFFIX=""
|
||
|
fi
|
||
|
|
||
|
case "$ARCH" in
|
||
|
arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
|
||
|
*) TARGET=$ARCH-slackware-linux ;;
|
||
|
esac
|
||
|
|
||
|
# Get and verify the source archive
|
||
|
if [ ! -r $ARCHIVE ]; then
|
||
|
wget -c -O $ARCHIVE.part "$WGET"
|
||
|
mv $ARCHIVE.part $ARCHIVE
|
||
|
fi
|
||
|
sha256sum -c $ARCHIVE.sha256
|
||
|
NAME=$(tar ft $ARCHIVE | head -n 1 | cut -d / -f 1)
|
||
|
|
||
|
# Extract
|
||
|
cd $TMP
|
||
|
echo "Building $ARCHIVE..."
|
||
|
tar xf $CWD/$ARCHIVE
|
||
|
cd $NAME
|
||
|
|
||
|
# Fix dangling symlinks, thanks Larry Hajali:
|
||
|
rm -f qtwebengine/src/3rdparty/chromium/third_party/mesa/src/src/gallium/state_trackers/d3d1x/w32api
|
||
|
rm -f qtwebengine/src/3rdparty/chromium/third_party/webrtc/tools/e2e_quality/audio/perf
|
||
|
ln -s ../../../../../tools/perf \
|
||
|
qtwebengine/src/3rdparty/chromium/third_party/webrtc/tools/e2e_quality/audio/
|
||
|
|
||
|
# Use -reduce-relocations only on i?86 and x86_64 architextures.
|
||
|
# https://bugreports.qt-project.org/browse/QTBUG-36129
|
||
|
if echo $ARCH | grep -q '\(i.86\|x86_64\)' 2>/dev/null; then
|
||
|
RELOCATIONS="-reduce-relocations"
|
||
|
else
|
||
|
RELOCATIONS=""
|
||
|
fi
|
||
|
|
||
|
# Fix path to mysql header:
|
||
|
cat $CWD/patches/qt5.mysql.h.diff | patch -p1 --verbose || exit 1
|
||
|
|
||
|
# Don't unload plugins in QPluginLoader (segfault in LXQT):
|
||
|
cd qtbase
|
||
|
cat $CWD/patches/qt5.qtbug-49061.patch | patch -p1 --verbose || exit 1
|
||
|
cd -
|
||
|
|
||
|
# Fix file chooser segfault on Gnome/Wayland:
|
||
|
cd qtbase
|
||
|
cat $CWD/patches/qt5.qtbug-55583.patch | patch -p1 --verbose || exit 1
|
||
|
cd -
|
||
|
|
||
|
if ! pkg-config --exists libpulse 2>/dev/null ; then
|
||
|
# Forcibly disable pulseaudio in qtwebengine:
|
||
|
cat $CWD/patches/qt5.pulseaudio.diff | patch -p1 --verbose || exit 1
|
||
|
# Disable pulseaudio in Qt5:
|
||
|
PACONF="-no-pulseaudio"
|
||
|
else
|
||
|
PACONF=" "
|
||
|
fi
|
||
|
|
||
|
sed -i -e "s/-O2/$SLKCFLAGS/" qtbase/mkspecs/common/g++-base.conf || exit 1
|
||
|
sed -i -e "s/-O2/$SLKCFLAGS/" qtbase/mkspecs/common/gcc-base.conf || exit 1
|
||
|
sed -i -e "/^QMAKE_LFLAGS\s/s,+=,+= $SLKLDFLAGS,g" qtbase/mkspecs/common/gcc-base.conf || exit 1
|
||
|
|
||
|
# Enable h.264 codec support:
|
||
|
echo "WEBENGINE_CONFIG += use_proprietary_codecs" >> qtwebengine/.qmake.conf
|
||
|
|
||
|
# Enable all languages in the virtual keyboard (required by Plasma 5.11):
|
||
|
echo "CONFIG += lang-all" >> qtvirtualkeyboard/.qmake.conf
|
||
|
|
||
|
export CFLAGS="$SLKCFLAGS"
|
||
|
export CXXFLAGS="$SLKCFLAGS"
|
||
|
export OPENSOURCE_CXXFLAGS="$SLKCFLAGS"
|
||
|
export QTDIR="$TMP/qt-everywhere-opensource-src-$VERSION"
|
||
|
export LD_LIBRARY_PATH="$QTDIR/qtbase/lib:$QTDIR/qttools/lib:$LD_LIBRARY_PATH"
|
||
|
export QT_PLUGIN_PATH="$QTDIR/qtbase/plugins"
|
||
|
./configure \
|
||
|
-confirm-license \
|
||
|
-opensource \
|
||
|
-prefix /usr \
|
||
|
-libdir /usr/lib$LIBDIRSUFFIX \
|
||
|
-bindir /usr/lib$LIBDIRSUFFIX/qt5/bin \
|
||
|
-sysconfdir /etc/xdg \
|
||
|
-headerdir /usr/include/qt5 \
|
||
|
-datadir /usr/share/qt5 \
|
||
|
-archdatadir /usr/lib$LIBDIRSUFFIX/qt5 \
|
||
|
-docdir /usr/doc/qt5-$VERSION \
|
||
|
-examplesdir /usr/doc/qt5-$VERSION/examples \
|
||
|
-system-libpng \
|
||
|
-system-libjpeg \
|
||
|
-system-pcre \
|
||
|
-system-sqlite \
|
||
|
-system-zlib \
|
||
|
-plugin-sql-mysql \
|
||
|
-plugin-sql-sqlite \
|
||
|
-accessibility \
|
||
|
-alsa \
|
||
|
-dbus \
|
||
|
-glib \
|
||
|
-icu \
|
||
|
-opengl \
|
||
|
-openssl \
|
||
|
-optimized-qmake \
|
||
|
-qpa xcb \
|
||
|
-qt-harfbuzz \
|
||
|
-verbose \
|
||
|
-xcb \
|
||
|
-nomake examples \
|
||
|
-nomake tests \
|
||
|
-no-separate-debug-info \
|
||
|
-no-strip \
|
||
|
-no-use-gold-linker \
|
||
|
${PACONF} \
|
||
|
${RELOCATIONS} \
|
||
|
-no-pch \
|
||
|
# No-precompiled-headers is ccache-friendly.
|
||
|
|
||
|
# 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 -j $JOBS || make || exit 1
|
||
|
make install INSTALL_ROOT=$PKG || exit 1
|
||
|
|
||
|
# Strip binaries the Slackware way:
|
||
|
find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
|
||
|
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
|
||
|
|
||
|
# Fix the path in prl files:
|
||
|
find "$PKG/usr/lib$LIBDIRSUFFIX" -type f -name '*.prl' \
|
||
|
-exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d;s/\(QMAKE_PRL_LIBS =\).*/\1/' {} \;
|
||
|
|
||
|
# Fix the qmake path in pri file:
|
||
|
sed -i "s,$QTDIR/qtbase,/usr/lib$LIBDIRSUFFIX/qt5," \
|
||
|
$PKG/usr/lib$LIBDIRSUFFIX/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri
|
||
|
|
||
|
# Install symlinks to the Qt5 binaries in the $PATH:
|
||
|
mkdir -p $PKG/usr/bin
|
||
|
for FILE in $PKG/usr/lib$LIBDIRSUFFIX/qt5/bin/* ; do
|
||
|
ln -s ../lib$LIBDIRSUFFIX/qt5/bin/$(basename $FILE) $PKG/usr/bin/$(basename $FILE)-qt5
|
||
|
done
|
||
|
|
||
|
# Set the QT5DIR variable in the environment:
|
||
|
mkdir -p $PKG/etc/profile.d
|
||
|
sed -e "s,@LIBDIRSUFFIX@,$LIBDIRSUFFIX,g" $CWD/profile.d/$NAMEPKG.sh \
|
||
|
> $PKG/etc/profile.d/$NAMEPKG.sh
|
||
|
sed -e "s,@LIBDIRSUFFIX@,$LIBDIRSUFFIX,g" $CWD/profile.d/$NAMEPKG.csh \
|
||
|
> $PKG/etc/profile.d/$NAMEPKG.csh
|
||
|
chmod 0755 $PKG/etc/profile.d/*
|
||
|
|
||
|
# Add menu entries for all those hidden but great Qt applications:
|
||
|
# Qt5 logo:
|
||
|
mkdir -p $PKG/usr/share/icons/hicolor/48x48/apps
|
||
|
convert qtdoc/doc/src/images/qt-logo.png -resize 48x48 $PKG/usr/share/icons/hicolor/48x48/apps/qt5-logo.png
|
||
|
# Assistant icons
|
||
|
install -p -m644 -D qttools/src/assistant/assistant/images/assistant.png $PKG/usr/share/icons/hicolor/32x32/apps/qt5-assistant.png
|
||
|
install -p -m644 -D qttools/src/assistant/assistant/images/assistant-128.png $PKG/usr/share/icons/hicolor/128x128/apps/qt5-assistant.png
|
||
|
# Designer icon
|
||
|
install -p -m644 -D qttools/src/designer/src/designer/images/designer.png $PKG/usr/share/icons/hicolor/128x128/apps/qt5-designer.png
|
||
|
# QDbusViewer icons
|
||
|
install -p -m644 qttools/src/qdbus/qdbusviewer/images/qdbusviewer.png $PKG/usr/share/icons/hicolor/32x32/apps/qt5-qdbusviewer.png
|
||
|
install -p -m644 qttools/src/qdbus/qdbusviewer/images/qdbusviewer-128.png $PKG/usr/share/icons/hicolor/128x128/apps/qt5-qdbusviewer.png
|
||
|
# Linguist icons
|
||
|
for icon in qttools/src/linguist/linguist/images/icons/linguist-*-32.png ; do
|
||
|
size=$(echo $(basename ${icon}) | cut -d- -f2)
|
||
|
install -p -m644 -D ${icon} $PKG/usr/share/icons/hicolor/${size}x${size}/apps/qt5-linguist.png
|
||
|
done
|
||
|
|
||
|
# And the .desktop files too:
|
||
|
mkdir -p $PKG/usr/share/applications
|
||
|
cat <<EOF > $PKG/usr/share/applications/qt5-designer.desktop
|
||
|
[Desktop Entry]
|
||
|
Name=Qt5 Designer
|
||
|
GenericName=Interface Designer
|
||
|
Comment=Design GUIs for Qt5 applications
|
||
|
Exec=designer-qt5 -qt=5
|
||
|
Icon=qt5-designer
|
||
|
MimeType=application/x-designer;
|
||
|
Terminal=false
|
||
|
Encoding=UTF-8
|
||
|
Type=Application
|
||
|
Categories=Qt;Development;
|
||
|
EOF
|
||
|
cat <<EOF > $PKG/usr/share/applications/qt5-assistant.desktop
|
||
|
[Desktop Entry]
|
||
|
Name=Qt5 Assistant
|
||
|
Comment=Shows Qt5 documentation and examples
|
||
|
Exec=assistant-qt5 -qt=5
|
||
|
Icon=qt5-assistant
|
||
|
Terminal=false
|
||
|
Encoding=UTF-8
|
||
|
Type=Application
|
||
|
Categories=Qt;Development;Documentation;
|
||
|
EOF
|
||
|
cat <<EOF > $PKG/usr/share/applications/qt5-linguist.desktop
|
||
|
[Desktop Entry]
|
||
|
Name=Qt5 Linguist
|
||
|
Comment=Add translations to Qt5 applications
|
||
|
Exec=linguist-qt5 -qt=5
|
||
|
Icon=qt5-linguist
|
||
|
MimeType=text/vnd.trolltech.linguist;application/x-linguist;
|
||
|
Terminal=false
|
||
|
Encoding=UTF-8
|
||
|
Type=Application
|
||
|
Categories=Qt;Development;
|
||
|
EOF
|
||
|
cat <<EOF > $PKG/usr/share/applications/qt5-qdbusviewer.desktop
|
||
|
[Desktop Entry]
|
||
|
Name=Qt5 QDbusViewer
|
||
|
GenericName=Qt5 D-Bus Debugger
|
||
|
Comment=Debug D-Bus applications
|
||
|
Exec=qdbusviewer-qt5
|
||
|
Icon=qt5-qdbusviewer
|
||
|
Terminal=false
|
||
|
Type=Application
|
||
|
Categories=Qt;Development;Debugger;
|
||
|
EOF
|
||
|
|
||
|
# Add a documentation directory:
|
||
|
mkdir -p $PKG/usr/doc/$NAMEPKG-$VERSION
|
||
|
cp -a \
|
||
|
README qtbase/{header*,LGPL_EXCEPTION.txt,LICENSE*} \
|
||
|
$PKG/usr/doc/$NAMEPKG-$VERSION
|
||
|
if [ -d $PKG/usr/lib$LIBDIRSUFFIX/qt5/doc/html ]; then
|
||
|
( cd $PKG/usr/doc/$NAMEPKG-$VERSION
|
||
|
ln -sf /usr/lib$LIBDIRSUFFIX/qt5/doc/html .
|
||
|
)
|
||
|
fi
|
||
|
|
||
|
# Copy slack-desck and doinst.sh files
|
||
|
install -D -m 644 $CWD/slack-desc $PKG/install/slack-desc
|
||
|
install -m 755 $CWD/doinst.sh $PKG/install/doinst.sh
|
||
|
|
||
|
# Add dependency infos
|
||
|
cat <<EOF > $PKG/install/slack-required
|
||
|
libxkbcommon
|
||
|
libinput
|
||
|
EOF
|
||
|
|
||
|
# Package the tree
|
||
|
cd $PKG
|
||
|
mkdir -p $OUT
|
||
|
PACKAGING="
|
||
|
chown root:root . -R
|
||
|
/sbin/makepkg -l y -c n $OUT/$NAMEPKG-$VERSION-$ARCH-$BUILD.$EXT
|
||
|
rm -rf $PKG
|
||
|
rm -rf $TMP/$NAME
|
||
|
"
|
||
|
if type -p fakeroot ; then
|
||
|
echo "$PACKAGING" | fakeroot
|
||
|
else
|
||
|
su -c "$PACKAGING"
|
||
|
fi
|