summary refs log tree commit diff
path: root/pkgs/build-support/rust/fetchcargo.nix
diff options
context:
space:
mode:
authorFrederik Rietdijk <freddyrietdijk@fridh.nl>2018-10-02 18:22:18 +0200
committerGitHub <noreply@github.com>2018-10-02 18:22:18 +0200
commit4d1abc44199c8957105f538119c2d19d67aee26f (patch)
treeb38dcdc8763d2d5ab0068851a0765d09136a6af7 /pkgs/build-support/rust/fetchcargo.nix
parentfbc1fb78e37cc29eadee4ad8687e8777eba3cf0e (diff)
parentfe970a82ece66e08d5400c22eebd2c2ec19b5457 (diff)
downloadnixlib-4d1abc44199c8957105f538119c2d19d67aee26f.tar
nixlib-4d1abc44199c8957105f538119c2d19d67aee26f.tar.gz
nixlib-4d1abc44199c8957105f538119c2d19d67aee26f.tar.bz2
nixlib-4d1abc44199c8957105f538119c2d19d67aee26f.tar.lz
nixlib-4d1abc44199c8957105f538119c2d19d67aee26f.tar.xz
nixlib-4d1abc44199c8957105f538119c2d19d67aee26f.tar.zst
nixlib-4d1abc44199c8957105f538119c2d19d67aee26f.zip
Merge pull request #47604 from NixOS/staging-next
Staging next
Diffstat (limited to 'pkgs/build-support/rust/fetchcargo.nix')
-rw-r--r--pkgs/build-support/rust/fetchcargo.nix35
1 files changed, 30 insertions, 5 deletions
diff --git a/pkgs/build-support/rust/fetchcargo.nix b/pkgs/build-support/rust/fetchcargo.nix
index 2670ed528640..9e77f8817b24 100644
--- a/pkgs/build-support/rust/fetchcargo.nix
+++ b/pkgs/build-support/rust/fetchcargo.nix
@@ -1,8 +1,26 @@
-{ stdenv, cacert, git, rust, cargo-vendor }:
+{ stdenv, cacert, git, rust, cargo-vendor, python3 }:
+let cargo-vendor-normalise = stdenv.mkDerivation {
+  name = "cargo-vendor-normalise";
+  src = ./cargo-vendor-normalise.py;
+  nativeBuildInputs = [ python3.pkgs.wrapPython ];
+  unpackPhase = ":";
+  installPhase = "install -D $src $out/bin/cargo-vendor-normalise";
+  pythonPath = [ python3.pkgs.toml ];
+  postFixup = "wrapPythonPrograms";
+  doInstallCheck = true;
+  installCheckPhase = ''
+    # check that ./fetchcargo-default-config.toml is a fix point
+    reference=${./fetchcargo-default-config.toml}
+    < $reference $out/bin/cargo-vendor-normalise > test;
+    cmp test $reference
+  '';
+  preferLocalBuild = true;
+};
+in
 { name ? "cargo-deps", src, srcs, patches, sourceRoot, sha256, cargoUpdateHook ? "" }:
 stdenv.mkDerivation {
   name = "${name}-vendor";
-  nativeBuildInputs = [ cacert cargo-vendor git rust.cargo ];
+  nativeBuildInputs = [ cacert cargo-vendor git cargo-vendor-normalise rust.cargo ];
   inherit src srcs patches sourceRoot;
 
   phases = "unpackPhase patchPhase installPhase";
@@ -23,9 +41,16 @@ stdenv.mkDerivation {
 
     ${cargoUpdateHook}
 
-    cargo vendor
-
-    cp -ar vendor $out
+    mkdir -p $out
+    cargo vendor $out | cargo-vendor-normalise > config
+    # fetchcargo used to never keep the config output by cargo vendor
+    # and instead hardcode the config in ./fetchcargo-default-config.toml.
+    # This broke on packages needing git dependencies, so now we keep the config.
+    # But not to break old cargoSha256, if the previous behavior was enough,
+    # we don't store the config.
+    if ! cmp config ${./fetchcargo-default-config.toml} > /dev/null; then
+      install -Dt $out/.cargo config;
+    fi;
   '';
 
   outputHashAlgo = "sha256";