guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/5] gnu: Python: use /nix/.../sh if /bin/sh cannot be found


From: Cyril Roelandt
Subject: [PATCH 2/5] gnu: Python: use /nix/.../sh if /bin/sh cannot be found
Date: Fri, 7 Mar 2014 03:47:32 +0100

* 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)))
+          %standard-phases))))
     (inputs
      `(("bzip2" ,bzip2)
        ("gdbm" ,gdbm)
-- 
1.8.4.rc3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]