2021-12-31 05:44:19 +03:00
|
|
|
{ buildDepsOnly
|
2023-10-18 05:30:35 +03:00
|
|
|
, linkFarmFromDrvs
|
2021-12-31 05:44:19 +03:00
|
|
|
, jq
|
|
|
|
}:
|
|
|
|
|
2022-09-28 05:05:06 +03:00
|
|
|
expectedArg: mkDrv: args:
|
2021-12-31 05:44:19 +03:00
|
|
|
let
|
2022-09-28 05:05:06 +03:00
|
|
|
runCargoAndCheckFreshness = cmd: extra:
|
|
|
|
let
|
|
|
|
expected =
|
|
|
|
if builtins.isAttrs expectedArg then
|
|
|
|
expectedArg.${cmd} or ""
|
|
|
|
else
|
|
|
|
expectedArg;
|
|
|
|
in
|
|
|
|
''
|
2022-01-05 01:40:24 +03:00
|
|
|
cargo ${cmd} \
|
|
|
|
--release \
|
|
|
|
--message-format json-diagnostic-short \
|
|
|
|
${extra} \
|
|
|
|
${args.cargoExtraArgs or ""} >${cmd}out
|
2022-11-21 03:28:49 +03:00
|
|
|
|
2021-12-31 05:44:19 +03:00
|
|
|
filter='select(.reason == "compiler-artifact" and .fresh != true) | .target.name'
|
2021-12-31 07:12:52 +03:00
|
|
|
builtTargets="$(jq -r "$filter" <${cmd}out | sort -u)"
|
2022-11-21 03:28:49 +03:00
|
|
|
|
2021-12-31 05:44:19 +03:00
|
|
|
# Make sure only the crate needed building
|
2021-12-31 07:12:52 +03:00
|
|
|
if [[ "${expected}" != "$builtTargets" ]]; then
|
2022-09-28 05:05:06 +03:00
|
|
|
echo for command ${cmd}
|
2021-12-31 07:12:52 +03:00
|
|
|
echo expected \""${expected}"\"
|
|
|
|
echo but got \""$builtTargets"\"
|
2021-12-31 05:44:19 +03:00
|
|
|
false
|
|
|
|
fi
|
|
|
|
'';
|
|
|
|
|
2023-10-18 05:30:35 +03:00
|
|
|
drvArgs = installCargoArtifactsMode: mkDrv (args // {
|
|
|
|
inherit installCargoArtifactsMode;
|
|
|
|
|
|
|
|
doInstallCargoArtifacts = false;
|
2021-12-31 05:44:19 +03:00
|
|
|
|
2023-10-18 05:30:35 +03:00
|
|
|
# NB: explicit call here so that the buildDepsOnly call
|
|
|
|
# doesn't inherit our build commands
|
|
|
|
cargoArtifacts = buildDepsOnly args;
|
2021-12-31 05:44:19 +03:00
|
|
|
|
2023-10-18 05:30:35 +03:00
|
|
|
nativeBuildInputs = [ jq ];
|
2021-12-31 05:44:19 +03:00
|
|
|
|
2023-10-18 05:30:35 +03:00
|
|
|
buildPhase = ''
|
|
|
|
runHook preBuild
|
2021-12-31 05:44:19 +03:00
|
|
|
|
2023-10-18 05:30:35 +03:00
|
|
|
${runCargoAndCheckFreshness "check" ""}
|
|
|
|
${runCargoAndCheckFreshness "build" ""}
|
2021-12-31 05:44:19 +03:00
|
|
|
|
2023-10-18 05:30:35 +03:00
|
|
|
runHook postBuild
|
|
|
|
'';
|
2021-12-31 05:44:19 +03:00
|
|
|
|
2023-10-18 05:30:35 +03:00
|
|
|
checkPhase = ''
|
|
|
|
runHook preCheck
|
2021-12-31 05:44:19 +03:00
|
|
|
|
2023-10-18 05:30:35 +03:00
|
|
|
${runCargoAndCheckFreshness "test" "--no-run"}
|
2021-12-31 05:44:19 +03:00
|
|
|
|
2023-10-18 05:30:35 +03:00
|
|
|
runHook postCheck
|
|
|
|
'';
|
|
|
|
|
|
|
|
installPhase = ''
|
|
|
|
touch $out
|
|
|
|
'';
|
|
|
|
});
|
|
|
|
in
|
|
|
|
linkFarmFromDrvs "compiles-fresh" (map drvArgs [
|
|
|
|
"use-zstd"
|
|
|
|
"use-symlink"
|
|
|
|
])
|