annotate deploy/linux/deploy-appimage.sh @ 698:ee97c742d184 tip

Default branch is now named default on git as well as hg, in case we ever want to switch to mirroring in the other direction
author Chris Cannam
date Thu, 27 Aug 2020 15:58:43 +0100
parents b6c0c3e7ce99
children
rev   line source
Chris@612 1 #!/bin/bash
Chris@612 2
Chris@612 3 set -eu
Chris@612 4
Chris@612 5 program=tony
Chris@612 6 plugins="chp pyin"
Chris@612 7
Chris@612 8 get_id() {
Chris@612 9 if [ -d .hg ]; then
Chris@612 10 hg id | sed 's/[+ ].*$//'
Chris@612 11 elif [ -d .git ]; then
Chris@612 12 git rev-parse --short HEAD
Chris@612 13 else
Chris@612 14 echo "WARNING: can't figure out revision from VCS metadata" 1>&2
Chris@612 15 echo "unknown"
Chris@612 16 fi
Chris@612 17 }
Chris@612 18
Chris@612 19 version=$(get_id)
Chris@612 20
Chris@612 21 targetdir="${program}.AppDir"
Chris@612 22
Chris@612 23 echo "Target dir is $targetdir"
Chris@612 24
Chris@612 25 if [ -d "$targetdir" ]; then
Chris@612 26 echo "Target directory exists, not overwriting"
Chris@612 27 exit
Chris@612 28 fi
Chris@612 29
Chris@612 30 mkdir "$targetdir"
Chris@612 31
Chris@612 32 mkdir -p "$targetdir"/usr/bin
Chris@612 33 mkdir -p "$targetdir"/usr/lib/"$program"
Chris@612 34
Chris@612 35 cp "$program" "$targetdir"/usr/bin/
Chris@612 36
Chris@612 37 for p in $plugins ; do
Chris@612 38 cp "$p.so" "$targetdir"/usr/lib/"$program"/
Chris@612 39 done
Chris@612 40
Chris@612 41 ldd /usr/lib/x86_64-linux-gnu/libpulse.so.0 || true
Chris@612 42
Chris@612 43 add_dependencies() {
Chris@612 44
Chris@612 45 local binary="$1"
Chris@612 46
Chris@612 47 echo "ldd $binary yields:"
Chris@612 48 ldd "$binary"
Chris@612 49
Chris@612 50 for lib in $(ldd "$binary" | grep '=> [^ ]*/lib/' | \
Chris@612 51 sed 's/^.*=> //' | sed 's/ .*$//'); do
Chris@612 52
Chris@612 53 base=$(basename "$lib")
Chris@612 54 if grep -v '^#' sv-dependency-builds/linux/appimage/excludelist |
Chris@612 55 grep -q "^$base$" ; then
Chris@612 56 echo "excluding: $lib"
Chris@612 57 continue
Chris@612 58 fi
Chris@612 59
Chris@612 60 target="$targetdir/usr/lib/$(basename $lib)"
Chris@612 61
Chris@612 62 mkdir -p "$(dirname $target)"
Chris@612 63
Chris@612 64 if [ ! -f "$target" ]; then
Chris@612 65
Chris@612 66 cp -Lv "$lib" "$target"
Chris@612 67 chmod +x "$target"
Chris@612 68
Chris@612 69 add_dependencies "$lib"
Chris@612 70
Chris@612 71 fi
Chris@612 72 done
Chris@612 73 }
Chris@612 74
Chris@612 75 add_dependencies "$program"
Chris@612 76
Chris@612 77 for p in $plugins ; do
Chris@612 78 add_dependencies "$p.so"
Chris@612 79 done
Chris@612 80
Chris@612 81 qtplugins="gif icns ico jpeg tga tiff wbmp webp cocoa minimal offscreen xcb"
Chris@612 82 qtlibdirs="/usr/lib/x86_64-linux-gnu/qt5 /usr/lib/x86_64-linux-gnu/qt /usr/lib/qt5 /usr/lib/qt"
Chris@612 83
Chris@612 84 QTDIR=${QTDIR:-}
Chris@612 85 if [ -n "$QTDIR" ]; then
Chris@612 86 qtlibdirs="$QTDIR $qtlibdirs"
Chris@612 87 fi
Chris@612 88
Chris@612 89 for plug in $qtplugins; do
Chris@612 90 for libdir in $qtlibdirs; do
Chris@612 91 lib=$(find $libdir/plugins -name libq$plug.so -print 2>/dev/null || true)
Chris@612 92 if [ -n "$lib" ]; then
Chris@612 93 if [ -f "$lib" ]; then
Chris@612 94 subdir=$(basename $(dirname $lib))
Chris@612 95 if [ t"$subdir" = t"plugins" ]; then
Chris@612 96 subdir=""
Chris@612 97 fi
Chris@612 98 target="$targetdir/usr/lib/qt5/plugins/$subdir/$(basename $lib)"
Chris@612 99 mkdir -p "$(dirname $target)"
Chris@612 100 cp -v "$lib" "$target"
Chris@612 101 chmod +x "$target"
Chris@612 102 add_dependencies "$lib"
Chris@612 103 break
Chris@612 104 fi
Chris@612 105 fi
Chris@612 106 done
Chris@612 107 done
Chris@612 108
Chris@612 109 cp "$program.desktop" "$targetdir/"
Chris@612 110
Chris@617 111 cp "icons/$program-icon.svg" "$targetdir/$program-icon.svg"
Chris@612 112
Chris@612 113 cp "deploy/linux/AppRun" "$targetdir/"
Chris@612 114
Chris@612 115 chmod +x "$targetdir/AppRun"
Chris@612 116
Chris@612 117 # Do this with a separate extraction step, so as to make it work even
Chris@612 118 # in situations where FUSE is unavailable like in a Docker container
Chris@612 119 export ARCH=x86_64
Chris@612 120 sv-dependency-builds/linux/appimage/appimagetool-x86_64.AppImage --appimage-extract
Chris@612 121 ./squashfs-root/AppRun "$targetdir" "Tony-$version-x86_64.AppImage"
Chris@612 122