summary refs log tree commit diff
diff options
context:
space:
mode:
authorEfraim Flashner <efraim@flashner.co.il>2021-03-15 13:04:46 +0200
committerEfraim Flashner <efraim@flashner.co.il>2021-03-15 15:53:11 +0200
commit78e7e178a3976d6c38de80449548e0332bbc474c (patch)
tree50a74e89ac8f97d5b8d8ca1205341e59b4ec76c1
parentbf612ead766ee5afcdccd7c8ab003b791ecea9df (diff)
downloadguix-78e7e178a3976d6c38de80449548e0332bbc474c.tar.gz
build-system/cargo: Don't clobber packaged crates while building.
This fixes an issue where two packages share a common dependent.

* guix/build/cargo-build-system.scm (unpack-rust-crates): Only copy rust
crates into the target directory if there isn't one already there with
the same name.
-rw-r--r--guix/build/cargo-build-system.scm16
1 files changed, 11 insertions, 5 deletions
diff --git a/guix/build/cargo-build-system.scm b/guix/build/cargo-build-system.scm
index c7ca98105c..0a95672b00 100644
--- a/guix/build/cargo-build-system.scm
+++ b/guix/build/cargo-build-system.scm
@@ -91,11 +91,17 @@ Cargo.toml file present at its root."
       (mkdir-p "target/package")
       (mkdir-p vendor-dir)
       ;; TODO: copy only regular inputs to target/package, not native-inputs.
-      (for-each (lambda (input-crate)
-                  (copy-recursively (string-append input-crate
-                                                   "/share/cargo/registry")
-                                    "target/package"))
-                (delete-duplicates rust-inputs))
+      (for-each
+        (lambda (input-crate)
+          (for-each
+            (lambda (packaged-crate)
+              (unless
+                (file-exists?
+                  (string-append "target/package/" (basename packaged-crate)))
+                (install-file packaged-crate "target/package/")))
+            (find-files
+              (string-append input-crate "/share/cargo/registry") "\\.crate$")))
+        (delete-duplicates rust-inputs))
 
       (for-each (lambda (crate)
                   (invoke "tar" "xzf" crate "-C" vendor-dir))