From ea232fe29d055f9680a8501ef8d209e70e40f689 Mon Sep 17 00:00:00 2001 From: Pierre-Étienne Meunier Date: Tue, 12 Dec 2017 04:54:01 -0600 Subject: add fetchCrate function to fetch rust crates --- pkgs/build-support/rust/fetchcrate.nix | 35 ++++++++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 37 insertions(+) create mode 100644 pkgs/build-support/rust/fetchcrate.nix (limited to 'pkgs') diff --git a/pkgs/build-support/rust/fetchcrate.nix b/pkgs/build-support/rust/fetchcrate.nix new file mode 100644 index 000000000000..95dfd38b12ae --- /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 cc9343aa0c24..e54e30e30178 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, -- cgit 1.4.1