Skip to content

Commit 9ce1d78

Browse files
authored
Add Support for Typelib Packaging (#33)
* Add support for installing girepository typelibs This allows for apps that use other language bindings to be packaged using linuxdeploy. For example, PyGObject uses the typelibs to introspect bindings for Python. * Add additional default pkg-config locations Use default locations for Ubuntu in case libgtk-3-dev and librsvg2-dev are not installed. A Python app wouldn't normally require these dependencies, so use default values as a fallback during packaging for linuxdeploy. * Fix failure if symbolic links already exist * Fix gobject-introspection-1.0 library not found The default typelib directory was incorrectly pointing to a location for rpm based distros which was causing CI to fail with a library not found error. * Add additional dependencies to test typelibs * Update dependencies for GTK4 to include typelibs
1 parent 901a3d3 commit 9ce1d78

File tree

10 files changed

+38
-24
lines changed

10 files changed

+38
-24
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
- name: Setup dependencies
1919
run: |
2020
sudo apt-get update -y -qq
21-
sudo apt-get install -y -qq libgtk-3-0 libgtk-3-dev wget tree
21+
sudo apt-get install -y -qq libgtk-3-0 libgtk-3-dev gir1.2-gtk-3.0 wget tree
2222
2323
- name: Download external binairies
2424
run: |

containers/gtk3/Dockerfile.debian

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ ARG APPDIR=/AppDir
66
ARG TZ=UTC
77
RUN ln -snf "/usr/share/zoneinfo/$TZ" "/etc/localtime" && echo "$TZ" > /etc/timezone
88
RUN apt-get update && \
9-
apt-get install -y wget librsvg2-dev file findutils pkg-config libgtk-3-0 libgtk-3-dev gtk-3-examples
9+
apt-get install -y wget librsvg2-dev file findutils pkg-config libgtk-3-0 \
10+
libgtk-3-dev gtk-3-examples gir1.2-gtk-3.0
1011
COPY . .
1112
ADD "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" .
1213
RUN chmod +x *.sh *.AppImage

containers/gtk3/Dockerfile.fedora

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ FROM docker.io/fedora:latest AS build-stage
22
WORKDIR /linuxdeploy
33
ENV APPIMAGE_EXTRACT_AND_RUN=1
44
ARG APPDIR=/AppDir
5-
RUN dnf install -y wget librsvg2-devel file findutils pkgconfig gtk3 gtk3-devel
5+
RUN dnf install -y wget librsvg2-devel file findutils pkgconfig gtk3 gtk3-devel \
6+
gobject-introspection-devel
67
COPY . .
78
ADD "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" .
89
RUN chmod +x *.sh *.AppImage

containers/gtk3/Dockerfile.opensuse

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ FROM docker.io/opensuse/leap:15 AS build-stage
22
WORKDIR /linuxdeploy
33
ENV APPIMAGE_EXTRACT_AND_RUN=1
44
ARG APPDIR=/AppDir
5-
RUN zypper install -y wget librsvg2-devel file findutils pkg-config gtk3 gtk3-devel
5+
RUN zypper install -y wget librsvg2-devel file findutils pkg-config gtk3 gtk3-devel \
6+
typelib-1_0-Gtk-3_0 gobject-introspection-devel
67
COPY . .
78
ADD "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" .
89
RUN chmod +x *.sh *.AppImage

containers/gtk3/Dockerfile.ubuntu

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ ARG APPDIR=/AppDir
66
ARG TZ=UTC
77
RUN ln -snf "/usr/share/zoneinfo/$TZ" "/etc/localtime" && echo "$TZ" > /etc/timezone
88
RUN apt-get update && \
9-
apt-get install -y wget librsvg2-dev file findutils pkg-config libgtk-3-0 libgtk-3-dev gtk-3-examples
9+
apt-get install -y wget librsvg2-dev file findutils pkg-config libgtk-3-0 \
10+
libgtk-3-dev gtk-3-examples gir1.2-gtk-3.0
1011
COPY . .
1112
ADD "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" .
1213
RUN chmod +x *.sh *.AppImage

containers/gtk4/Dockerfile.debian

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ ARG TZ=UTC
88
RUN ln -snf "/usr/share/zoneinfo/$TZ" "/etc/localtime" && echo "$TZ" > /etc/timezone
99
RUN apt-get update && \
1010
apt-get install -y wget librsvg2-dev file findutils pkg-config && \
11-
apt-get install -y -t experimental libgtk-4-1 libgtk-4-dev gtk-4-examples
11+
apt-get install -y -t experimental libgtk-4-1 libgtk-4-dev gtk-4-examples gir1.2-gtk-4.0
1212
COPY . .
1313
ADD "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" .
1414
RUN chmod +x *.sh *.AppImage

containers/gtk4/Dockerfile.fedora

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ FROM docker.io/fedora:latest AS build-stage
22
WORKDIR /linuxdeploy
33
ENV APPIMAGE_EXTRACT_AND_RUN=1
44
ARG APPDIR=/AppDir
5-
RUN dnf install -y wget librsvg2-devel file findutils pkgconfig gtk4 gtk4-devel gtk4-devel-tools
5+
RUN dnf install -y wget librsvg2-devel file findutils pkgconfig gtk4 gtk4-devel gtk4-devel-tools \
6+
gobject-introspection-devel
67
COPY . .
78
ADD "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" .
89
RUN chmod +x *.sh *.AppImage

containers/gtk4/Dockerfile.opensuse

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ FROM docker.io/opensuse/tumbleweed:latest AS build-stage
33
WORKDIR /linuxdeploy
44
ENV APPIMAGE_EXTRACT_AND_RUN=1
55
ARG APPDIR=/AppDir
6-
RUN zypper install -y wget librsvg2-devel file findutils pkg-config gtk4 gtk4-devel
6+
RUN zypper install -y wget librsvg2-devel file findutils pkg-config gtk4 gtk4-devel \
7+
typelib-1_0-Gtk-4_0 gobject-introspection-devel
78
COPY . .
89
ADD "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" .
910
RUN chmod +x *.sh *.AppImage

containers/gtk4/Dockerfile.ubuntu

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ ARG APPDIR=/AppDir
66
ARG TZ=UTC
77
RUN ln -snf "/usr/share/zoneinfo/$TZ" "/etc/localtime" && echo "$TZ" > /etc/timezone
88
RUN apt-get update && \
9-
apt-get install -y wget librsvg2-dev file findutils pkg-config libgtk-4-1 libgtk-4-dev gtk-4-examples
9+
apt-get install -y wget librsvg2-dev file findutils pkg-config libgtk-4-1 \
10+
libgtk-4-dev gtk-4-examples gir1.2-gtk-4.0
1011
COPY . .
1112
ADD "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" .
1213
RUN chmod +x *.sh *.AppImage

linuxdeploy-plugin-gtk.sh

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -194,18 +194,25 @@ cat >> "$HOOKFILE" <<EOF
194194
export GSETTINGS_SCHEMA_DIR="\$APPDIR/$glib_schemasdir"
195195
EOF
196196

197+
echo "Installing GIRepository Typelibs"
198+
gi_typelibsdir="$(get_pkgconf_variable "typelibdir" "gobject-introspection-1.0" "/usr/lib/x86_64-linux-gnu/girepository-1.0")"
199+
copy_tree "$gi_typelibsdir" "$APPDIR/"
200+
cat >> "$HOOKFILE" <<EOF
201+
export GI_TYPELIB_PATH="\$APPDIR/$gi_typelibsdir"
202+
EOF
203+
197204
case "$DEPLOY_GTK_VERSION" in
198205
2)
199206
# https://github.com/linuxdeploy/linuxdeploy-plugin-gtk/pull/20#issuecomment-826354261
200207
echo "WARNING: Gtk+2 applications are not fully supported by this plugin"
201208
;;
202209
3)
203210
echo "Installing GTK 3.0 modules"
204-
gtk3_exec_prefix="$(get_pkgconf_variable "exec_prefix" "gtk+-3.0")"
205-
gtk3_libdir="$(get_pkgconf_variable "libdir" "gtk+-3.0")/gtk-3.0"
211+
gtk3_exec_prefix="$(get_pkgconf_variable "exec_prefix" "gtk+-3.0" "/usr")"
212+
gtk3_libdir="$(get_pkgconf_variable "libdir" "gtk+-3.0" "/usr/lib/x86_64-linux-gnu")/gtk-3.0"
206213
gtk3_path="$gtk3_libdir/modules"
207-
gtk3_immodulesdir="$gtk3_libdir/$(get_pkgconf_variable "gtk_binary_version" "gtk+-3.0")/immodules"
208-
gtk3_printbackendsdir="$gtk3_libdir/$(get_pkgconf_variable "gtk_binary_version" "gtk+-3.0")/printbackends"
214+
gtk3_immodulesdir="$gtk3_libdir/$(get_pkgconf_variable "gtk_binary_version" "gtk+-3.0" "3.0.0")/immodules"
215+
gtk3_printbackendsdir="$gtk3_libdir/$(get_pkgconf_variable "gtk_binary_version" "gtk+-3.0" "3.0.0")/printbackends"
209216
gtk3_immodules_cache_file="$(dirname "$gtk3_immodulesdir")/immodules.cache"
210217
gtk3_immodules_query="$(search_tool "gtk-query-immodules-3.0" "libgtk-3-0")"
211218
copy_tree "$gtk3_libdir" "$APPDIR/"
@@ -244,10 +251,10 @@ EOF
244251
esac
245252

