about summary refs log tree commit diff
path: root/pkgs/development/compilers/nim/build-nim-package.nix
blob: d11eb7cd8e30237ae08b4d6ccda59cae4c942dec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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