summary refs log tree commit diff
path: root/gnu/packages
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2020-04-02 17:11:17 +0200
committerMarius Bakke <mbakke@fastmail.com>2020-04-02 17:11:17 +0200
commit3cff86db8a510bc2731b9899a6035ebda5225adc (patch)
tree980953ac51514f060e5d816beab70879440d82c4 /gnu/packages
parent67ca82e6ddc9f1c87fa8c033729a1f53b7c2b3ba (diff)
downloadguix-3cff86db8a510bc2731b9899a6035ebda5225adc.tar.gz
gnu: Python: Move arm-alignment.patch to a native-input + phase.
This follows up 67ca82e6ddc9f1c87fa8c033729a1f53b7c2b3ba which was ineffective
when running 'guix build --system=armhf-linux python' on e.g. x86_64-linux
because the conditional would always return the native system.

* gnu/packages/python.scm (python-3.8)[native-inputs]: Add "arm-alignment.patch".
[arguments]: Add phase to apply it.
[source](patches): Remove it.
* gnu/packages/commencement.scm (python-boot0): Prevent inheriting the phase.
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/commencement.scm12
-rw-r--r--gnu/packages/python.scm48
2 files changed, 42 insertions, 18 deletions
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 4c51fa0cf1..7e969faafe 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -3182,7 +3182,17 @@ the bootstrap environment."
            ;; Python package won't interfere with this one.
            ((#:make-flags _ ''()) ''())
            ((#:phases phases)
-            `(modify-phases ,phases
+            ;; Remove the 'apply-alignment-patch' phase if present to avoid
+            ;; rebuilding this package.  TODO: for the next rebuild cycle,
+            ;; consider inlining all the arguments instead of inheriting to
+            ;; make it easier to patch Python without risking a full rebuild.
+            ;; Or better yet, change to 'python-on-guile'.
+            `(modify-phases ,@(list (match phases
+                                      (('modify-phases original-phases
+                                         changes ...
+                                         ('add-after unpack apply-alignment-patch _))
+                                       `(modify-phases ,original-phases ,@changes))
+                                      (_ phases)))
                (add-before 'configure 'disable-modules
                  (lambda _
                    (substitute* "setup.py"
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index e9a20dc418..f0a6193a92 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -354,22 +354,11 @@ data types.")
               (method url-fetch)
               (uri (string-append "https://www.python.org/ftp/python/"
                                   version "/Python-" version ".tar.xz"))
-              (patches (append
-                        ;; Disable unaligned accesses in the sha3 module on ARM as
-                        ;; it causes a test failure when building 32-bit Python on a
-                        ;; 64-bit kernel.  See <https://bugs.python.org/issue36515>.
-                        ;; TODO: Remove the conditional on the next rebuild cycle.
-                        (let ((system (or (%current-target-system)
-                                          (%current-system))))
-                          (if (any (cute string-prefix? <> system)
-                                   '("arm" "aarch64"))
-                              (list (search-patch "python-3-arm-alignment.patch"))
-                              '()))
-                        (search-patches
-                         "python-3-fix-tests.patch"
-                         "python-3.8-fix-tests.patch"
-                         "python-3-deterministic-build-info.patch"
-                         "python-3-search-paths.patch")))
+              (patches (search-patches
+                        "python-3-fix-tests.patch"
+                        "python-3.8-fix-tests.patch"
+                        "python-3-deterministic-build-info.patch"
+                        "python-3-search-paths.patch"))
               (sha256
                (base32
                 "1ps5v323cp5czfshqjmbsqw7nvrdpcbk06f62jbzaqik4gfffii6"))
@@ -394,6 +383,7 @@ data types.")
                 " test_socket")))
        ((#:phases phases)
        `(modify-phases ,phases
+
           (add-before 'check 'set-TZDIR
             (lambda* (#:key inputs native-inputs #:allow-other-keys)
               ;; test_email requires the Olson time zone database.
@@ -432,9 +422,33 @@ data types.")
                                           ,file)))
                               (find-files out "\\.py$")))
                   (list '() '("-O") '("-OO")))
-                 #t)))))))
+                 #t)))
+           ;; XXX: Apply patch on ARM platforms only to avoid a full rebuild.
+           ;; Remove this phase in the next rebuild cycle.
+           ,@(let ((system (or (%current-target-system)
+                               (%current-system))))
+               (if (any (cute string-prefix? <> system)
+                        '("arm" "aarch64"))
+                   '((add-after 'unpack 'apply-alignment-patch
+                       (lambda* (#:key native-inputs inputs #:allow-other-keys)
+                        (invoke "patch" "-p1" "--force" "--input"
+                                (assoc-ref (or native-inputs inputs)
+                                           "arm-alignment.patch")))))
+                   '()))))))
     (native-inputs
      `(("tzdata" ,tzdata-for-tests)
+
+       ;; Disable unaligned accesses in the sha3 module on ARM as
+       ;; it causes a test failure when building 32-bit Python on a
+       ;; 64-bit kernel.  See <https://bugs.python.org/issue36515>.
+       ;; TODO: make this a regular patch in the next rebuild cycle.
+       ,@(let ((system (or (%current-target-system)
+                           (%current-system))))
+           (if (any (cute string-prefix? <> system)
+                    '("arm" "aarch64"))
+               `(("arm-alignment.patch" ,(search-patch "python-3-arm-alignment.patch")))
+               '()))
+
        ,@(if (%current-target-system)
              `(("python3" ,this-package))
              '())