buildNimPackage
pkgs.buildNimPackage
Functor
Docs pulled from | This Revision | 1 day ago
Contribute
Enhance the ecosystem with your expertise! Contribute to fill the gaps in documentation. Your input can make a difference.
Noogle detected
This is a Functor
Learn about functors
Implementation
The following is the current implementation of this function.
buildNimPackageArgs:
let
composition =
finalAttrs:
let
postPkg = baseAttrs // (asFunc ((asFunc buildNimPackageArgs) finalAttrs)) baseAttrs;
lockAttrs = lib.attrsets.optionalAttrs (builtins.hasAttr "lockFile" postPkg) (
builtins.fromJSON (builtins.readFile postPkg.lockFile)
);
lockDepends = lockAttrs.depends or [ ];
lockFileNimFlags = map fodFromLockEntry lockDepends;
postNimOverrides = builtins.foldl' (
prevAttrs:
{ packages, ... }@lockAttrs:
builtins.foldl' (
prevAttrs: name:
if (builtins.hasAttr name nimOverrides) then
(prevAttrs // (nimOverrides.${name} lockAttrs prevAttrs))
else
prevAttrs
) prevAttrs packages
) postPkg lockDepends;
finalOverride =
{
depsBuildBuild ? [ ],
nativeBuildInputs ? [ ],
nimFlags ? [ ],
requiredNimVersion ? defaultNimVersion,
passthru ? { },
...
}:
(
if requiredNimVersion == 1 then
{
depsBuildBuild = [ nim_builder ] ++ depsBuildBuild;
nativeBuildInputs = [ nim1 ] ++ nativeBuildInputs;
}
else if requiredNimVersion == 2 then
{
depsBuildBuild = [ nim_builder ] ++ depsBuildBuild;
nativeBuildInputs = [ nim2 ] ++ nativeBuildInputs;
}
else
throw "requiredNimVersion ${toString requiredNimVersion} is not valid"
)
// {
nimFlags = lockFileNimFlags ++ nimFlags;
passthru = passthru // {
# allow overriding the result of buildNimPackageArgs before this composition is applied
# this allows overriding the lockFile for packages built using buildNimPackage
# this is adapted from mkDerivationExtensible in stdenv.mkDerivation
overrideNimAttrs =
f0:
let
f =
self: super:
let
x = f0 super;
in
if builtins.isFunction x then f0 self super else x;
in
buildNimPackage (
self:
let
super = (asFunc ((asFunc buildNimPackageArgs) self)) baseAttrs;
in
super // (if builtins.isFunction f0 || f0 ? __functor then f self super else f0)
);
};
};
attrs = postNimOverrides // finalOverride postNimOverrides;
in
lib.trivial.warnIf (builtins.hasAttr "nimBinOnly" attrs)
"the nimBinOnly attribute is deprecated for buildNimPackage"
attrs;
in
stdenv.mkDerivation composition