mirror of
https://github.com/ipetkov/crane.git
synced 2024-11-26 17:13:16 +03:00
64 lines
1.3 KiB
Nix
64 lines
1.3 KiB
Nix
{ buildDepsOnly
|
|
, jq
|
|
}:
|
|
|
|
expectedArg: mkDrv: args:
|
|
let
|
|
runCargoAndCheckFreshness = cmd: extra:
|
|
let
|
|
expected =
|
|
if builtins.isAttrs expectedArg then
|
|
expectedArg.${cmd} or ""
|
|
else
|
|
expectedArg;
|
|
in
|
|
''
|
|
cargo ${cmd} \
|
|
--release \
|
|
--message-format json-diagnostic-short \
|
|
${extra} \
|
|
${args.cargoExtraArgs or ""} >${cmd}out
|
|
|
|
filter='select(.reason == "compiler-artifact" and .fresh != true) | .target.name'
|
|
builtTargets="$(jq -r "$filter" <${cmd}out | sort -u)"
|
|
|
|
# Make sure only the crate needed building
|
|
if [[ "${expected}" != "$builtTargets" ]]; then
|
|
echo for command ${cmd}
|
|
echo expected \""${expected}"\"
|
|
echo but got \""$builtTargets"\"
|
|
false
|
|
fi
|
|
'';
|
|
in
|
|
mkDrv (args // {
|
|
doInstallCargoArtifacts = false;
|
|
|
|
# NB: explicit call here so that the buildDepsOnly call
|
|
# doesn't inherit our build commands
|
|
cargoArtifacts = buildDepsOnly args;
|
|
|
|
nativeBuildInputs = [ jq ];
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
${runCargoAndCheckFreshness "check" ""}
|
|
${runCargoAndCheckFreshness "build" ""}
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
checkPhase = ''
|
|
runHook preCheck
|
|
|
|
${runCargoAndCheckFreshness "test" "--no-run"}
|
|
|
|
runHook postCheck
|
|
'';
|
|
|
|
installPhase = ''
|
|
touch $out
|
|
'';
|
|
})
|