gnu: Add scotch package.

* gnu/packages/maths.scm (scotch): New variable.
* gnu/packages/patches/scotch-test-threading.patch: New patch.
* gnu-system.am (dist_patch_DATA): Add it.
This commit is contained in:
Eric Bavier 2014-05-19 00:08:30 -05:00
parent c711f07c3e
commit f8ed036a31
3 changed files with 217 additions and 0 deletions

View File

@ -339,6 +339,7 @@ dist_patch_DATA = \
gnu/packages/patches/readline-link-ncurses.patch \
gnu/packages/patches/ripperx-libm.patch \
gnu/packages/patches/scheme48-tests.patch \
gnu/packages/patches/scotch-test-threading.patch \
gnu/packages/patches/slim-session.patch \
gnu/packages/patches/slim-config.patch \
gnu/packages/patches/slim-sigusr1.patch \

View File

@ -589,3 +589,80 @@ library routines perform an LU decomposition with partial pivoting and
triangular system solves through forward and back substitution. The library
also provides threshold-based ILU factorization preconditioners.")
(license license:bsd-3)))
(define-public scotch
(package
(name "scotch")
(version "6.0.0")
(source
(origin
(method url-fetch)
(uri (string-append "https://gforge.inria.fr/frs/download.php/31831/"
"scotch_" version ".tar.gz"))
(sha256
(base32 "0yfqf9lk7chb3h42777x42x4adx0v3n0b41q0cdqrdmscp4iczp5"))
(patches (list (search-patch "scotch-test-threading.patch")))))
(build-system gnu-build-system)
(inputs
`(("zlib" ,zlib)
("flex" ,flex)
("bison" ,bison)))
(arguments
`(#:phases
(alist-cons-after
'unpack 'chdir-to-src
(lambda _ (chdir "src"))
(alist-replace
'configure
(lambda _
(call-with-output-file "Makefile.inc"
(lambda (port)
(format port "
EXE =
LIB = .a
OBJ = .o
MAKE = make
AR = ar
ARFLAGS = -ruv
CCS = gcc
CCP = mpicc
CCD = gcc
CPPFLAGS =~{ -D~a~}
CFLAGS = -O2 -g $(CPPFLAGS)
LDFLAGS = -lz -lm -lrt -lpthread
CP = cp
LEX = flex -Pscotchyy -olex.yy.c
LN = ln
MKDIR = mkdir
MV = mv
RANLIB = ranlib
YACC = bison -pscotchyy -y -b y
"
'("COMMON_FILE_COMPRESS_GZ"
"COMMON_PTHREAD"
"COMMON_RANDOM_FIXED_SEED"
;; TODO: Define once our MPI supports
;; MPI_THREAD_MULTIPLE
;; "SCOTCH_PTHREAD"
;; "SCOTCH_PTHREAD_NUMBER=2"
"restrict=__restrict")))))
(alist-replace
'install
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(mkdir out)
(zero? (system* "make"
(string-append "prefix=" out)
"install"))))
%standard-phases)))))
(home-page "http://www.labri.fr/perso/pelegrin/scotch/")
(synopsis "Programs and libraries for graph algorithms")
(description "SCOTCH is a set of programs and libraries which implement
the static mapping and sparse matrix reordering algorithms developed within
the SCOTCH project. Its purpose is to apply graph theory, with a divide and
conquer approach, to scientific computing problems such as graph and mesh
partitioning, static mapping, and sparse matrix ordering, in application
domains ranging from structural mechanics to operating systems or
bio-chemistry.")
;; See LICENSE_en.txt
(license license:cecill-c)))

View File

