Skip to content

Missing lcms2 and libwebp/libjxl dependencies in extension meson targets #255

Open

Description

@DevGitPit

Description

Certain extension targets in extensions/ call external library APIs guarded by HAVE_* macros, but do not declare the corresponding dependency in their meson.build target definition.

Because all extension modules set override_options : [ 'b_lundef=false' ], the linker produces the shared objects without warning at build time. However, the resulting shared libraries lack the corresponding DT_NEEDED entries, leading to unresolved symbol errors when dynamically loaded (dlopen) on platforms or configurations with strict dynamic linkers (such as Android Bionic) where undefined symbols in dlopened modules must be resolved from their own dependencies.


Details

1. cairo_io (extensions/cairo_io)

Under #if HAVE_LCMS2, cmsOpenProfileFromMem() from LittleCMS (<lcms2.h>) is called directly in:

  • extensions/cairo_io/cairo-image-surface-jpeg.c (line 215)
  • extensions/cairo_io/cairo-image-surface-png.c (line 303)
  • extensions/cairo_io/cairo-image-surface-avif.c (line 95)
  • extensions/cairo_io/cairo-image-surface-jxl.c (line 267)

However, extensions/cairo_io/meson.build does not include use_lcms2 ? lcms2_dep : [] in dependencies : [...].

2. image_viewer (extensions/image_viewer)

  • Under #if HAVE_LIBWEBP, WebPInitDecoderConfig(), WebPGetFeatures(), and WebPFreeDecBuffer() from <webp/decode.h> are called in extensions/image_viewer/gth-metadata-provider-image.c (lines 178–188).
  • Under #if HAVE_LIBJXL, JxlSignatureCheck(), JxlDecoderCreate(), and other JXL APIs from <jxl/decode.h> are called in extensions/image_viewer/gth-metadata-provider-image.c (lines 194–226).

However, extensions/image_viewer/meson.build only specifies dependencies : extension_common_deps and omits use_libwebp ? libwebp_dep : [] and use_libjxl ? libjxl_deps : [].


Suggested Fix

--- a/extensions/cairo_io/meson.build
+++ b/extensions/cairo_io/meson.build
@@ -37,6 +37,7 @@
   dependencies : [
     extension_common_deps,
     jpeg_deps,
+    use_lcms2 ? lcms2_dep : [],
     use_libtiff ? tiff_deps : [],
     use_librsvg ? librsvg_dep : [],
     use_libwebp ? libwebp_dep : [],
--- a/extensions/image_viewer/meson.build
+++ b/extensions/image_viewer/meson.build
@@ -14,7 +14,11 @@
 
 image_viewer_mod = shared_library('image_viewer',
   sources : [ source_files, gresource_files ],
-  dependencies : extension_common_deps,
+  dependencies : [
+    extension_common_deps,
+    use_libwebp ? libwebp_dep : [],
+    use_libjxl ? libjxl_deps : []
+  ],
   include_directories : [ config_inc, pix_inc ],
   c_args : c_args,
   link_with : jpeg_utils_mod,

Activity

  1. DevGitPit commented on Oct 31, 2026

    @DevGitPit
    Author

    For reference - termux/termux-packages#33005

    Just fyi, please disregard the patch if it changes something deliberate.

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