diff options
author | Danny Milosavljevic <dannym@scratchpost.org> | 2019-01-25 12:27:52 +0100 |
---|---|---|
committer | Danny Milosavljevic <dannym@scratchpost.org> | 2019-01-25 18:14:16 +0100 |
commit | 1a5f46621b44aa1458ad7acd4eca5fe1d4574f92 (patch) | |
tree | 42c175fd53e22b0e817885a00c7124e40b88e620 | |
parent | 1faf0a04593784965855b6ac6118c0b6722b4224 (diff) |
linux-modules: Add module-soft-dependencies.
* gnu/build/linux-modules.scm (not-softdep-whitespace): New variable.
(module-soft-dependencies): New procedure.
-rw-r--r-- | gnu/build/linux-modules.scm | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm index 2d81175041..a28908fe4d 100644 --- a/gnu/build/linux-modules.scm +++ b/gnu/build/linux-modules.scm @@ -33,6 +33,7 @@ ensure-dot-ko module-aliases module-dependencies + module-soft-dependencies normalize-module-name file-name->module-name find-module-file @@ -100,6 +101,33 @@ contains module names, not actual file names." (('depends . what) (string-tokenize what %not-comma))))) +(define not-softdep-whitespace + (char-set-complement (char-set #\space #\tab))) + +(define (module-soft-dependencies file) + "Return a list of (cons section soft-dependency) of module FILE." + ;; TEXT: "pre: baz blubb foo post: bax bar" + (define (parse-softdep text) + (let loop ((value '()) + (tokens (string-tokenize text not-softdep-whitespace)) + (section #f)) + (match tokens + ((token rest ...) + (if (string=? (string-take-right token 1) ":") ; section + (loop value rest (string-trim-both token)) + (loop (cons (cons section token) value) rest section))) + (() + value)))) + + ;; Note: Multiple 'softdep sections are allowed. + (let ((info (modinfo-section-contents file))) + (concatenate + (filter-map (match-lambda + (('softdep . value) + (parse-softdep value)) + (_ #f)) + (modinfo-section-contents file))))) + (define (module-aliases file) "Return the list of aliases of module FILE." (let ((info (modinfo-section-contents file))) |