@ -0,0 +1,139 @@
* These tests assume threading support, even when the library is compiled
without it. Protect these checks.
* Tests should not require keyboard interaction.
--- a/src/check/test_scotch_dgraph_band.c 2012-09-27 10:46:42.000000000 -0500
+++ b/src/check/test_scotch_dgraph_band.c 2014-05-13 14:36:07.479270243 -0500
@@ -99,10 +99,12 @@
errorPrint ("main: Cannot initialize (1)");
exit (1);
}
+#ifdef SCOTCH_PTHREAD
if (thrdlvlreqval > thrdlvlproval) {
errorPrint ("main: Cannot initialize (2)");
exit (1);
}
+#endif
if (argc != 2) {
errorPrint ("main: invalid number of parameters");
@@ -115,12 +117,14 @@
fprintf (stderr, "Proc %2d of %2d, pid %d\n", proclocnum, procglbnbr, getpid ());
+#ifdef SCOTCH_DEBUG_CHECK2
if (proclocnum == 0) { /* Synchronize on keybord input */
char c;
printf ("Waiting for key press...\n");
scanf ("%c", &c);
}
+#endif /* SCOTCH_DEBUG_CHECK2 */
if (MPI_Barrier (proccomm) != MPI_SUCCESS) { /* Synchronize for debug */
errorPrint ("main: cannot communicate");
--- a/src/check/test_scotch_dgraph_grow.c 2012-11-30 12:19:33.000000000 -0600
+++ b/src/check/test_scotch_dgraph_grow.c 2014-05-13 14:35:31.307269303 -0500
@@ -103,10 +103,12 @@
errorPrint ("main: Cannot initialize (1)");
exit (1);
}
+#ifdef SCOTCH_PTHREAD
if (thrdlvlreqval > thrdlvlproval) {
errorPrint ("main: Cannot initialize (2)");
exit (1);
}
+#endif
if (argc != 2) {
errorPrint ("main: invalid number of parameters");
@@ -119,12 +121,14 @@
fprintf (stderr, "Proc %2d of %2d, pid %d\n", proclocnum, procglbnbr, getpid ());
+#ifdef SCOTCH_DEBUG_CHECK2
if (proclocnum == 0) { /* Synchronize on keybord input */
char c;
printf ("Waiting for key press...\n");
scanf ("%c", &c);
}
+#endif /* SCOTCH_DEBUG_CHECK2 */
if (MPI_Barrier (proccomm) != MPI_SUCCESS) { /* Synchronize for debug */
errorPrint ("main: cannot communicate");
--- a/src/check/test_scotch_dgraph_redist.c 2012-09-26 11:42:27.000000000 -0500
+++ b/src/check/test_scotch_dgraph_redist.c 2014-05-13 14:34:30.323267722 -0500
@@ -98,10 +98,12 @@
errorPrint ("main: Cannot initialize (1)");
exit (1);
}
+#ifdef SCOTCH_PTHREAD
if (thrdlvlreqval > thrdlvlproval) {
errorPrint ("main: Cannot initialize (2)");
exit (1);
}
+#endif
if (argc != 2) {
errorPrint ("main: invalid number of parameters");
@@ -114,7 +116,6 @@
fprintf (stderr, "Proc %2d of %2d, pid %d\n", proclocnum, procglbnbr, getpid ());
-#define SCOTCH_DEBUG_CHECK2
#ifdef SCOTCH_DEBUG_CHECK2
if (proclocnum == 0) { /* Synchronize on keybord input */
char c;
--- /tmp/nix-build-scotch-6.0.0.drv-9/scotch_6.0.0/src/check/test_common_thread.c 2012-11-30 11:05:23.000000000 -0600
+++ scotch_6.0.0/src/check/test_common_thread.c 2014-05-13 17:26:27.159535244 -0500
@@ -90,7 +90,7 @@
/* */
/*************************/
-#if ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD))
+#ifdef SCOTCH_PTHREAD
static
void
@@ -161,7 +161,7 @@
return (o);
}
-#endif /* ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD)) */
+#endif /* SCOTCH_PTHREAD */
/*********************/
/* */
@@ -175,14 +175,14 @@
char * argv[])
{
TestThreadGroup groudat;
-#if ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD))
+#ifdef SCOTCH_PTHREAD
TestThread * restrict thrdtab;
int thrdnbr;
-#endif /* ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD)) */
+#endif /* SCOTCH_PTHREAD */
SCOTCH_errorProg (argv[0]);
-#if ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD))
+#ifdef SCOTCH_PTHREAD
thrdnbr = SCOTCH_PTHREAD_NUMBER;
groudat.redusum = COMPVAL (thrdnbr);
@@ -197,9 +197,9 @@
errorPrint ("main: cannot launch or run threads");
return (1);
}
-#else /* ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD)) */
- printf ("Scotch not compiled with either COMMON_PTHREAD or SCOTCH_PTHREAD\n");
-#endif /* ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD)) */
+#else /* not SCOTCH_PTHREAD */
+ printf ("Scotch not compiled with SCOTCH_PTHREAD\n");
+#endif /* not SCOTCH_PTHREAD */
return (0);
}