diff options
Diffstat (limited to 'guix/profiles.scm')
-rw-r--r-- | guix/profiles.scm | 42 |
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 |