summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages.scm3
-rw-r--r--guix/packages.scm15
-rw-r--r--tests/packages.scm4
3 files changed, 21 insertions, 1 deletions
diff --git a/gnu/packages.scm b/gnu/packages.scm
index 9496a270eb..68a9eef2ad 100644
--- a/gnu/packages.scm
+++ b/gnu/packages.scm
@@ -200,7 +200,8 @@ same package twice."
(fold2 (lambda (module result seen)
(fold2 (lambda (var result seen)
(if (and (package? var)
- (not (vhash-assq var seen)))
+ (not (vhash-assq var seen))
+ (not (hidden-package? var)))
(values (proc var result)
(vhash-consq var #t seen))
(values result seen)))
diff --git a/guix/packages.scm b/guix/packages.scm
index bfb4c557ab..3646b9ba13 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -81,6 +81,8 @@
package-maintainers
package-properties
package-location
+ hidden-package
+ hidden-package?
package-field-location
package-direct-sources
@@ -290,6 +292,19 @@ name of its URI."
package)
16)))))
+(define (hidden-package p)
+ "Return a \"hidden\" version of P--i.e., one that 'fold-packages' and thus,
+user interfaces, ignores."
+ (package
+ (inherit p)
+ (properties `((hidden? . #t)
+ ,@(package-properties p)))))
+
+(define (hidden-package? p)
+ "Return true if P is \"hidden\"--i.e., must not be visible to user
+interfaces."
+ (assoc-ref (package-properties p) 'hidden?))
+
(define (package-field-location package field)
"Return the source code location of the definition of FIELD for PACKAGE, or
#f if it could not be determined."
diff --git a/tests/packages.scm b/tests/packages.scm
index fc75e38730..7c9ad05c21 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -79,6 +79,10 @@
(write
(dummy-package "foo" (location #f)))))))
+(test-assert "hidden-package"
+ (and (hidden-package? (hidden-package (dummy-package "foo")))
+ (not (hidden-package? (dummy-package "foo")))))
+
(test-assert "package-field-location"
(let ()
(define (goto port line column)