~ruther/guix-local

0beb65b45063ccd47b85ed79cc4782f3a3ffa299 — Ludovic Courtès 10 years ago e8e2e18
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".
2 files changed, 9 insertions(+), 12 deletions(-)

M guix/build/gnu-build-system.scm
M guix/build/python-build-system.scm
M guix/build/gnu-build-system.scm => guix/build/gnu-build-system.scm +8 -4
@@ 39,6 39,13 @@
;;
;; 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 @@ DOCUMENTATION-COMPRESSOR-FLAGS."
  ;; 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 @@ in order.  Return #t if all the PHASES succeeded, #f otherwise."
  ;; 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

M guix/build/python-build-system.scm => guix/build/python-build-system.scm +1 -8
@@ 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 @@ installed with setuptools."
               #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)