improve rust template for ensuring package overriable

This commit is contained in:
ulic-youthlic 2025-05-25 16:37:32 +08:00
parent dc5dfddf74
commit 18bfe1ce9a
Signed by: youthlic
GPG key ID: 63E86C3C14A0D721
6 changed files with 100 additions and 38 deletions

View file

@ -0,0 +1,20 @@
{
lib,
basicArgs,
buildInputs,
nativeBuildInputs,
}: let
f = {
craneLib,
lib,
...
} @ args: let
genInputs = lib.genInputsWith args;
in
craneLib.buildDepsOnly (basicArgs
// {
buildInputs = genInputs buildInputs;
nativeBuildInputs = genInputs nativeBuildInputs;
});
in
with lib; setFunctionArgs f ((functionArgs f) // (genFunctionArgs (buildInputs ++ nativeBuildInputs)))

View file

@ -0,0 +1,13 @@
{
flip,
pipe,
splitString,
head,
listToAttrs,
nameValuePair,
getAttrFromPath,
...
}: {
genFunctionArgs = flip pipe [(map (flip pipe [(splitString ".") head (flip nameValuePair false)])) listToAttrs];
genInputsWith = pkgs: map (flip pipe [(splitString ".") (flip getAttrFromPath pkgs)]);
}

View file

@ -0,0 +1,30 @@
{
lib,
basicArgs,
buildInputs,
nativeBuildInputs,
}: let
f = {
craneLib,
lib,
cargoArtifacts,
...
} @ args: let
genInputs = lib.genInputsWith args;
in
craneLib.buildPackage (basicArgs
// {
inherit
(craneLib.crateNameFromCargoToml {
cargoToml = "${toString basicArgs.src}/Cargo.toml";
})
pname
version
;
inherit cargoArtifacts;
buildInputs = genInputs buildInputs;
nativeBuildInputs = genInputs nativeBuildInputs;
doCheck = false;
});
in
with lib; setFunctionArgs f ((functionArgs f) // (genFunctionArgs (buildInputs ++ nativeBuildInputs)))