1,113 → 1,115 |
#!/bin/bash |
|
cat /proc/1/cgroup # Check if we run in Docker; https://github.com/AppImage/AppImageKit/issues/912 |
|
. /opt/qt*/bin/qt*-env.sh || true |
|
######################################################################## |
# Package the binaries built on Travis-CI as an AppImage |
# By Simon Peter 2016 |
# For more information, see http://appimage.org/ |
# Build Plaform Theme for Gtk+ |
######################################################################## |
|
export ARCH=$(arch) |
find /opt/qt*/| grep platform |
#apt-get update |
#apt-get -y install libgtk-3-dev libnotify-dev qt5113d |
#git clone https://github.com/CrimsonAS/gtkplatform |
#cd gtkplatform |
#qmake |
#make -j$(nproc) |
#sudo make install |
#cd - |
|
APP=Scribus |
LOWERAPP=${APP,,} |
|
GIT_REV=$(git rev-parse --short HEAD) |
echo $GIT_REV |
make install DESTDIR=/home/travis/$APP/$APP.AppDir |
|
cd $HOME/$APP/ |
|
wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh |
. ./functions.sh |
|
cd $APP.AppDir |
|
######################################################################## |
# Copy desktop and icon file to AppDir for AppRun to pick them up |
# https://askubuntu.com/a/910143 |
# https://askubuntu.com/a/748186 |
# Deploy with linuxdeployqt using |
# -extra-plugins=platformthemes/libqgtk2.so,styles/libqgtk2style.so |
# At runtime, export QT_QPA_PLATFORMTHEME=gtk2 (Xfce does this itself) |
######################################################################## |
|
get_apprun |
git clone http://code.qt.io/qt/qtstyleplugins.git |
cd qtstyleplugins |
qmake |
make -j$(nproc) |
make install |
cd - |
|
find . -name *desktop -exec cp {} $LOWERAPP.desktop \; |
|
cp ./usr/share/scribus/icons/1_5_1/scribus.png . |
rm -rf usr/share/icons/hicolor/48x48/ |
|
######################################################################## |
# Copy in the dependencies that cannot be assumed to be available |
# on all target systems |
# Build Scribus and install to appdir/ |
######################################################################## |
|
# FIXME: How to find out which subset of plugins is really needed? |
mkdir -p ./usr/lib/qt5/plugins/ |
PLUGINS=/opt/qt58/plugins/ |
cp -r $PLUGINS/* ./usr/lib/qt5/plugins/ |
cmake . -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_INSTALL_PREFIX=/usr -DWANT_HUNSPELL=1 -DWITH_PODOFO=1 -DWANT_GRAPHICSMAGICK=1 -DWANT_DEBUG=0 -DWANT_SVNVERSION=0 -DWANT_GUI_LANG=en_US |
make -j$(nproc) |
make DESTDIR=appdir -j$(nproc) install ; find appdir/ |
cp AppImage-package/AppRun appdir/ ; chmod +x appdir/AppRun |
cp ./appdir/usr/share/icons/hicolor/256x256/apps/scribus.png ./appdir/ |
sed -i -e 's|^Icon=.*|Icon=scribus|g' ./appdir/usr/share/applications/scribus.desktop # Needed? |
|
# Tcl/Tk, Tkinter (for Calendar script) |
cp /usr/li*/python2.7/lib-dynload/_tkinter.so usr/ # It is indeed picked up here because we cd there at runtime |
ldd usr/_tkinter.so | grep "=>" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ./usr/lib || true |
cp -r /usr/lib/tcltk usr/lib/ |
cp -r /usr/share/tcltk usr/share/ |
|
export LD_LIBRARY_PATH=/opt/qt58/lib/:LD_LIBRARY_PATH |
copy_deps |
|
# Move the libraries to usr/bin |
move_lib |
mv ./opt/qt58/lib/* usr/lib ; rm -rf ./opt |
( cd usr/lib/qt5/plugins/platforms/../../ ; ln -s ../../lib/ . ) |
mv usr/lib/x86_64-linux-gnu/* usr/lib/ |
|
######################################################################## |
# Delete stuff that should not go into the AppImage |
# Bundle everyhting |
# to allow the AppImage to run on older systems as well |
######################################################################## |
|
# Delete dangerous libraries; see |
# https://github.com/probonopd/AppImages/blob/master/excludelist |
delete_blacklisted |
cd appdir/ |
|
# We don't bundle the developer stuff |
rm -rf usr/include || true |
rm -rf usr/lib/cmake || true |
rm -rf usr/lib/pkgconfig || true |
find . -name '*.la' | xargs -i rm {} |
strip usr/bin/* usr/lib/* || true |
# Bundle all of glibc; this should eventually be done by linuxdeployqt |
apt-get update -q |
apt-get download libc6 |
find *.deb -exec dpkg-deb -x {} . \; |
rm *deb |
|
######################################################################## |
# desktopintegration asks the user on first run to install a menu item |
######################################################################## |
# Make absolutely sure it will not load stuff from /lib or /usr |
sed -i -e 's|/usr|/xxx|g' lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 |
sed -i -e 's|/usr/lib|/ooo/ooo|g' lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 |
|
get_desktopintegration $LOWERAPP |
# Bundle fontconfig settings |
mkdir -p etc/fonts/ |
cp /etc/fonts/fonts.conf etc/fonts/ |
|
# Bundle Python |
apt-get download libpython2.7-stdlib python2.7 python2.7-minimal libpython2.7-minimal |
find *.deb -exec dpkg-deb -x {} . \; |
rm *deb |
cd - |
|
######################################################################## |
# Determine the version of the app; also include needed glibc version |
# Patch away absolute paths |
# FIXME: It would be nice if they were relative |
######################################################################## |
|
GLIBC_NEEDED=$(glibc_needed) |
VERSION=git$GIT_REV-glibc$GLIBC_NEEDED |
sed -i -e 's|/usr/share/scribus|././/share/scribus|g' appdir/usr/bin/scribus |
sed -i -e 's|/usr/lib/scribus|././/lib/scribus|g' appdir/usr/bin/scribus |
sed -i -e 's|/usr/share/doc/scribus/|././/share/doc/scribus/|g' appdir/usr/bin/scribus |
|
######################################################################## |
# Patch away absolute paths; it would be nice if they were relative |
# Also bundle Tcl/Tk, Tkinter (for Calendar script) |
######################################################################## |
|
sed -i -e 's|/usr/share/scribus|././/share/scribus|g' usr/bin/scribus |
sed -i -e 's|/usr/lib/scribus|././/lib/scribus|g' usr/bin/scribus |
sed -i -e 's|/usr/share/doc/scribus/|././/share/doc/scribus/|g' usr/bin/scribus |
# Possibly need to patch additional hardcoded paths away, replace |
# "/usr" with "././" which means "usr/ in the AppDir" |
mkdir -p appdir/usr/lib appdir/usr/share |
cp /usr/li*/python2.7/lib-dynload/_tkinter.so appdir/usr/ # It is indeed picked up here because we cd there at runtime |
cp -r /usr/lib/tcltk appdir/usr/lib/ |
cp -r /usr/share/tcltk appdir/usr/share/ |
|
######################################################################## |
# AppDir complete |
# Now packaging it as an AppImage |
# Create extra qt.conf in a strange location; FIXME: why is this needed? |
######################################################################## |
|
cd .. # Go out of AppImage |
mkdir -p appdir/lib/x86_64-linux-gnu/ |
cat > appdir/lib/x86_64-linux-gnu/qt.conf <<\EOF |
# Why is this needed here? Bug? |
[Paths] |
Prefix = ../../usr |
Plugins = plugins |
Imports = qml |
Qml2Imports = qml |
EOF |
|
mkdir -p ../out/ |
generate_appimage |
|
######################################################################## |
# Upload the AppDir |
# Generate AppImage |
######################################################################## |
|
transfer ../out/* |
# Finalize AppDir but do not turn into AppImage just yet |
wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" |
chmod a+x linuxdeployqt-continuous-x86_64.AppImage |
ARCH=x86_64 ./linuxdeployqt-continuous-x86_64.AppImage --appimage-extract-and-run appdir/usr/share/applications/scribus.desktop \ |
-appimage -unsupported-bundle-everything \ |
-executable=appdir/usr/bin/python2.7 -executable=appdir/usr/_tkinter.so -extra-plugins=platformthemes/libqgtk2.so,styles/libqgtk2style.so |