about summary refs log tree commit diff
path: root/pkgs/development/compilers/nim/build-nim-package.nix
diff options
context:
space:
mode:
authorSophie Tauchert <sophie@999eagle.moe>2023-12-06 09:44:17 +0100
committerEmery Hemingway <ehmry@posteo.net>2023-12-10 09:10:02 +0000
commit3b40e1bd33b442bb705f88a2bada2f6ace51e607 (patch)
tree844e393fa95a7f5a09c299e9c9b7ce4d932504c7 /pkgs/development/compilers/nim/build-nim-package.nix
parentdb3bd72ed27a5b2b96c3e6cca463117d27bb052b (diff)
downloadnixlib-3b40e1bd33b442bb705f88a2bada2f6ace51e607.tar
nixlib-3b40e1bd33b442bb705f88a2bada2f6ace51e607.tar.gz
nixlib-3b40e1bd33b442bb705f88a2bada2f6ace51e607.tar.bz2
nixlib-3b40e1bd33b442bb705f88a2bada2f6ace51e607.tar.lz
nixlib-3b40e1bd33b442bb705f88a2bada2f6ace51e607.tar.xz
nixlib-3b40e1bd33b442bb705f88a2bada2f6ace51e607.tar.zst
nixlib-3b40e1bd33b442bb705f88a2bada2f6ace51e607.zip
buildNimPackage: allow overriding nim package args
Without this, it's impossible to override the lockFile as the default
overrideAttrs is applied after the composition in buildNimPackage has
read the lock file and generated the nim flags from it.
Diffstat (limited to 'pkgs/development/compilers/nim/build-nim-package.nix')
-rw-r--r--pkgs/development/compilers/nim/build-nim-package.nix21
1 files changed, 21 insertions, 0 deletions
diff --git a/pkgs/development/compilers/nim/build-nim-package.nix b/pkgs/development/compilers/nim/build-nim-package.nix
index 5085edf90a76..a22fb45b507b 100644
--- a/pkgs/development/compilers/nim/build-nim-package.nix
+++ b/pkgs/development/compilers/nim/build-nim-package.nix
@@ -7,6 +7,7 @@
 , nim_builder
 , defaultNimVersion ? 2
 , nimOverrides
+, buildNimPackage
 }:
 
 let
@@ -90,6 +91,7 @@ let
         , nativeBuildInputs ? [ ]
         , nimFlags ? [ ]
         , requiredNimVersion ? defaultNimVersion
+        , passthru ? { }
         , ...
         }:
         (if requiredNimVersion == 1 then {
@@ -102,6 +104,25 @@ let
           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 = postLock // finalOverride postLock;