guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/07: build-system/asdf: Handle all asdf dependency specifications.


From: Ludovic Courtès
Subject: 03/07: build-system/asdf: Handle all asdf dependency specifications.
Date: Wed, 19 Sep 2018 12:25:38 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit 7b6b7cdcc5d50cb25c140145b30028c5569c62af
Author: Andy Patterson <address@hidden>
Date:   Thu Aug 30 01:36:28 2018 -0400

    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 <address@hidden>
---
 guix/build/lisp-utils.scm | 26 ++++++++++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/guix/build/lisp-utils.scm b/guix/build/lisp-utils.scm
index 21cb620..3a7afab 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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]