summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2012-06-13 17:21:27 +0200
committerLudovic Courtès <ludo@gnu.org>2012-06-13 17:21:27 +0200
commit2acb2cb6d006a4799ae9f477c22177824fcc8f52 (patch)
tree4a79c9dc9cde2af4e7e41280de075e12406777ce
parentc36db98c8eaeded5243ecfa1c66e06f38da10692 (diff)
downloadguix-2acb2cb6d006a4799ae9f477c22177824fcc8f52.tar.gz
Change `build-expression->derivation' to support sub-derivation inputs.
* guix/derivations.scm (build-expression->derivation): Change to expect
  INPUTS to have the form (NAME DRV-PATH SUB-DRV) or (NAME DRV-PATH),
  instead of (NAME . DRV-PATH).  Update callers accordingly.

* guix/gnu-build-system.scm, tests/builders.scm, tests/derivations.scm:
  Update accordingly.
-rw-r--r--guix/derivations.scm34
-rw-r--r--guix/gnu-build-system.scm7
-rw-r--r--tests/builders.scm2
-rw-r--r--tests/derivations.scm2
4 files changed, 25 insertions, 20 deletions
diff --git a/guix/derivations.scm b/guix/derivations.scm
index c709aabc78..ffdf570fc2 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -397,7 +397,7 @@ system, imported, and appears under FINAL-PATH in the resulting store path."
 
   (let* ((files   (map (match-lambda
                         ((final-path . file-name)
-                         (cons final-path
+                         (list final-path
                                (add-to-store store (basename final-path) #t #f
                                              "sha256" file-name))))
                        files))
@@ -405,7 +405,7 @@ system, imported, and appears under FINAL-PATH in the resulting store path."
           `(begin
              (mkdir %output) (chdir %output)
              ,@(append-map (match-lambda
-                            ((final-path . store-path)
+                            ((final-path store-path)
                              (append (match (parent-dirs final-path)
                                        (() '())
                                        ((head ... tail)
@@ -442,11 +442,11 @@ search path."
                                        hash hash-algo
                                        (modules '()))
   "Return a derivation that executes Scheme expression EXP as a builder for
-derivation NAME.  INPUTS must be a list of string/derivation-path pairs.  EXP
-is evaluated in an environment where %OUTPUT is bound to the main output
-path, %OUTPUTS is bound to a list of output/path pairs, and where
-%BUILD-INPUTS is bound to an alist of string/output-path pairs made from
-INPUTS."
+derivation NAME.  INPUTS must be a list of (NAME DRV-PATH SUB-DRV) tuples;
+when SUB-DRV is omitted, \"out\" is assumed.  EXP is evaluated in an
+environment where %OUTPUT is bound to the main output path, %OUTPUTS is bound
+to a list of output/path pairs, and where %BUILD-INPUTS is bound to an alist
+of string/output-path pairs made from INPUTS."
   (define guile
     (string-append (derivation-path->output-path (%guile-for-build))
                    "/bin/guile"))
@@ -459,17 +459,21 @@ INPUTS."
                              ',outputs))
                       (define %build-inputs
                         ',(map (match-lambda
-                                ((name . drv)
-                                 (cons name
-                                       (if (derivation-path? drv)
-                                           (derivation-path->output-path drv)
-                                           drv))))
-                               inputs))) )
+                                ((name drv . rest)
+                                 (let ((sub (match rest
+                                              (() "out")
+                                              ((x) x))))
+                                   (cons name
+                                         (if (derivation-path? drv)
+                                             (derivation-path->output-path drv
+                                                                           sub)
+                                             drv)))))
+                               inputs))))
          (builder  (add-text-to-store store
                                       (string-append name "-guile-builder")
                                       (string-append (object->string prologue)
                                                      (object->string exp))
-                                      (map cdr inputs)))
+                                      (map second inputs)))
          (mod-drv  (if (null? modules)
                        #f
                        (imported-modules store modules)))
@@ -482,7 +486,7 @@ INPUTS."
                 '(("HOME" . "/homeless"))
                 `((,(%guile-for-build))
                   (,builder)
-                  ,@(map (compose list cdr) inputs)
+                  ,@(map cdr inputs)
                   ,@(if mod-drv `((,mod-drv)) '()))
                 #:hash hash #:hash-algo hash-algo
                 #:outputs outputs)))
diff --git a/guix/gnu-build-system.scm b/guix/gnu-build-system.scm
index 45e9f444ae..811ae965ac 100644
--- a/guix/gnu-build-system.scm
+++ b/guix/gnu-build-system.scm
@@ -32,7 +32,7 @@
 
 (define %standard-inputs
   (map (lambda (name)
-         (cons name (nixpkgs-derivation name)))
+         (list name (nixpkgs-derivation name)))
        '("gnutar" "gzip" "bzip2" "xz"
          "coreutils" "gnused" "gnugrep" "bash"
          "gcc" "binutils" "gnumake" "glibc")))
@@ -54,8 +54,9 @@ input derivation INPUTS, using the usual procedure of the GNU Build System."
 
   (build-expression->derivation store name system
                                 builder
-                                (alist-cons "source" source
-                                            (append inputs %standard-inputs))
+                                `(("source" ,source)
+                                  ,@inputs
+                                  ,@%standard-inputs)
                                 #:outputs outputs
                                 #:modules '((guix build gnu-build-system)
                                             (guix build utils))))
diff --git a/tests/builders.scm b/tests/builders.scm
index c68f1ffe8d..851baa9ebf 100644
--- a/tests/builders.scm
+++ b/tests/builders.scm
@@ -47,7 +47,7 @@
                     "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))
          (tarball  (http-fetch %store url 'sha256 hash))
          (build    (gnu-build %store "hello-2.8" tarball
-                              `(("gawk" . ,(nixpkgs-derivation "gawk"))))))
+                              `(("gawk" ,(nixpkgs-derivation "gawk"))))))
     (and (build-derivations %store (list (pk 'hello-drv build)))
          (file-exists? (string-append (derivation-path->output-path build)
                                       "/bin/hello")))))
diff --git a/tests/derivations.scm b/tests/derivations.scm
index d39dacd9a0..4a81a70f65 100644
--- a/tests/derivations.scm
+++ b/tests/derivations.scm
@@ -211,7 +211,7 @@
                                    "uname" "-a")))))
          (drv-path   (build-expression->derivation %store "uname" (%current-system)
                                                    builder
-                                                   `(("cu" . ,%coreutils))))
+                                                   `(("cu" ,%coreutils))))
          (succeeded? (build-derivations %store (list drv-path))))
     (and succeeded?
          (let ((p (derivation-path->output-path drv-path)))