diff options
Diffstat (limited to 'pkgs/build-support/rust/default.nix')
-rw-r--r-- | pkgs/build-support/rust/default.nix | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/pkgs/build-support/rust/default.nix b/pkgs/build-support/rust/default.nix index 63d08e1d03114..83ef146de5f8a 100644 --- a/pkgs/build-support/rust/default.nix +++ b/pkgs/build-support/rust/default.nix @@ -4,7 +4,7 @@ let inherit stdenv cacert git rust cargo-vendor; }; in -{ name, cargoSha256 +{ name, cargoSha256 ? null , src ? null , srcs ? null , sourceRoot ? null @@ -13,15 +13,31 @@ in , cargoUpdateHook ? "" , cargoDepsHook ? "" , cargoBuildFlags ? [] + +, cargoVendorDir ? null , ... } @ args: +assert cargoVendorDir == null -> cargoSha256 != null; + let lib = stdenv.lib; - cargoDeps = fetchcargo { - inherit name src srcs sourceRoot cargoUpdateHook; - sha256 = cargoSha256; - }; + cargoDeps = if cargoVendorDir == null + then fetchcargo { + inherit name src srcs sourceRoot cargoUpdateHook; + sha256 = cargoSha256; + } + else null; + + setupVendorDir = if cargoVendorDir == null + then '' + unpackFile "$cargoDeps" + cargoDepsCopy=$(stripHash $(basename $cargoDeps)) + chmod -R +w "$cargoDepsCopy" + '' + else '' + cargoDepsCopy="$sourceRoot/${cargoVendorDir}" + ''; in stdenv.mkDerivation (args // { inherit cargoDeps; @@ -39,9 +55,7 @@ in stdenv.mkDerivation (args // { postUnpack = '' eval "$cargoDepsHook" - unpackFile "$cargoDeps" - cargoDepsCopy=$(stripHash $(basename $cargoDeps)) - chmod -R +w "$cargoDepsCopy" + ${setupVendorDir} mkdir .cargo cat >.cargo/config <<-EOF |