[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
02/07: build-system/cargo: Use sources from package sources.
From: |
guix-commits |
Subject: |
02/07: build-system/cargo: Use sources from package sources. |
Date: |
Tue, 11 Jun 2019 21:07:57 -0400 (EDT) |
marusich pushed a commit to branch master
in repository guix.
commit efdf2ae14eec429f5602ad03511ea5f7d8bc12b7
Author: Ivan Petkov <address@hidden>
Date: Thu May 16 23:02:12 2019 -0700
build-system/cargo: Use sources from package sources.
* guix/build/cargo-build-system.scm (crate-src?): New procedure.
(configure): Use the new procedure to expand crate tarballs in the vendor
directory.
Signed-off-by: Chris Marusich <address@hidden>
---
guix/build/cargo-build-system.scm | 35 +++++++++++++++++++++++++++++------
1 file changed, 29 insertions(+), 6 deletions(-)
diff --git a/guix/build/cargo-build-system.scm
b/guix/build/cargo-build-system.scm
index 9f44bd6..b368074 100644
--- a/guix/build/cargo-build-system.scm
+++ b/guix/build/cargo-build-system.scm
@@ -54,6 +54,22 @@
(bin-dep? (lambda (dep) (find bin? (get-kinds dep)))))
(find bin-dep? (manifest-targets))))
+(define (crate-src? path)
+ "Check if PATH refers to a crate source, namely a gzipped tarball with a
+Cargo.toml file present at its root."
+ (and (gzip-file? path)
+ ;; First we print out all file names within the tarball to see if it
+ ;; looks like the source of a crate. However, the tarball will include
+ ;; an extra path component which we would like to ignore (since we're
+ ;; interested in checking if a Cargo.toml exists at the root of the
+ ;; archive, but not nested anywhere else). We do this by cutting up
+ ;; each output line and only looking at the second component. We then
+ ;; check if it matches Cargo.toml exactly and short circuit if it
does.
+ (zero? (apply system* (list "sh" "-c"
+ (string-append "tar -tf " path
+ " | cut -d/ -f2"
+ " | grep -q
'^Cargo.toml$'"))))))
+
(define* (configure #:key inputs
(vendor-dir "guix-vendor")
#:allow-other-keys)
@@ -67,14 +83,21 @@
(for-each
(match-lambda
((name . path)
- (let* ((rust-share (string-append path "/share/rust-source"))
- (basepath (basename path))
- (link-dir (string-append vendor-dir "/" basepath)))
- (and (file-exists? rust-share)
+ (let* ((basepath (basename path))
+ (crate-dir (string-append vendor-dir "/" basepath)))
+ (and (crate-src? path)
;; Gracefully handle duplicate inputs
- (not (file-exists? link-dir))
- (symlink rust-share link-dir)))))
+ (not (file-exists? crate-dir))
+ (mkdir-p crate-dir)
+ ;; Cargo crates are simply gzipped tarballs but with a .crate
+ ;; extension. We expand the source to a directory name we control
+ ;; so that we can generate any cargo checksums.
+ ;; The --strip-components argument is needed to prevent creating
+ ;; an extra directory within `crate-dir`.
+ (invoke "tar" "xvf" path "-C" crate-dir "--strip-components" "1")
+ (generate-checksums crate-dir)))))
inputs)
+
;; Configure cargo to actually use this new directory.
(mkdir-p ".cargo")
(let ((port (open-file ".cargo/config" "w" #:encoding "utf-8")))
- branch master updated (a385257 -> 2444abd), guix-commits, 2019/06/11
- 03/07: build-system/cargo: Don't copy source as an output., guix-commits, 2019/06/11
- 02/07: build-system/cargo: Use sources from package sources.,
guix-commits <=
- 06/07: gnu: crate: Add unicode-xid., guix-commits, 2019/06/11
- 04/07: doc: Update cargo-build-system parameter docs., guix-commits, 2019/06/11
- 07/07: gnu: crate: Add proc-macro2 and quote., guix-commits, 2019/06/11
- 01/07: build-system/cargo: Expand transitive crate sources., guix-commits, 2019/06/11
- 05/07: import: crate: Define dependencies as arguments., guix-commits, 2019/06/11