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

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

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

  buildInputs = [ ocaml findlib ocamlbuild 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 createFindlibDestdir;
  inherit dontStrip;

  meta = defaultMeta // meta;
})