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