Thanks to visit codestin.com
Credit goes to github.com

Skip to content

AppDir Inherits Host Filesystem Layout #44

Closed
@rmartin16

Description

@rmartin16

When a host filesystem installs GTK to directories outside of /usr/lib, those install locations are recreated within the AppDir. Since linuxdeploy only evaluates libraries, binaries, etc. under usr/lib in the AppDir, the GTK library (especially libgtk-#.so) may not be included in the output AppImage.

This plugin should copy these files in to usr/lib in the AppDir so linuxdeploy can include their dependencies.

For example, on Fedora 37, gtk3-devel installs to /usr/lib64.

Example Resulting AppDir Layout
build/helloworld/linux/appimage/Hello World.AppDir/
├── AppRun
├── apprun-hooks
│   └── linuxdeploy-plugin-gtk.sh
├── AppRun.wrapped -> usr/bin/com.example.helloworld
├── com.example.helloworld.desktop
├── com.example.helloworld.png -> usr/share/icons/hicolor/512x512/apps/com.example.helloworld.png
└── usr
    ├── app
    │   ├── helloworld
    │   │   ├── app.py
    │   │   ├── __init__.py
    │   │   ├── __main__.py
    │   │   └── resources
    │   │       ├── helloworld.icns
    │   │       ├── helloworld.ico
    │   │       ├── helloworld.png
    │   │       ├── __init__.py
    │   │       ├── newimage.ico
    │   │       ├── newimage.png
    │   │       └── newimage-square-192.png
    │   └── helloworld-0.0.1.dist-info
    │       ├── INSTALLER
    │       ├── METADATA
    │       ├── top_level.txt
    │       └── WHEEL
    ├── app_packages
    │   ├── cairo
    │   │   ├── _cairo.cpython-310-x86_64-linux-gnu.so
    │   │   ├── include
    │   │   │   └── py3cairo.h
    │   │   ├── __init__.py
    │   │   ├── __init__.pyi
    │   │   └── py.typed
    │   ├── gbulb
    │   │   ├── glib_events.py
    │   │   ├── gtk.py
    │   │   ├── __init__.py
    │   │   ├── transports.py
    │   │   └── utils.py
    │   ├── gbulb-0.6.4.dist-info
    │   │   ├── INSTALLER
    │   │   ├── LICENSE
    │   │   ├── METADATA
    │   │   ├── RECORD
    │   │   ├── top_level.txt
    │   │   └── WHEEL
    │   ├── gi
    │   │   ├── _constants.py
    │   │   ├── docstring.py
    │   │   ├── _error.py
    │   │   ├── _gi_cairo.cpython-310-x86_64-linux-gnu.so
    │   │   ├── _gi.cpython-310-x86_64-linux-gnu.so
    │   │   ├── _gtktemplate.py
    │   │   ├── importer.py
    │   │   ├── __init__.py
    │   │   ├── module.py
    │   │   ├── _option.py
    │   │   ├── _ossighelper.py
    │   │   ├── overrides
    │   │   │   ├── GdkPixbuf.py
    │   │   │   ├── Gdk.py
    │   │   │   ├── GIMarshallingTests.py
    │   │   │   ├── Gio.py
    │   │   │   ├── GLib.py
    │   │   │   ├── GObject.py
    │   │   │   ├── Gtk.py
    │   │   │   ├── __init__.py
    │   │   │   ├── keysyms.py
    │   │   │   └── Pango.py
    │   │   ├── _propertyhelper.py
    │   │   ├── pygtkcompat.py
    │   │   ├── repository
    │   │   │   └── __init__.py
    │   │   ├── _signalhelper.py
    │   │   └── types.py
    │   ├── include
    │   │   └── pygobject-3.0
    │   │       └── pygobject.h
    │   ├── pycairo-1.23.0.dist-info
    │   │   ├── COPYING
    │   │   ├── COPYING-LGPL-2.1
    │   │   ├── COPYING-MPL-1.1
    │   │   ├── INSTALLER
    │   │   ├── METADATA
    │   │   ├── RECORD
    │   │   ├── top_level.txt
    │   │   └── WHEEL
    │   ├── PyGObject-3.42.2.dist-info
    │   │   ├── COPYING
    │   │   ├── INSTALLER
    │   │   ├── METADATA
    │   │   ├── RECORD
    │   │   ├── top_level.txt
    │   │   └── WHEEL
    │   ├── pygtkcompat
    │   │   ├── generictreemodel.py
    │   │   ├── __init__.py
    │   │   └── pygtkcompat.py
    │   ├── toga
    │   │   ├── app.py
    │   │   ├── colors.py
    │   │   ├── command.py
    │   │   ├── constants
    │   │   │   └── __init__.py
    │   │   ├── documents.py
    │   │   ├── fonts.py
    │   │   ├── handlers.py
    │   │   ├── hardware
    │   │   │   └── __init__.py
    │   │   ├── icons.py
    │   │   ├── images.py
    │   │   ├── __init__.py
    │   │   ├── keys.py
    │   │   ├── platform.py
    │   │   ├── resources
    │   │   │   ├── __init__.py
    │   │   │   ├── toga.icns
    │   │   │   ├── toga.ico
    │   │   │   └── toga.png
    │   │   ├── sources
    │   │   │   ├── accessors.py
    │   │   │   ├── base.py
    │   │   │   ├── __init__.py
    │   │   │   ├── list_source.py
    │   │   │   ├── tree_source.py
    │   │   │   └── value_source.py
    │   │   ├── style
    │   │   │   ├── applicator.py
    │   │   │   ├── __init__.py
    │   │   │   └── pack.py
    │   │   ├── validators.py
    │   │   ├── widgets
    │   │   │   ├── activityindicator.py
    │   │   │   ├── base.py
    │   │   │   ├── box.py
    │   │   │   ├── button.py
    │   │   │   ├── canvas.py
    │   │   │   ├── datepicker.py
    │   │   │   ├── detailedlist.py
    │   │   │   ├── divider.py
    │   │   │   ├── imageview.py
    │   │   │   ├── __init__.py
    │   │   │   ├── label.py
    │   │   │   ├── multilinetextinput.py
    │   │   │   ├── navigationview.py
    │   │   │   ├── numberinput.py
    │   │   │   ├── optioncontainer.py
    │   │   │   ├── passwordinput.py
    │   │   │   ├── progressbar.py
    │   │   │   ├── scrollcontainer.py
    │   │   │   ├── selection.py
    │   │   │   ├── slider.py
    │   │   │   ├── splitcontainer.py
    │   │   │   ├── switch.py
    │   │   │   ├── table.py
    │   │   │   ├── textinput.py
    │   │   │   ├── timepicker.py
    │   │   │   ├── tree.py
    │   │   │   └── webview.py
    │   │   └── window.py
    │   ├── toga_core-0.3.0.dist-info
    │   │   ├── INSTALLER
    │   │   ├── METADATA
    │   │   ├── RECORD
    │   │   ├── top_level.txt
    │   │   └── WHEEL
    │   ├── toga_gtk
    │   │   ├── app.py
    │   │   ├── colors.py
    │   │   ├── command.py
    │   │   ├── dialogs.py
    │   │   ├── documents.py
    │   │   ├── factory.py
    │   │   ├── fonts.py
    │   │   ├── hardware
    │   │   │   └── __init__.py
    │   │   ├── icons.py
    │   │   ├── images.py
    │   │   ├── __init__.py
    │   │   ├── keys.py
    │   │   ├── libs
    │   │   │   ├── gtk.py
    │   │   │   ├── __init__.py
    │   │   │   ├── styles.py
    │   │   │   └── utils.py
    │   │   ├── paths.py
    │   │   ├── widgets
    │   │   │   ├── activityindicator.py
    │   │   │   ├── base.py
    │   │   │   ├── box.py
    │   │   │   ├── button.py
    │   │   │   ├── canvas.py
    │   │   │   ├── detailedlist.py
    │   │   │   ├── divider.py
    │   │   │   ├── imageview.py
    │   │   │   ├── __init__.py
    │   │   │   ├── internal
    │   │   │   │   ├── buttons
    │   │   │   │   │   ├── base.py
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── refresh.py
    │   │   │   │   │   └── scroll.py
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── rows
    │   │   │   │   │   ├── base.py
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── scrollable.py
    │   │   │   │   │   └── texticon.py
    │   │   │   │   └── sourcetreemodel.py
    │   │   │   ├── label.py
    │   │   │   ├── multilinetextinput.py
    │   │   │   ├── numberinput.py
    │   │   │   ├── optioncontainer.py
    │   │   │   ├── passwordinput.py
    │   │   │   ├── progressbar.py
    │   │   │   ├── scrollcontainer.py
    │   │   │   ├── selection.py
    │   │   │   ├── slider.py
    │   │   │   ├── splitcontainer.py
    │   │   │   ├── switch.py
    │   │   │   ├── table.py
    │   │   │   ├── textinput.py
    │   │   │   ├── tree.py
    │   │   │   └── webview.py
    │   │   └── window.py
    │   ├── toga_gtk-0.3.0.dist-info
    │   │   ├── entry_points.txt
    │   │   ├── INSTALLER
    │   │   ├── METADATA
    │   │   ├── RECORD
    │   │   ├── REQUESTED
    │   │   ├── top_level.txt
    │   │   └── WHEEL
    │   ├── travertino
    │   │   ├── colors.py
    │   │   ├── constants.py
    │   │   ├── declaration.py
    │   │   ├── fonts.py
    │   │   ├── __init__.py
    │   │   ├── layout.py
    │   │   ├── node.py
    │   │   └── size.py
    │   └── travertino-0.1.3.dist-info
    │       ├── INSTALLER
    │       ├── LICENSE
    │       ├── METADATA
    │       ├── RECORD
    │       ├── top_level.txt
    │       └── WHEEL
    ├── bin
    │   └── com.example.helloworld
    ├── lib
    │   ├── libblkid.so.1
    │   ├── libbz2.so.1
    │   ├── libcairo-gobject.so.2
    │   ├── libcairo.so.2
    │   ├── libcrypt.so.1
    │   ├── libepoxy.so.0
    │   ├── libffi.so.6
    │   ├── libgdk-3.so
    │   ├── libgdk-3.so.0
    │   ├── libgdk-3.so.0.2200.30
    │   ├── libgdk_pixbuf-2.0.so
    │   ├── libgdk_pixbuf-2.0.so.0
    │   ├── libgdk_pixbuf-2.0.so.0.3612.0
    │   ├── libgdk-x11-2.0.so.0
    │   ├── libgdk-x11-2.0.so.0.2400.31
    │   ├── libgio-2.0.so
    │   ├── libgio-2.0.so.0
    │   ├── libgio-2.0.so.0.5600.1
    │   ├── libgirepository-1.0.so.1
    │   ├── libglib-2.0.so.0
    │   ├── libgmodule-2.0.so.0
    │   ├── libgobject-2.0.so
    │   ├── libgobject-2.0.so.0
    │   ├── libgobject-2.0.so.0.5600.1
    │   ├── libgraphite2.so.3
    │   ├── libmount.so.1
    │   ├── libpango-1.0.so
    │   ├── libpango-1.0.so.0
    │   ├── libpango-1.0.so.0.4200.3
    │   ├── libpangocairo-1.0.so
    │   ├── libpangocairo-1.0.so.0
    │   ├── libpangocairo-1.0.so.0.4200.3
    │   ├── libpangoft2-1.0.so
    │   ├── libpangoft2-1.0.so.0
    │   ├── libpangoft2-1.0.so.0.4200.3
    │   ├── libpcre.so.1
    │   ├── libpixbufloader-ani.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-ani.so
    │   ├── libpixbufloader-bmp.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-bmp.so
    │   ├── libpixbufloader-gif.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-gif.so
    │   ├── libpixbufloader-icns.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-icns.so
    │   ├── libpixbufloader-ico.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-ico.so
    │   ├── libpixbufloader-jasper.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-jasper.so
    │   ├── libpixbufloader-jpeg.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-jpeg.so
    │   ├── libpixbufloader-pnm.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-pnm.so
    │   ├── libpixbufloader-qtif.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-qtif.so
    │   ├── libpixbufloader-tga.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-tga.so
    │   ├── libpixbufloader-tiff.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-tiff.so
    │   ├── libpixbufloader-xbm.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-xbm.so
    │   ├── libpixbufloader-xpm.so -> /usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-xpm.so
    │   ├── libpixman-1.so.0
    │   ├── libpng15.so.15
    │   ├── libprintbackend-cloudprint.so -> /usr/lib64/gtk-3.0/3.0.0/printbackends/libprintbackend-cloudprint.so
    │   ├── libprintbackend-cups.so -> /usr/lib64/gtk-3.0/3.0.0/printbackends/libprintbackend-cups.so
    │   ├── libprintbackend-file.so -> /usr/lib64/gtk-3.0/3.0.0/printbackends/libprintbackend-file.so
    │   ├── libprintbackend-lpr.so -> /usr/lib64/gtk-3.0/3.0.0/printbackends/libprintbackend-lpr.so
    │   ├── libselinux.so.1
    │   ├── libwayland-client.so.0
    │   ├── libwayland-cursor.so.0
    │   ├── libwayland-egl.so.1
    │   ├── libXau.so.6
    │   ├── libxcb-render.so.0
    │   ├── libxcb-shm.so.0
    │   ├── libXcomposite.so.1
    │   ├── libXcursor.so.1
    │   ├── libXdamage.so.1
    │   ├── libXext.so.6
    │   ├── libXfixes.so.3
    │   ├── libXinerama.so.1
    │   ├── libXi.so.6
    │   ├── libxkbcommon.so.0
    │   ├── libXrandr.so.2
    │   └── libXrender.so.1
    ├── lib64
    │   ├── gdk-pixbuf-2.0
    │   │   └── 2.10.0
    │   │       ├── loaders
    │   │       │   ├── libpixbufloader-ani.so
    │   │       │   ├── libpixbufloader-bmp.so
    │   │       │   ├── libpixbufloader-gif.so
    │   │       │   ├── libpixbufloader-icns.so
    │   │       │   ├── libpixbufloader-ico.so
    │   │       │   ├── libpixbufloader-jasper.so
    │   │       │   ├── libpixbufloader-jpeg.so
    │   │       │   ├── libpixbufloader-pnm.so
    │   │       │   ├── libpixbufloader-qtif.so
    │   │       │   ├── libpixbufloader-tga.so
    │   │       │   ├── libpixbufloader-tiff.so
    │   │       │   ├── libpixbufloader-xbm.so
    │   │       │   └── libpixbufloader-xpm.so
    │   │       └── loaders.cache
    │   ├── girepository-1.0
    │   │   ├── Atk-1.0.typelib
    │   │   ├── Atspi-2.0.typelib
    │   │   ├── cairo-1.0.typelib
    │   │   ├── Colord-1.0.typelib
    │   │   ├── ColorHug-1.0.typelib
    │   │   ├── DBus-1.0.typelib
    │   │   ├── DBusGLib-1.0.typelib
    │   │   ├── fontconfig-2.0.typelib
    │   │   ├── freetype2-2.0.typelib
    │   │   ├── GDesktopEnums-3.0.typelib
    │   │   ├── Gdk-2.0.typelib
    │   │   ├── Gdk-3.0.typelib
    │   │   ├── GdkPixbuf-2.0.typelib
    │   │   ├── GdkX11-2.0.typelib
    │   │   ├── GdkX11-3.0.typelib
    │   │   ├── Gio-2.0.typelib
    │   │   ├── GIRepository-2.0.typelib
    │   │   ├── GL-1.0.typelib
    │   │   ├── GLib-2.0.typelib
    │   │   ├── GModule-2.0.typelib
    │   │   ├── GObject-2.0.typelib
    │   │   ├── Gst-1.0.typelib
    │   │   ├── GstBase-1.0.typelib
    │   │   ├── GstCheck-1.0.typelib
    │   │   ├── GstController-1.0.typelib
    │   │   ├── GstNet-1.0.typelib
    │   │   ├── Gtk-2.0.typelib
    │   │   ├── Gtk-3.0.typelib
    │   │   ├── GUsb-1.0.typelib
    │   │   ├── Json-1.0.typelib
    │   │   ├── libxml2-2.0.typelib
    │   │   ├── PackageKitGlib-1.0.typelib
    │   │   ├── Pango-1.0.typelib
    │   │   ├── PangoCairo-1.0.typelib
    │   │   ├── PangoFT2-1.0.typelib
    │   │   ├── PangoXft-1.0.typelib
    │   │   ├── Rest-0.7.typelib
    │   │   ├── RestExtras-0.7.typelib
    │   │   ├── Soup-2.4.typelib
    │   │   ├── SoupGNOME-2.4.typelib
    │   │   ├── win32-1.0.typelib
    │   │   ├── xfixes-4.0.typelib
    │   │   ├── xft-2.0.typelib
    │   │   ├── xlib-2.0.typelib
    │   │   └── xrandr-1.3.typelib
    │   └── gtk-3.0
    │       ├── 3.0.0
    │       │   ├── immodules
    │       │   ├── immodules.cache
    │       │   ├── printbackends
    │       │   │   ├── libprintbackend-cloudprint.so
    │       │   │   ├── libprintbackend-cups.so
    │       │   │   ├── libprintbackend-file.so
    │       │   │   └── libprintbackend-lpr.so
    │       │   └── theming-engines
    │       ├── immodules
    │       └── modules
    │           ├── libcanberra-gtk3-module.so
    │           ├── libcanberra-gtk-module.so -> libcanberra-gtk3-module.so
    │           └── libpk-gtk-module.so
    ├── python
    └── share
        ├── applications
        │   └── com.example.helloworld.desktop
        ├── glib-2.0
        │   └── schemas
        │       ├── gschema.dtd
        │       ├── gschemas.compiled
        │       ├── org.gnome.desktop.a11y.applications.gschema.xml
        │       ├── org.gnome.desktop.a11y.gschema.xml
        │       ├── org.gnome.desktop.a11y.keyboard.gschema.xml
        │       ├── org.gnome.desktop.a11y.magnifier.gschema.xml
        │       ├── org.gnome.desktop.a11y.mouse.gschema.xml
        │       ├── org.gnome.desktop.app-folders.gschema.xml
        │       ├── org.gnome.desktop.background.gschema.xml
        │       ├── org.gnome.desktop.calendar.gschema.xml
        │       ├── org.gnome.desktop.datetime.gschema.xml
        │       ├── org.gnome.desktop.default-applications.gschema.xml
        │       ├── org.gnome.desktop.enums.xml
        │       ├── org.gnome.desktop.input-sources.gschema.xml
        │       ├── org.gnome.desktop.interface.gschema.xml
        │       ├── org.gnome.desktop.lockdown.gschema.xml
        │       ├── org.gnome.desktop.media-handling.gschema.xml
        │       ├── org.gnome.desktop.notifications.gschema.xml
        │       ├── org.gnome.desktop.peripherals.gschema.xml
        │       ├── org.gnome.desktop.privacy.gschema.xml
        │       ├── org.gnome.desktop.screensaver.gschema.xml
        │       ├── org.gnome.desktop.search-providers.gschema.xml
        │       ├── org.gnome.desktop.session.gschema.xml
        │       ├── org.gnome.desktop.sound.gschema.xml
        │       ├── org.gnome.desktop.thumbnail-cache.gschema.xml
        │       ├── org.gnome.desktop.thumbnailers.gschema.xml
        │       ├── org.gnome.desktop.wm.keybindings.gschema.xml
        │       ├── org.gnome.desktop.wm.preferences.gschema.xml
        │       ├── org.gnome.system.locale.gschema.xml
        │       ├── org.gnome.system.location.gschema.xml
        │       ├── org.gnome.system.proxy.gschema.xml
        │       ├── org.gtk.Demo.gschema.xml
        │       ├── org.gtk.exampleapp.gschema.xml
        │       ├── org.gtk.Settings.ColorChooser.gschema.xml
        │       ├── org.gtk.Settings.Debug.gschema.xml
        │       ├── org.gtk.Settings.EmojiChooser.gschema.xml
        │       └── org.gtk.Settings.FileChooser.gschema.xml
        └── icons
            └── hicolor
                ├── 128x128
                │   └── apps
                │       └── com.example.helloworld.png
                ├── 16x16
                │   └── apps
                │       └── com.example.helloworld.png
                ├── 256x256
                │   └── apps
                │       └── com.example.helloworld.png
                ├── 32x32
                │   └── apps
                │       └── com.example.helloworld.png
                ├── 512x512
                │   └── apps
                │       └── com.example.helloworld.png
                ├── 64x64
                │   └── apps
                │       └── com.example.helloworld.png
                └── scalable
                    └── apps

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions