summary refs log tree commit diff
path: root/pkgs/build-support/ocaml/dune.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/build-support/ocaml/dune.nix')
-rw-r--r--pkgs/build-support/ocaml/dune.nix36
1 files changed, 36 insertions, 0 deletions
diff --git a/pkgs/build-support/ocaml/dune.nix b/pkgs/build-support/ocaml/dune.nix
new file mode 100644
index 00000000000..7386b07f575
--- /dev/null
+++ b/pkgs/build-support/ocaml/dune.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, ocaml, findlib, dune, opaline }:
+
+{ pname, version, buildInputs ? [], ... }@args:
+
+if args ? minimumOCamlVersion &&
+   ! stdenv.lib.versionAtLeast ocaml.version args.minimumOCamlVersion
+then throw "${pname}-${version} is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation ({
+
+  buildPhase = ''
+    runHook preBuild
+    dune build -p ${pname}
+    runHook postBuild
+  '';
+  checkPhase = ''
+    runHook preCheck
+    dune runtest -p ${pname}
+    runHook postCheck
+  '';
+  installPhase = ''
+    runHook preInstall
+    ${opaline}/bin/opaline -prefix $out -libdir $OCAMLFIND_DESTDIR
+    runHook postInstall
+  '';
+
+  meta.platform = ocaml.meta.platform;
+
+} // args // {
+
+  name = "ocaml${ocaml.version}-${pname}-${version}";
+
+  buildInputs = [ ocaml dune findlib ] ++ buildInputs;
+
+})