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
|