l...@gnu.org (Ludovic Courtès) writes:
> 宋文武 skribis:
>
>> * guix/profiles (xdg-desktop-database): New function.
>> (%default-profile-hooks): Add it.
>
> Nice!
>
>> + (update-desktop-database (string-append
>> + #+desktop-file-utils
>> + "/bin/update-desktop-database")))
>
> This is a small dependency, but it still depends on GLib; my
> understanding is that building any profile would end up pulling in GLib
> because of this hook.
Yes.
>
> Should we have some heuristic as for the GTK+ and GHC hooks to avoid
> pulling it in?
>
> For instance, we could check whether GLib is already an indirect
> dependency of at least one of the packages. WDYT?
Sure, but I think check on GLib is not sufficient and necessary,
when the hook run, it will use latest desktop-file-utils which may
use a different version of glib. Unless I use the desktop-file-utils
package installed from profile, but not like the gtk-icon-themes hook,
where gtk+ is the runtime dependency, desktop-file-utils is only used
to validate the desktop file during build phase, I can't get it from
manifest using the same (and IMO, heavy and ugly) method.
So, I end up using a simple 'manifest-lookup', which require the
desktop-file-utils and shared-mime-info to be installed explicitly.
Updated patches:
>From 9fe7aa4f368def46ddab54bd1347d6cf2ef5832f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?=
Date: Thu, 4 Feb 2016 15:33:07 +0800
Subject: [PATCH 1/2] profiles: Add xdg-desktop-database hook.
* guix/profiles.scm (xdg-desktop-database): New function.
(%default-profile-hooks): Add it.
---
guix/profiles.scm | 38 +-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/guix/profiles.scm b/guix/profiles.scm
index ce86ff8..a9375e6 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -684,13 +684,49 @@ creates the GTK+ 'icon-theme.cache' file for each theme."
#:substitutable? #f)
(return #f
+(define (xdg-desktop-database manifest)
+ "Return a derivation that builds the @file{mimeinfo.cache} database from
+desktop files. It's used to query what applications can handle a given
+MIME type."
+ (define desktop-file-utils
+(module-ref (resolve-interface '(gnu packages gnome))
+'desktop-file-utils))
+
+ (define build
+#~(begin
+(use-modules (srfi srfi-26)
+ (guix build utils)
+ (guix build union))
+(let* ((destdir (string-append #$output "/share/applications"))
+ (appdirs (filter file-exists?
+(map (cut string-append <>
+ "/share/applications")
+ '#$(manifest-inputs manifest
+ (update-desktop-database (string-append
+ #+desktop-file-utils
+ "/bin/update-desktop-database")))
+ (mkdir-p (string-append #$output "/share"))
+ (union-build destdir appdirs
+ #:log-port (%make-void-port "w"))
+ (zero? (system* update-desktop-database destdir)
+
+ ;; Don't run the hook when 'desktop-file-utils' is not installed.
+ (if (manifest-lookup manifest (manifest-pattern (name "desktop-file-utils")))
+ (gexp->derivation "xdg-desktop-database" build
+#:modules '((guix build utils)
+(guix build union))
+#:local-build? #t
+#:substitutable? #f)
+ (with-monad %store-monad (return #f
+
(define %default-profile-hooks
;; This is the list of derivation-returning procedures that are called by
;; default when making a non-empty profile.
(list info-dir-file
ghc-package-cache-file
ca-certificate-bundle
-gtk-icon-themes))
+gtk-icon-themes
+xdg-desktop-database))
(define* (profile-derivation manifest
#:key
--
2.5.0
>From 5e39f976de2ee6854b530a011e036b6ec2018810 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?=
Date: Thu, 4 Feb 2016 15:35:03 +0800
Subject: [PATCH 2/2] profiles: Add xdg-mime-database hook.
* guix/profiles.scm (xdg-mime-database): New function.
(%default-profile-hooks): Add it.
---
guix/profiles.scm | 39 ++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/guix/profiles.scm b/guix/profiles.scm
index a9375e6..8f9d617 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -719,6 +719,42 @@ MIME type."
#:substitutable? #f)
(with-monad %store-monad (return #f
+(define (xdg-mime-database manifest)
+ "Return a derivation that builds the @file{mime.cache} database from manifest
+entries. It's used to query the MI