gexp: Move the package and origin compilers to (guix packages).
From now own, (guix packages) depends on (guix gexps); it was the other way around now. This means that (guix packages) code can use gexps. * guix/gexp.scm (origin-compiler, package-compiler): Remove. (default-guile-derivation): New procedure. (gexp->derivation): Use it instead of 'default-guile' + 'package->derivation'. * guix/packages.scm (default-guile-derivation): New procedure. (package-compiler, origin-compiler): New variables. * doc/guix.texi (G-Expressions): Mention extensibility.
This commit is contained in:
parent
9d8100f4c7
commit
ff40e9b7e5
|
@ -2464,6 +2464,11 @@ processes.
|
|||
When a package or derivation is unquoted inside a gexp, the result is as
|
||||
if its output file name had been introduced.
|
||||
|
||||
Actually this mechanism is not limited to package and derivation
|
||||
objects; @dfn{compilers} able to ``lower'' other high-level objects to
|
||||
derivations can be defined, such that these objects can also be inserted
|
||||
into gexps.
|
||||
|
||||
@item
|
||||
Gexps carry information about the packages or derivations they refer to,
|
||||
and these dependencies are automatically added as inputs to the build
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
#:use-module (guix store)
|
||||
#:use-module (guix monads)
|
||||
#:use-module (guix derivations)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (guix utils)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-9)
|
||||
|
@ -39,7 +38,10 @@
|
|||
text-file*
|
||||
imported-files
|
||||
imported-modules
|
||||
compiled-modules))
|
||||
compiled-modules
|
||||
|
||||
define-gexp-compiler
|
||||
gexp-compiler?))
|
||||
|
||||
;;; Commentary:
|
||||
;;;
|
||||
|
@ -125,16 +127,6 @@ cross-compiling.)"
|
|||
body ...)))
|
||||
(register-compiler! name)))
|
||||
|
||||
(define-gexp-compiler (origin-compiler (origin origin?) system target)
|
||||
;; Compiler for origins.
|
||||
(origin->derivation origin system))
|
||||
|
||||
(define-gexp-compiler (package-compiler (package package?) system target)
|
||||
;; Compiler for packages.
|
||||
(if target
|
||||
(package->cross-derivation package target system)
|
||||
(package->derivation package system)))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Inputs & outputs.
|
||||
|
@ -212,6 +204,15 @@ names and file names suitable for the #:allowed-references argument to
|
|||
|
||||
(sequence %store-monad (map lower lst))))
|
||||
|
||||
(define default-guile-derivation
|
||||
;; Here we break the abstraction by talking to the higher-level layer.
|
||||
;; Thus, do the resolution lazily to hide the circular dependency.
|
||||
(let ((proc (delay
|
||||
(let ((iface (resolve-interface '(guix packages))))
|
||||
(module-ref iface 'default-guile-derivation)))))
|
||||
(lambda (system)
|
||||
((force proc) system))))
|
||||
|
||||
(define* (gexp->derivation name exp
|
||||
#:key
|
||||
system (target 'current)
|
||||
|
@ -314,8 +315,7 @@ The other arguments are as for 'derivation'."
|
|||
(return #f)))
|
||||
(guile (if guile-for-build
|
||||
(return guile-for-build)
|
||||
(package->derivation (default-guile)
|
||||
system))))
|
||||
(default-guile-derivation system))))
|
||||
(mbegin %store-monad
|
||||
(set-grafting graft?) ;restore the initial setting
|
||||
(raw-derivation name
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#:use-module (guix records)
|
||||
#:use-module (guix store)
|
||||
#:use-module (guix monads)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix base32)
|
||||
#:use-module (guix derivations)
|
||||
#:use-module (guix build-system)
|
||||
|
@ -111,6 +112,7 @@
|
|||
bag-transitive-target-inputs
|
||||
|
||||
default-guile
|
||||
default-guile-derivation
|
||||
set-guile-for-build
|
||||
package-file
|
||||
package->derivation
|
||||
|
@ -341,6 +343,12 @@ derivations."
|
|||
(let ((distro (resolve-interface '(gnu packages commencement))))
|
||||
(module-ref distro 'guile-final)))
|
||||
|
||||
(define* (default-guile-derivation #:optional (system (%current-system)))
|
||||
"Return the derivation for SYSTEM of the default Guile package used to run
|
||||
the build code of derivation."
|
||||
(package->derivation (default-guile) system
|
||||
#:graft? #f))
|
||||
|
||||
;; TODO: Rewrite using %STORE-MONAD and gexps.
|
||||
(define* (patch-and-repack store source patches
|
||||
#:key
|
||||
|
@ -939,6 +947,13 @@ cross-compilation target triplet."
|
|||
(define package->cross-derivation
|
||||
(store-lift package-cross-derivation))
|
||||
|
||||
(define-gexp-compiler (package-compiler (package package?) system target)
|
||||
;; Compile PACKAGE to a derivation for SYSTEM, optionally cross-compiled for
|
||||
;; TARGET. This is used when referring to a package from within a gexp.
|
||||
(if target
|
||||
(package->cross-derivation package target system)
|
||||
(package->derivation package system)))
|
||||
|
||||
(define patch-and-repack*
|
||||
(store-lift patch-and-repack))
|
||||
|
||||
|
@ -976,5 +991,10 @@ outside of the store) or SOURCE itself (if SOURCE is already a store item.)"
|
|||
(interned-file file (basename file)
|
||||
#:recursive? #t))))
|
||||
|
||||
(define-gexp-compiler (origin-compiler (origin origin?) system target)
|
||||
;; Compile ORIGIN to a derivation for SYSTEM. This is used when referring
|
||||
;; to an origin from within a gexp.
|
||||
(origin->derivation origin system))
|
||||
|
||||
(define package-source-derivation
|
||||
(store-lower origin->derivation))
|
||||
|
|
Loading…
Reference in New Issue