From 75cfa247c8c94b9b4f096879fe7792beed2fbc2e Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 18 Mar 2023 11:02:15 +0800 Subject: [PATCH 1/5] Ensure /usr/lib64 isn't used inside final AppImage. --- linuxdeploy-plugin-gtk.sh | 48 +++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/linuxdeploy-plugin-gtk.sh b/linuxdeploy-plugin-gtk.sh index 8578f83..d49fe18 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///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")" @@ -298,7 +313,6 @@ pangocairo_libdir="$(get_pkgconf_variable "libdir" "pangocairo" "$LD_GTK_LIBRARY 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*" From 6c387c4a8f06423e7de75c66ed36c8b83fc054bb Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sun, 19 Mar 2023 08:42:45 +0800 Subject: [PATCH 2/5] Correct some additional lib64 paths. --- linuxdeploy-plugin-gtk.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linuxdeploy-plugin-gtk.sh b/linuxdeploy-plugin-gtk.sh index d49fe18..0be365b 100755 --- a/linuxdeploy-plugin-gtk.sh +++ b/linuxdeploy-plugin-gtk.sh @@ -70,7 +70,7 @@ copy_lib_tree() { local dst="${*:$#}" for elem in "${src[@]}"; do - mkdir -p "${dst::-1}${elem///usr/lib}" + 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 @@ -273,7 +273,7 @@ EOF copy_lib_tree "$gtk4_libdir" "$APPDIR/" cat >> "$HOOKFILE" < Date: Sun, 19 Mar 2023 08:44:52 +0800 Subject: [PATCH 3/5] Ensure path is quoted in case of spaces in path. --- linuxdeploy-plugin-gtk.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linuxdeploy-plugin-gtk.sh b/linuxdeploy-plugin-gtk.sh index 0be365b..5049a9f 100755 --- a/linuxdeploy-plugin-gtk.sh +++ b/linuxdeploy-plugin-gtk.sh @@ -71,7 +71,7 @@ copy_lib_tree() { for elem in "${src[@]}"; do mkdir -p "${dst::-1}${elem/$LD_GTK_LIBRARY_PATH//usr/lib}" - pushd $LD_GTK_LIBRARY_PATH + pushd "$LD_GTK_LIBRARY_PATH" cp "$(realpath --relative-to="$LD_GTK_LIBRARY_PATH" "$elem")" --archive --parents --target-directory="$dst/usr/lib" $verbose popd done From 7b1a2170265a53b7a9f6bed32a85bf0414d0bd29 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sun, 19 Mar 2023 09:54:38 +0800 Subject: [PATCH 4/5] Correct symlink path. --- linuxdeploy-plugin-gtk.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/linuxdeploy-plugin-gtk.sh b/linuxdeploy-plugin-gtk.sh index 5049a9f..61206fc 100755 --- a/linuxdeploy-plugin-gtk.sh +++ b/linuxdeploy-plugin-gtk.sh @@ -312,10 +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*" - "$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*" @@ -341,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 From a561eca8ab841269734aa7b98ee04cf1b67f002a Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sun, 19 Mar 2023 12:37:11 +0800 Subject: [PATCH 5/5] Include the trailing slash in the matching path for symlinks. --- linuxdeploy-plugin-gtk.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linuxdeploy-plugin-gtk.sh b/linuxdeploy-plugin-gtk.sh index 61206fc..c506690 100755 --- a/linuxdeploy-plugin-gtk.sh +++ b/linuxdeploy-plugin-gtk.sh @@ -341,6 +341,6 @@ PATCH_ARRAY=( ) for directory in "${PATCH_ARRAY[@]}"; do while IFS= read -r -d '' file; do - ln $verbose -sf "${file/$LD_GTK_LIBRARY_PATH/}" "$APPDIR/usr/lib" + ln $verbose -sf "${file/$LD_GTK_LIBRARY_PATH\//}" "$APPDIR/usr/lib" done < <(find "$directory" -name '*.so' -print0) done