summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi7
-rw-r--r--guix/build-system/glib-or-gtk.scm3
-rw-r--r--guix/build/glib-or-gtk-build-system.scm60
3 files changed, 44 insertions, 26 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 75ce632602..157aecbe33 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -1808,6 +1808,13 @@ modules}.  This is achieved by wrapping the programs in launch scripts
 that appropriately set the @code{XDG_DATA_DIRS} and @code{GTK_PATH}
 environment variables.
 
+It is possible to exclude specific package outputs from that wrapping
+process by listing their names in the
+@code{#:glib-or-gtk-wrap-excluded-outputs} parameter.  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+.
+
 @item glib-or-gtk-compile-schemas
 The phase @code{glib-or-gtk-compile-schemas} makes sure that all GLib's
 @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
diff --git a/guix/build-system/glib-or-gtk.scm b/guix/build-system/glib-or-gtk.scm
index 51e0c419e3..039bfb948c 100644
--- a/guix/build-system/glib-or-gtk.scm
+++ b/guix/build-system/glib-or-gtk.scm
@@ -122,6 +122,7 @@
                                                   "bin" "sbin"))
                             (phases '(@ (guix build glib-or-gtk-build-system)
                                         %standard-phases))
+                            (glib-or-gtk-wrap-excluded-outputs '())
                             (system (%current-system))
                             (imported-modules %default-imported-modules)
                             (modules %default-modules)
@@ -153,6 +154,8 @@
                           #:search-paths ',(map search-path-specification->sexp
                                                 search-paths)
                           #:phases ,phases
+                          #:glib-or-gtk-wrap-excluded-outputs
+                           ,glib-or-gtk-wrap-excluded-outputs
                           #:configure-flags ,configure-flags
                           #:make-flags ,make-flags
                           #:out-of-source? ,out-of-source?
diff --git a/guix/build/glib-or-gtk-build-system.scm b/guix/build/glib-or-gtk-build-system.scm
index 5fc3b7c003..9351a70a0e 100644
--- a/guix/build/glib-or-gtk-build-system.scm
+++ b/guix/build/glib-or-gtk-build-system.scm
@@ -79,37 +79,45 @@ a list with all found directories."
 
   (fold glib-schemas '() inputs))
 
-(define* (wrap-all-programs #:key inputs outputs #:allow-other-keys)
+(define* (wrap-all-programs #:key inputs outputs
+                            (glib-or-gtk-wrap-excluded-outputs '())
+                            #:allow-other-keys)
   "Implement phase \"glib-or-gtk-wrap\": look for GSettings schemas and
 gtk+-v.0 libraries and create wrappers with suitably set environment variables
-if found."
+if found.
+
+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 handle-output
     (match-lambda
      ((output . directory)
-      (let* ((bindir       (string-append directory "/bin"))
-             (bin-list     (find-files bindir ".*"))
-             (schemas      (schemas-directories
-                            (alist-cons output directory inputs)))
-             (gtk-mod-dirs (gtk-module-directories
-                            (alist-cons output directory inputs)))
-             (schemas-env-var
-              (if (not (null? schemas))
-                  `("XDG_DATA_DIRS" ":" prefix ,schemas)
-                  #f))
-             (gtk-mod-env-var
-              (if (not (null? gtk-mod-dirs))
-                  `("GTK_PATH" ":" prefix ,gtk-mod-dirs)
-                  #f)))
-        (cond
-         ((and schemas-env-var gtk-mod-env-var)
-          (for-each (cut wrap-program <> schemas-env-var gtk-mod-env-var)
-                    bin-list))
-         (schemas-env-var
-          (for-each (cut wrap-program <> schemas-env-var)
-                    bin-list))
-         (gtk-mod-env-var
-          (for-each (cut wrap-program <> gtk-mod-env-var)
-                    bin-list)))))))
+      (unless (member output glib-or-gtk-wrap-excluded-outputs)
+        (let* ((bindir       (string-append directory "/bin"))
+               (bin-list     (find-files bindir ".*"))
+               (schemas      (schemas-directories
+                              (alist-cons output directory inputs)))
+               (gtk-mod-dirs (gtk-module-directories
+                              (alist-cons output directory inputs)))
+               (schemas-env-var
+                (if (not (null? schemas))
+                    `("XDG_DATA_DIRS" ":" prefix ,schemas)
+                    #f))
+               (gtk-mod-env-var
+                (if (not (null? gtk-mod-dirs))
+                    `("GTK_PATH" ":" prefix ,gtk-mod-dirs)
+                    #f)))
+          (cond
+           ((and schemas-env-var gtk-mod-env-var)
+            (for-each (cut wrap-program <> schemas-env-var gtk-mod-env-var)
+                      bin-list))
+           (schemas-env-var
+            (for-each (cut wrap-program <> schemas-env-var)
+                      bin-list))
+           (gtk-mod-env-var
+            (for-each (cut wrap-program <> gtk-mod-env-var)
+                      bin-list))))))))
 
   (for-each handle-output outputs)
   #t)