~ruther/guix-local

95ecbdc9b162998c55eb7b355c59fa5205a4373c — David Elsing 2 years ago 9b5dbc4
gnu: Add gklib-suitesparse.

* gnu/packages/maths.scm (gklib-suitesparse): New variable.
* gnu/packages/patches/gklib-suitesparse.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
3 files changed, 91 insertions(+), 0 deletions(-)

M gnu/local.mk
M gnu/packages/maths.scm
A gnu/packages/patches/gklib-suitesparse.patch
M gnu/local.mk => gnu/local.mk +1 -0
@@ 1272,6 1272,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/ghostscript-no-header-uuid.patch		\
  %D%/packages/patches/ghostscript-no-header-creationdate.patch \
  %D%/packages/patches/gitg-fix-positional-argument.patch	\
  %D%/packages/patches/gklib-suitesparse.patch			\
  %D%/packages/patches/glib-appinfo-watch.patch			\
  %D%/packages/patches/glib-networking-gnutls-binding.patch	\
  %D%/packages/patches/glib-skip-failing-test.patch		\

M gnu/packages/maths.scm => gnu/packages/maths.scm +25 -0
@@ 5397,6 5397,31 @@ matrix with which the LU factorization becomes sparser.  It is a variant of
COLAMD which has the the option to apply constraints to the ordering.")
    (license license:bsd-3)))

(define-public gklib-suitesparse
  (package/inherit gklib
    (name "gklib-suitesparse")
    (source (origin
              (inherit (package-source gklib))
              (patches (cons
                        (search-patch
                         "gklib-suitesparse.patch")
                        (origin-patches (package-source gklib))))))
    (arguments
     (substitute-keyword-arguments (package-arguments gklib)
       ((#:phases phases #~%standard-phases)
        #~(modify-phases #$phases
            (add-after 'unpack 'patch-cmake
              (lambda _
                (substitute* "CMakeLists.txt"
                  (("add_library\\(GKlib.*" all)
                   (string-append
                    all
                    "target_link_libraries(GKlib PUBLIC"
                    " ${SUITESPARSE_CONFIG_LIBRARIES} m)\n")))))))))
    (inputs
     (modify-inputs (package-inputs gklib)
       (prepend suitesparse-config)))))

(define-public suitesparse
  (package
    (name "suitesparse")

A gnu/packages/patches/gklib-suitesparse.patch => gnu/packages/patches/gklib-suitesparse.patch +65 -0
@@ 0,0 1,65 @@
This patch contains the relevant changes to GKlib made in SuiteSparse
(CHOLMOD) for the version 7.2.0
(https://github.com/DrTimothyAldenDavis/SuiteSparse/commit/8a7641cdb4809533c681417e94f98058c07c5da2).
The disabling of signal handling when MATLAB_MEX_FILE is defined is omitted.

diff -ur a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,6 +3,8 @@
 
 option(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" OFF)
 
+find_package ( SuiteSparse_config 7.1.0 REQUIRED )
+
 get_filename_component(abs "." ABSOLUTE)
 set(GKLIB_PATH ${abs})
 unset(abs)
diff -ur a/GKlib.h b/GKlib.h
--- a/GKlib.h
+++ b/GKlib.h
@@ -59,6 +59,24 @@
 #include <omp.h>
 #endif
 
+/* -------------------------------------------------------------------------- */
+/* Added for incorporation into SuiteSparse.
+   Tim Davis, Oct 31, 2022, Texas A&M University. */
+#include "SuiteSparse_config.h"
+#define malloc  SuiteSparse_config_malloc
+#define calloc  SuiteSparse_config_calloc
+#define realloc SuiteSparse_config_realloc
+#define free(p)                                 \
+{                                               \
+    if ((p) != NULL)                            \
+    {                                           \
+        SuiteSparse_config_free (p) ;           \
+        (p) = NULL ;                            \
+    }                                           \
+}
+
+/* -------------------------------------------------------------------------- */
+
 
 
 
diff -ur a/memory.c b/memory.c
--- a/memory.c
+++ b/memory.c
@@ -108,6 +108,8 @@
 /*************************************************************************/
 int gk_malloc_init()
 {
+  gkmcore = NULL;
+#if 0
   if (gkmcore == NULL)
     gkmcore = gk_gkmcoreCreate();
 
@@ -115,6 +117,7 @@
     return 0;
 
   gk_gkmcorePush(gkmcore);
+#endif
 
   return 1;
 }