55
66if [ " $DEBUG " != " " ]; then
77 set -x
8+ verbose=" --verbose"
89fi
910
1011script=$( readlink -f " $0 " )
@@ -15,6 +16,15 @@ show_usage() {
1516 echo " Bundles resources for applications that use Gtk 2 or 3 into an AppDir"
1617}
1718
19+ copy_tree () {
20+ local src=(" ${@: 1: $# -1} " )
21+ local dst=" ${*: $# } "
22+
23+ for elem in " ${src[@]} " ; do
24+ cp " $elem " --archive --parents --target-directory=" $dst " $verbose
25+ done
26+ }
27+
1828APPDIR=
1929
2030while [ " $1 " != " " ]; do
4858
4959mkdir -p " $APPDIR "
5060
51- pushd " $APPDIR "
61+ if command -v pkgconf > /dev/null; then
62+ PKG_CONFIG=" pkgconf"
63+ elif command -v pkg-config > /dev/null; then
64+ PKG_CONFIG=" pkg-config"
65+ else
66+ echo " $0 : pkg-config/pkgconf not found in PATH, aborting"
67+ exit 1
68+ fi
69+
70+ echo " Installing AppRun hook"
71+ HOOKSDIR=" $APPDIR /apprun-hooks"
72+ HOOKFILE=" $HOOKSDIR /linuxdeploy-plugin-gtk.sh"
73+ mkdir -p " $HOOKSDIR "
74+ cat > " $HOOKFILE " << \EOF
75+ #! /bin/bash
76+
77+ gsettings get org.gnome.desktop.interface gtk-theme 2> /dev/null | grep -qi "dark" && GTK_THEME_VARIANT="dark" || GTK_THEME_VARIANT="light"
78+ APPIMAGE_GTK_THEME="${APPIMAGE_GTK_THEME:- " Adwaita:$GTK_THEME_VARIANT " } " # Allow user to override theme (discouraged)
79+ CACHEDIR="$( mktemp --tmpdir --directory .AppRun.XXXXXXXX) "
80+
81+ export APPDIR="${APPDIR:- " $( dirname " $( realpath " $0 " ) " ) " } " # Workaround to run extracted AppImage
82+ export GTK_DATA_PREFIX="$APPDIR "
83+ export GTK_THEME="$APPIMAGE_GTK_THEME " # Custom themes are broken
84+ export GDK_BACKEND=x11 # Crash with Wayland backend on Wayland
85+ EOF
86+
87+ echo " Installing GLib schemas"
88+ glib_schemasdir=" $( " $PKG_CONFIG " --variable=schemasdir gio-2.0) "
89+ [ -z " $glib_schemasdir " ] && glib_schemasdir=" /usr/share/glib-2.0/schemas" # Fix for Ubuntu 16.04
90+ copy_tree " $glib_schemasdir " " $APPDIR /"
91+ glib-compile-schemas " $APPDIR /$glib_schemasdir "
92+ cat >> " $HOOKFILE " << EOF
93+ export GSETTINGS_SCHEMA_DIR="\$ APPDIR/$glib_schemasdir "
94+ EOF
95+
96+ echo " Installing GTK 3.0 modules"
97+ gtk3_exec_prefix=" $( " $PKG_CONFIG " --variable=exec_prefix gtk+-3.0) "
98+ gtk3_libdir=" $( " $PKG_CONFIG " --variable=libdir gtk+-3.0) /gtk-3.0"
99+ gtk3_immodulesdir=" $gtk3_libdir /$( " $PKG_CONFIG " --variable=gtk_binary_version gtk+-3.0) /immodules"
100+ gtk3_immodules_cache_file=" $( dirname " $gtk3_immodulesdir " ) /immodules.cache"
101+ copy_tree " $gtk3_libdir " " $APPDIR /"
102+ cat >> " $HOOKFILE " << EOF
103+ export GTK_EXE_PREFIX="\$ APPDIR/$gtk3_exec_prefix "
104+ export GTK_PATH="\$ APPDIR/$gtk3_libdir "
105+ export GTK_IM_MODULE_DIR="\$ APPDIR/$gtk3_immodulesdir "
106+ export GTK_IM_MODULE_FILE="\$ CACHEDIR/immodules.cache"
107+ sed "s|$gtk3_libdir |\$ APPDIR/$gtk3_libdir |g" "\$ APPDIR/$gtk3_immodules_cache_file " > "\$ GTK_IM_MODULE_FILE"
108+ EOF
109+
110+ echo " Installing GDK PixBufs"
111+ gdk_libdir=" $( " $PKG_CONFIG " --variable=libdir gdk-pixbuf-2.0) "
112+ gdk_pixbuf_binarydir=" $( " $PKG_CONFIG " --variable=gdk_pixbuf_binarydir gdk-pixbuf-2.0) "
113+ gdk_pixbuf_cache_file=" $( " $PKG_CONFIG " --variable=gdk_pixbuf_cache_file gdk-pixbuf-2.0) "
114+ gdk_pixbuf_moduledir=" $( " $PKG_CONFIG " --variable=gdk_pixbuf_moduledir gdk-pixbuf-2.0) "
115+ copy_tree " $gdk_pixbuf_binarydir " " $APPDIR /"
116+ cat >> " $HOOKFILE " << EOF
117+ export GDK_PIXBUF_MODULEDIR="\$ APPDIR/$gdk_pixbuf_moduledir "
118+ export GDK_PIXBUF_MODULE_FILE="\$ CACHEDIR/loaders.cache"
119+ export LD_LIBRARY_PATH="\$ GDK_PIXBUF_MODULEDIR:\$ LD_LIBRARY_PATH"
120+ sed "s|$gdk_pixbuf_moduledir |\$ APPDIR/$gdk_pixbuf_moduledir |g" "\$ APPDIR/$gdk_pixbuf_cache_file " > "\$ GDK_PIXBUF_MODULE_FILE"
121+ EOF
52122
53- # source: https://github.com/AppImage/pkg2appimage/blob/3168d7ce787246feb697a950005fbffec0533def/legacy/pinta/Recipe#L41
54- mkdir -p usr/share/glib-2.0/schemas/
55- pushd usr/share/glib-2.0/schemas/
56- ln -s /usr/share/glib-2.0/schemas/gschemas.compiled .
57- popd
123+ echo " Copying more libraries"
124+ gobject_libdir=" $( " $PKG_CONFIG " --variable=libdir gobject-2.0) "
125+ gio_libdir=" $( " $PKG_CONFIG " --variable=libdir gio-2.0) "
126+ librsvg_libdir=" $( " $PKG_CONFIG " --variable=libdir librsvg-2.0) "
127+ cp $verbose \
128+ " $gdk_libdir /" libgdk_pixbuf* .so* \
129+ " $gobject_libdir /" libgobject* .so* \
130+ " $gio_libdir /" libgio* .so* \
131+ " $librsvg_libdir /" librsvg* .so* \
132+ " $APPDIR /usr/lib/"
133+ cat >> " $HOOKFILE " << EOF
134+ export LD_LIBRARY_PATH="\$ APPDIR/usr/lib:\$ LD_LIBRARY_PATH"
135+ EOF
0 commit comments