# HG changeset patch # User Chris Cannam # Date 1582808316 0 # Node ID ddfd13c435194d4b98b59b088fccbfe9cf3356de # Parent 52d2358b2cccebc2ae6d279440792620c8db891f Aim to build an AppImage diff -r 52d2358b2ccc -r ddfd13c43519 .hgignore --- a/.hgignore Thu Feb 27 12:51:04 2020 +0000 +++ b/.hgignore Thu Feb 27 12:58:36 2020 +0000 @@ -49,3 +49,4 @@ Dockerfile.gen plugins.zip get-version +output.tar diff -r 52d2358b2ccc -r ddfd13c43519 deploy/linux/AppRun --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deploy/linux/AppRun Thu Feb 27 12:58:36 2020 +0000 @@ -0,0 +1,26 @@ +#!/bin/sh + +mydir=$(dirname "$0") +case "$mydir" in + /*) ;; + *) mydir="$PWD/$mydir";; +esac + +echo "AppImage root is $mydir" + +PATH="$mydir/usr/bin:$mydir/bin:$PATH" +export PATH + +LD_LIBRARY_PATH="$mydir/usr/lib:$mydir/usr/lib/x86_64-linux-gnu:$mydir/usr/lib64:$LD_LIBRARY_PATH" +export LD_LIBRARY_PATH + +QT_PLUGIN_PATH="$mydir/usr/lib/qt5/plugins/:$mydir/usr/lib/x86_64-linux-gnu/qt5/plugins/:$mydir/usr/lib64/qt5/plugins/:$QT_PLUGIN_PATH" +export QT_PLUGIN_PATH + +XDG_DATA_DIRS="$mydir/usr/share:$XDG_DATA_DIRS:/usr/local/share:/usr/share" +export XDG_DATA_DIRS + +GSETTINGS_SCHEMA_DIR="$mydir/usr/share/glib-2.0/schemas:$GSETTINGS_SCHEMA_DIR" +export GSETTINGS_SCHEMA_DIR + +exec "$mydir/usr/bin/vamp-plugin-pack-installer" "$@" diff -r 52d2358b2ccc -r ddfd13c43519 deploy/linux/build-and-test.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deploy/linux/build-and-test.sh Thu Feb 27 12:58:36 2020 +0000 @@ -0,0 +1,46 @@ +#!/bin/bash +# +# Docker required + +set -eu + +current=$(hg id | awk '{ print $1; }') + +case "$current" in + *+) echo "ERROR: Current working copy has been modified - unmodified copy required so we know we can check it out separately and obtain the same contents"; exit 2;; + *);; +esac + +echo +echo "Building appimage from revision $current..." + +dockerdir=deploy/linux/docker + +cat "$dockerdir"/Dockerfile.in | \ + perl -p -e "s/\[\[REVISION\]\]/$current/g" > \ + "$dockerdir"/Dockerfile.gen + +cat "$dockerdir"/Dockerfile_test.in | \ + perl -p -e "s/\[\[REVISION\]\]/$current/g" > \ + "$dockerdir"/Dockerfile_test.gen + +fgrep 'hg.sr.ht' ~/.ssh/known_hosts > "$dockerdir"/known_hosts +cp ~/.ssh/id_rsa_build "$dockerdir"/id_rsa_build +chmod 600 "$dockerdir"/known_hosts "$dockerdir"/id_rsa_build +trap "rm $dockerdir/known_hosts $dockerdir/id_rsa_build" 0 + +dockertag="cannam/vamp-plugin-pack-installer-$current" + +sudo docker build -t "$dockertag" -f "$dockerdir"/Dockerfile.gen "$dockerdir" + +outdir="$dockerdir/output" +mkdir -p "$outdir" + +container=$(sudo docker create "$dockertag") + +sudo docker cp "$container":output.tar "$outdir" +sudo docker rm "$container" + +( cd "$outdir" ; tar xf output.tar && rm -f output.tar ) + +sudo docker build -f "$dockerdir"/Dockerfile_test.gen "$dockerdir" diff -r 52d2358b2ccc -r ddfd13c43519 deploy/linux/build-docker.sh --- a/deploy/linux/build-docker.sh Thu Feb 27 12:51:04 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -#!/bin/bash -# -# Docker required - -set -eu - -current=$(hg id | awk '{ print $1; }') - -case "$current" in - *+) echo "ERROR: Current working copy has been modified - unmodified copy required so we know we can check it out separately and obtain the same contents"; exit 2;; - *);; -esac - -echo -echo "Building from revision $current..." - -dockerdir=deploy/linux/docker - -cat "$dockerdir"/Dockerfile.in | \ - perl -p -e "s/\[\[REVISION\]\]/$current/g" > \ - "$dockerdir"/Dockerfile.gen - -fgrep 'hg.sr.ht' ~/.ssh/known_hosts > "$dockerdir"/known_hosts -cp ~/.ssh/id_rsa_build "$dockerdir"/id_rsa_build -chmod 600 "$dockerdir"/known_hosts "$dockerdir"/id_rsa_build -trap "rm $dockerdir/known_hosts $dockerdir/id_rsa_build" 0 - -dockertag="cannam/vamp-plugin-pack-installer-$current" - -sudo docker build -t "$dockertag" -f "$dockerdir"/Dockerfile.gen "$dockerdir" - -outdir="$dockerdir/output" -mkdir -p "$outdir" - -container=$(sudo docker create "$dockertag") - -sudo docker cp "$container":output.tar "$outdir" -sudo docker rm "$container" - -( cd "$outdir" ; tar xf output.tar && rm -f output.tar ) diff -r 52d2358b2ccc -r ddfd13c43519 deploy/linux/deploy-appimage.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deploy/linux/deploy-appimage.sh Thu Feb 27 12:58:36 2020 +0000 @@ -0,0 +1,112 @@ +#!/bin/bash + +set -eu + +program=vamp-plugin-pack-installer + +get_id() { + if [ -d .hg ]; then + hg id | sed 's/[+ ].*$//' + elif [ -d .git ]; then + git rev-parse --short HEAD + else + echo "WARNING: can't figure out revision from VCS metadata" 1>&2 + echo "unknown" + fi +} + +version=$(get_id) + +targetdir="${program}.AppDir" + +echo "Target dir is $targetdir" + +if [ -d "$targetdir" ]; then + echo "Target directory exists, not overwriting" + exit +fi + +mkdir "$targetdir" + +mkdir -p "$targetdir"/usr/bin +mkdir -p "$targetdir"/usr/lib + +cp "$program" "$targetdir"/usr/bin/ + +add_dependencies() { + + local binary="$1" + + echo "ldd $binary yields:" + ldd "$binary" + + for lib in $(ldd "$binary" | grep '=> [^ ]*/lib/' | \ + sed 's/^.*=> //' | sed 's/ .*$//'); do + + base=$(basename "$lib") + if grep -v '^#' sv-dependency-builds/linux/appimage/excludelist | + grep -q "^$base$" ; then + echo "excluding: $lib" + continue + fi + + target="$targetdir/usr/lib/$(basename $lib)" + + mkdir -p "$(dirname $target)" + + if [ ! -f "$target" ]; then + + cp -Lv "$lib" "$target" + chmod +x "$target" + + add_dependencies "$lib" + + fi + done +} + +add_dependencies "$program" + +qtplugins="gif icns ico jpeg tga tiff wbmp webp cocoa minimal offscreen xcb" +qtlibdirs="/usr/lib/x86_64-linux-gnu/qt5 /usr/lib/x86_64-linux-gnu/qt /usr/lib/qt5 /usr/lib/qt" + +QTDIR=${QTDIR:-} +if [ -n "$QTDIR" ]; then + qtlibdirs="$QTDIR $qtlibdirs" +fi + +for plug in $qtplugins; do + for libdir in $qtlibdirs; do + lib=$(find $libdir/plugins -name libq$plug.so -print 2>/dev/null || true) + if [ -n "$lib" ]; then + if [ -f "$lib" ]; then + subdir=$(basename $(dirname $lib)) + if [ t"$subdir" = t"plugins" ]; then + subdir="" + fi + target="$targetdir/usr/lib/qt5/plugins/$subdir/$(basename $lib)" + mkdir -p "$(dirname $target)" + cp -v "$lib" "$target" + chmod +x "$target" + add_dependencies "$lib" + break + fi + fi + done +done + +cp "$program.desktop" "$targetdir/" + +cp "icons/scalable/sv-icon.svg" "$targetdir/" +cp "icons/scalable/sv-icon.svg" "$targetdir/vamp-plugin-pack-installer.svg" + +cp "deploy/linux/AppRun" "$targetdir/" + +chmod +x "$targetdir/AppRun" + +# Do this with a separate extraction step, so as to make it work even +# in situations where FUSE is unavailable like in a Docker container +export ARCH=x86_64 +sv-dependency-builds/linux/appimage/appimagetool-x86_64.AppImage --appimage-extract +./squashfs-root/AppRun "$targetdir" "VampPluginPackInstaller-$version-x86_64.AppImage" + diff -r 52d2358b2ccc -r ddfd13c43519 deploy/linux/docker/Dockerfile.in --- a/deploy/linux/docker/Dockerfile.in Thu Feb 27 12:51:04 2020 +0000 +++ b/deploy/linux/docker/Dockerfile.in Thu Feb 27 12:58:36 2020 +0000 @@ -61,4 +61,5 @@ RUN qmake -r RUN make -j3 -RUN tar cvf output.tar vamp-plugin-pack-installer && cp output.tar .. +RUN deploy/linux/deploy-appimage.sh +RUN tar cvf output.tar *.AppImage && cp output.tar .. diff -r 52d2358b2ccc -r ddfd13c43519 deploy/linux/docker/Dockerfile_test.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deploy/linux/docker/Dockerfile_test.in Thu Feb 27 12:58:36 2020 +0000 @@ -0,0 +1,15 @@ +FROM centos:7 + +# Ensure that everything subsequent is re-run when a new revision is +# being built (rather than being cached) - so as to avoid potential +# mismatches between results of yum update and the package dependency +# installation itself +RUN echo [[REVISION]] + +RUN yum -y update +RUN yum -y groupinstall "X Window System" +RUN yum -y install wget +ADD output/VampPluginPackInstaller-[[REVISION]]-x86_64.AppImage Pack.AppImage +RUN chmod +x Pack.AppImage +RUN ./Pack.AppImage --appimage-extract +RUN ./squashfs-root/AppRun --version