about summary refs log tree commit diff
path: root/pkgs/applications/science/logic/monosat/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/science/logic/monosat/default.nix')
-rw-r--r--pkgs/applications/science/logic/monosat/default.nix67
1 files changed, 67 insertions, 0 deletions
diff --git a/pkgs/applications/science/logic/monosat/default.nix b/pkgs/applications/science/logic/monosat/default.nix
new file mode 100644
index 000000000000..54bedc7c5e97
--- /dev/null
+++ b/pkgs/applications/science/logic/monosat/default.nix
@@ -0,0 +1,67 @@
+{ stdenv, fetchFromGitHub, cmake, zlib, gmp, jdk8,
+  # The JDK we use on Darwin currenly makes extensive use of rpaths which are
+  # annoying and break the python library, so let's not bother for now
+  includeJava ? !stdenv.hostPlatform.isDarwin, includeGplCode ? true }:
+
+with stdenv.lib;
+
+let
+  boolToCmake = x: if x then "ON" else "OFF";
+
+  rev    = "2deeadeff214e975c9f7508bc8a24fa05a1a0c32";
+  sha256 = "09yhym2lxmn3xbhw5fcxawnmvms5jd9fw9m7x2wzil7yvy4vwdjn";
+
+  pname   = "monosat";
+  version = substring 0 7 sha256;
+
+  src = fetchFromGitHub {
+    owner = "sambayless";
+    repo  = pname;
+    inherit rev sha256;
+  };
+
+  core = stdenv.mkDerivation rec {
+    name = "${pname}-${version}";
+    inherit src;
+    buildInputs = [ cmake zlib gmp jdk8 ];
+
+    cmakeFlags = [ "-DJAVA=${boolToCmake includeJava}" "-DGPL=${boolToCmake includeGplCode}" ];
+
+    postInstall = optionalString includeJava ''
+      mkdir -p $out/share/java
+      cp monosat.jar $out/share/java
+    '';
+
+    passthru = { inherit python; };
+
+    meta = {
+      description = "SMT solver for Monotonic Theories";
+      platforms   = platforms.unix;
+      license     = if includeGplCode then licenses.gpl2 else licenses.mit;
+      homepage    = https://github.com/sambayless/monosat;
+    };
+  };
+
+  python = { buildPythonPackage, cython }: buildPythonPackage {
+    inherit pname version src;
+
+    # The top-level "source" is what fetchFromGitHub gives us. The rest is inside the repo
+    sourceRoot = "source/src/monosat/api/python/";
+
+    propagatedBuildInputs = [ core cython ];
+
+    # This tells setup.py to use cython
+    MONOSAT_CYTHON = true;
+
+    # The relative paths here don't make sense for our Nix build
+    # Also, let's use cython since it should produce faster bindings
+    # TODO: do we want to just reference the core monosat library rather than copying the
+    # shared lib? The current setup.py copies the .dylib/.so...
+    postPatch = ''
+
+      substituteInPlace setup.py \
+        --replace '../../../../libmonosat.dylib' '${core}/lib/libmonosat.dylib' \
+        --replace '../../../../libmonosat.so'  '${core}/lib/libmonosat.so'
+    '';
+  };
+in core
\ No newline at end of file