Subject: [bug#65828] [gnome-team v5 1/2] gnu: gegl: Update to 0.4.46.

From: Vivien Kraus <[email-masked]>
Date: Fri, 8 Sep 2023 18:50:18 +0200

* gnu/packages/gimp.scm (gegl): Update to 0.4.46.
* gnu/packages/gimp.scm (gegl-0.4.44): New variable.
* gnu/packages/gnome.scm (gnome-photos) [inputs]: Use gegl-0.4.44, not gegl.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/gimp.scm                         | 27 ++++++-
 gnu/packages/gnome.scm                        |  2 +-
 .../gegl-compatibility-old-librsvg.patch      | 80 +++++++++++++++++++
 4 files changed, 107 insertions(+), 3 deletions(-)
 create mode 100644 gnu/packages/patches/gegl-compatibility-old-librsvg.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 69be1a07c7..c29e99ba38 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1238,6 +1238,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/gdm-remove-hardcoded-xwayland-path.patch	\
   %D%/packages/patches/gdm-wayland-session-wrapper-from-env.patch	\
   %D%/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch	\
+  %D%/packages/patches/gegl-compatibility-old-librsvg.patch	\
   %D%/packages/patches/gemmi-fix-pegtl-usage.patch		\
   %D%/packages/patches/gemmi-fix-sajson-types.patch		\
   %D%/packages/patches/genimage-mke2fs-test.patch		\
diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm
index b1ff08d652..0bc58e0ddf 100644
--- a/gnu/packages/gimp.scm
+++ b/gnu/packages/gimp.scm
@@ -215,7 +215,7 @@ (define-public babl
 (define-public gegl
   (package
     (name "gegl")
-    (version "0.4.42")
+    (version "0.4.46")
     (source
      (origin
        (method url-fetch)
@@ -228,8 +228,10 @@ (define-public gegl
                   (string-append "ftp://ftp.gtk.org/pub/gegl/"
                                  (version-major+minor version)
                                  "/gegl-" version ".tar.xz")))
+       (patches
+        (search-patches "gegl-compatibility-old-librsvg.patch"))
        (sha256
-        (base32 "0bg0vlmj4n9x1291b9fsjqxsal192zlg48pa57f6xid6p863ma5b"))))
+        (base32 "14p8n6vily0yp6gqafl2xy7d2rh1j48pcj0a7mglqxy83d4b5cyh"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -285,6 +287,27 @@ (define-public gegl
     ;; application and GUI binary gegl is licensed under GPL.
     (license (list license:lgpl3+ license:gpl3+))))
 
+;; gnome-photos does not build against gegl 0.4.46 yet.
+;; https://gitlab.gnome.org/GNOME/gnome-photos/-/issues/214
+(define-public gegl-0.4.44
+  (package
+    (inherit gegl)
+    (version "0.4.44")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (list (string-append "https://download.gimp.org/pub/gegl/"
+                                 (string-take version 3)
+                                 "/gegl-" version ".tar.xz")
+                  (string-append "https://ftp.gtk.org/pub/gegl/"
+                                 (version-major+minor version)
+                                 "/gegl-" version ".tar.xz")
+                  (string-append "ftp://ftp.gtk.org/pub/gegl/"
+                                 (version-major+minor version)
+                                 "/gegl-" version ".tar.xz")))
+       (sha256
+        (base32 "09k1sn4h0bakgmq2hgd1iamprngpr81ky3fd9446lh2ycd0xnk0a"))))))
+
 (define-public gimp
   (package
     (name "gimp")
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index ad118090eb..0f149e69b5 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -855,7 +855,7 @@ (define-public gnome-photos
     (inputs
      (list babl
            cairo
-           gegl
+           gegl-0.4.44
            geocode-glib
            gexiv2
            gfbgraph
diff --git a/gnu/packages/patches/gegl-compatibility-old-librsvg.patch b/gnu/packages/patches/gegl-compatibility-old-librsvg.patch
new file mode 100644
index 0000000000..3e5733f9fd
--- /dev/null
+++ b/gnu/packages/patches/gegl-compatibility-old-librsvg.patch
@@ -0,0 +1,80 @@
+From a99a93e5c9013bd4101f5058cdee7d0cf30234fe Mon Sep 17 00:00:00 2001
+Message-ID: <[email-masked]>
+From: Jehan <[email-masked]>
+Date: Wed, 5 Jul 2023 21:18:19 +0200
+Subject: [PATCH] Issue #333: continuing to support librsvg 2.40.x (C
+ versions).
+
+Commit 9beeefcbe uses too new functions of librsvg. We could just bump
+the minimum required version but there are issues with Rust not being
+available on every platform yet. So instead, let's add some conditional
+code paths, so that it still builds with librsvg 2.40.x (which was the
+last versions fully in C) while we use newer code and no warnings when
+using newer versions.
+---
+ operations/external/svg-load.c | 25 ++++++++++++++++++++-----
+ 1 file changed, 20 insertions(+), 5 deletions(-)
+
+diff --git a/operations/external/svg-load.c b/operations/external/svg-load.c
+index 3312a0c0a..15c0b30b7 100644
+--- a/operations/external/svg-load.c
++++ b/operations/external/svg-load.c
+@@ -76,16 +76,25 @@ query_svg (GeglOperation *operation)
+ {
+   GeglProperties *o = GEGL_PROPERTIES (operation);
+   Priv *p = (Priv*) o->user_data;
++#if LIBRSVG_CHECK_VERSION(2, 52, 0)
+   gdouble out_width, out_height;
++#else
++  RsvgDimensionData dimensions;
++#endif
+ 
+   g_return_val_if_fail (p->handle != NULL, FALSE);
+ 
+-  rsvg_handle_get_intrinsic_size_in_pixels (p->handle, &out_width, &out_height);
+-
+   p->format = babl_format ("R'G'B'A u8");
+ 
++#if LIBRSVG_CHECK_VERSION(2, 52, 0)
++  rsvg_handle_get_intrinsic_size_in_pixels (p->handle, &out_width, &out_height);
+   p->height = out_height;
+-  p->width = out_width;
++  p->width  = out_width;
++#else
++  rsvg_handle_get_dimensions (p->handle, &dimensions);
++  p->height = dimensions.height;
++  p->width  = dimensions.width;
++#endif
+ 
+   return TRUE;
+ }
+@@ -98,10 +107,12 @@ load_svg (GeglOperation *operation,
+ {
+     GeglProperties    *o = GEGL_PROPERTIES (operation);
+     Priv              *p = (Priv*) o->user_data;
+-    RsvgRectangle      svg_rect = {0.0, 0.0, width, height};
+     cairo_surface_t   *surface;
+     cairo_t           *cr;
+-    GError            *error = NULL;
++#if LIBRSVG_CHECK_VERSION(2, 52, 0)
++    GError            *error    = NULL;
++    RsvgRectangle      svg_rect = {0.0, 0.0, width, height};
++#endif
+ 
+     g_return_val_if_fail (p->handle != NULL, -1);
+ 
+@@ -115,7 +126,11 @@ load_svg (GeglOperation *operation,
+                      (double)height / (double)p->height);
+       }
+ 
++#if LIBRSVG_CHECK_VERSION(2, 52, 0)
+     rsvg_handle_render_document (p->handle, cr, &svg_rect, &error);
++#else
++    rsvg_handle_render_cairo (p->handle, cr);
++#endif
+ 
+     cairo_surface_flush (surface);
+ 
+-- 
+2.41.0
+
-- 
2.41.0