GNU bug report logs - #70611
outputs are baked in gexps, cannot be removed in derived packages

Previous Next

Package: guix;

Reported by: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>

Date: Sat, 27 Apr 2024 16:56:01 UTC

Severity: normal

To reply to this bug, email your comments to 70611 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guix <at> gnu.org:
bug#70611; Package guix. (Sat, 27 Apr 2024 16:56:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Maxim Cournoyer <maxim.cournoyer <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Sat, 27 Apr 2024 16:56:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: bug-guix <bug-guix <at> gnu.org>
Subject: outputs are baked in gexps, cannot be removed in derived packages
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




Information forwarded to bug-guix <at> gnu.org:
bug#70611; Package guix. (Mon, 06 May 2024 12:35:02 GMT) Full text and rfc822 format available.

Message #8 received at 70611 <at> debbugs.gnu.org (full text, mbox):

From: Simon Tournier <zimon.toutoune <at> gmail.com>
To: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>, 70611 <at> debbugs.gnu.org
Subject: Re: bug#70611: outputs are baked in gexps, cannot be removed in
 derived packages
Date: Fri, 03 May 2024 21:13:09 +0200
Hi,

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

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

--8<---------------cut here---------------start------------->8---
$ ./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]
--8<---------------cut here---------------end--------------->8---

But from ’guix repl’

--8<---------------cut here---------------start------------->8---
scheme@(guix-user)> ,pp (package-outputs llvm-cling-2)
$6 = ("out")
--8<---------------cut here---------------end--------------->8---

And the package arguments reads:

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

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

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

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




This bug report was last modified 8 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.