[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
02/02: packages: Build tarballs in sorted order even if tar doesn't supp
From: |
Mark H. Weaver |
Subject: |
02/02: packages: Build tarballs in sorted order even if tar doesn't support it. |
Date: |
Sun, 06 Sep 2015 21:26:45 +0000 |
mhw pushed a commit to branch core-updates
in repository guix.
commit 140b4bc6cd4cda79ab48c3fecc8c98afeb02cdf6
Author: Mark H Weaver <address@hidden>
Date: Sun Sep 6 12:26:55 2015 -0400
packages: Build tarballs in sorted order even if tar doesn't support it.
This is a followup to commit 92226a470ddc980e54863632e5b179bf40444bd7.
* guix/packages.scm (patch-and-repack)[build]: Determine if tar supports the
"--sort=name" option using a run-time test. If not supported, generate
the
sorted file list with 'find-files' and pass it to tar using
"--files-from".
---
guix/packages.scm | 33 ++++++++++++++++++++++++++-------
1 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/guix/packages.scm b/guix/packages.scm
index 68ec236..da49409 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -425,6 +425,13 @@ IMPORTED-MODULES specify modules to use/import for use by
SNIPPET."
(srfi srfi-1)
(guix build utils))
+ ;; The --sort option was added to GNU tar in version 1.28, released
+ ;; 2014-07-28. During bootstrap we must cope with older versions.
+ (define tar-supports-sort?
+ (zero? (system* (string-append #+tar "/bin/tar")
+ "cf" "/dev/null" "--files-from=/dev/null"
+ "--sort=name")))
+
(define (apply-patch patch)
(format (current-error-port) "applying '~a'...~%" patch)
@@ -484,13 +491,25 @@ IMPORTED-MODULES specify modules to use/import for use by
SNIPPET."
#~())
(begin (chdir "..") #t)
- (zero? (system* (string-append #+tar "/bin/tar")
- "cvfa" #$output directory
- ;; avoid non-determinism in the archive
- "--sort=name"
- "address@hidden"
- "--owner=root:0"
- "--group=root:0")))))))
+
+ (unless tar-supports-sort?
+ (call-with-output-file ".file_list"
+ (lambda (port)
+ (for-each (lambda (name) (format port "~a~%" name))
+ (find-files directory
+ #:directories? #t
+ #:fail-on-error? #t)))))
+ (zero? (apply system* (string-append #+tar "/bin/tar")
+ "cvfa" #$output
+ ;; avoid non-determinism in the archive
+ "address@hidden"
+ "--owner=root:0"
+ "--group=root:0"
+ (if tar-supports-sort?
+ `("--sort=name"
+ ,directory)
+ '("--no-recursion"
+ "--files-from=.file_list")))))))))
(let ((name (tarxz-name original-file-name))
(modules (delete-duplicates (cons '(guix build utils) modules))))