l...@gnu.org (Ludovic Courtès) skribis:

> Hartmut Goebel <h.goe...@crazy-compilers.com> skribis:
>
>> when building this package, qt-4.8.7-doc (the doc-output of qt-4.7.8)
>> will be downloaded. I do not understand why.
>
> Most likely this is due to a limitation of the current implementation of
> grafts: all the outputs of packages on a “grafting path” need to be
> downloaded, even if some of these outputs are unused.
>
> This is because ‘graft-derivation’ takes a derivation, such as Qt’s, and
> returns a derivation with as many outputs, but marked as
> non-substitutable (locally built).  Because it’s locally built, all the
> outputs of the original derivation must be fetched just to be able to
> build the grafted derivation, even if only one of those outputs is
> needed.
>
> I think we could fix that by creating one graft derivation for each
> output of the original derivation.

Done in 482fda2729c3e76999892cb8f9a0391a7bd37119.

To take a concrete example, “guix build brdf-explorer” would previously
trigger a download of qt:doc, even though only qt:out is used.  This is
no longer the case.

This commit does not fix situations like:

  guix package -i qt

In this case, qt:doc still gets downloaded for nothing.  This is because
the underlying

  (package-derivation store qt #:graft? #t)

call does not know that only “out” is needed.  This can be addressed
with “lazy grafting” as discussed in <https://bugs.gnu.org/22990>, where
we’d delay grafting until the profile is built instead of grafting each
individual package eagerly.

Ludo’.



Reply via email to