246253
echo "Installing GDK PixBufs"
247-
gdk_libdir="$(get_pkgconf_variable "libdir" "gdk-pixbuf-2.0")"
248-
gdk_pixbuf_binarydir="$(get_pkgconf_variable "gdk_pixbuf_binarydir" "gdk-pixbuf-2.0")"
249-
gdk_pixbuf_cache_file="$(get_pkgconf_variable "gdk_pixbuf_cache_file" "gdk-pixbuf-2.0")"
250-
gdk_pixbuf_moduledir="$(get_pkgconf_variable "gdk_pixbuf_moduledir" "gdk-pixbuf-2.0")"
254+
gdk_libdir="$(get_pkgconf_variable "libdir" "gdk-pixbuf-2.0" "/usr/lib/x86_64-linux-gnu")"
255+
gdk_pixbuf_binarydir="$(get_pkgconf_variable "gdk_pixbuf_binarydir" "gdk-pixbuf-2.0" "$gdk_libdir""/gdk-pixbuf-2.0/2.10.0")"
256+
gdk_pixbuf_cache_file="$(get_pkgconf_variable "gdk_pixbuf_cache_file" "gdk-pixbuf-2.0" "$gdk_pixbuf_binarydir""/loaders.cache")"
257+
gdk_pixbuf_moduledir="$(get_pkgconf_variable "gdk_pixbuf_moduledir" "gdk-pixbuf-2.0" "$gdk_pixbuf_binarydir""/loaders")"
251258
# Note: gdk_pixbuf_query_loaders variable is not defined on some systems
252259
gdk_pixbuf_query="$(search_tool "gdk-pixbuf-query-loaders" "gdk-pixbuf-2.0")"
253260
copy_tree "$gdk_pixbuf_binarydir" "$APPDIR/"
@@ -266,12 +273,12 @@ fi
266273
sed -i "s|$gdk_pixbuf_moduledir/||g" "$APPDIR/$gdk_pixbuf_cache_file"
267274

