Skip to content

Provide libappimage.[a,so] as linker scripts #187

Open

Description

@darealshinji

libappimage.so should probably be provided as a linker script that links the shared library together with the static library parts.
The file content would be:
INPUT(libappimage.so.1.0 libappimage_hashlib.a libappimage_shared.a)

For libappimage.a I would to the same and copy/rename all the required static libraries that are used to link the shared library version:

INPUT
(
  libappimage_static.a
  libappimage_static_libxdg-basedir.a
  libappimage_hashlib.a
  libappimage_shared.a
  libappimage_static_libarchive.a
  libappimage_static_libXdgUtilsDesktopEntry.a
  libappimage_static_libXdgUtilsBaseDir.a
  libappimage_static_libsquashfuse.a
  libappimage_static_libsquashfuse_ll.a
  libappimage_static_libfuseprivate.a
  libappimage_static_liblzma.a
)

Examples of other libraries that do this:

cat /usr/lib/gcc/x86_64-linux-gnu/12/libgcc_s.so
cat /usr/lib/x86_64-linux-gnu/libncurses.so

I would also suggest to rename libappimage_shared.a to libappimage_private.a or something similar.

Activity

  1. TheAssassin commented on Oct 31, 2025

    @TheAssassin
    Member

    What would be the advantage of this?

  2. darealshinji commented on Oct 31, 2025

    @darealshinji
    Author

    Just an idea to make manual linking easier. Now that I think about it, a pkg-config script would probably do the same?

  3. TheAssassin commented on Oct 31, 2025

    @TheAssassin
    Member

    Isn't that something that would typically be solved in downstream packaging?

    That said, contributions welcome!

  4. darealshinji commented on Nov 1, 2025

    @darealshinji
    Author

    Isn't that something that would typically be solved in downstream packaging?

    The .pc files for a library are normally created by the library's build system, typically from a template file: https://www.scivision.dev/cmake-generate-pkg-config/

    edit: I see there is a .pc file already
    https://github.com/AppImageCommunity/libappimage/blob/master/cmake/libappimage.pc.in

  5. TheAssassin commented on Nov 7, 2025

    @TheAssassin
    Member

    That file was contributed externally as well. Thus, contributions welcome.

  6. darealshinji commented on Nov 9, 2025

    @darealshinji
    Author

    This should do the trick:

    diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake
    index 98f1147..7cc6e1c 100644
    --- a/cmake/dependencies.cmake
    +++ b/cmake/dependencies.cmake
    @@ -85,14 +85,18 @@ if (NOT LIBAPPIMAGE_SHARED_ONLY)
                 INTERFACE libzstd
                 INTERFACE libzlib
             )
    +
    +        set(libappimage_REQUIRES_PRIVATE "${libappimage_REQUIRES_PRIVATE}, liblzma, libzstd")
         else()
             message(STATUS "Using system squashfuse")
     
             import_pkgconfig_target(TARGET_NAME libsquashfuse PKGCONFIG_TARGET squashfuse)
    +        set(libappimage_REQUIRES_PRIVATE "${libappimage_REQUIRES_PRIVATE}, squashfuse")
         endif()
     
         message(STATUS "Using system libarchive")
         import_find_pkg_target(libarchive LibArchive LibArchive)
    +    set(libappimage_REQUIRES_PRIVATE "${libappimage_REQUIRES_PRIVATE}, libarchive")
     
         #### build dependency configuration ####
     
    diff --git a/cmake/imported_dependencies.cmake.in b/cmake/imported_dependencies.cmake.in
    index 402fa4c..379f813 100644
    --- a/cmake/imported_dependencies.cmake.in
    +++ b/cmake/imported_dependencies.cmake.in
    @@ -10,4 +10,5 @@ if(NOT @LIBAPPIMAGE_SHARED_ONLY@)
         import_pkgconfig_target(TARGET_NAME libzlib PKGCONFIG_TARGET zlib)
         import_pkgconfig_target(TARGET_NAME libcairo PKGCONFIG_TARGET cairo)
         import_pkgconfig_target(TARGET_NAME librsvg PKGCONFIG_TARGET librsvg-2.0)
    +    set(libappimage_REQUIRES_PRIVATE "glib-2.0 >= 2.40, gobject-2.0 >= 2.40, gio-2.0 >= 2.40, zlib, cairo, librsvg-2.0")
     endif()
    diff --git a/cmake/libappimage.pc.in b/cmake/libappimage.pc.in
    index 32682d8..7d61adc 100644
    --- a/cmake/libappimage.pc.in
    +++ b/cmake/libappimage.pc.in
    @@ -8,5 +8,6 @@ Description: AppImage management and desktop integration
     Version: @libappimage_VERSION@
     URL: https://github.com/AppImage/libappimage
     
    -Libs: -L${libdir} -lappimage
    +Requires.private: @libappimage_REQUIRES_PRIVATE@
    +Libs: -L${libdir} -lappimage_hashlib -lappimage_shared -lappimage
     Cflags: -I${includedir}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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