summaryrefslogtreecommitdiff
path: root/guix/profiles.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix/profiles.scm')
-rw-r--r--guix/profiles.scm42
1 files changed, 24 insertions, 18 deletions
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 25ff146bdf..f34f73e17e 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -41,7 +41,6 @@
#:use-module (guix modules)
#:use-module (guix monads)
#:use-module (guix store)
- #:use-module (guix sets)
#:use-module (ice-9 vlist)
#:use-module (ice-9 match)
#:use-module (ice-9 regex)
@@ -105,6 +104,7 @@
manifest-installed?
manifest-matching-entries
manifest-search-paths
+ check-for-collisions
manifest-transaction
manifest-transaction?
@@ -260,17 +260,17 @@ field."
recursively."
(let loop ((entries (manifest-entries manifest))
(result '())
- (visited (set))) ;compare with 'equal?'
+ (visited vlist-null)) ;compare with 'manifest-entry=?'
(match entries
(()
(reverse result))
((head . tail)
- (if (set-contains? visited head)
+ (if (vhash-assoc head visited manifest-entry=?)
(loop tail result visited)
(loop (append (manifest-entry-dependencies head)
tail)
(cons head result)
- (set-insert head visited)))))))
+ (vhash-cons head #t visited)))))))
(define (profile-manifest profile)
"Return the PROFILE's manifest."
@@ -1202,17 +1202,18 @@ for both major versions of GTK+."
and creates the dependency graph of all these kernel modules.
This is meant to be used as a profile hook."
- (define kmod ; lazy reference
+ (define kmod ; lazy reference
(module-ref (resolve-interface '(gnu packages linux)) 'kmod))
(define build
- (with-imported-modules
- (source-module-closure '((guix build utils)
+ (with-imported-modules (source-module-closure
+ '((guix build utils)
(gnu build linux-modules)))
#~(begin
(use-modules (ice-9 ftw)
(ice-9 match)
- (srfi srfi-1) ; append-map
+ (srfi srfi-1) ; append-map
(gnu build linux-modules))
+
(let* ((inputs '#$(manifest-inputs manifest))
(module-directories
(map (lambda (directory)
@@ -1220,20 +1221,25 @@ This is meant to be used as a profile hook."
inputs))
(directory-entries
(lambda (directory)
- (scandir directory (lambda (basename)
- (not
- (string-prefix? "." basename))))))
+ (or (scandir directory
+ (lambda (basename)
+ (not (string-prefix? "." basename))))
+ '())))
;; Note: Should usually result in one entry.
(versions (delete-duplicates
(append-map directory-entries
module-directories))))
- (match versions
- ((version)
- (let ((old-path (getenv "PATH")))
- (setenv "PATH" #+(file-append kmod "/bin"))
- (make-linux-module-directory inputs version #$output)
- (setenv "PATH" old-path)))
- (_ (error "Specified Linux kernel and Linux kernel modules
+ (match versions
+ ((version)
+ (let ((old-path (getenv "PATH")))
+ (setenv "PATH" #+(file-append kmod "/bin"))
+ (make-linux-module-directory inputs version #$output)
+ (setenv "PATH" old-path)))
+ (()
+ ;; Nothing here, maybe because this is a kernel with
+ ;; CONFIG_MODULES=n.
+ (mkdir #$output))
+ (_ (error "Specified Linux kernel and Linux kernel modules
are not all of the same version")))))))
(gexp->derivation "linux-module-database" build
#:local-build? #t