Chris@612: #!/bin/bash Chris@612: Chris@612: set -eu Chris@612: Chris@612: program=tony Chris@612: plugins="chp pyin" Chris@612: Chris@612: get_id() { Chris@612: if [ -d .hg ]; then Chris@612: hg id | sed 's/[+ ].*$//' Chris@612: elif [ -d .git ]; then Chris@612: git rev-parse --short HEAD Chris@612: else Chris@612: echo "WARNING: can't figure out revision from VCS metadata" 1>&2 Chris@612: echo "unknown" Chris@612: fi Chris@612: } Chris@612: Chris@612: version=$(get_id) Chris@612: Chris@612: targetdir="${program}.AppDir" Chris@612: Chris@612: echo "Target dir is $targetdir" Chris@612: Chris@612: if [ -d "$targetdir" ]; then Chris@612: echo "Target directory exists, not overwriting" Chris@612: exit Chris@612: fi Chris@612: Chris@612: mkdir "$targetdir" Chris@612: Chris@612: mkdir -p "$targetdir"/usr/bin Chris@612: mkdir -p "$targetdir"/usr/lib/"$program" Chris@612: Chris@612: cp "$program" "$targetdir"/usr/bin/ Chris@612: Chris@612: for p in $plugins ; do Chris@612: cp "$p.so" "$targetdir"/usr/lib/"$program"/ Chris@612: done Chris@612: Chris@612: ldd /usr/lib/x86_64-linux-gnu/libpulse.so.0 || true Chris@612: Chris@612: add_dependencies() { Chris@612: Chris@612: local binary="$1" Chris@612: Chris@612: echo "ldd $binary yields:" Chris@612: ldd "$binary" Chris@612: Chris@612: for lib in $(ldd "$binary" | grep '=> [^ ]*/lib/' | \ Chris@612: sed 's/^.*=> //' | sed 's/ .*$//'); do Chris@612: Chris@612: base=$(basename "$lib") Chris@612: if grep -v '^#' sv-dependency-builds/linux/appimage/excludelist | Chris@612: grep -q "^$base$" ; then Chris@612: echo "excluding: $lib" Chris@612: continue Chris@612: fi Chris@612: Chris@612: target="$targetdir/usr/lib/$(basename $lib)" Chris@612: Chris@612: mkdir -p "$(dirname $target)" Chris@612: Chris@612: if [ ! -f "$target" ]; then Chris@612: Chris@612: cp -Lv "$lib" "$target" Chris@612: chmod +x "$target" Chris@612: Chris@612: add_dependencies "$lib" Chris@612: Chris@612: fi Chris@612: done Chris@612: } Chris@612: Chris@612: add_dependencies "$program" Chris@612: Chris@612: for p in $plugins ; do Chris@612: add_dependencies "$p.so" Chris@612: done Chris@612: Chris@612: qtplugins="gif icns ico jpeg tga tiff wbmp webp cocoa minimal offscreen xcb" Chris@612: qtlibdirs="/usr/lib/x86_64-linux-gnu/qt5 /usr/lib/x86_64-linux-gnu/qt /usr/lib/qt5 /usr/lib/qt" Chris@612: Chris@612: QTDIR=${QTDIR:-} Chris@612: if [ -n "$QTDIR" ]; then Chris@612: qtlibdirs="$QTDIR $qtlibdirs" Chris@612: fi Chris@612: Chris@612: for plug in $qtplugins; do Chris@612: for libdir in $qtlibdirs; do Chris@612: lib=$(find $libdir/plugins -name libq$plug.so -print 2>/dev/null || true) Chris@612: if [ -n "$lib" ]; then Chris@612: if [ -f "$lib" ]; then Chris@612: subdir=$(basename $(dirname $lib)) Chris@612: if [ t"$subdir" = t"plugins" ]; then Chris@612: subdir="" Chris@612: fi Chris@612: target="$targetdir/usr/lib/qt5/plugins/$subdir/$(basename $lib)" Chris@612: mkdir -p "$(dirname $target)" Chris@612: cp -v "$lib" "$target" Chris@612: chmod +x "$target" Chris@612: add_dependencies "$lib" Chris@612: break Chris@612: fi Chris@612: fi Chris@612: done Chris@612: done Chris@612: Chris@612: cp "$program.desktop" "$targetdir/" Chris@612: Chris@617: cp "icons/$program-icon.svg" "$targetdir/$program-icon.svg" Chris@612: Chris@612: cp "deploy/linux/AppRun" "$targetdir/" Chris@612: Chris@612: chmod +x "$targetdir/AppRun" Chris@612: Chris@612: # Do this with a separate extraction step, so as to make it work even Chris@612: # in situations where FUSE is unavailable like in a Docker container Chris@612: export ARCH=x86_64 Chris@612: sv-dependency-builds/linux/appimage/appimagetool-x86_64.AppImage --appimage-extract Chris@612: ./squashfs-root/AppRun "$targetdir" "Tony-$version-x86_64.AppImage" Chris@612: