Subject: [PATCH core-updates] fix gobject-introspection cairo library path

From: John Kehayias <[email-masked]>
Date: Wed, 23 Jun 2021 21:32:03 +0000

Hello,

This is a patch to fix issue #49122 (gobject-introspection and not finding cairo). The patch changes the cairo typelib file to include the absolute path to the cairo patch (as required by libraries that use introspection via gir) by modifying the input file. I believe this is exactly what is done in nix to solve the same issue, see https://github.com/NixOS/nixpkgs/issues/34080 for their discussion and fix.

I believe this necessitates building with a cairo dependency to have the library path available, but correct me if I'm wrong as I'm new to guix. I've used cairo-sans-poppler to avoid the dependency cycle. I've tested this builds and solves issue #49122 for me.

Thanks!
John

diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 206222b578..3434e699d2 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -496,6 +496,14 @@ dynamic loading, and an object system.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch
+           ;; Patch for cairo library location
+           (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "gir/cairo-1.0.gir.in"
+                (("shared-library=\"@CAIRO_SHARED_LIBRARY@\"")
+                 (string-append "shared-library=\""
+                                (assoc-ref inputs "cairo")
+                                "/lib/@CAIRO_SHARED_LIBRARY@\"")))))
          (add-after 'unpack 'do-not-use-/usr/bin/env
            (lambda _
              (substitute* "tools/g-ir-tool-template.in"
@@ -507,6 +515,7 @@ dynamic loading, and an object system.")
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("bison" ,bison)
+       ("cairo" ,cairo-sans-poppler) ; break dependency loop via poppler
        ("flex" ,flex)
        ("glib" ,glib)
        ("python" ,python-wrapper)
-- 
2.32.0