buildNimPackage
pkgs.buildNimPackage
Functor
Docs pulled from | This Revision | 18 days 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 =
{
nimFlags ? [ ],
passthru ? { },
nativeBuildInputs ? [ ],
depsBuildBuild ? [ ],
...
}@args:
(
#TODO: Remove at 26.11
if args ? requiredNimVersion then
if args.requiredNimVersion == 2 then
lib.warn ''
`requiredNimVersion' is deprecated and will be removed in nixpkgs 26.11.
Please update your package to remove this.
''
else
throw ''
`requiredNimVersion' ${toString args.requiredNimVersion} is not supported.
Ensure your package supports nim 2, and remove `requiredNimVersion'.
''
else
{ }
)
// {
nativeBuildInputs = [ nim ] ++ nativeBuildInputs;
depsBuildBuild = [ nim_builder ] ++ depsBuildBuild;
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