GNU bug report logs - #53915
No way of replacing an input in modify-input syntax structure but keep all the outputs

Previous Next

Package: guix;

Reported by: Gordon Quad <gordon <at> niflheim.info>

Date: Thu, 10 Feb 2022 10:10:02 UTC

Severity: important

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 53915 in the body.
You can then email your comments to 53915 AT debbugs.gnu.org in the normal way.

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#53915; Package guix. (Thu, 10 Feb 2022 10:10:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Gordon Quad <gordon <at> niflheim.info>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Thu, 10 Feb 2022 10:10:02 GMT) Full text and rfc822 format available.

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

From: Gordon Quad <gordon <at> niflheim.info>
To: bug-guix <at> gnu.org
Subject: No way of replacing an input in modify-input syntax structure but
 keep all the outputs
Date: Thu, 10 Feb 2022 10:09:41 +0000
poppler package include glib as a native-input with "bin" output.

If I am doing the following:

(package/inherit poppler
    (native-inputs
        (modify-inputs (package-native-inputs poppler)
            (replace "glib" my-glib))))

poppler's build will fail becuase replace syntax will replace "glib"
package erasing its outputs. I can specify output explicitly by doing
(replace "glib" (my-glib "bin")) in this case, but that makes mass input
modification difficult (e.g. if i want to replace all instances of glib
to my-glib).

That said there is a value in having such behaviour for replace syntax
in case for example if I replace package with my own version that has no
extra outputs, so it would be nice to have both options available.




Information forwarded to bug-guix <at> gnu.org:
bug#53915; Package guix. (Thu, 10 Feb 2022 20:05:02 GMT) Full text and rfc822 format available.

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

From: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
To: Gordon Quad <gordon <at> niflheim.info>, 53915 <at> debbugs.gnu.org
Cc: ludo <at> gnu.org
Subject: Re: No way of replacing an input in modify-input syntax structure
 but keep all the outputs
Date: Thu, 10 Feb 2022 21:03:56 +0100
Am Donnerstag, dem 10.02.2022 um 10:09 +0000 schrieb Gordon Quad:
> poppler package include glib as a native-input with "bin" output.
> 
> If I am doing the following:
> 
> (package/inherit poppler
>     (native-inputs
>         (modify-inputs (package-native-inputs poppler)
>             (replace "glib" my-glib))))
> 
> poppler's build will fail becuase replace syntax will replace "glib"
> package erasing its outputs. I can specify output explicitly by doing
> (replace "glib" (my-glib "bin")) in this case, but that makes mass
> input modification difficult (e.g. if i want to replace all instances
> of glib to my-glib).
I think the problem here is that "glib" serves double duty as both
"glib:out" and "glib:bin".  IMHO we should probably add the output
argument to the label (with a colon separator, of course) if one is
given.

I'm CC'ing Ludo because he implemented the feature and might know more
than me regarding its design.

Cheers




Information forwarded to bug-guix <at> gnu.org:
bug#53915; Package guix. (Fri, 11 Feb 2022 10:27:02 GMT) Full text and rfc822 format available.

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

From: Gordon Quad <gordon <at> niflheim.info>
To: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
Cc: 53915 <at> debbugs.gnu.org, ludo <at> gnu.org
Subject: Re: No way of replacing an input in modify-input syntax structure
 but keep all the outputs
Date: Fri, 11 Feb 2022 10:26:14 +0000
On Thu, Feb 10, 2022 at 09:03:56PM +0100, Liliana Marie Prikler wrote:
> Am Donnerstag, dem 10.02.2022 um 10:09 +0000 schrieb Gordon Quad:
> > poppler package include glib as a native-input with "bin" output.
> > 
> > If I am doing the following:
> > 
> > (package/inherit poppler
> >     (native-inputs
> >         (modify-inputs (package-native-inputs poppler)
> >             (replace "glib" my-glib))))
> > 
> > poppler's build will fail becuase replace syntax will replace "glib"
> > package erasing its outputs. I can specify output explicitly by doing
> > (replace "glib" (my-glib "bin")) in this case, but that makes mass
> > input modification difficult (e.g. if i want to replace all instances
> > of glib to my-glib).
> I think the problem here is that "glib" serves double duty as both
> "glib:out" and "glib:bin".  IMHO we should probably add the output
> argument to the label (with a colon separator, of course) if one is
> given.
> 
> I'm CC'ing Ludo because he implemented the feature and might know more
> than me regarding its design.
Well, just grepping the code for glib I found plenty of places where it
is specified as ("glib" ,glib "bin"), and glib is the only package that
I checked so far. So what you telling me that official policy is to use
labeling convesion as "package:output" but not all the old code converted
to that yet?




