query
On this page

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