Subject: bug#70611: outputs are baked in gexps, cannot be removed in derived packages

From: Maxim Cournoyer <[email-masked]>
Date: Sat, 27 Apr 2024 12:55:00 -0400

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:

--8<---------------cut here---------------start------------->8---
(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))))))))
--8<---------------cut here---------------end--------------->8---

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:

--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---

-- 
Thanks,
Maxim