~ruther/guix-local

8d846470f2201b47485f6239e8746d5a6ee2c0a9 — Ludovic Courtès 12 years ago 4eb202a
build-system/gnu: Reset timestamps on build tree when source is a directory.

* guix/build/utils.scm (copy-recursively): Add #:keep-mtime? parameter
  and honor it.
* guix/build/gnu-build-system.scm (unpack): Use #:keep-mtime? #t.
* gnu/packages/admin.scm (shadow)[arguments]: Remove 'reset-timestamps'
  phase.
3 files changed, 19 insertions(+), 16 deletions(-)

M gnu/packages/admin.scm
M guix/build/gnu-build-system.scm
M guix/build/utils.scm
M gnu/packages/admin.scm => gnu/packages/admin.scm +1 -10
@@ 201,16 201,7 @@ client and server, a telnet client and server, and an rsh client and server.")
                      (delete-file (string-append bin "/groups"))
                      (for-each delete-file (find-files man "^groups\\."))
                      #t))
                  (alist-cons-after
                   'unpack 'reset-timestamps
                   (lambda _
                     ;; FIXME: Reset the file timestamps here, until the
                     ;; 'unpack' phase does it for us.  See
                     ;; <https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00098.html>.
                     (for-each (lambda (file)
                                 (utime file 0 0 0))
                               (find-files "." "")))
                   %standard-phases)))))
                  %standard-phases))))

    (inputs (if (string-suffix? "-linux"
                                (or (%current-target-system)

M guix/build/gnu-build-system.scm => guix/build/gnu-build-system.scm +5 -1
@@ 97,7 97,11 @@ working directory."
      (begin
        (mkdir "source")
        (chdir "source")
        (copy-recursively source ".")

        ;; Preserve timestamps (set to the Epoch) on the copied tree so that
        ;; things work deterministically.
        (copy-recursively source "."
                          #:keep-mtime? #t)
        #t)
      (and (zero? (system* "tar" "xvf" source))
           (chdir (first-subdirectory ".")))))

M guix/build/utils.scm => guix/build/utils.scm +13 -5
@@ 134,9 134,12 @@ return values of applying PROC to the port."
(define* (copy-recursively source destination
                           #:key
                           (log (current-output-port))
                           (follow-symlinks? #f))
                           (follow-symlinks? #f)
                           keep-mtime?)
  "Copy SOURCE directory to DESTINATION.  Follow symlinks if FOLLOW-SYMLINKS?
is true; otherwise, just preserve them.  Write verbose output to the LOG port."
is true; otherwise, just preserve them.  When KEEP-MTIME? is true, keep the
modification time of the files in SOURCE on those of DESTINATION.  Write
verbose output to the LOG port."
  (define strip-source
    (let ((len (string-length source)))
      (lambda (file)


@@ 152,10 155,15 @@ is true; otherwise, just preserve them.  Write verbose output to the LOG port."
                           (let ((target (readlink file)))
                             (symlink target dest)))
                          (else
                           (copy-file file dest)))))
                           (copy-file file dest)
                           (when keep-mtime?
                             (set-file-time dest stat))))))
                    (lambda (dir stat result)     ; down
                      (mkdir-p (string-append destination
                                              (strip-source dir))))
                      (let ((target (string-append destination
                                                   (strip-source dir))))
                        (mkdir-p target)
                        (when keep-mtime?
                          (set-file-time target stat))))
                    (lambda (dir stat result)     ; up
                      result)
                    (const #t)                    ; skip