summary refs log tree commit diff
path: root/pkgs/build-support/ocaml/oasis.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/build-support/ocaml/oasis.nix')
-rw-r--r--pkgs/build-support/ocaml/oasis.nix46
1 files changed, 46 insertions, 0 deletions
diff --git a/pkgs/build-support/ocaml/oasis.nix b/pkgs/build-support/ocaml/oasis.nix
new file mode 100644
index 00000000000..74977486f2f
--- /dev/null
+++ b/pkgs/build-support/ocaml/oasis.nix
@@ -0,0 +1,46 @@
+{ stdenv, ocaml_oasis, ocaml, findlib, ocamlbuild }:
+
+{ pname, version, buildInputs ? [], meta ? { platforms = ocaml.meta.platforms or []; },
+  minimumOCamlVersion ? null,
+  createFindlibDestdir ? true,
+  dontStrip ? true,
+  ...
+}@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 (args // {
+  name = "ocaml${ocaml.version}-${pname}-${version}";
+
+  buildInputs = [ ocaml findlib ocamlbuild ocaml_oasis ] ++ buildInputs;
+
+  inherit createFindlibDestdir;
+  inherit dontStrip;
+
+  buildPhase = ''
+    runHook preBuild
+    oasis setup
+    ocaml setup.ml -configure
+    ocaml setup.ml -build
+    runHook postBuild
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+    ocaml setup.ml -test
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out
+    sed -i s+/usr/local+$out+g setup.ml
+    sed -i s+/usr/local+$out+g setup.data
+    prefix=$OCAMLFIND_DESTDIR ocaml setup.ml -install
+    runHook postInstall
+  '';
+
+})