# HG changeset patch # User John W. Eaton # Date 1363372652 14400 # Node ID eb572251b7c648c75c96b1cd71734cc90408e50b # Parent ce5231908ea234d3300f297b0f9364cf491ba0f8 check for correct SuiteSparse functions if --enable-64 * configure.ac (UMFPACK_TAG): New macro. Use it to check for appropriate cholmod, cxsparse, and umfpack functions that depend on index size. * acinclude.m4 (OCTAVE_UMFPACK_SEPARATE_SPLIT): Use correct umfpack names and integer sizes in test. diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -1276,6 +1276,16 @@ fi LIBS="$save_LIBS" +if test $USE_64_BIT_IDX_T = yes; then + CHOLMOD_TAG="_l_" + CXSPARSE_TAG="_dl_" + UMFPACK_TAG="_zl_" +else + CHOLMOD_TAG="_" + CXSPARSE_TAG="_di_" + UMFPACK_TAG="_zi_" +fi + ### Check for AMD library OCTAVE_CHECK_LIB(amd, AMD, @@ -1317,7 +1327,7 @@ OCTAVE_CHECK_LIB(cholmod, CHOLMOD, [CHOLMOD library not found. This will result in some lack of functionality for sparse matrices.], [suitesparse/cholmod.h ufsparse/cholmod.h cholmod/cholmod.h cholmod.h], - [cholmod_start], + [cholmod${CHOLMOD_TAG}start], [], [don't use CHOLMOD library, disable some sparse matrix functionality]) LIBS="$save_LIBS" @@ -1326,7 +1336,7 @@ OCTAVE_CHECK_LIB(cxsparse, CXSparse, [CXSparse library not found. This will result in some lack of functionality for sparse matrices.], [suitesparse/cs.h ufsparse/cs.h cxsparse/cs.h cs.h], - [cs_di_sqr], + [cs${CXSPARSE_TAG}sqr], [C++], [don't use CXSparse library, disable some sparse matrix functionality]) ### Check for UMFPACK library. @@ -1338,21 +1348,21 @@ OCTAVE_CHECK_LIB([umfpack], UMFPACK, [UMFPACK not found. This will result in some lack of functionality for sparse matrices.], [suitesparse/umfpack.h ufsparse/umfpack.h umfpack/umfpack.h umfpack.h], - [umfpack_zi_get_determinant], + [umfpack${UMFPACK_TAG}get_determinant], [], [don't use UMFPACK, disable some sparse matrix functionality]) CPPFLAGS="$save_CPPFLAGS" LIBS="$save_LIBS" if test -z "$UMFPACK_LIBS"; then ## Invalidate the cache and try again with -lcblas. - $as_unset ac_cv_lib_umfpack_umfpack_zi_get_determinant + $as_unset ac_cv_lib_umfpack_umfpack${UMFPACK_TAG}get_determinant $as_unset octave_cv_lib_umfpack save_LIBS="$LIBS" LIBS="-lcblas $AMD_LDFLAGS $AMD_LIBS $BLAS_LIBS $FLIBS $LIBS" OCTAVE_CHECK_LIB([umfpack], UMFPACK, [UMFPACK not found. This will result in some lack of functionality for sparse matrices.], [suitesparse/umfpack.h ufsparse/umfpack.h umfpack/umfpack.h umfpack.h], - [umfpack_zi_get_determinant], + [umfpack${UMFPACK_TAG}get_determinant], [], [don't use UMFPACK, disable some sparse matrix functionality]) if test -n "$UMFPACK_LIBS"; then UMFPACK_LIBS="$UMFPACK_LIBS -lcblas" diff --git a/m4/acinclude.m4 b/m4/acinclude.m4 --- a/m4/acinclude.m4 +++ b/m4/acinclude.m4 @@ -1792,6 +1792,7 @@ AC_MSG_CHECKING([for UMFPACK separate complex matrix and rhs split]) AC_CACHE_VAL([octave_cv_umfpack_separate_split], [AC_RUN_IFELSE([AC_LANG_SOURCE([[ + #include #include #include #if defined (HAVE_SUITESPARSE_UMFPACK_H) @@ -1803,9 +1804,16 @@ #elif defined (HAVE_UMFPACK_H) # include #endif - int n = 5; - int Ap[] = {0, 2, 5, 9, 10, 12}; - int Ai[] = {0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4}; + #ifdef USE_64_BIT_IDX_T + typedef uint64_t idx_type; + #define UMFPACK_NAME(name) umfpack_zl_ ## name + #else + typedef int idx_type; + #define UMFPACK_NAME(name) umfpack_zi_ ## name + #endif + idx_type n = 5; + idx_type Ap[] = {0, 2, 5, 9, 10, 12}; + idx_type Ai[] = {0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4}; double Ax[] = {2., 0., 3., 0., 3., 0., -1., 0., 4., 0., 4., 0., -3., 0., 1., 0., 2., 0., 2., 0., 6., 0., 1., 0.}; double br[] = {8., 45., -3., 3., 19.}; @@ -1814,14 +1822,14 @@ { double *null = (double *) NULL ; double *x = (double *)malloc (2 * n * sizeof(double)); - int i ; + idx_type i ; void *Symbolic, *Numeric ; - (void) umfpack_zi_symbolic (n, n, Ap, Ai, Ax, null, &Symbolic, null, null) ; - (void) umfpack_zi_numeric (Ap, Ai, Ax, null, Symbolic, &Numeric, null, null) ; - umfpack_zi_free_symbolic (&Symbolic) ; - (void) umfpack_zi_solve (0, Ap, Ai, Ax, null, x, null, br, bi, + (void) UMFPACK_NAME (symbolic) (n, n, Ap, Ai, Ax, null, &Symbolic, null, null) ; + (void) UMFPACK_NAME (numeric) (Ap, Ai, Ax, null, Symbolic, &Numeric, null, null) ; + UMFPACK_NAME (free_symbolic) (&Symbolic) ; + (void) UMFPACK_NAME (solve) (0, Ap, Ai, Ax, null, x, null, br, bi, Numeric, null, null) ; - umfpack_zi_free_numeric (&Numeric) ; + UMFPACK_NAME (free_numeric) (&Numeric) ; for (i = 0; i < n; i++, x+=2) if (fabs (*x - i - 1.) > 1.e-13) return (1);