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.master
parent
9d8100f4c7
commit
ff40e9b7e5
|
@ -2464,6 +2464,11 @@ processes.
|
||||||
When a package or derivation is unquoted inside a gexp, the result is as
|
When a package or derivation is unquoted inside a gexp, the result is as
|
||||||
if its output file name had been introduced.
|
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
|
@item
|
||||||
Gexps carry information about the packages or derivations they refer to,
|
Gexps carry information about the packages or derivations they refer to,
|
||||||
and these dependencies are automatically added as inputs to the build
|
and these dependencies are automatically added as inputs to the build
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
#:use-module (guix store)
|
#:use-module (guix store)
|
||||||
#:use-module (guix monads)
|
#:use-module (guix monads)
|
||||||
#:use-module (guix derivations)
|
#:use-module (guix derivations)
|
||||||
#:use-module (guix packages)
|
|
||||||
#:use-module (guix utils)
|
#:use-module (guix utils)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-9)
|
#:use-module (srfi srfi-9)
|
||||||
|
@ -39,7 +38,10 @@
|
||||||
text-file*
|
text-file*
|
||||||
imported-files
|
imported-files
|
||||||
imported-modules
|
imported-modules
|
||||||
compiled-modules))
|
compiled-modules
|
||||||
|
|
||||||
|
define-gexp-compiler
|
||||||
|
gexp-compiler?))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
||||||
|
@ -125,16 +127,6 @@ cross-compiling.)"
|
||||||
body ...)))
|
body ...)))
|
||||||
(register-compiler! name)))
|
(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.
|
;;; Inputs & outputs.
|
||||||
|
@ -212,6 +204,15 @@ names and file names suitable for the #:allowed-references argument to
|
||||||
|
|
||||||
(sequence %store-monad (map lower lst))))
|
(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
|
(define* (gexp->derivation name exp
|
||||||
#:key
|
#:key
|
||||||
system (target 'current)
|
system (target 'current)
|
||||||
|
@ -314,8 +315,7 @@ The other arguments are as for 'derivation'."
|
||||||
(return #f)))
|
(return #f)))
|
||||||
(guile (if guile-for-build
|
(guile (if guile-for-build
|
||||||
(return guile-for-build)
|
(return guile-for-build)
|
||||||
(package->derivation (default-guile)
|
(default-guile-derivation system))))
|
||||||
system))))
|
|
||||||
(mbegin %store-monad
|
(mbegin %store-monad
|
||||||
(set-grafting graft?) ;restore the initial setting
|
(set-grafting graft?) ;restore the initial setting
|
||||||
(raw-derivation name
|
(raw-derivation name
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#:use-module (guix records)
|
#:use-module (guix records)
|
||||||
#:use-module (guix store)
|
#:use-module (guix store)
|
||||||
#:use-module (guix monads)
|
#:use-module (guix monads)
|
||||||
|
#:use-module (guix gexp)
|
||||||
#:use-module (guix base32)
|
#:use-module (guix base32)
|
||||||
#:use-module (guix derivations)
|
#:use-module (guix derivations)
|
||||||
#:use-module (guix build-system)
|
#:use-module (guix build-system)
|
||||||
|
@ -111,6 +112,7 @@
|
||||||
bag-transitive-target-inputs
|
bag-transitive-target-inputs
|
||||||
|
|
||||||
default-guile
|
default-guile
|
||||||
|
default-guile-derivation
|
||||||
set-guile-for-build
|
set-guile-for-build
|
||||||
package-file
|
package-file
|
||||||
package->derivation
|
package->derivation
|
||||||
|
@ -341,6 +343,12 @@ derivations."
|
||||||
(let ((distro (resolve-interface '(gnu packages commencement))))
|
(let ((distro (resolve-interface '(gnu packages commencement))))
|
||||||
(module-ref distro 'guile-final)))
|
(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.
|
;; TODO: Rewrite using %STORE-MONAD and gexps.
|
||||||
(define* (patch-and-repack store source patches
|
(define* (patch-and-repack store source patches
|
||||||
#:key
|
#:key
|
||||||
|
@ -939,6 +947,13 @@ cross-compilation target triplet."
|
||||||
(define package->cross-derivation
|
(define package->cross-derivation
|
||||||
(store-lift 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*
|
(define patch-and-repack*
|
||||||
(store-lift 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)
|
(interned-file file (basename file)
|
||||||
#:recursive? #t))))
|
#: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
|
(define package-source-derivation
|
||||||
(store-lower origin->derivation))
|
(store-lower origin->derivation))
|
||||||
|
|
Reference in New Issue