Hi Ludovic, Ludovic Courtès <l...@gnu.org> writes:
> Hi, > > Maxim Cournoyer <maxim.courno...@gmail.com> skribis: > >> Fixes <https://issues.guix.gnu.org/25235>. >> >> * guix/build/pyproject-build-system.scm (wrap) [native-inputs]: New argument. >> Filter out native inputs from the values in GUIX_PYTHONPATH. > > Yay, great to see this fixed! > >> guix/build/pyproject-build-system.scm | 16 ++++++++++++---- >> 1 file changed, 12 insertions(+), 4 deletions(-) >> >> diff --git a/guix/build/pyproject-build-system.scm >> b/guix/build/pyproject-build-system.scm >> index a66c1fb34a..cd418f7ec9 100644 >> --- a/guix/build/pyproject-build-system.scm >> +++ b/guix/build/pyproject-build-system.scm >> @@ -445,7 +445,7 @@ (define* (add-install-to-pythonpath #:key native-inputs >> outputs >> "A phase that just wraps the 'add-installed-pythonpath' procedure." >> (add-installed-pythonpath native-inputs outputs)) >> >> -(define* (wrap #:key inputs outputs #:allow-other-keys) >> +(define* (wrap #:key native-inputs inputs outputs #:allow-other-keys) >> (define (list-of-files dir) >> (find-files dir (lambda (file stat) >> (and (eq? 'regular (stat:type stat)) >> @@ -464,9 +464,17 @@ (define bindirs >> (define %guile (delay (search-input-file inputs "bin/guile"))) >> (define (guile) (force %guile)) >> >> - (let* ((var `("GUIX_PYTHONPATH" prefix >> - ,(search-path-as-string->list >> - (or (getenv "GUIX_PYTHONPATH") ""))))) >> + ;; Use the same strategy to compute the native-input file names. >> + (define %native-input-dirs (delay (match native-inputs >> + (((_ . dir) ...) >> + dir)))) >> + (define (native-input-dirs) (force %native-input-dirs)) >> + >> + (let ((var `("GUIX_PYTHONPATH" prefix >> + ,(remove (lambda (x) >> + (any (cut string-prefix? <> x) >> (native-input-dirs))) >> + (search-path-as-string->list >> + (or (getenv "GUIX_PYTHONPATH") "")))))) > > I think there’s no need to delay+thunk things since we’re using them > right away. How about: > > (define native-input-directories > (match native-inputs > …)) > > (let ((var `("GUIX_PYTHONPATH" prefix > ,(remove (lambda (x) … native-input-directories …) …)))) > …) > > ? It's a (small) optimization, that was intended to delay things until they are really needed that was already used for %bash (now %guile) in the wrap phase of (guix build python-build-system). The idea is to delay the evaluation of native-input-directories or the lookup for guile in the inputs until it's really necessary. For example, the computations are avoided when there are no "bin" or "sbin" sub-directories in the outputs. > (Same for ‘%guile’ above, but I don’t see it in ‘master’; maybe that’s > from another branch?) Yes, the change build on both #60847 (Enable cross-compilation for the pyproject-build-system) and #60868 (Use wrap-script instead of wrap-program), which should be applied first. %guile appears in #60868, and changes that make the above easy (native-inputs always appearing as native-inputs, even for native builds) are from #60847. -- Thanks, Maxim