Subject: [bug#66129] [PATCH v3 18/20] gnu: Add suitesparse-spex.

From: David Elsing <[email-masked]>
Date: Thu, 5 Oct 2023 21:35:01 +0000

* gnu/packages/maths.scm (suitesparse-spex): New variable.
---
 gnu/packages/maths.scm | 70 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 9a013825de..b41b2be6e9 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -5797,6 +5797,76 @@ (define-public suitesparse-mongoose
 edge cuts using a coarsening and refinement framework.")
     (license license:gpl3)))
 
+(define-public suitesparse-spex
+  (package
+    (name "suitesparse-spex")
+    (version "2.2.0")
+    (source suitesparse-source)
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'chdir
+            (lambda _
+              (chdir "SPEX")))
+          (add-after 'chdir 'set-cmake-module-path
+            (lambda _
+              (substitute* "CMakeLists.txt"
+                (("set.*CMAKE_MODULE_PATH.*")
+                 (string-append
+                  "set(CMAKE_MODULE_PATH "
+                  (string-join
+                   (map (lambda (path)
+                          (string-append path "/lib/cmake/SuiteSparse"))
+                        (list #$suitesparse-amd
+                              #$suitesparse-colamd
+                              #$suitesparse-config)))
+                  ")\nset(DUMMY\n")))))
+          (add-after 'build 'build-doc
+            (lambda _
+              (with-directory-excursion "../SPEX/Doc"
+                (invoke "make"))))
+          (add-after 'install 'install-doc
+            (lambda _
+              (install-file "../SPEX/Doc/SPEX_UserGuide.pdf"
+                            (string-append #$output "/share/doc/"
+                                           #$name "-" #$version)))))))
+    (inputs
+     (list gmp
+           mpfr
+           suitesparse-amd
+           suitesparse-colamd
+           suitesparse-config))
+    (native-inputs
+     (list (texlive-updmap.cfg
+            (list texlive-paralist
+                  texlive-comment
+                  texlive-psfrag
+                  texlive-soul
+                  texlive-multirow
+                  texlive-algorithms
+                  texlive-float
+                  texlive-algorithmicx
+                  texlive-cprotect
+                  texlive-bigfoot
+                  texlive-caption
+                  texlive-listings
+                  texlive-xcolor
+                  texlive-framed
+                  texlive-mdframed
+                  texlive-etoolbox
+                  texlive-zref
+                  texlive-needspace))))
+    (home-page "https://people.engr.tamu.edu/davis/suitesparse.html")
+    (synopsis "Package for SParse EXact algebra")
+    (description "SPEX is a set of routines for sparse exact linear algebra.
+It contains the SPEX Left LU library for computing a sparse exact left-looking
+LU factorization for solving unsymmetric sparse linear systems.")
+    ;; Dual licensed.
+    (license (list license:lgpl3+ license:gpl2+))))
+
 (define-public suitesparse
   (package
     (name "suitesparse")
-- 
2.41.0