diff options
-rw-r--r-- | guix/derivations.scm | 13 | ||||
-rw-r--r-- | tests/derivations.scm | 24 |
2 files changed, 29 insertions, 8 deletions
diff --git a/guix/derivations.scm b/guix/derivations.scm index 5ad9f49c00..b13664ce05 100644 --- a/guix/derivations.scm +++ b/guix/derivations.scm @@ -250,7 +250,7 @@ the derivation called NAME with hash HASH." (define* (derivation store name system builder args env-vars inputs #:key (outputs '("out")) hash hash-algo hash-mode) "Build a derivation with the given arguments. Return the resulting -<derivation> object and its store path. When HASH, HASH-ALGO, and HASH-MODE +store path and <derivation> object. When HASH, HASH-ALGO, and HASH-MODE are given, a fixed-output derivation is created---i.e., one whose result is known in advance, such as a file download." (define (add-output-paths drv) @@ -321,8 +321,9 @@ known in advance, such as a file download." inputs) system builder args env-vars)) (drv (add-output-paths drv-masked))) - (add-text-to-store store (string-append name ".drv") - (call-with-output-string - (cut write-derivation drv <>)) - (map derivation-input-path - inputs)))) + (values (add-text-to-store store (string-append name ".drv") + (call-with-output-string + (cut write-derivation drv <>)) + (map derivation-input-path + inputs)) + drv))) diff --git a/tests/derivations.scm b/tests/derivations.scm index c3aba3f12b..c9b5db2311 100644 --- a/tests/derivations.scm +++ b/tests/derivations.scm @@ -20,9 +20,11 @@ (define-module (test-derivations) #:use-module (guix derivations) #:use-module (guix store) + #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) #:use-module (srfi srfi-64) - #:use-module (rnrs io ports)) + #:use-module (rnrs io ports) + #:use-module (ice-9 rdelim)) (define %store (false-if-exception (open-connection))) @@ -37,7 +39,7 @@ (and (equal? b1 b2) (equal? d1 d2)))) -(test-skip (if %store 0 1)) +(test-skip (if %store 0 2)) (test-assert "derivation with no inputs" (let ((builder (add-text-to-store %store "my-builder.sh" @@ -46,6 +48,24 @@ (store-path? (derivation %store "foo" "x86_64-linux" builder '() '(("HOME" . "/homeless")) '())))) +(test-assert "build derivation with 1 source" + (let*-values (((builder) + (add-text-to-store %store "my-builder.sh" + "#!/bin/sh\necho hello, world > \"$out\"\n" + '())) + ((drv-path drv) + (derivation %store "foo" "x86_64-linux" + "/bin/sh" `(,builder) + '(("HOME" . "/homeless")) + `((,builder)))) + ((succeeded?) + (build-derivations %store (list drv-path)))) + (and succeeded? + (let ((path (derivation-output-path + (assoc-ref (derivation-outputs drv) "out")))) + (string=? (call-with-input-file path read-line) + "hello, world"))))) + (test-end) |