From 3cff86db8a510bc2731b9899a6035ebda5225adc Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Thu, 2 Apr 2020 17:11:17 +0200 Subject: 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. --- gnu/packages/commencement.scm | 12 ++++++++++- gnu/packages/python.scm | 48 ++++++++++++++++++++++++++++--------------- 2 files changed, 42 insertions(+), 18 deletions(-) (limited to 'gnu/packages') 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 . - ;; 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 . + ;; 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)) '()) -- cgit v1.2.3