build-system/gnu: Add 'set-SOURCE-DATE-EPOCH' phase.
This phase is inherited by other build systems, which ensures 'SOURCE_DATE_EPOCH' is always set in practice. * guix/build/python-build-system.scm (set-SOURCE-DATE-EPOCH): Remove. (%standard-phases): Don't add it. * guix/build/gnu-build-system.scm (set-SOURCE-DATE-EPOCH): New procedure. (%standard-phases): Add it. (gnu-build): Remove 'setenv' call for "SOURCE_DATE_EPOCH".
This commit is contained in:
parent
e8e2e18b84
commit
0beb65b450
|
@ -39,6 +39,13 @@ (define-module (guix build gnu-build-system)
|
|||
;;
|
||||
;; Code:
|
||||
|
||||
(define* (set-SOURCE-DATE-EPOCH #:rest _)
|
||||
"Set the 'SOURCE_DATE_EPOCH' environment variable. This is used by tools
|
||||
that incorporate timestamps as a way to tell them to use a fixed timestamp.
|
||||
See https://reproducible-builds.org/specs/source-date-epoch/."
|
||||
(setenv "SOURCE_DATE_EPOCH" "1")
|
||||
#t)
|
||||
|
||||
(define (first-subdirectory dir)
|
||||
"Return the path of the first sub-directory of DIR."
|
||||
(file-system-fold (lambda (path stat result)
|
||||
|
@ -549,7 +556,7 @@ (define %standard-phases
|
|||
;; Standard build phases, as a list of symbol/procedure pairs.
|
||||
(let-syntax ((phases (syntax-rules ()
|
||||
((_ p ...) `((p . ,p) ...)))))
|
||||
(phases set-paths install-locale unpack
|
||||
(phases set-SOURCE-DATE-EPOCH set-paths install-locale unpack
|
||||
patch-usr-bin-file
|
||||
patch-source-shebangs configure patch-generated-file-shebangs
|
||||
build check install
|
||||
|
@ -577,9 +584,6 @@ (define (elapsed-time end start)
|
|||
;; Encoding/decoding errors shouldn't be silent.
|
||||
(fluid-set! %default-port-conversion-strategy 'error)
|
||||
|
||||
;; Avoid non-determinism related to generated timestamps.
|
||||
(setenv "SOURCE_DATE_EPOCH" "1")
|
||||
|
||||
;; The trick is to #:allow-other-keys everywhere, so that each procedure in
|
||||
;; PHASES can pick the keyword arguments it's interested in.
|
||||
(every (match-lambda
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2013, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
|
||||
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
|
||||
|
@ -136,18 +136,11 @@ (define* (ensure-no-mtimes-pre-1980 #:rest _)
|
|||
#t))
|
||||
#t))
|
||||
|
||||
(define* (set-SOURCE-DATE-EPOCH #:rest _)
|
||||
"Set the 'SOURCE_DATE_EPOCH' environment variable."
|
||||
;; Use zero as the timestamp in .pyc files so that builds are deterministic.
|
||||
;; TODO: Remove it when this variable is set in GNU:%STANDARD-PHASES.
|
||||
(setenv "SOURCE_DATE_EPOCH" "1"))
|
||||
|
||||
(define %standard-phases
|
||||
;; 'configure' and 'build' phases are not needed. Everything is done during
|
||||
;; 'install'.
|
||||
(modify-phases gnu:%standard-phases
|
||||
(add-after 'unpack 'ensure-no-mtimes-pre-1980 ensure-no-mtimes-pre-1980)
|
||||
(add-after 'unpack 'set-SOURCE-DATE-EPOCH set-SOURCE-DATE-EPOCH)
|
||||
(delete 'configure)
|
||||
(replace 'install install)
|
||||
(replace 'check check)
|
||||
|
|
Loading…
Reference in a new issue