Severity set to 'important' from 'normal' Request was from Ludovic Courtès <ludo <at> gnu.org> to control <at> debbugs.gnu.org. (Tue, 08 Mar 2022 16:02:01 GMT) Full text and rfc822 format available.

Information forwarded to bug-guix <at> gnu.org:
bug#53915; Package guix. (Tue, 08 Mar 2022 16:12:01 GMT) Full text and rfc822 format available.

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

From: Ludovic Courtès <ludo <at> gnu.org>
To: Gordon Quad <gordon <at> niflheim.info>
Cc: 53915 <at> debbugs.gnu.org, Liliana Marie Prikler <liliana.prikler <at> gmail.com>
Subject: Re: bug#53915: No way of replacing an input in modify-input syntax
 structure but keep all the outputs
Date: Tue, 08 Mar 2022 17:11:36 +0100
[Message part 1 (text/plain, inline)]
Hi,

Gordon Quad <gordon <at> niflheim.info> skribis:

> poppler package include glib as a native-input with "bin" output.
>
> If I am doing the following:
>
> (package/inherit poppler
>     (native-inputs
>         (modify-inputs (package-native-inputs poppler)
>             (replace "glib" my-glib))))
>
> poppler's build will fail becuase replace syntax will replace "glib"
> package erasing its outputs.

Indeed:

