query
On this page

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