From: "Ludovic Courtès" <ludo@gnu.org>
To: 34122@debbugs.gnu.org
Cc: rekado@elephly.net
Subject: [bug#34122] [PATCH 2/3] inferior: 'gexp->derivation-in-inferior' honors EXP's load path.
Date: Fri, 18 Jan 2019 10:53:43 +0100 [thread overview]
Message-ID: <20190118095344.12927-2-ludo@gnu.org> (raw)
In-Reply-To: <20190118095344.12927-1-ludo@gnu.org>
Previously the imported modules and extensions of EXP would be missing
from the load path of 'guix repl'.
* guix/inferior.scm (gexp->derivation-in-inferior)[script]: New
variable.
[trampoline]: Write (primitive-load #$script) to PIPE. Add #$output.
* tests/channels.scm ("channel-instances->manifest")[depends?]: Check
for requisites rather than direct references.
Adjust callers accordingly.
---
guix/inferior.scm | 13 ++++++++++---
tests/channels.scm | 16 ++++++++++------
2 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/guix/inferior.scm b/guix/inferior.scm
index 4dfb242e44..9f19e7d316 100644
--- a/guix/inferior.scm
+++ b/guix/inferior.scm
@@ -491,6 +491,10 @@ PACKAGE must be live."
"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 script
+ ;; EXP wrapped with a proper (set! %load-path …) prologue.
+ (scheme-file "inferior-script.scm" exp))
+
(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
@@ -501,9 +505,12 @@ passed as-is to 'gexp->derivation'."
(let ((pipe (open-pipe* OPEN_WRITE
#+(file-append guix "/bin/guix")
"repl" "-t" "machine")))
- ;; Unquote EXP right here so that its references to #$output
- ;; propagate to the surrounding gexp.
- (write '#$exp pipe) ;XXX: load path for EXP?
+
+ ;; XXX: EXP presumably refers to #$output but that reference is lost
+ ;; so explicitly reference it here.
+ #$output
+
+ (write `(primitive-load #$script) pipe)
(unless (zero? (close-pipe pipe))
(error "inferior failed" #+guix)))))
diff --git a/tests/channels.scm b/tests/channels.scm
index 7df1b8c5fe..8540aef435 100644
--- a/tests/channels.scm
+++ b/tests/channels.scm
@@ -24,6 +24,7 @@
#:use-module (guix store)
#:use-module ((guix grafts) #:select (%graft?))
#:use-module (guix derivations)
+ #:use-module (guix sets)
#:use-module (guix gexp)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
@@ -187,12 +188,15 @@
(manifest-entries manifest))
(define (depends? drv in out)
- ;; Return true if DRV depends on all of IN and none of OUT.
- (let ((lst (map derivation-input-path (derivation-inputs drv)))
+ ;; Return true if DRV depends (directly or indirectly) on all of IN
+ ;; and none of OUT.
+ (let ((set (list->set
+ (requisites store
+ (list (derivation-file-name drv)))))
(in (map derivation-file-name in))
(out (map derivation-file-name out)))
- (and (every (cut member <> lst) in)
- (not (any (cut member <> lst) out)))))
+ (and (every (cut set-contains? set <>) in)
+ (not (any (cut set-contains? set <>) out)))))
(define (lookup name)
(run-with-store store
@@ -212,8 +216,8 @@
(depends? drv1
(list drv0) (list drv2 drv3))
(depends? drv2
- (list drv1) (list drv0 drv3))
+ (list drv1) (list drv3))
(depends? drv3
- (list drv2 drv0) (list drv1))))))))
+ (list drv2 drv0) (list))))))))
(test-end "channels")
--
2.20.1
next prev parent reply other threads:[~2019-01-18 9:54 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-18 9:29 [bug#34122] [PATCH 0/3] Build channel modules in the corresponding Guix Ludovic Courtès
2019-01-18 9:53 ` [bug#34122] [PATCH 1/3] channels: Don't pull from the same channel more than once Ludovic Courtès
2019-01-18 9:53 ` Ludovic Courtès [this message]
2019-01-18 9:53 ` [bug#34122] [PATCH 3/3] channels: Build channel modules in an inferior Ludovic Courtès
2019-01-20 18:24 ` bug#34122: [PATCH 0/3] Build channel modules in the corresponding Guix Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190118095344.12927-2-ludo@gnu.org \
--to=ludo@gnu.org \
--cc=34122@debbugs.gnu.org \
--cc=rekado@elephly.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.