diff --git a/m4/superlu.m4 b/m4/superlu.m4 index 944873d26b6d4577858942463532679667d16e16..d1a3822a2bbdb9501b2bd1a75040656de0f3828d 100644 --- a/m4/superlu.m4 +++ b/m4/superlu.m4 @@ -204,11 +204,12 @@ AC_ARG_WITH([superlu-blaslib], # set variables so that tests can use them - CPPFLAGS="$CPPFLAGS -I$SUPERLU_INCLUDE_PATH" + direct_SUPERLU_CPPFLAGS="-I$SUPERLU_INCLUDE_PATH -DENABLE_SUPERLU" + SUPERLU_CPPFLAGS="-I$SUPERLU_INCLUDE_PATH -DENABLE_SUPERLU" + CPPFLAGS="$CPPFLAGS $direct_SUPERLU_CPPFLAGS" # check for central header AC_CHECK_HEADER([$my_slu_header],[ - SUPERLU_CPPFLAGS="$CPPFLAGS" HAVE_SUPERLU="1"],[ HAVE_SUPERLU="0" AC_MSG_WARN([$my_slu_header not found in $SUPERLU_INCLUDE_PATH with $CPPFLAGS])] @@ -217,96 +218,105 @@ AC_ARG_WITH([superlu-blaslib], # if header is found check for the libs if test x$HAVE_SUPERLU = x1 ; then - # if no blas was found, we assume that superlu was compiled with - # internal blas - if test "x$BLAS_LIBS" = "x"; then - LIBS="$BLAS_LIBS $LIBS $FLIBS" - else - LIBS="-lblas $LIBS $FLIBS" - fi - HAVE_SUPERLU=0 + HAVE_SUPERLU=0 -### This won't work, LDFLAGS needs to be set - if test x$with_superlu_lib = x; then - AC_CHECK_LIB(superlu, [dgssvx],[ - SUPERLU_LIBS="$SUPERLU_LIBS -lsuperlu $LIBS" - HAVE_SUPERLU="1" - ],[ - HAVE_SUPERLU="0" - AC_MSG_WARN(libsuperlu not found)]) - fi - if test "$HAVE_SUPERLU" = 0; then - if test x$with_superlu_lib = x ; then - with_superlu_lib=superlu.a - fi - AC_MSG_CHECKING([static superlu library "$with_superlu_lib" in "$SUPERLU_LIB_PATH"]) -echo "BLAS_LIBS=$BLAS_LIBS LIBS=$LIBS" - if test -f "$SUPERLU_LIB_PATH/$with_superlu_lib" ; then - if test -f "$SUPERLU_LIB_PATH/$with_superlu_blaslib"; then - LIBS="$SUPERLU_LIB_PATH/$with_superlu_lib $SUPERLU_LIB_PATH/$with_superlu_blaslib $LIBS" - else - LIBS="$SUPERLU_LIB_PATH/$with_superlu_lib $LIBS" - fi - echo "LIBS=$LIBS" - AC_CHECK_FUNC(dgssvx, - [ - SUPERLU_LIBS="$LIBS" - HAVE_SUPERLU="1" - AC_MSG_RESULT(yes) - ], - [ - HAVE_SUPERLU="0" - AC_MSG_RESULT(failed) - ] - ) - else - HAVE_SUPERLU="0" - AC_MSG_RESULT(failed) - fi - fi + # if neither --with-superlu-lib nor --with-superlu-blaslib was + # given, try to link dynamically or with properly names static libs + if test x"$with_superlu_lib$with_superlu_blaslib" = x; then + LDFLAGS="$ac_save_LDFLAGS -L$SUPERLU_LIB_PATH" + LIBS="$ac_save_LIBS" + AC_CHECK_LIB([superlu], [dgssvx], [ + direct_SUPERLU_LIBS="-L$SUPERLU_LIB_PATH -lsuperlu $BLAS_LIBS $FLIBS" + SUPERLU_LIBS="-L$SUPERLU_LIB_PATH -lsuperlu \${BLAS_LIBS} \${FLIBS}" + HAVE_SUPERLU="1" + ], [], [$BLAS_LIBS $FLIBS]) + fi + + if test $HAVE_SUPERLU = 0 && + test x"$with_superlu_lib" = x; then + # set the default + with_superlu_lib=superlu.a + fi + + if test $HAVE_SUPERLU = 0 && + test x"$with_superlu_blaslib" = x; then + # try system blas + LDFLAGS="$ac_save_LDFLAGS" + LIBS="$SUPERLU_LIB_PATH/$with_superlu_lib $BLAS_LIBS $FLIBS $ac_save_LIBS" + AC_CHECK_FUNC([dgssvx], [ + direct_SUPERLU_LIBS="$SUPERLU_LIB_PATH/$with_superlu_lib $BLAS_LIBS $FLIBS" + SUPERLU_LIBS="$SUPERLU_LIB_PATH/$with_superlu_lib \${BLAS_LIBS} \${FLIBS}" + HAVE_SUPERLU="1" + ]) + fi + + # No default for with_superlu_blaslib + + if test $HAVE_SUPERLU = 0 && + test x"$with_superlu_blaslib" != x; then + # try internal blas + LDFLAGS="$ac_save_LDFLAGS" + LIBS="$SUPERLU_LIB_PATH/$with_superlu_lib $SUPERLU_LIB_PATH/$with_superlu_blaslib $FLIBS $ac_save_LIBS" + AC_CHECK_FUNC([dgssvx], [ + direct_SUPERLU_LIBS="$SUPERLU_LIB_PATH/$with_superlu_lib $SUPERLU_LIB_PATH/$with_superlu_blaslib $FLIBS" + SUPERLU_LIBS="$SUPERLU_LIB_PATH/$with_superlu_lib $SUPERLU_LIB_PATH/$with_superlu_blaslib \${FLIBS}" + HAVE_SUPERLU="1" + ]) + fi fi - # pre-set variable for summary - #with_superlu="no" - # did it work? - AC_MSG_CHECKING([SuperLU in $with_superlu]) - if test x$HAVE_SUPERLU = x1 ; then - AC_SUBST(SUPERLU_LIBS, $SUPERLU_LIBS) - AC_SUBST(SUPERLU_CPPFLAGS, $SUPERLU_CPPFLAGS) - AC_DEFINE(HAVE_SUPERLU, 1, [Define to 1 if SUPERLU is found]) - if test "$my_slu_header" = "slu_ddefs.h"; then - AC_DEFINE(SUPERLU_POST_2005_VERSION, 1, [define to 1 if there is a header slu_ddefs.h in SuperLU]) - AC_CHECK_MEMBERS([mem_usage_t.expansions],[],[],[#include"slu_ddefs.h"]) - else - AC_CHECK_MEMBERS([mem_usage_t.expansions],[],[],[#include "dsp_defs.h"]) - fi - AC_MSG_RESULT(ok) - - # add to global list - DUNE_PKG_LIBS="$DUNE_PKG_LIBS $SUPERLU_LIBS" - DUNE_PKG_CPPFLAGS="$DUNE_PKG_CPPFLAGS $SUPERLU_CPPFLAGS" - - # re-set variable correctly - with_superlu="yes" + else + HAVE_SUPERLU=0 + fi + + # Inform the user whether SuperLU was sucessfully found + AC_MSG_CHECKING([SuperLU]) + if test x$HAVE_SUPERLU = x1 ; then + if test "$my_slu_header" = "slu_ddefs.h"; then + with_superlu="yes (post 2005)" + else + with_superlu="yes (pre 2005)" + fi + else + with_superlu="no" + fi + AC_MSG_RESULT([$with_superlu]) + + # check for optional member + if test $HAVE_SUPERLU = 1 ; then + if test "$my_slu_header" = "slu_ddefs.h"; then + AC_CHECK_MEMBERS([mem_usage_t.expansions],[],[],[#include "slu_ddefs.h"]) else - with_superlu="no" - AC_MSG_RESULT(failed) - fi - - # end of "no --without-superlu" - else - with_superlu="no" - fi - - # tell automake + AC_CHECK_MEMBERS([mem_usage_t.expansions],[],[],[#include "dsp_defs.h"]) + fi + fi + + # substitute variables + if test x$HAVE_SUPERLU = x0 ; then + SUPERLU_LIBS= + SUPERLU_CPPFLAGS= + fi + AC_SUBST([SUPERLU_LIBS]) + AC_SUBST([SUPERLU_CPPFLAGS]) + DUNE_ADD_ALL_PKG([SUPERLU], [\${SUPERLU_CPPFLAGS}], [], [\${SUPERLU_LIBS}]) + + # tell automake AM_CONDITIONAL(SUPERLU, test x$HAVE_SUPERLU = x1) - + + # tell the preprocessor + if test x$HAVE_SUPERLU = x1 ; then + AC_DEFINE([HAVE_SUPERLU], [ENABLE_SUPERLU], [Define to ENABLE_SUPERLU if SUPERLU is found]) + if test "$my_slu_header" = "slu_ddefs.h"; then + AC_DEFINE([SUPERLU_POST_2005_VERSION], 1, [define to 1 if there is a header slu_ddefs.h in SuperLU]) + fi + fi + + # summary + DUNE_ADD_SUMMARY_ENTRY([SuperLU],[$with_superlu]) + # restore variables LDFLAGS="$ac_save_LDFLAGS" CPPFLAGS="$ac_save_CPPFLAGS" LIBS="$ac_save_LIBS" - - DUNE_ADD_SUMMARY_ENTRY([SuperLU],[$with_superlu]) - ] )