Subject: ‘--with-input’ causes unintended rebuilds

From: Ludovic Courtès <[email-masked]>
Date: Thu, 07 Nov 2019 13:35:15 +0100

Hello,

Consider this example:

--8<---------------cut here---------------start------------->8---
$ guix build glib -nd
/gnu/store/9zz9hvzaz06f40a4cbvhskb183x676w4-glib-2.60.6.drv
$ guix build glib --with-input=inkscape=libreoffice -nd
/gnu/store/15f9jkpakmsaz8i2a0gy4kir1zyk29vi-glib-2.60.6.drv
$ guix describe
Generacio 114	Nov 02 2019 11:32:51	(nuna)
  guix ab1c063
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: ab1c063ab08e069fbe62919828fa634a2e222bbf
--8<---------------cut here---------------end--------------->8---

Since GLib does not depend on Inkscape, the ‘--with-input’ flag should
have no effect: we should get the same glib derivation.  However, we’re
not.

If we diff the ‘glibc-2.60.6-guile-builder’ files of each derivation, we
see that the second one has a duplicate entry:

  (define %build-inputs
    `(…
      ("python" . "/gnu/store/78w7y0lxar70j512iqw8x3nimzj10yga-python-3.7.4")
      ("python" . "/gnu/store/78w7y0lxar70j512iqw8x3nimzj10yga-python-3.7.4")
      …))

whereas the first one doesn’t have this duplicate entry.  IOW, the two
derivations are functionally equivalent but are not bit-identical.

Indeed, evaluating:

  (bag-transitive-inputs
   (package->bag ((package-input-rewriting '()) glib)))

shows that we have two “python” packages there that are not ‘eq?’.

To be continued…

Ludo’.