[PATCH WIP] gnu: Add minizinc.

  • Done
  • quality assurance status badge
Details
3 participants
  • Leo Prikler
  • Liliana Marie Prikler
  • Maxime Devos
Owner
unassigned
Submitted by
Leo Prikler
Severity
normal

Debbugs page

Leo Prikler wrote 4 years ago
(address . guix-patches@gnu.org)
20210718150351.12359-1-leo.prikler@student.tugraz.at
* gnu/packages/maths.scm (minizinc): New variable.
---
MiniZinc typically wants to be used with the hitherto unpackaged Gecode
(https://www.gecode.org), but getting its RUNPATH correct appears pretty
non-straightforward. It does however also function with CBC by specifying
‘--solver cbc’.

gnu/packages/maths.scm | 82 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 82 insertions(+)

Toggle diff (95 lines)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index b4cf0b5409..dce1b5627f 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -2837,6 +2837,88 @@ the Cauchy-Schwarz inequality, Stirling's formula, etc. See the Metamath
book.")
(license license:gpl2+)))
+(define-public minizinc
+ (package
+ (name "minizinc")
+ (version "2.5.5")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/MiniZinc/libminizinc")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "10b2hsl1fx9psh0iagmp8ki3f60f3qg5hmvra5aczjlfmbl88ggp"))
+ (modules '((guix build utils)
+ (ice-9 ftw)
+ (srfi srfi-1)))
+ (snippet
+ '(begin
+ ;; Do not advertise proprietary solvers
+ (with-directory-excursion "cmake/targets"
+ (let ((targets '("libminizinc_fzn.cmake"
+ "libminizinc_gecode.cmake"
+ "libminizinc_mip.cmake"
+ "libminizinc_nl.cmake"
+ "libminizinc_osicbc.cmake"
+ "libminizinc_parser.cmake"
+ "libmzn.cmake"
+ "minizinc.cmake"
+ "mzn2doc.cmake")))
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file (cons* "." ".." targets)))
+ (scandir ".")))
+ (substitute* "libmzn.cmake"
+ (("include\\(cmake/targets/(.*)\\)" all target)
+ (if (member target targets) all "")))))
+ (with-directory-excursion "include/minizinc/solvers/MIP"
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file '("." ".."
+ "MIP_osicbc_solverfactory.hh"
+ "MIP_osicbc_wrap.hh"
+ "MIP_solverinstance.hh"
+ "MIP_solverinstance.hpp"
+ "MIP_wrap.hh")))
+ (scandir "."))))
+ (with-directory-excursion "solvers/MIP"
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file '("." ".."
+ "MIP_osicbc_solverfactory.cpp"
+ "MIP_osicbc_wrap.cpp"
+ "MIP_solverinstance.cpp"
+ "MIP_wrap.cpp")))
+ (scandir "."))))
+ (substitute* "CMakeLists.txt"
+ (("find_package\\(([^ ]*).*\\)" all pkg)
+ (if (member pkg '("Gecode ""OsiCBC" "Threads"))
+ all
+ "")))
+ ;; TODO: swap out miniz for zlib
+ #t))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f ; no ‘check’ target
+ ))
+ (inputs
+ `(("bison" ,bison)
+ ("flex" ,flex)
+ ("zlib" ,zlib)
+ ;; solvers
+ ("cbc" ,cbc)))
+ (home-page "https://www.minizinc.org")
+ (synopsis "High-level constraint modeling language")
+ (description "MiniZinc is a high-level modeling language for constraint
+satisfaction and optimization problems. Models are compiled to FlatZinc, a
+language understood by many solvers.")
+ (license license:mpl2.0)))
+
(define-public mumps
(package
(name "mumps")
--
2.32.0
Leo Prikler wrote 4 years ago
[PATCH 2/2] gnu: Add minizinc.
(address . 49625@debbugs.gnu.org)
20210724150852.20873-2-leo.prikler@student.tugraz.at
* gnu/packages/maths.scm (minizinc): New variable.
---
gnu/packages/maths.scm | 130 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 130 insertions(+)

Toggle diff (143 lines)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index c052d33214..5f5184c722 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -3057,6 +3057,136 @@ the Cauchy-Schwarz inequality, Stirling's formula, etc. See the Metamath
book.")
(license license:gpl2+)))
+(define-public minizinc
+ (package
+ (name "minizinc")
+ (version "2.5.5")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/MiniZinc/libminizinc")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "10b2hsl1fx9psh0iagmp8ki3f60f3qg5hmvra5aczjlfmbl88ggp"))
+ (modules '((guix build utils)
+ (ice-9 ftw)
+ (srfi srfi-1)))
+ (snippet
+ '(begin
+ ;; Do not advertise proprietary solvers
+ (with-directory-excursion "cmake/targets"
+ (let ((targets '("libminizinc_fzn.cmake"
+ "libminizinc_gecode.cmake"
+ "libminizinc_mip.cmake"
+ "libminizinc_nl.cmake"
+ "libminizinc_osicbc.cmake"
+ "libminizinc_parser.cmake"
+ "libmzn.cmake"
+ "minizinc.cmake"
+ "mzn2doc.cmake")))
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file (cons* "." ".." targets)))
+ (scandir ".")))
+ (substitute* "libmzn.cmake"
+ (("include\\(cmake/targets/(.*)\\)" all target)
+ (if (member target targets) all "")))))
+ (with-directory-excursion "include/minizinc/solvers/MIP"
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file '("." ".."
+ "MIP_osicbc_solverfactory.hh"
+ "MIP_osicbc_wrap.hh"
+ "MIP_solverinstance.hh"
+ "MIP_solverinstance.hpp"
+ "MIP_wrap.hh")))
+ (scandir "."))))
+ (with-directory-excursion "solvers/MIP"
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file '("." ".."
+ "MIP_osicbc_solverfactory.cpp"
+ "MIP_osicbc_wrap.cpp"
+ "MIP_solverinstance.cpp"
+ "MIP_wrap.cpp")))
+ (scandir "."))))
+ (substitute* "CMakeLists.txt"
+ (("find_package\\(([^ ]*).*\\)" all pkg)
+ (if (member pkg '("Gecode" "OsiCBC" "Threads"))
+ all
+ "")))
+ ;; TODO: swap out miniz for zlib
+ #t))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f ; no ‘check’ target
+ #:modules ((guix build cmake-build-system)
+ (guix build utils)
+ (srfi srfi-1))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'install-solver-configs
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((gecode (assoc-ref inputs "gecode"))
+ (pkgdatadir (string-append (assoc-ref outputs "out")
+ "/share/minizinc")))
+ (call-with-output-file (string-append pkgdatadir
+ "/Preferences.json")
+ (lambda (port)
+ (display "\
+{
+ \"tagDefaults\": [
+ [\"\", \"org.gecode.gecode\"],
+ [\"gecode\", \"org.gecode.gecode\"]
+ ],
+ \"solverDefaults\": []
+}"
+ port)
+ (newline port)))
+
+ (mkdir-p (string-append pkgdatadir "/solvers"))
+ (call-with-output-file (string-append pkgdatadir
+ "/solvers/gecode.msc")
+ (lambda (port)
+ (format port
+ "\
+{
+ \"id\": \"org.gecode.gecode\",
+ \"name\": \"Gecode\",
+ \"description\": \"Gecode FlatZinc executable\",
+ \"version\": ~s,
+ \"mznlib\": ~s,
+ \"executable\": ~s,
+ \"supportsMzn\": false,
+ \"supportsFzn\": true,
+ \"needsSolns2Out\": true,
+ \"needsMznExecutable\": false,
+ \"needsStdlibDir\": false,
+ \"isGUIApplication\": false
+}"
+ (last (string-split gecode #\-))
+ (string-append gecode "/share/gecode/mznlib")
+ (string-append gecode "/bin/fzn-gecode"))
+ (newline port)))))))))
+ (inputs
+ `(("bison" ,bison)
+ ("flex" ,flex)
+ ("zlib" ,zlib)
+ ;; solvers
+ ("cbc" ,cbc)
+ ("gecode" ,gecode)))
+ (home-page "https://www.minizinc.org")
+ (synopsis "High-level constraint modeling language")
+ (description "MiniZinc is a high-level modeling language for constraint
+satisfaction and optimization problems. Models are compiled to FlatZinc, a
+language understood by many solvers.")
+ (license license:mpl2.0)))
+
(define-public mumps
(package
(name "mumps")
--
2.32.0
Leo Prikler wrote 4 years ago
[PATCH 1/2] gnu: Add gecode.
(address . 49625@debbugs.gnu.org)
20210724150852.20873-1-leo.prikler@student.tugraz.at
* gnu/packages/maths.scm (gecode): New variable.
---
gnu/packages/maths.scm | 71 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)

Toggle diff (84 lines)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index eeb32d554a..c052d33214 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -2008,6 +2008,77 @@ linear and quadratic objectives. There are limited facilities for nonlinear
and quadratic objectives using the Simplex algorithm.")
(license license:epl1.0)))
+(define-public gecode
+ (package
+ (name "gecode")
+ (version "6.2.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Gecode/gecode")
+ (commit (string-append "release-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0b1cq0c810j1xr2x9y9996p894571sdxng5h74py17c6nr8c6dmk"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ ;; delete generated sources
+ (for-each delete-file
+ '("gecode/kernel/var-imp.hpp"
+ "gecode/kernel/var-type.hpp"))))))
+ (outputs '("out" "examples"))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:configure-flags
+ (list (string-append "GLDFLAGS=-Wl,-rpath="
+ (assoc-ref %outputs "out")
+ "/lib")
+ "--enable-examples=no")
+ #:modules ((guix build gnu-build-system)
+ (guix build utils)
+ (ice-9 rdelim)
+ (ice-9 popen))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'build 'build-examples
+ (lambda* (#:key outputs #:allow-other-keys)
+ (invoke "make" "compileexamples")))
+ ;; The Makefile disrespects GLDFLAGS for some reason, so we have to
+ ;; patch it ourselves... *sigh*
+ (add-after 'install 'fix-rpath
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((libdir (string-append (assoc-ref outputs "out") "/lib")))
+ (for-each
+ (lambda (file)
+ (let* ((pipe (open-pipe* OPEN_READ "patchelf"
+ "--print-rpath" file))
+ (line (read-line pipe)))
+ (and (zero? (close-pipe pipe))
+ (invoke "patchelf" "--set-rpath"
+ (string-append libdir ":" line)
+ file))))
+ (find-files libdir ".*\\.so$")))))
+ (add-after 'install 'install-examples
+ (lambda* (#:key outputs #:allow-other-keys)
+ (invoke "make" "installexamples"
+ (string-append "bindir=" (assoc-ref outputs "examples")
+ "/bin"))))
+ ;; Tests depend on installed libraries.
+ (delete 'check)
+ (add-after 'fix-rpath 'check
+ (assoc-ref %standard-phases 'check)))))
+ (native-inputs
+ `(("patchelf" ,patchelf)
+ ("perl" ,perl)
+ ("sed" ,sed)))
+ (home-page "https://www.gecode.org")
+ (synopsis "Toolkit for developing constraint-based systems")
+ (description "Gecode is a C++ toolkit for developing constraint-based
+systems and applications. It provides a modular and extensible solver.")
+ (license license:expat)))
+
(define-public libflame
(package
(name "libflame")
--
2.32.0
Maxime Devos wrote 4 years ago
Re: [bug#49625] [PATCH WIP] gnu: Add minizinc.
43cfa44c9ec8b3132acae89aa0e839ee13012c7b.camel@telenet.be
Hi,

Toggle quote (4 lines)
> + (inputs
> + `(("bison" ,bison)
> + ("flex" ,flex)

"bison" and "flex" are usually only used at compile time,
so these should probably be native inputs. As a test,
you can use "guix gc --references" to test if a reference to
"bison" and "flex" is retained (if there's no reference,
then they should probably be native-inputs).

Greetings,
Maxime.
-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYPxbBxccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7qU2AP9RfTXw8P3XZ18RuxYFp3bITKzS
NTtIy0qiVzWQCbyJdAD+PBkErIuDdCvsaS1IrN6XzvAEqY0uhIJA/H88olrIjgU=
=1c2k
-----END PGP SIGNATURE-----


Leo Prikler wrote 4 years ago
[PATCH v2 2/2] gnu: Add minizinc.
(address . 49625@debbugs.gnu.org)
20210725222341.30622-2-leo.prikler@student.tugraz.at
* gnu/packages/maths.scm (minizinc): New variable.
---
gnu/packages/maths.scm | 130 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 130 insertions(+)

Toggle diff (143 lines)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index c052d33214..d72a534f30 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -3057,6 +3057,136 @@ the Cauchy-Schwarz inequality, Stirling's formula, etc. See the Metamath
book.")
(license license:gpl2+)))
+(define-public minizinc
+ (package
+ (name "minizinc")
+ (version "2.5.5")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/MiniZinc/libminizinc")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "10b2hsl1fx9psh0iagmp8ki3f60f3qg5hmvra5aczjlfmbl88ggp"))
+ (modules '((guix build utils)
+ (ice-9 ftw)
+ (srfi srfi-1)))
+ (snippet
+ '(begin
+ ;; Do not advertise proprietary solvers
+ (with-directory-excursion "cmake/targets"
+ (let ((targets '("libminizinc_fzn.cmake"
+ "libminizinc_gecode.cmake"
+ "libminizinc_mip.cmake"
+ "libminizinc_nl.cmake"
+ "libminizinc_osicbc.cmake"
+ "libminizinc_parser.cmake"
+ "libmzn.cmake"
+ "minizinc.cmake"
+ "mzn2doc.cmake")))
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file (cons* "." ".." targets)))
+ (scandir ".")))
+ (substitute* "libmzn.cmake"
+ (("include\\(cmake/targets/(.*)\\)" all target)
+ (if (member target targets) all "")))))
+ (with-directory-excursion "include/minizinc/solvers/MIP"
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file '("." ".."
+ "MIP_osicbc_solverfactory.hh"
+ "MIP_osicbc_wrap.hh"
+ "MIP_solverinstance.hh"
+ "MIP_solverinstance.hpp"
+ "MIP_wrap.hh")))
+ (scandir "."))))
+ (with-directory-excursion "solvers/MIP"
+ (for-each delete-file
+ (remove
+ (lambda (file)
+ (member file '("." ".."
+ "MIP_osicbc_solverfactory.cpp"
+ "MIP_osicbc_wrap.cpp"
+ "MIP_solverinstance.cpp"
+ "MIP_wrap.cpp")))
+ (scandir "."))))
+ (substitute* "CMakeLists.txt"
+ (("find_package\\(([^ ]*).*\\)" all pkg)
+ (if (member pkg '("Gecode" "OsiCBC" "Threads"))
+ all
+ "")))
+ ;; TODO: swap out miniz for zlib
+ #t))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f ; no ‘check’ target
+ #:modules ((guix build cmake-build-system)
+ (guix build utils)
+ (srfi srfi-1))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'install-solver-configs
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((gecode (assoc-ref inputs "gecode"))
+ (pkgdatadir (string-append (assoc-ref outputs "out")
+ "/share/minizinc")))
+ (call-with-output-file (string-append pkgdatadir
+ "/Preferences.json")
+ (lambda (port)
+ (display "\
+{
+ \"tagDefaults\": [
+ [\"\", \"org.gecode.gecode\"],
+ [\"gecode\", \"org.gecode.gecode\"]
+ ],
+ \"solverDefaults\": []
+}"
+ port)
+ (newline port)))
+
+ (mkdir-p (string-append pkgdatadir "/solvers"))
+ (call-with-output-file (string-append pkgdatadir
+ "/solvers/gecode.msc")
+ (lambda (port)
+ (format port
+ "\
+{
+ \"id\": \"org.gecode.gecode\",
+ \"name\": \"Gecode\",
+ \"description\": \"Gecode FlatZinc executable\",
+ \"version\": ~s,
+ \"mznlib\": ~s,
+ \"executable\": ~s,
+ \"supportsMzn\": false,
+ \"supportsFzn\": true,
+ \"needsSolns2Out\": true,
+ \"needsMznExecutable\": false,
+ \"needsStdlibDir\": false,
+ \"isGUIApplication\": false
+}"
+ (last (string-split gecode #\-))
+ (string-append gecode "/share/gecode/mznlib")
+ (string-append gecode "/bin/fzn-gecode"))
+ (newline port)))))))))
+ (native-inputs
+ `(("bison" ,bison)
+ ("flex" ,flex)))
+ (inputs
+ `(("cbc" ,cbc)
+ ("gecode" ,gecode)
+ ("zlib" ,zlib)))
+ (home-page "https://www.minizinc.org")
+ (synopsis "High-level constraint modeling language")
+ (description "MiniZinc is a high-level modeling language for constraint
+satisfaction and optimization problems. Models are compiled to FlatZinc, a
+language understood by many solvers.")
+ (license license:mpl2.0)))
+
(define-public mumps
(package
(name "mumps")
--
2.32.0
Leo Prikler wrote 4 years ago
[PATCH v2 1/2] gnu: Add gecode.
(address . 49625@debbugs.gnu.org)
20210725222341.30622-1-leo.prikler@student.tugraz.at
* gnu/packages/maths.scm (gecode): New variable.
---
gnu/packages/maths.scm | 71 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)

Toggle diff (84 lines)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index eeb32d554a..c052d33214 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -2008,6 +2008,77 @@ linear and quadratic objectives. There are limited facilities for nonlinear
and quadratic objectives using the Simplex algorithm.")
(license license:epl1.0)))
+(define-public gecode
+ (package
+ (name "gecode")
+ (version "6.2.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Gecode/gecode")
+ (commit (string-append "release-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0b1cq0c810j1xr2x9y9996p894571sdxng5h74py17c6nr8c6dmk"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ ;; delete generated sources
+ (for-each delete-file
+ '("gecode/kernel/var-imp.hpp"
+ "gecode/kernel/var-type.hpp"))))))
+ (outputs '("out" "examples"))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:configure-flags
+ (list (string-append "GLDFLAGS=-Wl,-rpath="
+ (assoc-ref %outputs "out")
+ "/lib")
+ "--enable-examples=no")
+ #:modules ((guix build gnu-build-system)
+ (guix build utils)
+ (ice-9 rdelim)
+ (ice-9 popen))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'build 'build-examples
+ (lambda* (#:key outputs #:allow-other-keys)
+ (invoke "make" "compileexamples")))
+ ;; The Makefile disrespects GLDFLAGS for some reason, so we have to
+ ;; patch it ourselves... *sigh*
+ (add-after 'install 'fix-rpath
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((libdir (string-append (assoc-ref outputs "out") "/lib")))
+ (for-each
+ (lambda (file)
+ (let* ((pipe (open-pipe* OPEN_READ "patchelf"
+ "--print-rpath" file))
+ (line (read-line pipe)))
+ (and (zero? (close-pipe pipe))
+ (invoke "patchelf" "--set-rpath"
+ (string-append libdir ":" line)
+ file))))
+ (find-files libdir ".*\\.so$")))))
+ (add-after 'install 'install-examples
+ (lambda* (#:key outputs #:allow-other-keys)
+ (invoke "make" "installexamples"
+ (string-append "bindir=" (assoc-ref outputs "examples")
+ "/bin"))))
+ ;; Tests depend on installed libraries.
+ (delete 'check)
+ (add-after 'fix-rpath 'check
+ (assoc-ref %standard-phases 'check)))))
+ (native-inputs
+ `(("patchelf" ,patchelf)
+ ("perl" ,perl)
+ ("sed" ,sed)))
+ (home-page "https://www.gecode.org")
+ (synopsis "Toolkit for developing constraint-based systems")
+ (description "Gecode is a C++ toolkit for developing constraint-based
+systems and applications. It provides a modular and extensible solver.")
+ (license license:expat)))
+
(define-public libflame
(package
(name "libflame")
--
2.32.0
Liliana Marie Prikler wrote 3 years ago
[PATCH WIP] gnu: Add minizinc.
(address . 49625-done@debbugs.gnu.org)
2bf52af7628661249c26ca487aea899b9558643f.camel@gmail.com
Pushed v2.
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 49625@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 49625
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help