* 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)