packages: Build tarballs in sorted order even if tar doesn't support it.
This is a followup to commit 92226a470d
.
* 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".
This commit is contained in:
parent
f4ae827e26
commit
140b4bc6cd
|
@ -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
|
||||
|
||||
(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
|
||||
"--sort=name"
|
||||
"--mtime=@0"
|
||||
"--owner=root:0"
|
||||
"--group=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))))
|
||||
|
|
Loading…
Reference in New Issue