Hello.

There is a strange problem with evaluating a code using Geiser, which
leads to some missing output in a REPL.  I have an example demonstrating
the problem using some Guix code, but I would like to have a pure guile
recipe, so that it can be reported.

So how to reproduce the bug.  At first, make a file "test-bug.scm"
(attached) and put it somewhere to GUIX_PACKAGE_PATH.  Run "guix build
test-package" in shell to make sure that the package is found.  The
building will fail, but it's fine for this demonstration.  Note that
there is a usual output from guix-daemon ("@ build-started …").

Now the bug itself:

1. Start Geiser (M-x run-guile)

2. Make a scheme buffer and evaluate (use-modules (guix scripts build))
   there using "C-x C-e" or "C-M-x" (or any other "geiser-eval-…"
   command).  This is important: do not ,use module in the REPL;
   evaluate ‘use-modules’ clause in a scheme buffer!

3. Go to the REPL and run the following there:

   (catch 'quit (lambda () (guix-build "test-package")) (const #t)).

You get only "The following derivation will be built: …" but there is no
build output from guix-daemon.

Now if you close the REPL and repeat this recipe but on the 2nd step you
evaluate (use-modules (guix scripts build)) or ,use(guix scripts build)
in the REPL itself, you will see the build output as expected.

So there is something special with this guix-daemon output and with
Geiser synchronous evaluating (using ‘geiser-eval--send/wait’) that
sends this output to a better world.

I appreciate any ideas on solving this bug or making a guix-independent
recipe to reproduce it.

(define-module (test-bug)
  #:use-module (guix packages)
  #:use-module (guix build-system trivial)
  #:use-module (gnu packages base))

(define-public test-package
  (package (inherit hello)
    (name "test-package")
    (build-system trivial-build-system)
    (arguments
     '(#:builder (const #t)))))

Reply via email to