Chris@371: #!/bin/bash Chris@371: Chris@371: set -eu Chris@371: Chris@371: program=sonic-annotator Chris@371: Chris@371: get_id() { Chris@371: if [ -d .hg ]; then Chris@371: hg id | sed 's/[+ ].*$//' Chris@371: elif [ -d .git ]; then Chris@371: git rev-parse --short HEAD Chris@371: else Chris@371: echo "WARNING: can't figure out revision from VCS metadata" 1>&2 Chris@371: echo "unknown" Chris@371: fi Chris@371: } Chris@371: Chris@371: version=$(get_id) Chris@371: Chris@371: targetdir="${program}.AppDir" Chris@371: Chris@371: echo "Target dir is $targetdir" Chris@371: Chris@371: if [ -d "$targetdir" ]; then Chris@371: echo "Target directory exists, not overwriting" Chris@371: exit Chris@371: fi Chris@371: Chris@371: mkdir "$targetdir" Chris@371: Chris@371: mkdir -p "$targetdir"/usr/bin Chris@371: mkdir -p "$targetdir"/usr/lib Chris@371: Chris@371: cp "$program" "$targetdir"/usr/bin/ Chris@371: Chris@371: add_dependencies() { Chris@371: Chris@371: local binary="$1" Chris@371: Chris@371: echo "ldd $binary yields:" Chris@371: ldd "$binary" Chris@371: Chris@371: for lib in $(ldd "$binary" | grep '=> [^ ]*/lib/' | \ Chris@371: sed 's/^.*=> //' | sed 's/ .*$//'); do Chris@371: Chris@371: base=$(basename "$lib") Chris@371: if grep -v '^#' sv-dependency-builds/linux/appimage/excludelist | Chris@371: grep -q "^$base$" ; then Chris@371: echo "excluding: $lib" Chris@371: continue Chris@371: fi Chris@371: Chris@371: target="$targetdir/usr/lib/$(basename $lib)" Chris@371: Chris@371: mkdir -p "$(dirname $target)" Chris@371: Chris@371: if [ ! -f "$target" ]; then Chris@371: Chris@371: cp -Lv "$lib" "$target" Chris@371: chmod +x "$target" Chris@371: Chris@371: add_dependencies "$lib" Chris@371: Chris@371: fi Chris@371: done Chris@371: } Chris@371: Chris@371: add_dependencies "$program" Chris@371: Chris@371: cp "deploy/linux/AppRun" "$targetdir/" Chris@371: Chris@371: chmod +x "$targetdir/AppRun" Chris@371: Chris@371: # Do this with a separate extraction step, so as to make it work even Chris@371: # in situations where FUSE is unavailable like in a Docker container Chris@371: export ARCH=x86_64 Chris@371: sv-dependency-builds/linux/appimage/appimagetool-x86_64.AppImage --appimage-extract Chris@371: ./squashfs-root/AppRun "$targetdir" "SonicAnnotator-$version-x86_64.AppImage" Chris@371: