guix-commits
[Top][All Lists]
Advanced

[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))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]