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".
master
parent
f4ae827e26
commit
140b4bc6cd
|
@ -425,6 +425,13 @@ IMPORTED-MODULES specify modules to use/import for use by SNIPPET."
|
||||||
(srfi srfi-1)
|
(srfi srfi-1)
|
||||||
(guix build utils))
|
(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)
|
(define (apply-patch patch)
|
||||||
(format (current-error-port) "applying '~a'...~%" 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)
|
(begin (chdir "..") #t)
|
||||||
(zero? (system* (string-append #+tar "/bin/tar")
|
|
||||||
"cvfa" #$output directory
|
(unless tar-supports-sort?
|
||||||
;; avoid non-determinism in the archive
|
(call-with-output-file ".file_list"
|
||||||
"--sort=name"
|
(lambda (port)
|
||||||
"--mtime=@0"
|
(for-each (lambda (name) (format port "~a~%" name))
|
||||||
"--owner=root:0"
|
(find-files directory
|
||||||
"--group=root:0")))))))
|
#:directories? #t
|
||||||
|
#:fail-on-error? #t)))))
|
||||||
|
(zero? (apply system* (string-append #+tar "/bin/tar")
|
||||||
|
"cvfa" #$output
|
||||||
|
;; avoid non-determinism in the archive
|
||||||
|
"--mtime=@0"
|
||||||
|
"--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))
|
(let ((name (tarxz-name original-file-name))
|
||||||
(modules (delete-duplicates (cons '(guix build utils) modules))))
|
(modules (delete-duplicates (cons '(guix build utils) modules))))
|
||||||
|
|
Reference in New Issue