summary refs log tree commit diff
path: root/pkgs/development/ocaml-modules/z3/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/ocaml-modules/z3/default.nix')
-rw-r--r--pkgs/development/ocaml-modules/z3/default.nix40
1 files changed, 40 insertions, 0 deletions
diff --git a/pkgs/development/ocaml-modules/z3/default.nix b/pkgs/development/ocaml-modules/z3/default.nix
new file mode 100644
index 00000000000..b17f29b4353
--- /dev/null
+++ b/pkgs/development/ocaml-modules/z3/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, ocaml, findlib, zarith, z3 }:
+
+if !lib.versionAtLeast ocaml.version "4.07"
+then throw "z3 is not available for OCaml ${ocaml.version}"
+else
+
+let z3-with-ocaml = (z3.override {
+  ocamlBindings = true;
+  inherit ocaml findlib zarith;
+}).overrideAttrs (o: {
+  patches = (o.patches or []) ++ [
+    # Fix build; see: https://github.com/Z3Prover/z3/issues/5776
+    ./ocamlfind.patch
+  ];
+}); in
+
+stdenv.mkDerivation {
+
+  pname = "ocaml${ocaml.version}-z3";
+  inherit (z3-with-ocaml) version;
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $OCAMLFIND_DESTDIR
+    cp -r ${z3-with-ocaml.ocaml}/lib/ocaml/${ocaml.version}/site-lib/stublibs $OCAMLFIND_DESTDIR
+    cp -r ${z3-with-ocaml.ocaml}/lib/ocaml/${ocaml.version}/site-lib/Z3 $OCAMLFIND_DESTDIR/z3
+    runHook postInstall
+  '';
+
+  nativeBuildInputs = [ findlib ];
+  propagatedBuildInputs = [ zarith ];
+
+  strictDeps = true;
+
+  meta = z3.meta // {
+    description = "Z3 Theorem Prover (OCaml API)";
+  };
+}