summary refs log tree commit diff
diff options
context:
space:
mode:
authorPierre-Étienne Meunier <pierre-etienne.meunier@inria.fr>2017-12-12 04:54:01 -0600
committerJörg Thalheim <joerg@thalheim.io>2017-12-12 04:58:45 -0600
commitea232fe29d055f9680a8501ef8d209e70e40f689 (patch)
treee2ac04d4bd2a06eec6692f50b4662976ce7aa6b6
parenta13fc5f4cc6b984099846a6aed571007e50d77e0 (diff)
downloadnixpkgs-ea232fe29d055f9680a8501ef8d209e70e40f689.tar
nixpkgs-ea232fe29d055f9680a8501ef8d209e70e40f689.tar.gz
nixpkgs-ea232fe29d055f9680a8501ef8d209e70e40f689.tar.bz2
nixpkgs-ea232fe29d055f9680a8501ef8d209e70e40f689.tar.lz
nixpkgs-ea232fe29d055f9680a8501ef8d209e70e40f689.tar.xz
nixpkgs-ea232fe29d055f9680a8501ef8d209e70e40f689.tar.zst
nixpkgs-ea232fe29d055f9680a8501ef8d209e70e40f689.zip
add fetchCrate function to fetch rust crates
-rw-r--r--pkgs/build-support/rust/fetchcrate.nix35
-rw-r--r--pkgs/top-level/all-packages.nix2
2 files changed, 37 insertions, 0 deletions
diff --git a/pkgs/build-support/rust/fetchcrate.nix b/pkgs/build-support/rust/fetchcrate.nix
new file mode 100644
index 00000000000..95dfd38b12a
--- /dev/null
+++ b/pkgs/build-support/rust/fetchcrate.nix
@@ -0,0 +1,35 @@
+{ lib, fetchurl, unzip }:
+
+{ crateName
+, version
+, sha256
+, ... } @ args:
+
+lib.overrideDerivation (fetchurl ({
+
+  name = "${crateName}-${version}.tar.gz";
+  url = "https://crates.io/api/v1/crates/${crateName}/${version}/download";
+  recursiveHash = true;
+
+  downloadToTemp = true;
+
+  postFetch =
+    ''
+      export PATH=${unzip}/bin:$PATH
+
+      unpackDir="$TMPDIR/unpack"
+      mkdir "$unpackDir"
+      cd "$unpackDir"
+
+      renamed="$TMPDIR/${crateName}-${version}.tar.gz"
+      mv "$downloadedFile" "$renamed"
+      unpackFile "$renamed"
+      fn=$(cd "$unpackDir" && echo *)
+      if [ -f "$unpackDir/$fn" ]; then
+        mkdir $out
+      fi
+      mv "$unpackDir/$fn" "$out"
+    '';
+} // removeAttrs args [ "crateName" "version" ]))
+# Hackety-hack: we actually need unzip hooks, too
+(x: {nativeBuildInputs = x.nativeBuildInputs++ [unzip];})
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index cc9343aa0c2..e54e30e3017 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -202,6 +202,8 @@ with pkgs;
 
   fetchzip = callPackage ../build-support/fetchzip { };
 
+  fetchCrate = callPackage ../build-support/rust/fetchcrate.nix { };
+
   fetchFromGitHub = {
     owner, repo, rev, name ? "source",
     fetchSubmodules ? false, private ? false,