Subject: [PATCH core-update-frozen 17/20] profiles: Add a gdk-pixbuf-loaders-cache-file hook.

From: Maxim Cournoyer <[email-masked]>
Date: Wed, 27 Oct 2021 00:51:48 -0400

This paves the way toward properly fixing https://issues.guix.gnu.org/50957.

* guix/profiles.scm (gdk-pixbuf-loaders-cache-file): Add procedure...
(%default-profile-hooks): ... and register it as a profile hook.
---
 guix/profiles.scm | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/guix/profiles.scm b/guix/profiles.scm
index 9494684228..bdc0d52626 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2016, 2018, 2019, 2021 Ricardo Wurmus <[email-masked]>
 ;;; Copyright © 2016 Chris Marusich <[email-masked]>
 ;;; Copyright © 2017 Huang Ying <[email-masked]>
-;;; Copyright © 2017 Maxim Cournoyer <[email-masked]>
+;;; Copyright © 2017, 2021 Maxim Cournoyer <[email-masked]>
 ;;; Copyright © 2019 Kyle Meyer <[email-masked]>
 ;;; Copyright © 2019 Mathieu Othacehe <[email-masked]>
 ;;; Copyright © 2020 Danny Milosavljevic <[email-masked]>
@@ -1161,6 +1161,32 @@ (define build
                     `((type . profile-hook)
                       (hook . emacs-subdirs))))
 
+(define (gdk-pixbuf-loaders-cache-file manifest)
+  "Return a derivation that produces a loaders cache file for every gdk-pixbuf
+loaders discovered in MANIFEST."
+  (define gdk-pixbuf                    ;lazy reference
+    (module-ref (resolve-interface '(gnu packages gtk)) 'gdk-pixbuf))
+
+  (mlet %store-monad ((%gdk-pixbuf (manifest-lookup-package
+                                    manifest "gdk-pixbuf"))
+                      (gdk-pixbuf-bin -> (file-append gdk-pixbuf "/bin")))
+    (define build
+      (with-imported-modules (source-module-closure
+                              '((guix build glib-or-gtk-build-system)))
+        #~(begin
+            (use-modules (guix build glib-or-gtk-build-system))
+            (setenv "PATH" (string-append #$gdk-pixbuf-bin ":" (getenv "PATH")))
+            (generate-gdk-pixbuf-loaders-cache '#$(manifest-inputs manifest)
+                                               (list #$output)))))
+    (if %gdk-pixbuf
+        (gexp->derivation "gdk-pixbuf-loaders-cache-file" build
+                          #:local-build? #t
+                          #:substitutable? #f
+                          #:properties
+                          '((type . profile-hook)
+                            (hook . gdk-pixbuf-loaders-cache-file)))
+        (return #f))))
+
 (define (glib-schemas manifest)
   "Return a derivation that unions all schemas from manifest entries and
 creates the Glib 'gschemas.compiled' file."
@@ -1672,6 +1698,7 @@ (define %default-profile-hooks
         ghc-package-cache-file
         ca-certificate-bundle
         emacs-subdirs
+        gdk-pixbuf-loaders-cache-file
         glib-schemas
         gtk-icon-themes
         gtk-im-modules
-- 
2.33.1