diff options
Diffstat (limited to 'pkgs/applications/science/logic/monosat/default.nix')
-rw-r--r-- | pkgs/applications/science/logic/monosat/default.nix | 67 |
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 0000000000000..54bedc7c5e971 --- /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 |