summary refs log tree commit diff
path: root/pkgs/build-support/ocaml/default.nix
blob: 87bfa6cea12085db4b324cf36df9b0da847ce999 (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
{ stdenv, writeText, ocaml, findlib, camlp4 }:

{ name, version, buildInputs ? [],
  createFindlibDestdir ?  true,
  dontStrip ? true,
  minimumSupportedOcamlVersion ? null,
  hasSharedObjects ? false,
  setupHook ? null,
  meta ? {}, ...
}@args:
let
  ocaml_version = (builtins.parseDrvName ocaml.name).version;
  defaultMeta = {
    platforms = ocaml.meta.platforms;
  };
in
  assert minimumSupportedOcamlVersion != null ->
          stdenv.lib.versionOlder minimumSupportedOcamlVersion ocaml_version;

stdenv.mkDerivation (args // {
  name = "ocaml-${name}-${version}";

  buildInputs = [ ocaml findlib camlp4 ] ++ buildInputs;

  setupHook = if setupHook == null && hasSharedObjects
  then writeText "setupHook.sh" ''
    export CAML_LD_LIBRARY_PATH="''${CAML_LD_LIBRARY_PATH}''${CAML_LD_LIBRARY_PATH:+:}''$1/lib/ocaml/${ocaml_version}/site-lib/${name}/"
    ''
  else setupHook;

  inherit ocaml_version;
  inherit createFindlibDestdir;
  inherit dontStrip;

  meta = defaultMeta // meta;
})