diff --git a/linuxdeploy-plugin-gtk.sh b/linuxdeploy-plugin-gtk.sh index 8578f83..c506690 100755 --- a/linuxdeploy-plugin-gtk.sh +++ b/linuxdeploy-plugin-gtk.sh @@ -62,6 +62,21 @@ copy_tree() { done } +copy_lib_tree() { + # The source lib directory could be /usr/lib, /usr/lib64, or /usr/lib/x86_64-linux-gnu + # Therefore, when copying lib directories, we need to transform that target path + # to a consistent /usr/lib + local src=("${@:1:$#-1}") + local dst="${*:$#}" + + for elem in "${src[@]}"; do + mkdir -p "${dst::-1}${elem/$LD_GTK_LIBRARY_PATH//usr/lib}" + pushd "$LD_GTK_LIBRARY_PATH" + cp "$(realpath --relative-to="$LD_GTK_LIBRARY_PATH" "$elem")" --archive --parents --target-directory="$dst/usr/lib" $verbose + popd + done +} + search_library_path() { PATH_ARRAY=( "/usr/lib/$(uname -m)-linux-gnu" @@ -213,9 +228,9 @@ EOF echo "Installing GIRepository Typelibs" gi_typelibsdir="$(get_pkgconf_variable "typelibdir" "gobject-introspection-1.0" "$LD_GTK_LIBRARY_PATH/girepository-1.0")" -copy_tree "$gi_typelibsdir" "$APPDIR/" +copy_lib_tree "$gi_typelibsdir" "$APPDIR/" cat >> "$HOOKFILE" <> "$HOOKFILE" < "$APPDIR/$gtk3_immodules_cache_file" + echo "Updating immodules cache in $APPDIR/${gtk3_immodules_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" + "$gtk3_immodules_query" > "$APPDIR/${gtk3_immodules_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" else echo "WARNING: gtk-query-immodules-3.0 not found" fi - if [ ! -f "$APPDIR/$gtk3_immodules_cache_file" ]; then + if [ ! -f "$APPDIR/${gtk3_immodules_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" ]; then echo "WARNING: immodules.cache file is missing" fi - sed -i "s|$gtk3_libdir/3.0.0/immodules/||g" "$APPDIR/$gtk3_immodules_cache_file" + sed -i "s|$gtk3_libdir/3.0.0/immodules/||g" "$APPDIR/${gtk3_immodules_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" ;; 4) echo "Installing GTK 4.0 modules" gtk4_exec_prefix="$(get_pkgconf_variable "exec_prefix" "gtk4" "/usr")" gtk4_libdir="$(get_pkgconf_variable "libdir" "gtk4")/gtk-4.0" gtk4_path="$gtk4_libdir" - copy_tree "$gtk4_libdir" "$APPDIR/" + copy_lib_tree "$gtk4_libdir" "$APPDIR/" cat >> "$HOOKFILE" <> "$HOOKFILE" < "$APPDIR/$gdk_pixbuf_cache_file" + echo "Updating pixbuf cache in $APPDIR/${gdk_pixbuf_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" + "$gdk_pixbuf_query" > "$APPDIR/${gdk_pixbuf_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" else echo "WARNING: gdk-pixbuf-query-loaders not found" fi -if [ ! -f "$APPDIR/$gdk_pixbuf_cache_file" ]; then +if [ ! -f "$APPDIR/${gdk_pixbuf_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" ]; then echo "WARNING: loaders.cache file is missing" fi -sed -i "s|$gdk_pixbuf_moduledir/||g" "$APPDIR/$gdk_pixbuf_cache_file" +sed -i "s|$gdk_pixbuf_moduledir/||g" "$APPDIR/${gdk_pixbuf_cache_file/$LD_GTK_LIBRARY_PATH//usr/lib}" echo "Copying more libraries" gobject_libdir="$(get_pkgconf_variable "libdir" "gobject-2.0" "$LD_GTK_LIBRARY_PATH")" @@ -297,11 +312,10 @@ pango_libdir="$(get_pkgconf_variable "libdir" "pango" "$LD_GTK_LIBRARY_PATH")" pangocairo_libdir="$(get_pkgconf_variable "libdir" "pangocairo" "$LD_GTK_LIBRARY_PATH")" pangoft2_libdir="$(get_pkgconf_variable "libdir" "pangoft2" "$LD_GTK_LIBRARY_PATH")" FIND_ARRAY=( - "$gdk_libdir" "libgdk_pixbuf-*.so*" - "$gdk_libdir" "libgdk-*.so*" - "$gobject_libdir" "libgobject-*.so*" - "$gio_libdir" "libgio-*.so*" - "$librsvg_libdir" "librsvg-*.so*" + "$gdk_libdir" "libgdk_pixbuf-*.so*" + "$gobject_libdir" "libgobject-*.so*" + "$gio_libdir" "libgio-*.so*" + "$librsvg_libdir" "librsvg-*.so*" "$pango_libdir" "libpango-*.so*" "$pangocairo_libdir" "libpangocairo-*.so*" "$pangoft2_libdir" "libpangoft2-*.so*" @@ -327,6 +341,6 @@ PATCH_ARRAY=( ) for directory in "${PATCH_ARRAY[@]}"; do while IFS= read -r -d '' file; do - ln $verbose -sf "${file/\/usr\/lib\//}" "$APPDIR/usr/lib" + ln $verbose -sf "${file/$LD_GTK_LIBRARY_PATH\//}" "$APPDIR/usr/lib" done < <(find "$directory" -name '*.so' -print0) done