87 lines
1.5 KiB
Nix
87 lines
1.5 KiB
Nix
{
|
|
lib,
|
|
stdenv,
|
|
rustHooks,
|
|
rustPackages,
|
|
versionCheckHook,
|
|
}: lib.callWith' rustPackages ({
|
|
rustPlatform,
|
|
cargo,
|
|
}: let
|
|
cargoToml = lib.importTOML ./Cargo.toml;
|
|
cargoPackage = cargoToml.package;
|
|
|
|
in stdenv.mkDerivation (self: {
|
|
pname = cargoPackage.name;
|
|
version = cargoPackage.version;
|
|
|
|
strictDeps = true;
|
|
__structuredAttrs = true;
|
|
|
|
doCheck = true;
|
|
doInstallCheck = true;
|
|
|
|
src = lib.fileset.toSource {
|
|
root = ./.;
|
|
fileset = lib.fileset.unions [
|
|
./Cargo.toml
|
|
./Cargo.lock
|
|
./src
|
|
];
|
|
};
|
|
|
|
cargoDeps = rustPlatform.importCargoLock {
|
|
lockFile = ./Cargo.lock;
|
|
};
|
|
|
|
versionCheckProgramArg = "--version";
|
|
|
|
nativeBuildInputs = rustHooks.asList ++ [
|
|
cargo
|
|
];
|
|
|
|
nativeInstallCheckInputs = [
|
|
versionCheckHook
|
|
];
|
|
|
|
passthru.mkDevShell = {
|
|
mkShell,
|
|
}: let
|
|
mkShell' = mkShell.override { stdenv = stdenv; };
|
|
in mkShell' {
|
|
name = "${self.pname}-devshell-${self.version}";
|
|
inputsFrom = [ self.finalPackage ];
|
|
packages = [
|
|
rustPackages.rustc
|
|
rustPackages.rustfmt
|
|
];
|
|
};
|
|
|
|
passthru.tests.clippy = self.finalPackage.overrideAttrs (prev: {
|
|
pname = "${self.pname}-clippy";
|
|
|
|
nativeCheckInputs = prev.nativeCheckInputs or [ ] ++ [
|
|
rustPackages.clippy
|
|
];
|
|
|
|
dontConfigure = true;
|
|
dontBuild = true;
|
|
doCheck = true;
|
|
dontFixup = true;
|
|
dontInstallCheck = true;
|
|
|
|
checkPhase = lib.trim ''
|
|
echo "cargoClippyPhase()"
|
|
cargo clippy --all-targets --profile "$cargoCheckType" -- --deny warnings
|
|
'';
|
|
|
|
installPhase = lib.trim ''
|
|
touch "$out"
|
|
'';
|
|
});
|
|
|
|
meta = {
|
|
mainProgram = "PKGNAME";
|
|
};
|
|
}))
|