outputs are baked in gexps, cannot be removed in derived packages

  • Open
  • quality assurance status badge
Details
2 participants
  • Maxim Cournoyer
  • Simon Tournier
Owner
unassigned
Submitted by
Maxim Cournoyer
Severity
normal
M
M
Maxim Cournoyer wrote on 27 Apr 18:55 +0200
(name . bug-guix)(address . bug-guix@gnu.org)
87o79ueoez.fsf@gmail.com
Hi Guix,

I've stumbled upon the following existing use case that no longer works
when the base package is expressed using gexps:

Base package:

Toggle snippet (45 lines)
(define-public llvm-15
(package
(name "llvm")
(version "15.0.7")
[...]

#~(modify-phases %standard-phases
(add-after 'unpack 'change-directory
(lambda _
(chdir "llvm")))
(add-after 'install 'install-opt-viewer
(lambda* (#:key outputs #:allow-other-keys)
(let* ((opt-viewer-share (string-append #$output:opt-viewer
"/share")))
(mkdir-p opt-viewer-share)
(rename-file (string-append #$output "/share/opt-viewer")
opt-viewer-share)))))))

[...]

(define-public llvm-cling
(let ((base llvm-18))
(package/inherit base
(name "llvm-cling")
(version "18-20240227-01")
(source
(origin
(inherit (package-source base))
(method git-fetch)
(uri (git-reference
(url "https://github.com/root-project/llvm-project")
(commit (string-append "cling-llvm" version))))
(file-name (git-file-name "llvm-cling" version))
(sha256
(base32
"0m5hhqk9y80srvkws2gs9rhpi6bjdy8mfk94z8fx6nmfxwrqsya8"))))
(outputs '("out"))
(arguments
(substitute-keyword-arguments (package-arguments base)
((#:phases phases '%standard-phases)
#~(modify-phases #$phases
(delete 'install-opt-viewer))))))))

Attempting to build llvm-cling fails because the phases gexps inherited
from llvm-15 references the 'opt-viewer' output, which llvm-cling tries
to remove without success:

Toggle snippet (3 lines)
builder for `/gnu/store/f2pdg9m5q3bxrlahjvlrdgw41x6kp3zd-llvm-cling-18-20240227-01.drv' failed to produce output path `/gnu/store/m1z5257hj5vwc2rl47wkpf0wmr6x0bq2-llvm-cling-18-20240227-01-opt-viewer'

--
Thanks,
Maxim
S
S
Simon Tournier wrote on 3 May 21:13 +0200
87wmoaiu9m.fsf@gmail.com
Hi,

On sam., 27 avril 2024 at 12:55, Maxim Cournoyer <maxim.cournoyer@gmail.com> wrote:

Toggle quote (4 lines)
> --8<---------------cut here---------------start------------->8---
> builder for `/gnu/store/f2pdg9m5q3bxrlahjvlrdgw41x6kp3zd-llvm-cling-18-20240227-01.drv' failed to produce output path `/gnu/store/m1z5257hj5vwc2rl47wkpf0wmr6x0bq2-llvm-cling-18-20240227-01-opt-viewer'
> --8<---------------cut here---------------end--------------->8---

Yeah something is unexpected.

Toggle snippet (7 lines)
$ ./pre-inst-env guix build llvm-cling -d --no-grafts \
| xargs guix drv-show | recsel -p outputs
outputs:
+ /gnu/store/m1z5257hj5vwc2rl47wkpf0wmr6x0bq2-llvm-cling-18-20240227-01-opt-viewer [opt-viewer]
+ /gnu/store/bg3xs25xyllpzw322sqcc8ipw9q8lph6-llvm-cling-18-20240227-01 [out]

But from ’guix repl’

Toggle snippet (4 lines)
scheme@(guix-user)> ,pp (package-outputs llvm-cling-2)
$6 = ("out")

And the package arguments reads:

Toggle snippet (21 lines)
scheme@(guix-user)> ,pp (package-arguments llvm-cling-2)
$5 = (#:configure-flags
#<gexp gnu/packages/llvm.scm:586:6 7f6a06421150>
#:build-type
"Release"
#:phases
#<gexp (modify-phases #<gexp-input
#<gexp (modify-phases %standard-phases
(add-after (quote unpack) (quote change-directory)
(lambda _
(chdir "llvm")))
(add-after (quote install) (quote install-opt-viewer)
(lambda* (#:key outputs #:allow-other-keys)
(let* ((opt-viewer-share (string-append #<gexp-output opt-viewer> "/share")))
(mkdir-p opt-viewer-share)
(rename-file (string-append #<gexp-output out> "/share/opt-viewer") opt-viewer-share)))))
gnu/packages/llvm.scm:612:6 7f6a06421090>:out>
(delete (quote install-opt-viewer)))
gnu/packages/llvm.scm:2443:10 7f6a06421060>)

Concretely,
/gnu/store/rhb3lmkbp5d92c0x0sxkmfwbpbs4b4hp-llvm-cling-18-20240227-01-builder
reads,

Toggle snippet (46 lines)
(define %outputs
(list
(cons "out"
((@
(guile)
getenv)
"out"))))
(define %output
(assoc-ref %outputs "out"))
(cmake-build
[...]

#:phases
(modify-phases
(modify-phases %standard-phases
(add-after
(quote unpack)
(quote change-directory)
(lambda _
(chdir "llvm")))
(add-after
(quote install)
(quote install-opt-viewer)
(lambda*
(#:key outputs #:allow-other-keys)
(let*
((opt-viewer-share
(string-append
((@
(guile)
getenv)
"opt-viewer")
"/share")))
(mkdir-p opt-viewer-share)
(rename-file
(string-append
((@
(guile)
getenv)
"out")
"/share/opt-viewer")
opt-viewer-share)))))
(delete
(quote install-opt-viewer)))

Therefore, the bug comes from an incorrect derivation (drv) file. It
contains an output that it should not.

Well, I have not investigated further… Probably an issue with code
staging (what is evaluated when).


Cheers,
simon
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 70611@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 70611
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch