Cyril Roelandt <tipec...@gmail.com> skribis: > * gnu/packages/python.scm (python-2): patch Lib/subprocess.py to use > /nix/.../sh when /bin/sh is not available (most of the time, in Guix chroot) > --- > gnu/packages/python.scm | 19 ++++++++++++++++++- > 1 file changed, 18 insertions(+), 1 deletion(-) > > diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm > index 8f92dc2..a663b5e 100644 > --- a/gnu/packages/python.scm > +++ b/gnu/packages/python.scm > @@ -138,7 +138,24 @@ > (with-directory-excursion out > (for-each (cut augment-rpath <> lib) > (find-files "bin" ".*"))))) > - %standard-phases))) > + (alist-replace > + 'configure > + (lambda* (#:key outputs #:allow-other-keys #:rest args) > + (let ((configure (assoc-ref %standard-phases 'configure))) > + ;; Some libraries try to call subprocess.Popen(), which uses > + ;; /bin/sh, in their tests. Since /bin/sh is not available in > the > + ;; chroot, the tests fail. Instead of disabling them, add > + ;; '/nix/.../sh' as an alternative shell. The default shell is > + ;; still /bin/sh, so the subprocess module works exactly as > + ;; expected. The extra 'if' condition will slow down things, but > + ;; not enough to be noticed. > + (substitute* "Lib/subprocess.py" > + (("args = \\[\"/bin/sh") > + (string-append > + "args = [\"/bin/sh\" if os.path.exists(\"/bin/sh\") else " > + "\"" (which "sh")))) > + (apply configure args)))
I’m in favor of just (which "sh"). As discussed on IRC, all one can expect from /bin/sh is to point to a Bourne-compatible shell, and that’s what we’d guarantee by explicitly using the build-time (which "sh"). Fine with you? Thanks, Ludo’.