# HG changeset patch # User Rik # Date 1347062712 25200 # Node ID 719ffb2f35a60c07a18f70d10de79ae183a40a5e # Parent efbc896c1ecce6ff0ab763e353985ce027935f1e Fix Octave builds with SuiteSparse >=4.0 (bug #37031) * configure.ac: Call OCTAVE_UMFPACK_NEED_SUITESPARSE_TIME to check if UMFPACK needs SuiteSparse_time function. If it does, use AC_SEARCH_LIBS to find a possible library. * m4/acinclude.m4: Add new macro OCTAVE_UMFPACK_NEED_SUITESPARSE_TIME. diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -1320,11 +1320,41 @@ LIBS="$save_LIBS" fi +## Test features of the installed UMFPACK library + if test -n "$UMFPACK_LIBS"; then + ## SuiteSparse >= 4.0 needs additional link library for SuiteSparse_time() save_LIBS="$LIBS"; - LIBS="$UMFPACK_LIBS $AMD_LIBS $BLAS_LIBS $FLIBS $LIBS" - OCTAVE_UMFPACK_SEPARATE_SPLIT + LIBS="$UMFPACK_LIBS $FLIBS $LIBS" + xtra_libs= + OCTAVE_UMFPACK_NEED_SUITESPARSE_TIME + if test "$octave_cv_umfpack_need_suitesparse_time" = yes; then + AC_CHECK_LIB([rt], [clock_gettime], [xtra_libs="-lrt"], [xtra_libs=]) + ## FIXME: This library list is only accurate for Linux, Mac OS X. + ## Possibly need other library names for MinGW, Cygwin. + AC_SEARCH_LIBS([SuiteSparse_time], + [suitesparseconfig SuiteSparse], + [], [], [$xtra_libs]) + case "$ac_cv_search_SuiteSparse_time" in + -l*) + UMFPACK_LIBS="$UMFPACK_LIBS $ac_cv_search_SuiteSparse_time" + ;; + no) + UMFPACK_LIBS= + AC_MSG_WARN([UMFPACK library found but is missing SuiteSparse_time functionality.]) + AC_MSG_WARN([UMFPACK library will be disabled.]) + ;; + esac + fi LIBS="$save_LIBS" + + ## Check for UMFPACK separately split complex matrix and RHS. + if test -n "$UMFPACK_LIBS"; then + save_LIBS="$LIBS"; + LIBS="$UMFPACK_LIBS $CHOLMOD_LIBS $AMD_LIBS $COLAMD_LIBS $LAPACK_LIBS $BLAS_LIBS $FLIBS $LIBS $xtra_libs" + OCTAVE_UMFPACK_SEPARATE_SPLIT + LIBS="$save_LIBS" + fi fi ### Check for ARPACK library. diff --git a/m4/acinclude.m4 b/m4/acinclude.m4 --- a/m4/acinclude.m4 +++ b/m4/acinclude.m4 @@ -1624,6 +1624,35 @@ AC_SUBST($1) ]) dnl +dnl Check whether SuiteSparse_time is required by UMFPACK. +dnl UMFPACK >= 4 requires linking in another library for SuiteSparse_time. +dnl +dnl Macro assumes that the check for umfpack has already been performed. +dnl +AC_DEFUN([OCTAVE_UMFPACK_NEED_SUITESPARSE_TIME], [ + AC_CACHE_CHECK([whether UMFPACK needs SuiteSparse_time function], + [octave_cv_umfpack_need_suitesparse_time], + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + #if defined (HAVE_SUITESPARSE_UMFPACK_H) + # include + #elif defined (HAVE_UFSPARSE_UMFPACK_H) + # include + #elif defined (HAVE_UMFPACK_UMFPACK_H) + # include + #elif defined (HAVE_UMFPACK_H) + # include + #endif + ]], [[ + double stats [2]; + umfpack_tic (stats); + ]])], + octave_cv_umfpack_need_suitesparse_time=no, + octave_cv_umfpack_need_suitesparse_time=yes) + AC_LANG_POP(C) + ]) +]) +dnl dnl Check for UMFPACK separately split complex matrix and RHS. dnl dnl Macro assumes that the check for umfpack has already been performed.