268275
echo "Copying more libraries"
269-
gobject_libdir="$(get_pkgconf_variable "libdir" "gobject-2.0")"
270-
gio_libdir="$(get_pkgconf_variable "libdir" "gio-2.0")"
271-
librsvg_libdir="$(get_pkgconf_variable "libdir" "librsvg-2.0")"
272-
pango_libdir="$(get_pkgconf_variable "libdir" "pango")"
273-
pangocairo_libdir="$(get_pkgconf_variable "libdir" "pangocairo")"
274-
pangoft2_libdir="$(get_pkgconf_variable "libdir" "pangoft2")"
276+
gobject_libdir="$(get_pkgconf_variable "libdir" "gobject-2.0" "/usr/lib/x86_64-linux-gnu")"
277+
gio_libdir="$(get_pkgconf_variable "libdir" "gio-2.0" "/usr/lib/x86_64-linux-gnu")"
278+
librsvg_libdir="$(get_pkgconf_variable "libdir" "librsvg-2.0" "/usr/lib/x86_64-linux-gnu")"
279+
pango_libdir="$(get_pkgconf_variable "libdir" "pango" "/usr/lib/x86_64-linux-gnu")"
280+
pangocairo_libdir="$(get_pkgconf_variable "libdir" "pangocairo" "/usr/lib/x86_64-linux-gnu")"
281+
pangoft2_libdir="$(get_pkgconf_variable "libdir" "pangoft2" "/usr/lib/x86_64-linux-gnu")"
275282
FIND_ARRAY=(
276283
"$gdk_libdir" "libgdk_pixbuf-*.so*"
277284
"$gobject_libdir" "libgobject-*.so*"
@@ -302,6 +309,6 @@ PATCH_ARRAY=(
302309
)
303310
for directory in "${PATCH_ARRAY[@]}"; do
304311
while IFS= read -r -d '' file; do
305-
ln $verbose -s "${file/\/usr\/lib\//}" "$APPDIR/usr/lib"
312+
ln $verbose -sf "${file/\/usr\/lib\//}" "$APPDIR/usr/lib"
306313
done < <(find "$directory" -name '*.so' -print0)
307314
done

0 commit comments

Comments
 (0)