diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index c52b6e8389..54b524aec7 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -685,8 +685,10 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%" ,@(alist-delete "bash" %boot3-inputs))) (define-public guile-final + ;; This package must be public because other modules refer to it. However, + ;; mark it as hidden so that 'fold-packages' ignores it. (package-with-bootstrap-guile - (package-with-explicit-inputs guile-2.0/fixed + (package-with-explicit-inputs (hidden-package guile-2.0/fixed) %boot4-inputs (current-source-location) #:guile %bootstrap-guile))) diff --git a/tests/packages.scm b/tests/packages.scm index 7c9ad05c21..e9c8690730 100644 --- a/tests/packages.scm +++ b/tests/packages.scm @@ -749,6 +749,20 @@ r)) #f)) +(test-assert "fold-packages, hidden package" + ;; There are two public variables providing "guile@2.0" ('guile-final' in + ;; commencement.scm and 'guile-2.0/fixed' in guile.scm), but only the latter + ;; should show up. + (match (fold-packages (lambda (p r) + (if (and (string=? (package-name p) "guile") + (string-prefix? "2.0" + (package-version p))) + (cons p r) + r)) + '()) + ((one) + (eq? one guile-2.0/fixed)))) + (test-assert "find-packages-by-name" (match (find-packages-by-name "hello") (((? (cut eq? hello <>))) #t)