about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/idris2/build-idris.nix
blob: c299128aa5260f9469c4c28a88a64a78c5d2827a (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
{ stdenv, lib, idris2
}:
# Usage: let
#          pkg = idris2Packages.buildIdris {
#            src = ...;
#            projectName = "my-pkg";
#            idrisLibraries = [ ];
#          };
#        in {
#          lib = pkg.library { withSource = true; };
#          bin = pkg.executable;
#        }
#
{ src
, projectName
, idrisLibraries # Other libraries built with buildIdris
, ... }@attrs:

let
  ipkgName = projectName + ".ipkg";
  idrName = "idris2-${idris2.version}";
  libSuffix = "lib/${idrName}";
  libDirs =
    lib.makeSearchPath libSuffix idrisLibraries;
  drvAttrs = builtins.removeAttrs attrs [ "idrisLibraries" ];

  sharedAttrs = {
    name = projectName;
    src = src;
    nativeBuildInputs = [ idris2 ];

    IDRIS2_PACKAGE_PATH = libDirs;

    configurePhase = ''
      runHook preConfigure
      runHook postConfigure
    '';

    buildPhase = ''
      runHook preBuild
      idris2 --build ${ipkgName}
      runHook postBuild
    '';
  };

in {
  executable = stdenv.mkDerivation (lib.attrsets.mergeAttrsList [
    sharedAttrs
    { installPhase = ''
        runHook preInstall
        mkdir -p $out/bin
        mv build/exec/* $out/bin
        runHook postInstall
      '';
    }
    drvAttrs
  ]);
  library = { withSource ? false }:
    let installCmd = if withSource then "--install-with-src" else "--install";
    in stdenv.mkDerivation (lib.attrsets.mergeAttrsList [
      sharedAttrs
      {
        installPhase = ''
          runHook preInstall
          mkdir -p $out/${libSuffix}
          export IDRIS2_PREFIX=$out/lib
          idris2 ${installCmd} ${ipkgName}
          runHook postInstall
        '';
      }
      drvAttrs
    ]);
}