--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> ,use(gnu packages pdf)
scheme@(guile-user)> ,use(guix)
scheme@(guile-user)> (package-native-inputs poppler)
$4 = (("pkg-config" #<package pkg-config <at> 0.29.2 gnu/packages/pkg-config.scm:36 7f9b13a30580>) ("glib" #<package glib <at> 2.70.2 gnu/packages/glib.scm:180 7f9b12990000> "bin") ("gobject-introspection" #<package gobject-introspection <at> 1.66.1 gnu/packages/glib.scm:428 7f9b12994e70>))
scheme@(guile-user)> (package-propagated-inputs poppler)
$5 = (("glib" #<package glib <at> 2.70.2 gnu/packages/glib.scm:180 7f9b12990000>))
scheme@(guile-user)> (modify-inputs (append $5 $4)
		       (replace "glib" xpdf))
$6 = (("glib" #<package xpdf <at> 4.03 gnu/packages/pdf.scm:395 7f9b1457c9a0>) ("pkg-config" #<package pkg-config <at> 0.29.2 gnu/packages/pkg-config.scm:36 7f9b13a30580>) ("glib" #<package xpdf <at> 4.03 gnu/packages/pdf.scm:395 7f9b1457c9a0>) ("gobject-introspection" #<package gobject-introspection <at> 1.66.1 gnu/packages/glib.scm:428 7f9b12994e70>))
--8<---------------cut here---------------end--------------->8---

We see that both ‘glib’ packages have been replaced, but the “bin” part
has been removed from the second one.

With the patch below, we get more sensible behavior:

--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> (modify-inputs (append $5 $4)
		       (replace "glib" xpdf))
$8 = (("glib" #<package xpdf <at> 4.03 gnu/packages/pdf.scm:395 7f9b1457c9a0>) ("pkg-config" #<package pkg-config <at> 0.29.2 gnu/packages/pkg-config.scm:36 7f9b13a30580>) ("glib" #<package xpdf <at> 4.03 gnu/packages/pdf.scm:395 7f9b1457c9a0> "bin") ("gobject-introspection" #<package gobject-introspection <at> 1.66.1 gnu/packages/glib.scm:428 7f9b12994e70>))
--8<---------------cut here---------------end--------------->8---

If that makes sense to you, I’ll go ahead with this change and adjust
documentation accordingly.

Thanks for bringing it up!

Ludo’.

[Message part 2 (text/x-patch, inline)]
diff --git a/guix/packages.scm b/guix/packages.scm
index 3f0262602d..288ae37523 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -1091,11 +1091,11 @@ (define (replace-input name replacement inputs)
   "Replace input NAME by REPLACEMENT within INPUTS."
   (map (lambda (input)
          (match input
-           (((? string? label) . _)
+           (((? string? label) _ . outputs)
             (if (string=? label name)
                 (match replacement        ;does REPLACEMENT specify an output?
                   ((_ _) (cons label replacement))
-                  (_     (list label replacement)))
+                  (_     (cons* label replacement outputs)))
                 input))))
        inputs))
 

Information forwarded to bug-guix <at> gnu.org:
bug#53915; Package guix. (Tue, 08 Mar 2022 20:29:01 GMT) Full text and rfc822 format available.

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

From: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
To: Ludovic Courtès <ludo <at> gnu.org>, Gordon Quad
 <gordon <at> niflheim.info>
Cc: 53915 <at> debbugs.gnu.org
Subject: Re: bug#53915: No way of replacing an input in modify-input syntax
 structure but keep all the outputs
Date: Tue, 08 Mar 2022 21:28:43 +0100
Am Dienstag, dem 08.03.2022 um 17:11 +0100 schrieb Ludovic Courtès:
> [...]
> With the patch below, we get more sensible behavior:
> 
> --8<---------------cut here---------------start------------->8---
> scheme@(guile-user)> (modify-inputs (append $5 $4)
>                        (replace "glib" xpdf))
> $8 = (("glib" #<package xpdf <at> 4.03 gnu/packages/pdf.scm:395
> 7f9b1457c9a0>) ("pkg-config" #<package
> pkg-config <at> 0.29.2 gnu/packages/pkg-config.scm:36 7f9b13a30580>)
> ("glib" #<package xpdf <at> 4.03 gnu/packages/pdf.scm:395 7f9b1457c9a0>
> "bin") ("gobject-introspection" #<package
> gobject-introspection <at> 1.66.1 gnu/packages/glib.scm:428
> 7f9b12994e70>))
> --8<---------------cut here---------------end--------------->8---
> 
> If that makes sense to you, I’ll go ahead with this change and adjust
> documentation accordingly.
Sounds better than my own suggestion, since it'll keep working the way
it did even when labels are eventually dropped.  If more control is
needed, we can always later extend it to support (replace ("label"
"output") (package output)).  WDYT?

Cheers




Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Wed, 16 Mar 2022 14:55:02 GMT) Full text and rfc822 format available.

Notification sent to Gordon Quad <gordon <at> niflheim.info>:
bug acknowledged by developer. (Wed, 16 Mar 2022 14:55:02 GMT) Full text and rfc822 format available.

Message #24 received at 53915-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
Cc: 53915-done <at> debbugs.gnu.org, Gordon Quad <gordon <at> niflheim.info>
Subject: Re: bug#53915: No way of replacing an input in modify-input syntax
 structure but keep all the outputs
Date: Wed, 16 Mar 2022 15:53:49 +0100
Hi,

Liliana Marie Prikler <liliana.prikler <at> gmail.com> skribis:

> Am Dienstag, dem 08.03.2022 um 17:11 +0100 schrieb Ludovic Courtès:
>> [...]
>> With the patch below, we get more sensible behavior:
>> 
>> --8<---------------cut here---------------start------------->8---
>> scheme@(guile-user)> (modify-inputs (append $5 $4)
>>                        (replace "glib" xpdf))
>> $8 = (("glib" #<package xpdf <at> 4.03 gnu/packages/pdf.scm:395
>> 7f9b1457c9a0>) ("pkg-config" #<package
>> pkg-config <at> 0.29.2 gnu/packages/pkg-config.scm:36 7f9b13a30580>)
>> ("glib" #<package xpdf <at> 4.03 gnu/packages/pdf.scm:395 7f9b1457c9a0>
>> "bin") ("gobject-introspection" #<package
>> gobject-introspection <at> 1.66.1 gnu/packages/glib.scm:428
>> 7f9b12994e70>))
>> --8<---------------cut here---------------end--------------->8---
>> 
>> If that makes sense to you, I’ll go ahead with this change and adjust
>> documentation accordingly.
> Sounds better than my own suggestion, since it'll keep working the way
> it did even when labels are eventually dropped.

Pushed with tests in 00dfff84c66c5c6aa4853684419a92befe55d4b4.

> If more control is needed, we can always later extend it to support
> (replace ("label" "output") (package output)).  WDYT?

I’d rather not: the goal of ‘modify-inputs’ is to provide an interface
that works as if input labels didn’t exist, with an eye on removing them
entirely in the future:

  https://guix.gnu.org/en/blog/2021/the-big-change/

Regardless, we’ll have to keep an eye on all these corner cases and to
adjust the plan accordingly.

Thanks!

Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Thu, 14 Apr 2022 11:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 3 years and 69 days ago.

Previous Next


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