mirror of
https://codeberg.org/icewind/mill-scale.git
synced 2026-06-03 18:04:09 +02:00
autodeps
This commit is contained in:
parent
02c5917656
commit
823fb3493c
2 changed files with 58 additions and 33 deletions
4
autodeps.nix
Normal file
4
autodeps.nix
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"openssl-sys" = { build = [ "openssl" ]; };
|
||||||
|
"libudev-sys" = { build = [ "eudev" ]; };
|
||||||
|
}
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
{ lib, src, config, flakelight, inputs, ... }:
|
{ lib, src, config, flakelight, inputs, ... }:
|
||||||
let
|
let
|
||||||
inherit (builtins) elem readFile pathExists isAttrs attrNames;
|
inherit (builtins) elem readFile pathExists isAttrs attrNames;
|
||||||
inherit (lib) map mkDefault mkIf mkMerge mkOption warnIf assertMsg optionalAttrs types optionalString genAttrs hasInfix;
|
inherit (lib) map mkDefault mkIf mkMerge mkOption warnIf assertMsg optionalAttrs types optionalString genAttrs hasInfix intersectLists foldl attrVals;
|
||||||
inherit (lib.fileset) fileFilter toSource;
|
inherit (lib.fileset) fileFilter toSource;
|
||||||
inherit (flakelight.types) fileset function;
|
inherit (flakelight.types) fileset function;
|
||||||
|
|
||||||
|
|
@ -18,6 +18,35 @@ let
|
||||||
hasDefaultFeatures = cargoToml ? features && cargoToml.features ? default;
|
hasDefaultFeatures = cargoToml ? features && cargoToml.features ? default;
|
||||||
msrv = assert assertMsg hasMsrv ''"rust-version" not set in Cargo.toml''; tomlPackage.rust-version;
|
msrv = assert assertMsg hasMsrv ''"rust-version" not set in Cargo.toml''; tomlPackage.rust-version;
|
||||||
maybeWorkspace = optionalString hasWorkspace "--workspace";
|
maybeWorkspace = optionalString hasWorkspace "--workspace";
|
||||||
|
|
||||||
|
cargoLockDeps =
|
||||||
|
if pathExists (src + /Cargo.lock) then
|
||||||
|
let
|
||||||
|
cargoLock = fromTOML (readFile (src + /Cargo.lock));
|
||||||
|
in
|
||||||
|
map (package: package.name) cargoLock.package
|
||||||
|
else [ ];
|
||||||
|
availableAutoDeps = import ./autodeps.nix;
|
||||||
|
detectedDeps = intersectLists cargoLockDeps (attrNames availableAutoDeps);
|
||||||
|
mergedDetectedDeps =
|
||||||
|
if config.autodeps then
|
||||||
|
foldl
|
||||||
|
(merged: dep: {
|
||||||
|
build = merged.build ++ (availableAutoDeps.${dep}.build or [ ]);
|
||||||
|
native = merged.native ++ (availableAutoDeps.${dep}.native or [ ]);
|
||||||
|
})
|
||||||
|
{
|
||||||
|
build = [ ];
|
||||||
|
native = [ ];
|
||||||
|
}
|
||||||
|
detectedDeps else {
|
||||||
|
build = [ ];
|
||||||
|
native = [ ];
|
||||||
|
};
|
||||||
|
buildDeps = pkgs: {
|
||||||
|
buildInputs = (attrVals mergedDetectedDeps.build pkgs) ++ (config.buildInputs pkgs);
|
||||||
|
nativeBuildInputs = with pkgs; [ pkg-config ] ++ (attrVals mergedDetectedDeps.native pkgs) ++ (config.nativeBuildInputs pkgs);
|
||||||
|
};
|
||||||
in
|
in
|
||||||
warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
{
|
{
|
||||||
|
|
@ -51,6 +80,11 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
default = pkgs: with pkgs; [ cargo-edit bacon ];
|
default = pkgs: with pkgs; [ cargo-edit bacon ];
|
||||||
description = "extra packages to make available in the dev shells";
|
description = "extra packages to make available in the dev shells";
|
||||||
};
|
};
|
||||||
|
autodeps = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Automatically detect (some) of the build dependencies";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkMerge [
|
config = mkMerge [
|
||||||
|
|
@ -66,8 +100,7 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
{
|
{
|
||||||
src = filteredSrc;
|
src = filteredSrc;
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
buildInputs = config.buildInputs final;
|
inherit ((buildDeps final)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs final;
|
|
||||||
};
|
};
|
||||||
cargoArtifactsAllFeatures = craneLib.buildDepsOnly
|
cargoArtifactsAllFeatures = craneLib.buildDepsOnly
|
||||||
{
|
{
|
||||||
|
|
@ -75,8 +108,7 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
cargoExtraArgs = "--locked --all-features";
|
cargoExtraArgs = "--locked --all-features";
|
||||||
pname = "${crateName}-all-features";
|
pname = "${crateName}-all-features";
|
||||||
buildInputs = config.buildInputs final;
|
inherit ((buildDeps final)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs final;
|
|
||||||
};
|
};
|
||||||
cargoArtifactsNoDefault = craneLib.buildDepsOnly
|
cargoArtifactsNoDefault = craneLib.buildDepsOnly
|
||||||
{
|
{
|
||||||
|
|
@ -84,8 +116,7 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
cargoExtraArgs = "--locked --no-default-features";
|
cargoExtraArgs = "--locked --no-default-features";
|
||||||
pname = "${crateName}-no-default-features";
|
pname = "${crateName}-no-default-features";
|
||||||
buildInputs = config.buildInputs final;
|
inherit ((buildDeps final)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs final;
|
|
||||||
};
|
};
|
||||||
cargoArtifactsMsrv = craneLibMsrv.buildDepsOnly
|
cargoArtifactsMsrv = craneLibMsrv.buildDepsOnly
|
||||||
{
|
{
|
||||||
|
|
@ -93,8 +124,7 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
cargoExtraArgs = "--locked --all-features";
|
cargoExtraArgs = "--locked --all-features";
|
||||||
pname = "${crateName}-msrv";
|
pname = "${crateName}-msrv";
|
||||||
buildInputs = config.buildInputs final;
|
inherit ((buildDeps final)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs final;
|
|
||||||
};
|
};
|
||||||
latestRustToolchain = rust-bin.stable.latest.default;
|
latestRustToolchain = rust-bin.stable.latest.default;
|
||||||
msrvRustToolchain = rust-bin.stable.${msrv}.default;
|
msrvRustToolchain = rust-bin.stable.${msrv}.default;
|
||||||
|
|
@ -134,8 +164,7 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
meta = defaultMeta;
|
meta = defaultMeta;
|
||||||
buildInputs = config.buildInputs pkgs;
|
inherit ((buildDeps pkgs)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs pkgs;
|
|
||||||
};
|
};
|
||||||
} // (genAttrs config.crossTargets (
|
} // (genAttrs config.crossTargets (
|
||||||
target: { craneLibForTargets, cargoArtifacts, defaultMeta, callPackage, crateName, pkgs }:
|
target: { craneLibForTargets, cargoArtifacts, defaultMeta, callPackage, crateName, pkgs }:
|
||||||
|
|
@ -154,8 +183,7 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
};
|
};
|
||||||
pname = "${crateName}-${target}";
|
pname = "${crateName}-${target}";
|
||||||
cargoExtraArgs = "--target ${target}";
|
cargoExtraArgs = "--target ${target}";
|
||||||
buildInputs = config.buildInputs pkgs;
|
inherit ((buildDeps pkgs)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs pkgs;
|
|
||||||
} // crossArgs)
|
} // crossArgs)
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
@ -183,16 +211,14 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
src = filteredSrc;
|
src = filteredSrc;
|
||||||
inherit cargoArtifacts;
|
inherit cargoArtifacts;
|
||||||
cargoExtraArgs = "--locked --all-targets --workspace";
|
cargoExtraArgs = "--locked --all-targets --workspace";
|
||||||
buildInputs = config.buildInputs pkgs;
|
inherit ((buildDeps pkgs)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs pkgs;
|
|
||||||
};
|
};
|
||||||
clippy = craneLib.cargoClippy {
|
clippy = craneLib.cargoClippy {
|
||||||
src = filteredSrc;
|
src = filteredSrc;
|
||||||
inherit cargoArtifacts;
|
inherit cargoArtifacts;
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
cargoClippyExtraArgs = "--all-targets ${maybeWorkspace} -- --deny warnings";
|
cargoClippyExtraArgs = "--all-targets ${maybeWorkspace} -- --deny warnings";
|
||||||
buildInputs = config.buildInputs pkgs;
|
inherit ((buildDeps pkgs)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs pkgs;
|
|
||||||
};
|
};
|
||||||
} // (optionalAttrs hasMsrv {
|
} // (optionalAttrs hasMsrv {
|
||||||
msrv = craneLibMsrv.buildPackage {
|
msrv = craneLibMsrv.buildPackage {
|
||||||
|
|
@ -204,8 +230,7 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
cargoBuildCommand = "cargo check";
|
cargoBuildCommand = "cargo check";
|
||||||
cargoExtraArgs = "--release --locked --all-targets --all-features ${maybeWorkspace}";
|
cargoExtraArgs = "--release --locked --all-targets --all-features ${maybeWorkspace}";
|
||||||
installPhaseCommand = "mkdir $out";
|
installPhaseCommand = "mkdir $out";
|
||||||
buildInputs = config.buildInputs pkgs;
|
inherit ((buildDeps pkgs)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs pkgs;
|
|
||||||
};
|
};
|
||||||
}) // (optionalAttrs hasFeatures {
|
}) // (optionalAttrs hasFeatures {
|
||||||
test-all-features = craneLib.cargoTest {
|
test-all-features = craneLib.cargoTest {
|
||||||
|
|
@ -214,8 +239,7 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
cargoArtifacts = cargoArtifactsAllFeatures;
|
cargoArtifacts = cargoArtifactsAllFeatures;
|
||||||
cargoExtraArgs = "--locked --all-targets --all-features ${maybeWorkspace}";
|
cargoExtraArgs = "--locked --all-targets --all-features ${maybeWorkspace}";
|
||||||
buildInputs = config.buildInputs pkgs;
|
inherit ((buildDeps pkgs)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs pkgs;
|
|
||||||
};
|
};
|
||||||
clippy-all-features = craneLib.cargoClippy {
|
clippy-all-features = craneLib.cargoClippy {
|
||||||
src = filteredSrc;
|
src = filteredSrc;
|
||||||
|
|
@ -223,8 +247,7 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
cargoArtifacts = cargoArtifactsAllFeatures;
|
cargoArtifacts = cargoArtifactsAllFeatures;
|
||||||
cargoClippyExtraArgs = "--all-targets ${maybeWorkspace} --all-features -- --deny warnings";
|
cargoClippyExtraArgs = "--all-targets ${maybeWorkspace} --all-features -- --deny warnings";
|
||||||
buildInputs = config.buildInputs pkgs;
|
inherit ((buildDeps pkgs)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs pkgs;
|
|
||||||
};
|
};
|
||||||
}) // (optionalAttrs hasDefaultFeatures {
|
}) // (optionalAttrs hasDefaultFeatures {
|
||||||
test-no-default-features = craneLib.cargoTest {
|
test-no-default-features = craneLib.cargoTest {
|
||||||
|
|
@ -233,8 +256,7 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
cargoArtifacts = cargoArtifactsNoDefault;
|
cargoArtifacts = cargoArtifactsNoDefault;
|
||||||
cargoExtraArgs = "--locked --all-targets --no-default-features ${maybeWorkspace}";
|
cargoExtraArgs = "--locked --all-targets --no-default-features ${maybeWorkspace}";
|
||||||
buildInputs = config.buildInputs pkgs;
|
inherit ((buildDeps pkgs)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs pkgs;
|
|
||||||
};
|
};
|
||||||
clippy-no-default-features = craneLib.cargoClippy {
|
clippy-no-default-features = craneLib.cargoClippy {
|
||||||
inherit src;
|
inherit src;
|
||||||
|
|
@ -242,8 +264,7 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
cargoArtifacts = cargoArtifactsNoDefault;
|
cargoArtifacts = cargoArtifactsNoDefault;
|
||||||
cargoClippyExtraArgs = "--all-targets ${maybeWorkspace} --no-default-features -- --deny warnings";
|
cargoClippyExtraArgs = "--all-targets ${maybeWorkspace} --no-default-features -- --deny warnings";
|
||||||
buildInputs = config.buildInputs pkgs;
|
inherit ((buildDeps pkgs)) buildInputs nativeBuildInputs;
|
||||||
nativeBuildInputs = config.nativeBuildInputs pkgs;
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -258,8 +279,8 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
default = {
|
default = {
|
||||||
packages = pkgs: with pkgs; [ latestRustToolchain ]
|
packages = pkgs: with pkgs; [ latestRustToolchain ]
|
||||||
++ (config.tools pkgs)
|
++ (config.tools pkgs)
|
||||||
++ (config.buildInputs pkgs)
|
++ (buildDeps pkgs).buildInputs
|
||||||
++ (config.nativeBuildInputs pkgs);
|
++ (buildDeps pkgs).nativeBuildInputs;
|
||||||
|
|
||||||
env = { rustPlatform, ... }: {
|
env = { rustPlatform, ... }: {
|
||||||
RUST_SRC_PATH = toString rustPlatform.rustLibSrc;
|
RUST_SRC_PATH = toString rustPlatform.rustLibSrc;
|
||||||
|
|
@ -268,8 +289,8 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
miri = {
|
miri = {
|
||||||
packages = pkgs: with pkgs; [ miriRustToolchain ]
|
packages = pkgs: with pkgs; [ miriRustToolchain ]
|
||||||
++ (config.tools pkgs)
|
++ (config.tools pkgs)
|
||||||
++ (config.buildInputs pkgs)
|
++ (buildDeps pkgs).buildInputs
|
||||||
++ (config.nativeBuildInputs pkgs);
|
++ (buildDeps pkgs).nativeBuildInputs;
|
||||||
|
|
||||||
inherit (default) env;
|
inherit (default) env;
|
||||||
};
|
};
|
||||||
|
|
@ -277,8 +298,8 @@ warnIf (! builtins ? readFileType) "Unsupported Nix version in use."
|
||||||
msrv = {
|
msrv = {
|
||||||
packages = pkgs: with pkgs; [ msrvRustToolchain ]
|
packages = pkgs: with pkgs; [ msrvRustToolchain ]
|
||||||
++ (config.tools pkgs)
|
++ (config.tools pkgs)
|
||||||
++ (config.buildInputs pkgs)
|
++ (buildDeps pkgs).buildInputs
|
||||||
++ (config.nativeBuildInputs pkgs);
|
++ (buildDeps pkgs).nativeBuildInputs;
|
||||||
|
|
||||||
inherit (devShells.default) env;
|
inherit (devShells.default) env;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue