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
					
				
					 1 changed files with 26 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -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"
 | 
			
		||||
                                      "--mtime=@0"
 | 
			
		||||
                                      "--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
 | 
			
		||||
                                    "--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))
 | 
			
		||||
          (modules (delete-duplicates (cons '(guix build utils) modules))))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue