mirror of
https://github.com/ipetkov/crane.git
synced 2024-11-22 23:17:15 +03:00
41 lines
1.1 KiB
Nix
41 lines
1.1 KiB
Nix
{ mkCargoDerivation
|
|
}:
|
|
|
|
{ cargoDocExtraArgs ? "--no-deps"
|
|
, cargoExtraArgs ? "--locked"
|
|
, ...
|
|
}@origArgs:
|
|
let
|
|
args = (builtins.removeAttrs origArgs [
|
|
"cargoDocExtraArgs"
|
|
"cargoExtraArgs"
|
|
]);
|
|
in
|
|
mkCargoDerivation (args // {
|
|
pnameSuffix = "-doc";
|
|
|
|
buildPhaseCargoCommand = "cargoWithProfile doc ${cargoExtraArgs} ${cargoDocExtraArgs}";
|
|
|
|
doInstallCargoArtifacts = args.doInstallCargoArtifacts or false;
|
|
|
|
docInstallRoot = args.docInstallRoot or "";
|
|
|
|
# NB: cargo always places docs at the root of the target directory
|
|
# even when building in release mode, except when cross-compiling targets.
|
|
# However, even if CARGO_BUILD_TARGET is set but does not result in cross-compilation
|
|
# cargo will still put the docs in the root of the target directory, so we need to take
|
|
# that into account
|
|
installPhaseCommand = ''
|
|
if [ -z "''${docInstallRoot:-}" ]; then
|
|
docInstallRoot="''${CARGO_TARGET_DIR:-target}/''${CARGO_BUILD_TARGET:-}/doc"
|
|
|
|
if ! [ -d "''${docInstallRoot}" ]; then
|
|
docInstallRoot="''${CARGO_TARGET_DIR:-target}/doc"
|
|
fi
|
|
fi
|
|
|
|
mkdir -p $out/share
|
|
mv "''${docInstallRoot}" $out/share
|
|
'';
|
|
})
|