1{ lib, stdenv, fetchFromGitHub, callPackage, jq, cmake, flex, bison, gecode, mpfr, cbc, zlib }:
2
3stdenv.mkDerivation (finalAttrs: {
4 pname = "minizinc";
5 version = "2.7.4";
6
7 src = fetchFromGitHub {
8 owner = "MiniZinc";
9 repo = "libminizinc";
10 rev = finalAttrs.version;
11 sha256 = "sha256-Zq5gAwe9IQmknSDilFyHhSk5ZCQ8EfBOiM6Oef2WxYg=";
12 };
13
14 nativeBuildInputs = [ bison cmake flex jq ];
15
16 buildInputs = [ gecode mpfr cbc zlib ];
17
18 postInstall = ''
19 mkdir -p $out/share/minizinc/solvers/
20 jq \
21 '.version = "${gecode.version}"
22 | .mznlib = "${gecode}/share/gecode/mznlib"
23 | .executable = "${gecode}/bin/fzn-gecode"' \
24 ${./gecode.msc} \
25 >$out/share/minizinc/solvers/gecode.msc
26 '';
27
28 passthru.tests = {
29 simple = callPackage ./simple-test { };
30 };
31
32 meta = with lib; {
33 homepage = "https://www.minizinc.org/";
34 description = "A medium-level constraint modelling language";
35 longDescription = ''
36 MiniZinc is a medium-level constraint modelling
37 language. It is high-level enough to express most
38 constraint problems easily, but low-level enough
39 that it can be mapped onto existing solvers easily and consistently.
40 It is a subset of the higher-level language Zinc.
41 '';
42 license = licenses.mpl20;
43 platforms = platforms.unix;
44 maintainers = [ maintainers.sheenobu ];
45 };
46})