[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#34060] [PATCH 04/10] inferior: Add 'gexp->derivation-in-inferior'.
From: |
Ludovic Courtès |
Subject: |
[bug#34060] [PATCH 04/10] inferior: Add 'gexp->derivation-in-inferior'. |
Date: |
Sun, 13 Jan 2019 16:47:27 +0100 |
* guix/inferior.scm (gexp->derivation-in-inferior): New procedure.
---
guix/inferior.scm | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/guix/inferior.scm b/guix/inferior.scm
index ba8d00866b..42b3545599 100644
--- a/guix/inferior.scm
+++ b/guix/inferior.scm
@@ -81,6 +81,8 @@
inferior-package->manifest-entry
+ gexp->derivation-in-inferior
+
%inferior-cache-directory
inferior-for-channels))
@@ -484,6 +486,30 @@ PACKAGE must be live."
;; Compile PACKAGE for SYSTEM, optionally cross-building for TARGET.
(inferior-package->derivation package system #:target target))
+(define* (gexp->derivation-in-inferior name exp guix
+ #:rest rest)
+ "Return a derivation that evaluates EXP with GUIX, an instance of Guix as
+returned for example by 'channel-instances->derivation'. Other arguments are
+passed as-is to 'gexp->derivation'."
+ (define trampoline
+ ;; This is a crude way to run EXP on GUIX. TODO: use 'raw-derivation' and
+ ;; make 'guix repl' the "builder"; this will require "opening up" the
+ ;; mechanisms behind 'gexp->derivation', and adding '-l' to 'guix repl'.
+ #~(begin
+ (use-modules (ice-9 popen))
+
+ (let ((pipe (open-pipe* OPEN_WRITE
+ #+(file-append guix "/bin/guix")
+ "repl")))
+ ;; Unquote EXP right here so that its references to #$output
+ ;; propagate to the surrounding gexp.
+ (write '#$exp pipe) ;XXX: load path for EXP?
+
+ (unless (zero? (close-pipe pipe))
+ (error "inferior failed" #+guix)))))
+
+ (apply gexp->derivation name trampoline rest))
+
;;;
;;; Manifest entries.
--
2.20.1
- [bug#34060] [PATCH 00/10] Add a cache for package lookups, Ludovic Courtès, 2019/01/13
- [bug#34060] [PATCH 01/10] profiling: Add a "gc" profiling component., Ludovic Courtès, 2019/01/13
- [bug#34060] [PATCH 03/10] packages: Remove 'find-newest-available-packages'., Ludovic Courtès, 2019/01/13
- [bug#34060] [PATCH 04/10] inferior: Add 'gexp->derivation-in-inferior'.,
Ludovic Courtès <=
- [bug#34060] [PATCH 02/10] guix package: Avoid 'find-newest-available-packages'., Ludovic Courtès, 2019/01/13
- [bug#34060] [PATCH 10/10] status: Distinguish 'package-cache' profile hook., Ludovic Courtès, 2019/01/13
- [bug#34060] [PATCH 05/10] discovery: Add 'fold-module-public-variables*'., Ludovic Courtès, 2019/01/13
- [bug#34060] [PATCH 06/10] pull: Build profile with 'channel-instances->derivation'., Ludovic Courtès, 2019/01/13
- [bug#34060] [PATCH 08/10] edit: Use 'specification->location' to read information from the cache., Ludovic Courtès, 2019/01/13
- [bug#34060] [PATCH 09/10] guix package: '--list-available' can use data from the cache., Ludovic Courtès, 2019/01/13
- [bug#34060] [PATCH 07/10] channels: Compute a package cache and use it., Ludovic Courtès, 2019/01/13
- bug#34060: [PATCH 00/10] Add a cache for package lookups, Ludovic Courtès, 2019/01/15