You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.4 KiB
79 lines
2.4 KiB
{ stdenv, cacert, git, cargo, python3 }: |
|
let cargo-vendor-normalise = stdenv.mkDerivation { |
|
name = "cargo-vendor-normalise"; |
|
src = ./cargo-vendor-normalise.py; |
|
nativeBuildInputs = [ python3.pkgs.wrapPython ]; |
|
dontUnpack = true; |
|
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 ? "" |
|
, # whenever to also include the Cargo.lock in the output |
|
copyLockfile ? false |
|
}: |
|
stdenv.mkDerivation { |
|
name = "${name}-vendor"; |
|
nativeBuildInputs = [ cacert git cargo-vendor-normalise cargo ]; |
|
inherit src srcs patches sourceRoot; |
|
|
|
phases = "unpackPhase patchPhase installPhase"; |
|
|
|
installPhase = '' |
|
if [[ ! -f Cargo.lock ]]; then |
|
echo |
|
echo "ERROR: The Cargo.lock file doesn't exist" |
|
echo |
|
echo "Cargo.lock is needed to make sure that cargoSha256 doesn't change" |
|
echo "when the registry is updated." |
|
echo |
|
|
|
exit 1 |
|
fi |
|
|
|
# Keep the original around for copyLockfile |
|
cp Cargo.lock Cargo.lock.orig |
|
|
|
export CARGO_HOME=$(mktemp -d cargo-home.XXX) |
|
CARGO_CONFIG=$(mktemp cargo-config.XXXX) |
|
|
|
${cargoUpdateHook} |
|
|
|
mkdir -p $out |
|
cargo vendor $out | cargo-vendor-normalise > $CARGO_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 $CARGO_CONFIG ${./fetchcargo-default-config.toml} > /dev/null; then |
|
install -D $CARGO_CONFIG $out/.cargo/config; |
|
fi; |
|
|
|
'' + stdenv.lib.optionalString copyLockfile '' |
|
# add the Cargo.lock to allow hash invalidation |
|
cp Cargo.lock.orig $out/Cargo.lock |
|
''; |
|
|
|
outputHashAlgo = "sha256"; |
|
outputHashMode = "recursive"; |
|
outputHash = sha256; |
|
|
|
impureEnvVars = stdenv.lib.fetchers.proxyImpureEnvVars; |
|
preferLocalBuild = true; |
|
}
|
|
|