aboutsummaryrefslogtreecommitdiffstats
path: root/build-scripts/build-appimage
blob: 95b11e77635563f955bed663afb3ead4d303036f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash
#
# Any extra args are passed to the docker run command before the
# invocation of qpdfbuild. This is useful for iterating locally as
# described in README-maintainer.
#
set -ex
pushd appimage
docker build -t qpdfbuild .
rm -rf build
mkdir build
popd
git clone .git appimage/build/qpdf
docker run --privileged --rm \
       -v $PWD/appimage/build:/tmp/build ${1+"$@"} qpdfbuild
rm -rf distribution
mkdir distribution
cp -p appimage/build/qpdf/appimage/build/qpdf*AppImage* distribution
for i in distribution/*; do
    mv $i $(echo $i | sed -e 's/\.AppImage/-ci.AppImage/')
done
version=$(basename distribution/qpdf*AppImage | cut -d- -f 2)

# Smoke test the AppImage
app_image=$(echo distribution/qpdf*AppImage)
# Directly invoking the AppImage should behave like qpdf
${app_image} --version | grep -E "^qpdf version $version"
# Invoking the AppImage with a subcommand should behave like the subcommand
${app_image} qpdf --version | grep -E "^qpdf version $version"
${app_image} fix-qdf --version | grep -E "^fix-qdf from qpdf version $version"
${app_image} zlib-flate --version | grep -E "^zlib-flate from qpdf version $version"
# Symlinking a command to the AppImage should invoke as that command
mkdir appimage/build/argv0-test
pushd appimage/build/argv0-test
for i in qpdf fix-qdf zlib-flate; do
    ln -s ../../../${app_image} ./$i
done
./qpdf --version | grep -E "^qpdf version $version"
./fix-qdf --version | grep -E "^fix-qdf from qpdf version $version"
./zlib-flate --version | grep -E "^zlib-flate from qpdf version $version"
popd

# Extract a standalone copy of binaries and libraries from the
# AppImage. This is suitable for use in AWS Lambda, docker, or other
# self-contained environments. We are relying on the AppImage build to
# create an executable whose runpath is relative to the binary so that
# the extract zip file is relocatable.
${app_image} --appimage-extract
D=$PWD/distribution
for i in qpdf fix-qdf zlib-flate; do
    if ! (readelf -d squashfs-root/usr/bin/$i | \
              grep RUNPATH | grep -q -F ..); then
        echo "Standalone linux binary $i lacks relative RUNPATH"
        exit 2
    fi
done
(cd squashfs-root/usr; \
 zip -9 --symlinks $D/qpdf-$version-bin-linux-x86_64-ci.zip \
     bin/{qpdf,fix-qdf,zlib-flate} lib/*)

sha256sum distribution/*