rekado pushed a commit to branch python-updates
in repository guix.

commit accec9d67f78b5dab88eb815d17e92365b9d9ce4
Author: Ricardo Wurmus <rek...@elephly.net>
Date:   Wed Mar 7 10:53:11 2018 +0100

    guix: python-build-system: Make bytecode compilation deterministic.
    
    * guix/build/python-build-system.scm (enable-bytecode-determinism): New
    procedure.
    (%standard-phases): Add "enable-bytecode-determinism" phase.
---
 guix/build/python-build-system.scm | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/guix/build/python-build-system.scm 
b/guix/build/python-build-system.scm
index dd07986..44cfeda 100644
--- a/guix/build/python-build-system.scm
+++ b/guix/build/python-build-system.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2013 Nikita Karetnikov <nik...@karetnikov.org>
 ;;; Copyright © 2015 Mark H Weaver <m...@netris.org>
 ;;; Copyright © 2016 Hartmut Goebel <h.goe...@crazy-compilers.com>
+;;; Copyright © 2018 Ricardo Wurmus <rek...@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -243,10 +244,20 @@ installed with setuptools."
                #t))
     #t))
 
+(define* (enable-bytecode-determinism #:rest _)
+  "Improve determinism of pyc files."
+  ;; Set DETERMINISTIC_BUILD to override the embedded mtime in pyc files.
+  (setenv "DETERMINISTIC_BUILD" "1")
+  ;; Use deterministic hashes for strings, bytes, and datetime objects.
+  (setenv "PYTHONHASHSEED" "0")
+  #t)
+
 (define %standard-phases
   ;; 'configure' phase is not needed.
   (modify-phases gnu:%standard-phases
     (add-after 'unpack 'ensure-no-mtimes-pre-1980 ensure-no-mtimes-pre-1980)
+    (add-after 'ensure-no-mtimes-pre-1980 'enable-bytecode-determinism
+      enable-bytecode-determinism)
     (delete 'configure)
     (replace 'install install)
     (replace 'check check)

Reply via email to