From 78e7e178a3976d6c38de80449548e0332bbc474c Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Mon, 15 Mar 2021 13:04:46 +0200 Subject: 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. --- guix/build/cargo-build-system.scm | 16 +++++++++++----- 1 file 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)) -- cgit v1.2.3