about summary refs log tree commit diff
path: root/pkgs/development/tools/minizinc
diff options
context:
space:
mode:
authorAlexandru Scvortov <code@scvalex.net>2023-06-01 14:07:14 +0100
committerAlexandru Scvortov <code@scvalex.net>2023-06-01 14:07:14 +0100
commit44a331ac331e603684af642e8e89d4e6e21c9d98 (patch)
tree65d2c4efa4c3dfbcedd8e1fd80eec2672c74af2e /pkgs/development/tools/minizinc
parent8377abe93b704b57d9ae8d54db7f4fe1b3b8787d (diff)
minizinc: enable gecode and cbc solvers by default
Other changes:
- switch derivation to finalAttrs pattern
Diffstat (limited to 'pkgs/development/tools/minizinc')
-rw-r--r--pkgs/development/tools/minizinc/default.nix24
-rw-r--r--pkgs/development/tools/minizinc/gecode.msc16
-rw-r--r--pkgs/development/tools/minizinc/simple-test/aust.mzn20
-rw-r--r--pkgs/development/tools/minizinc/simple-test/default.nix16
-rw-r--r--pkgs/development/tools/minizinc/simple-test/loan.mzn24
-rw-r--r--pkgs/development/tools/minizinc/simple-test/loan1.dzn3
6 files changed, 98 insertions, 5 deletions
diff --git a/pkgs/development/tools/minizinc/default.nix b/pkgs/development/tools/minizinc/default.nix
index a0fb567385072..d62bdee040695 100644
--- a/pkgs/development/tools/minizinc/default.nix
+++ b/pkgs/development/tools/minizinc/default.nix
@@ -1,17 +1,31 @@
-{ lib, stdenv, fetchFromGitHub, cmake, flex, bison }:
-stdenv.mkDerivation rec {
+{ lib, stdenv, fetchFromGitHub, callPackage, jq, cmake, flex, bison, gecode, mpfr, cbc, zlib }:
+stdenv.mkDerivation (finalAttrs: {
   pname = "minizinc";
   version = "2.7.4";
 
-  nativeBuildInputs = [ cmake flex bison ];
+  nativeBuildInputs = [ cmake flex bison gecode mpfr cbc zlib ];
 
   src = fetchFromGitHub {
     owner = "MiniZinc";
     repo = "libminizinc";
-    rev = version;
+    rev = finalAttrs.version;
     sha256 = "sha256-Zq5gAwe9IQmknSDilFyHhSk5ZCQ8EfBOiM6Oef2WxYg=";
   };
 
+  postInstall = ''
+    mkdir -p $out/share/minizinc/solvers/
+    ${jq}/bin/jq \
+      '.version = "${gecode.version}"
+       | .mznlib = "${gecode}/share/gecode/mznlib"
+       | .executable = "${gecode}/bin/fzn-gecode"' \
+       ${./gecode.msc} \
+       >$out/share/minizinc/solvers/gecode.msc
+  '';
+
+  passthru.tests = {
+    simple = callPackage ./simple-test { };
+  };
+
   meta = with lib; {
     homepage = "https://www.minizinc.org/";
     description = "A medium-level constraint modelling language";
@@ -28,4 +42,4 @@ stdenv.mkDerivation rec {
     platforms = platforms.unix;
     maintainers = [ maintainers.sheenobu ];
   };
-}
+})
diff --git a/pkgs/development/tools/minizinc/gecode.msc b/pkgs/development/tools/minizinc/gecode.msc
new file mode 100644
index 0000000000000..fc0b4a2046895
--- /dev/null
+++ b/pkgs/development/tools/minizinc/gecode.msc
@@ -0,0 +1,16 @@
+{
+    "id": "org.gecode.gecode",
+    "name": "Gecode",
+    "description": "Gecode FlatZinc executable",
+    "version": "VERSION-WILL-BE-REPLACED-BY-JQ",
+    "mznlib": "MZNLIB-WILL-BE-REPLACED-BY-JQ",
+    "executable": "FZN_GECODE-WILL-BE-REPLACED-BY-JQ",
+    "tags": ["cp","int", "float", "set", "restart"],
+    "stdFlags": ["-a","-f","-n","-p","-r","-s","-t"],
+    "supportsMzn": false,
+    "supportsFzn": true,
+    "needsSolns2Out": true,
+    "needsMznExecutable": false,
+    "needsStdlibDir": false,
+    "isGUIApplication": false
+}
diff --git a/pkgs/development/tools/minizinc/simple-test/aust.mzn b/pkgs/development/tools/minizinc/simple-test/aust.mzn
new file mode 100644
index 0000000000000..73d6dbfb7daae
--- /dev/null
+++ b/pkgs/development/tools/minizinc/simple-test/aust.mzn
@@ -0,0 +1,20 @@
+% Taken from https://www.minizinc.org/doc-2.7.3/en/modelling.html
+int: nc = 3;
+
+var 1..nc: wa;   var 1..nc: nt;  var 1..nc: sa;   var 1..nc: q;
+var 1..nc: nsw;  var 1..nc: v;   var 1..nc: t;
+
+constraint wa != nt;
+constraint wa != sa;
+constraint nt != sa;
+constraint nt != q;
+constraint sa != q;
+constraint sa != nsw;
+constraint sa != v;
+constraint q != nsw;
+constraint nsw != v;
+solve satisfy;
+
+output ["wa=\(wa)\t nt=\(nt)\t sa=\(sa)\n",
+        "q=\(q)\t nsw=\(nsw)\t v=\(v)\n",
+         "t=", show(t),  "\n"];
diff --git a/pkgs/development/tools/minizinc/simple-test/default.nix b/pkgs/development/tools/minizinc/simple-test/default.nix
new file mode 100644
index 0000000000000..0a9a811a43fff
--- /dev/null
+++ b/pkgs/development/tools/minizinc/simple-test/default.nix
@@ -0,0 +1,16 @@
+# These tests show that the minizinc build is capable of running the
+# examples in the official tutorial:
+# https://www.minizinc.org/doc-2.7.3/en/modelling.html
+
+{ stdenv, minizinc }:
+
+stdenv.mkDerivation {
+  name = "minizinc-simple-test";
+  meta.timeout = 10;
+  dontInstall = true;
+  buildCommand = ''
+    ${minizinc}/bin/minizinc --solver gecode ${./aust.mzn}
+    ${minizinc}/bin/minizinc --solver cbc ${./loan.mzn} ${./loan1.dzn}
+    touch $out
+  '';
+}
diff --git a/pkgs/development/tools/minizinc/simple-test/loan.mzn b/pkgs/development/tools/minizinc/simple-test/loan.mzn
new file mode 100644
index 0000000000000..b3c1b735847ee
--- /dev/null
+++ b/pkgs/development/tools/minizinc/simple-test/loan.mzn
@@ -0,0 +1,24 @@
+% Taken from https://www.minizinc.org/doc-2.7.3/en/modelling.html
+% variables
+var float: R;        % quarterly repayment
+var float: P;        % principal initially borrowed
+var 0.0 .. 10.0: I;  % interest rate (per quarter)
+
+% intermediate variables
+var float: B1; % balance after one quarter
+var float: B2; % balance after two quarters
+var float: B3; % balance after three quarters
+var float: B4; % balance owing at end
+
+constraint B1 = P * (1.0 + I) - R;
+constraint B2 = B1 * (1.0 + I) - R;
+constraint B3 = B2 * (1.0 + I) - R;
+constraint B4 = B3 * (1.0 + I) - R;
+
+solve satisfy;
+
+output [
+ "Borrowing ", show_float(0, 2, P), " at ", show(I*100.0),
+ "% interest, and repaying ", show_float(0, 2, R),
+  "\nper quarter for 1 year leaves ", show_float(0, 2, B4), " owing\n"
+];
diff --git a/pkgs/development/tools/minizinc/simple-test/loan1.dzn b/pkgs/development/tools/minizinc/simple-test/loan1.dzn
new file mode 100644
index 0000000000000..d5fd9dad2e957
--- /dev/null
+++ b/pkgs/development/tools/minizinc/simple-test/loan1.dzn
@@ -0,0 +1,3 @@
+I = 0.04;
+P = 1000.0;
+R = 260.0;