about summary refs log tree commit diff
path: root/pkgs/development/compilers/nim
diff options
context:
space:
mode:
authorEmery Hemingway <ehmry@posteo.net>2023-11-20 10:12:30 +0200
committerEmery Hemingway <ehmry@posteo.net>2023-11-28 16:48:10 +0200
commit39d4eace911f9e838df023ad80f52132380e01c2 (patch)
tree34320aca34453d8b9224d43be8daafcecbcae77e /pkgs/development/compilers/nim
parent89153ceb44198bba7b6fc74451a7dbf38d0193dd (diff)
downloadnixlib-39d4eace911f9e838df023ad80f52132380e01c2.tar
nixlib-39d4eace911f9e838df023ad80f52132380e01c2.tar.gz
nixlib-39d4eace911f9e838df023ad80f52132380e01c2.tar.bz2
nixlib-39d4eace911f9e838df023ad80f52132380e01c2.tar.lz
nixlib-39d4eace911f9e838df023ad80f52132380e01c2.tar.xz
nixlib-39d4eace911f9e838df023ad80f52132380e01c2.tar.zst
nixlib-39d4eace911f9e838df023ad80f52132380e01c2.zip
nimPackages.buildNimPackage: move to top-level
Diffstat (limited to 'pkgs/development/compilers/nim')
-rw-r--r--pkgs/development/compilers/nim/build-nim-package.nix51
1 files changed, 51 insertions, 0 deletions
diff --git a/pkgs/development/compilers/nim/build-nim-package.nix b/pkgs/development/compilers/nim/build-nim-package.nix
new file mode 100644
index 000000000000..d11eb7cd8e30
--- /dev/null
+++ b/pkgs/development/compilers/nim/build-nim-package.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, nim1, nim2, nim_builder, defaultNimVersion ? 2 }:
+pkgArgs:
+
+let
+  baseAttrs = {
+    strictDeps = true;
+    enableParallelBuilding = true;
+    doCheck = true;
+    configurePhase = ''
+      runHook preConfigure
+      export NIX_NIM_BUILD_INPUTS=''${pkgsHostTarget[@]} $NIX_NIM_BUILD_INPUTS
+      nim_builder --phase:configure
+      runHook postConfigure
+    '';
+    buildPhase = ''
+      runHook preBuild
+      nim_builder --phase:build
+      runHook postBuild
+    '';
+    checkPhase = ''
+      runHook preCheck
+      nim_builder --phase:check
+      runHook postCheck
+    '';
+    installPhase = ''
+      runHook preInstall
+      nim_builder --phase:install
+      runHook postInstall
+    '';
+    meta = { inherit (nim2.meta) maintainers platforms; };
+  };
+
+  inputsOverride = { depsBuildBuild ? [ ], nativeBuildInputs ? [ ]
+    , requiredNimVersion ? defaultNimVersion, ... }:
+    (if requiredNimVersion == 1 then {
+      nativeBuildInputs = [ nim1 ] ++ nativeBuildInputs;
+    } else if requiredNimVersion == 2 then {
+      nativeBuildInputs = [ nim2 ] ++ nativeBuildInputs;
+    } else
+      throw "requiredNimVersion ${toString requiredNimVersion} is not valid")
+    // {
+      depsBuildBuild = [ nim_builder ] ++ depsBuildBuild;
+    };
+
+  composition = finalAttrs:
+    let
+      asFunc = x: if builtins.isFunction x then x else (_: x);
+      prev = baseAttrs // (asFunc ((asFunc pkgArgs) finalAttrs)) baseAttrs;
+    in prev // inputsOverride prev;
+
+in stdenv.mkDerivation composition