2020-03-02 22:18:08 +00:00
|
|
|
{ stdenv, fetchpatch, fetchFromGitHub, cmake, zlib, gmp, jdk8,
|
2018-07-08 17:42:56 +01:00
|
|
|
# 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";
|
|
|
|
|
2019-06-26 20:44:22 +01:00
|
|
|
rev = "1.8.0";
|
|
|
|
sha256 = "0q3a8x3iih25xkp2bm842sm2hxlb8hxlls4qmvj7vzwrh4lvsl7b";
|
2018-07-08 17:42:56 +01:00
|
|
|
|
|
|
|
pname = "monosat";
|
2019-06-26 20:44:22 +01:00
|
|
|
version = rev;
|
2018-07-08 17:42:56 +01:00
|
|
|
|
|
|
|
src = fetchFromGitHub {
|
|
|
|
owner = "sambayless";
|
|
|
|
repo = pname;
|
|
|
|
inherit rev sha256;
|
|
|
|
};
|
|
|
|
|
2020-03-02 22:18:08 +00:00
|
|
|
patches = [
|
|
|
|
# Python 3.8 compatibility
|
|
|
|
(fetchpatch {
|
|
|
|
url = https://github.com/sambayless/monosat/commit/a5079711d0df0451f9840f3a41248e56dbb03967.patch;
|
|
|
|
sha256 = "0fwsk67798dns7izdry19r7r3nmym4cbgxfpbjbnx4b4mlak65j8";
|
|
|
|
})
|
|
|
|
];
|
|
|
|
|
2019-08-13 22:52:01 +01:00
|
|
|
core = stdenv.mkDerivation {
|
2018-07-08 17:42:56 +01:00
|
|
|
name = "${pname}-${version}";
|
2020-03-02 22:18:08 +00:00
|
|
|
inherit src patches;
|
2018-07-08 17:42:56 +01:00
|
|
|
buildInputs = [ cmake zlib gmp jdk8 ];
|
|
|
|
|
2019-06-26 20:44:22 +01:00
|
|
|
cmakeFlags = [
|
|
|
|
"-DBUILD_STATIC=OFF"
|
|
|
|
"-DJAVA=${boolToCmake includeJava}"
|
|
|
|
"-DGPL=${boolToCmake includeGplCode}"
|
|
|
|
];
|
2018-07-08 17:42:56 +01:00
|
|
|
|
|
|
|
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;
|
2019-06-26 21:24:16 +01:00
|
|
|
maintainers = [ maintainers.acairncross ];
|
2018-07-08 17:42:56 +01:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
python = { buildPythonPackage, cython }: buildPythonPackage {
|
2020-03-02 22:18:08 +00:00
|
|
|
inherit pname version src patches;
|
2018-07-08 17:42:56 +01:00
|
|
|
|
|
|
|
propagatedBuildInputs = [ core cython ];
|
|
|
|
|
2019-06-26 20:44:22 +01:00
|
|
|
# This tells setup.py to use cython, which should produce faster bindings
|
2018-07-09 03:04:05 +01:00
|
|
|
MONOSAT_CYTHON = true;
|
|
|
|
|
2020-03-02 22:18:08 +00:00
|
|
|
# After patching src, move to where the actually relevant source is. This could just be made
|
|
|
|
# the sourceRoot if it weren't for the patch.
|
|
|
|
postPatch = ''
|
|
|
|
cd src/monosat/api/python
|
|
|
|
'' +
|
2018-07-08 17:42:56 +01:00
|
|
|
# The relative paths here don't make sense for our Nix build
|
|
|
|
# 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...
|
2020-03-02 22:18:08 +00:00
|
|
|
''
|
2018-07-08 17:42:56 +01:00
|
|
|
substituteInPlace setup.py \
|
2019-06-26 20:44:22 +01:00
|
|
|
--replace 'library_dir = "../../../../"' 'library_dir = "${core}/lib/"'
|
2018-07-08 17:42:56 +01:00
|
|
|
'';
|
|
|
|
};
|
2019-10-07 16:20:23 +01:00
|
|
|
in core
|