aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Patterson <ajpatter@uwaterloo.ca>2018-08-30 01:36:28 -0400
committerLudovic Courtès <ludo@gnu.org>2018-09-19 18:25:28 +0200
commit7b6b7cdcc5d50cb25c140145b30028c5569c62af (patch)
tree3e9266326e37ad50af6349f333b288e807d815c3
parent241358dc94b3c2039a4aa05bcb18b4d1ef6f6d35 (diff)
downloadguix-7b6b7cdcc5d50cb25c140145b30028c5569c62af.tar.gz
guix-7b6b7cdcc5d50cb25c140145b30028c5569c62af.zip
build-system/asdf: Handle all asdf dependency specifications.
Add support for dependencies of the form (:version <name> <version>), (:feature <feature> <dependency-specification>) and (:require <module-name>), as defined by <https://common-lisp.net/project/asdf/asdf.html#The-defsystem-grammar>. * guix/build/lisp-utils.scm (normalize-dependency): New variable. (make-asd-file)[dependencies]: Use it to generate dependencies with normalized names. [dependency-name]: New variable. [registry]: Use it to flatten the normalized dependencies. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r--guix/build/lisp-utils.scm26
1 files changed, 24 insertions, 2 deletions
diff --git a/guix/build/lisp-utils.scm b/guix/build/lisp-utils.scm
index 21cb620d59..3a7afab43d 100644
--- a/guix/build/lisp-utils.scm
+++ b/guix/build/lisp-utils.scm
@@ -81,6 +81,20 @@
"Replace invalid characters in STR with a hyphen."
(string-join (string-tokenize str valid-char-set) "-"))
+(define (normalize-dependency dependency)
+ "Normalize the name of DEPENDENCY. Handles dependency definitions of the
+dependency-def form described by
+<https://common-lisp.net/project/asdf/asdf.html#The-defsystem-grammar>."
+ (match dependency
+ ((':version name rest ...)
+ `(:version ,(normalize-string name) ,@rest))
+ ((':feature feature-specification dependency-specification)
+ `(:feature
+ ,feature-specification
+ ,(normalize-dependency dependency-specification)))
+ ((? string? name) (normalize-string name))
+ (require-specification require-specification)))
+
(define (inputs->asd-file-map inputs)
"Produce a hash table of the form (system . asd-file), where system is the
name of an ASD system, and asd-file is the full path to its definition."
@@ -273,16 +287,24 @@ system to find its dependencies, as described by GENERATE-DEPENDENCY-LINKS."
(system-dependencies system system-asd-file)))
(if (eq? 'NIL deps)
'()
- (map normalize-string deps))))
+ (map normalize-dependency deps))))
(define lisp-input-map
(inputs->asd-file-map inputs))
+ (define dependency-name
+ (match-lambda
+ ((':version name _ ...) name)
+ ((':feature _ dependency-specification)
+ (dependency-name dependency-specification))
+ ((? string? name) name)
+ (_ #f)))
+
(define registry
(filter-map hash-get-handle
(make-list (length dependencies)
lisp-input-map)
- dependencies))
+ (map dependency-name dependencies)))
(call-with-output-file asd-file
(lambda (port)