~ruther/guix-local

600c285b6345d8b0cc04f9e92e47ad5bcd437948 — Ludovic Courtès 11 years ago fcaa5f4
linux-initrd: Copy modules and their dependencies to the initrd.

* gnu/system/linux-initrd.scm (flat-linux-module-directory)[build-exp]:
  Add 'lookup' procedure.  Use 'recursive-module-dependencies' to
  compute the list of modules to copy.
  Adjust #:modules parameter.
1 files changed, 28 insertions(+), 12 deletions(-)

M gnu/system/linux-initrd.scm
M gnu/system/linux-initrd.scm => gnu/system/linux-initrd.scm +28 -12
@@ 92,7 92,9 @@ MODULES and taken from LINUX."
  (define build-exp
    #~(begin
        (use-modules (ice-9 match) (ice-9 regex)
                     (guix build utils))
                     (srfi srfi-1)
                     (guix build utils)
                     (gnu build linux-modules))

        (define (string->regexp str)
          ;; Return a regexp that matches STR exactly.


@@ 101,21 103,35 @@ MODULES and taken from LINUX."
        (define module-dir
          (string-append #$linux "/lib/modules"))

        (define (lookup module)
          (let ((name (ensure-dot-ko module)))
            (match (find-files module-dir (string->regexp name))
              ((file)
               file)
              (()
               (error "module not found" name module-dir))
              ((_ ...)
               (error "several modules by that name"
                      name module-dir)))))

        (define modules
          (let ((modules (map lookup '#$modules)))
            (append modules
                    (recursive-module-dependencies modules
                                                   #:lookup-module lookup))))

        (mkdir #$output)
        (for-each (lambda (module)
                    (match (find-files module-dir (string->regexp module))
                      ((file)
                       (format #t "copying '~a'...~%" file)
                       (copy-file file (string-append #$output "/" module)))
                      (()
                       (error "module not found" module module-dir))
                      ((_ ...)
                       (error "several modules by that name"
                              module module-dir))))
                  '#$modules)))
                    (format #t "copying '~a'...~%" module)
                    (copy-file module
                               (string-append #$output "/"
                                              (basename module))))
                  (delete-duplicates modules))))

  (gexp->derivation "linux-modules" build-exp
                    #:modules '((guix build utils))))
                    #:modules '((guix build utils)
                                (guix elf)
                                (gnu build linux-modules))))

(define (file-system->spec fs)
  "Return a list corresponding to file-system FS that can be passed to the