summaryrefslogtreecommitdiff
path: root/gnu/packages/python.scm
diff options
context:
space:
mode:
authorMarius Bakke <marius@gnu.org>2021-07-22 00:33:31 +0200
committerMarius Bakke <marius@gnu.org>2021-07-23 17:26:47 +0200
commit79c28121306ee26856414724b1efe0ed65318085 (patch)
tree2cef247c151dfd5871cdb406cd11ddb8cbb1e24e /gnu/packages/python.scm
parent65c5efd14e57afbc8152cadf09fc30076c60532a (diff)
downloadguix-patches-79c28121306ee26856414724b1efe0ed65318085.tar
guix-patches-79c28121306ee26856414724b1efe0ed65318085.tar.gz
gnu: Python: Compile bytecode in all outputs.
* gnu/packages/python.scm (python-2.7)[arguments]: Ensure the post-install phases run in order. Move rebuild-bytecode last and run it on every output. * gnu/packages/python.scm (python-3.9)[arguments]: Run the rebuild-bytecode phase on every output.
Diffstat (limited to 'gnu/packages/python.scm')
-rw-r--r--gnu/packages/python.scm95
1 files changed, 51 insertions, 44 deletions
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 8a8fe2bd2a..cee8613b34 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -310,31 +310,7 @@
'("email/test" "ctypes/test" "unittest/test" "tkinter/test"
"sqlite3/test" "bsddb/test" "lib-tk/test" "lib2to3/tests"
"json/tests" "distutils/tests"))))))))
- (add-after 'remove-tests 'rebuild-bytecode
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- ;; Disable hash randomization to ensure the generated .pycs
- ;; are reproducible.
- (setenv "PYTHONHASHSEED" "0")
- (for-each
- (lambda (opt)
- (format #t "Compiling with optimization level: ~a\n"
- (if (null? opt) "none" (car opt)))
- (apply invoke
- `(,,(if (%current-target-system)
- "python2"
- '(string-append out "/bin/python"))
- ,@opt
- "-m" "compileall"
- "-f" ; force rebuild
- ;; Don't build lib2to3, because it contains Python 3 code.
- "-x" "lib2to3/.*"
- ,out)))
- ;; Python 2 has a single file extension (.pyo) for the chosen
- ;; level of optimization, so it doesn't make sense to byte
- ;; compile with more than one level.
- (list '() '("-OO"))))))
- (add-after 'install 'move-tk-inter
+ (add-after 'remove-tests 'move-tk-inter
(lambda* (#:key outputs #:allow-other-keys)
;; When Tkinter support is built move it to a separate output so
;; that the main output doesn't contain a reference to Tcl/Tk.
@@ -354,7 +330,7 @@
"/site-packages")))
(install-file tkinter.so target)
(delete-file tkinter.so))))))))
- (add-after 'install 'move-idle
+ (add-after 'move-tk-inter 'move-idle
(lambda* (#:key outputs #:allow-other-keys)
;; when idle is built, move it to a separate output to save some
;; space (5MB)
@@ -375,6 +351,33 @@
"/site-packages")))
(mkdir-p (dirname target))
(rename-file idlelib target))))))))
+ (add-after 'move-idle 'rebuild-bytecode
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ ;; Disable hash randomization to ensure the generated .pycs
+ ;; are reproducible.
+ (setenv "PYTHONHASHSEED" "0")
+ (for-each
+ (lambda (output)
+ (for-each (lambda (opt)
+ (format #t "Compiling with optimization level: ~a\n"
+ (if (null? opt) "none" (car opt)))
+ (apply invoke
+ `(,,(if (%current-target-system)
+ "python2"
+ '(string-append out "/bin/python"))
+ ,@opt
+ "-m" "compileall"
+ "-f" ; force rebuild
+ ;; Don't build lib2to3, because it contains
+ ;; Python 3 code.
+ "-x" "lib2to3/.*"
+ ,output)))
+ ;; Python 2 has a single file extension (.pyo) for the
+ ;; chosen level of optimization, so it doesn't make
+ ;; sense to byte compile with more than one level.
+ (list '() '("-OO"))))
+ (map cdr outputs)))))
(add-after 'install 'install-sitecustomize.py
,(customize-site version)))))
(inputs
@@ -534,25 +537,29 @@ data types.")
;; are reproducible.
(setenv "PYTHONHASHSEED" "0")
- ;; XXX: Delete existing auto-generated pycs beforehand because
- ;; the -f argument does not necessarily overwrite all files,
- ;; leading to indeterministic results.
- (for-each (lambda (pyc)
- (delete-file pyc))
- (find-files out "\\.pyc$"))
+ (for-each (lambda (output)
+ ;; XXX: Delete existing pycs generated by the build
+ ;; system beforehand because the -f argument does
+ ;; not necessarily overwrite all files, leading to
+ ;; indeterministic results.
+ (for-each (lambda (pyc)
+ (delete-file pyc))
+ (find-files output "\\.pyc$"))
- (apply invoke
- `(,,(if (%current-target-system)
- "python3"
- '(string-append out
- "/bin/python3"))
- "-m" "compileall"
- "-o" "0" "-o" "1" "-o" "2"
- "-f" ; force rebuild
- "--invalidation-mode=unchecked-hash"
- ;; Don't build lib2to3, because it's Python 2 code.
- "-x" "lib2to3/.*"
- ,out)))))
+ (apply invoke
+ `(,,(if (%current-target-system)
+ "python3"
+ '(string-append out
+ "/bin/python3"))
+ "-m" "compileall"
+ "-o" "0" "-o" "1" "-o" "2"
+ "-f" ; force rebuild
+ "--invalidation-mode=unchecked-hash"
+ ;; Don't build lib2to3, because it's
+ ;; Python 2 code.
+ "-x" "lib2to3/.*"
+ ,output)))
+ (map cdr outputs)))))
(replace 'install-sitecustomize.py
,(customize-site version))))))
(native-inputs