M guix/gexp.scm => guix/gexp.scm +12 -0
@@ 85,6 85,9 @@ input list as a monadic value."
(((? package? package) sub-drv ...)
(mlet %store-monad ((drv (package->derivation package)))
(return `(,drv ,@sub-drv))))
+ (((? origin? origin) sub-drv ...)
+ (mlet %store-monad ((drv (origin->derivation origin)))
+ (return `(,drv ,@sub-drv))))
(input
(return input)))
inputs))))
@@ 158,6 161,8 @@ The other arguments are as for 'derivation'."
(cons ref result))
(((? package?) (? string?))
(cons ref result))
+ (((? origin?) (? string?))
+ (cons ref result))
((? gexp? exp)
(append (gexp-inputs exp) result))
(((? string? file))
@@ 199,6 204,9 @@ and in the current monad setting (system type, etc.)"
(return (derivation->output-path drv output)))
(((? package? p) (? string? output))
(package-file p #:output output))
+ (((? origin? o) (? string? output))
+ (mlet %store-monad ((drv (origin->derivation o)))
+ (return (derivation->output-path drv output))))
(($ <output-ref> output)
;; Output file names are not known in advance but the daemon defines
;; an environment variable for each of them at build time, so use
@@ 224,10 232,14 @@ package/derivation references."
(match ref
((? package? p)
`(,p "out"))
+ ((? origin? o)
+ `(,o "out"))
((? derivation? d)
`(,d "out"))
(((? package?) (? string?))
ref)
+ (((? origin?) (? string?))
+ ref)
(((? derivation?) (? string?))
ref)
((? string? s)
M guix/monads.scm => guix/monads.scm +4 -0
@@ 56,6 56,7 @@
text-file
text-file*
package-file
+ origin->derivation
package->derivation
built-derivations)
#:replace (imported-modules
@@ 395,6 396,9 @@ input list as a monadic value."
(define package->derivation
(store-lift package-derivation))
+(define origin->derivation
+ (store-lift package-source-derivation))
+
(define imported-modules
(store-lift (@ (guix derivations) imported-modules)))
M tests/gexp.scm => tests/gexp.scm +12 -2
@@ 21,8 21,7 @@
#:use-module (guix monads)
#:use-module (guix gexp)
#:use-module (guix derivations)
- #:use-module ((guix packages)
- #:select (package-derivation %current-system))
+ #:use-module (guix packages)
#:use-module (gnu packages)
#:use-module (gnu packages base)
#:use-module (gnu packages bootstrap)
@@ 83,6 82,17 @@
(package-derivation %store coreutils)))
(gexp->sexp* exp)))))
+(test-assert "one input origin"
+ (let ((exp (gexp (display (ungexp (package-source coreutils))))))
+ (and (gexp? exp)
+ (match (gexp-inputs exp)
+ (((o "out"))
+ (eq? o (package-source coreutils))))
+ (equal? `(display ,(derivation->output-path
+ (package-source-derivation
+ %store (package-source coreutils))))
+ (gexp->sexp* exp)))))
+
(test-assert "same input twice"
(let ((exp (gexp (begin
(display (ungexp coreutils))