summary refs log tree commit diff
path: root/pkgs/development/idris-modules/with-packages.nix
blob: d2b09808ec153413a9b1aeb4e748c75a410587ea (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
# Build a version of idris with a set of packages visible
# packages: The packages visible to idris
{ stdenv, idris }: packages: stdenv.mkDerivation {
  inherit (idris) name;

  buildInputs = packages;

  preHook = ''
    mkdir -p $out/lib/${idris.name}

    installIdrisLib () {
      if [ -d $1/lib/${idris.name} ]; then
        ln -fsv $1/lib/${idris.name}/* $out/lib/${idris.name}
      fi
    }

    envHooks+=(installIdrisLib)
  '';

  unpackPhase = ''
    cat >idris.c <<EOF
    #include <stdlib.h>
    #include <unistd.h>
    #include <stdio.h>

    int main (int argc, char ** argv) {
      /* idris currently only supports a single library path, so respect it if the user set it */
      setenv("IDRIS_LIBRARY_PATH", "$out/lib/${idris.name}", 0);
      execv("${idris}/bin/idris", argv);
      perror("executing ${idris}/bin/idris");
      return 127;
    }
    EOF
  '';

  buildPhase = ''
    $CC -O3 -o idris idris.c
  '';

  installPhase = ''
    mkdir -p $out/bin
    mv idris $out/bin
  '';

  stripAllList = [ "bin" ];
}