guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] build-system/glib-or-gtk: Factorize 'wrap-all-programs'.


From: Mathieu Lirzin
Subject: [PATCH] build-system/glib-or-gtk: Factorize 'wrap-all-programs'.
Date: Tue, 6 Oct 2015 16:49:25 +0200

* guix/build/glib-or-gtk-build-system.scm (wrap-all-programs):
  Factorize it.
---
 guix/build/glib-or-gtk-build-system.scm | 77 +++++++++------------------------
 1 file changed, 21 insertions(+), 56 deletions(-)

diff --git a/guix/build/glib-or-gtk-build-system.scm 
b/guix/build/glib-or-gtk-build-system.scm
index b6291e7..8440588 100644
--- a/guix/build/glib-or-gtk-build-system.scm
+++ b/guix/build/glib-or-gtk-build-system.scm
@@ -135,66 +135,31 @@ Wrapping is not applied to outputs whose name is listed in
 GLIB-OR-GTK-WRAP-EXCLUDED-OUTPUTS.  This is useful when an output is known not
 to contain any GLib or GTK+ binaries, and where wrapping would gratuitously
 add a dependency of that output on GLib and GTK+."
+
+  (define (env-var var dirs)
+    "Associate an environment variable VAR with a list of directory DIRS."
+    (and (not (null? dirs)) (list var ":" 'prefix dirs)))
+
   (define handle-output
     (match-lambda
      ((output . directory)
       (unless (member output glib-or-gtk-wrap-excluded-outputs)
-        (let* ((bindir       (string-append directory "/bin"))
-               (libexecdir   (string-append directory "/libexec"))
-               (bin-list     (append (find-files bindir ".*")
-                                     (find-files libexecdir ".*")))
-               (datadirs     (data-directories
-                              (alist-cons output directory inputs)))
-               (gtk-mod-dirs (gtk-module-directories
-                              (alist-cons output directory inputs)))
-               (gio-mod-dirs (gio-module-directories
-                              (alist-cons output directory inputs)))
-               (data-env-var
-                (if (not (null? datadirs))
-                    `("XDG_DATA_DIRS" ":" prefix ,datadirs)
-                    #f))
-               (gtk-mod-env-var
-                (if (not (null? gtk-mod-dirs))
-                    `("GTK_PATH" ":" prefix ,gtk-mod-dirs)
-                    #f))
-               (gio-mod-env-var 
-                (if (not (null? gio-mod-dirs))
-                    `("GIO_EXTRA_MODULES" ":" prefix ,gio-mod-dirs)
-                    #f)))
-          (cond
-           ((and data-env-var gtk-mod-env-var gio-mod-env-var)
-            (for-each (cut wrap-program <>
-                           data-env-var
-                           gtk-mod-env-var
-                           gio-mod-env-var)
-                      bin-list))
-           ((and data-env-var gtk-mod-env-var (not gio-mod-env-var))
-            (for-each (cut wrap-program <>
-                           data-env-var
-                           gtk-mod-env-var)
-                      bin-list))
-           ((and data-env-var (not gtk-mod-env-var) gio-mod-env-var)
-            (for-each (cut wrap-program <>
-                           data-env-var
-                           gio-mod-env-var)
-                      bin-list))
-           ((and (not data-env-var) gtk-mod-env-var gio-mod-env-var)
-            (for-each (cut wrap-program <>
-                           gio-mod-env-var
-                           gtk-mod-env-var)
-                      bin-list))
-           ((and data-env-var (not gtk-mod-env-var) (not gio-mod-env-var))
-            (for-each (cut wrap-program <>
-                           data-env-var)
-                      bin-list))
-           ((and (not data-env-var) gtk-mod-env-var (not gio-mod-env-var))
-            (for-each (cut wrap-program <>
-                           gtk-mod-env-var)
-                      bin-list))
-           ((and (not data-env-var) (not gtk-mod-env-var) gio-mod-env-var)
-            (for-each (cut wrap-program <>
-                           gio-mod-env-var)
-                      bin-list))))))))
+        (let ((bindir     (string-append directory "/bin"))
+              (libexecdir (string-append directory "/libexec"))
+              (data-var   (env-var "XDG_DATA_DIRS"
+                                   (data-directories
+                                    (alist-cons output directory inputs))))
+              (gtk-var    (env-var "GTK_PATH"
+                                   (gtk-module-directories
+                                    (alist-cons output directory inputs))))
+              (gio-var    (env-var "GIO_EXTRA_MODULES"
+                                   (gio-module-directories
+                                    (alist-cons output directory inputs)))))
+          (for-each (cute apply wrap-program <>
+                          (filter-map identity
+                                      (list data-var gtk-var gio-var)))
+                    (append (find-files bindir ".*")
+                            (find-files libexecdir ".*"))))))))
 
   (for-each handle-output outputs)
   #t)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]