dnl dnl $Id$ dnl dnl 20080206 dnl M4 macros for the PSBLAS library and useful for packages using PSBLAS. dnl dnl @synopsis PAC_CHECK_LIBS dnl dnl Tries to detect the presence of a specific function among various libraries, using AC_CHECK_LIB dnl repeatedly on the specified libraries. dnl dnl Example use: dnl dnl PAC_CHECK_LIBS([atlas blas], dnl [dgemm], dnl [have_dgemm=yes], dnl [have_dgemm=no]) dnl dnl @author Michele Martone dnl dnl 20080211 modified slighty from original. AC_DEFUN([PAC_CHECK_LIBS], [ pac_check_libs_ok=no [for pac_check_libs_f in $2 do ] [for pac_check_libs_l in $1 do ] if test x"$pac_check_libs_ok" == xno ; then AC_CHECK_LIB([$pac_check_libs_l],[$pac_check_libs_f], [pac_check_libs_ok=yes; pac_check_libs_LIBS="-l$pac_check_libs_l"],[],[$5]) fi done done # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: [ if test x"$pac_check_libs_ok" = xyes ; then $3 else pac_check_libs_ok=no $4 fi ] ])dnl dnl # How do we determine netlib blacs ? Here it is : dnl AC_CHECK_LIB(blacsCinit_MPI-LINUX-0,BI_Asend, dnl AC_CHECK_LIB(blacs_MPI-LINUX-0,BI_Asend, dnl [acx_cv_blacs_ok=yes; BLACS_LIBS="-lblacsCinit_MPI-LINUX-0"]) dnl AC_F77_FUNC([BI_Asend]) dnl AC_CHECK_LIB(blacsCinit_MPI-LINUX-0,[$BI_Asend], dnl [acx_cv_blacs_ok=yes; BLACS_LIBS="-lblacsCinit_MPI-LINUX-0"]) dnl AC_FC_FUNC([BI_Iam]) dnl AC_CHECK_LIB(blacsCinit_MPI-LINUX-0,[$BI_Asend], dnl [acx_cv_blacs_ok=yes; BLACS_LIBS="-lblacsCinit_MPI-LINUX-0"]) dnl @synopsis PAC_FORTRAN_FUNC_MOVE_ALLOC( [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) dnl dnl Will try to compile and link a program with move_alloc (a Fortran 2003 function). dnl dnl Will use MPIFC, otherwise '$FC'. dnl dnl If the test passes, will execute ACTION-IF-FOUND. Otherwise, ACTION-IF-NOT-FOUND. dnl dnl @author Michele Martone dnl AC_DEFUN([PAC_FORTRAN_HAVE_MOVE_ALLOC], ac_exeext='' ac_ext='f' ac_link='${MPIFC-$FC} -o conftest${ac_exeext} $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' dnl Warning : square brackets are EVIL! [AC_MSG_CHECKING([for Fortran MOVE_ALLOC intrinsic]) cat > conftest.$ac_ext <&AC_FD_CC cat conftest.$ac_ext >&AC_FD_CC ifelse([$2], , , [ rm -rf conftest* $2 ])dnl fi rm -f conftest*]) dnl @synopsis PAC_CHECK_HAVE_GFORTRAN( [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) dnl dnl Will check if MPIFC is $FC. dnl The check will proceed by compiling a small Fortran program dnl containing the __GNUC__ macro, which should be defined in the dnl gfortran compiled programs. dnl dnl On pass, will execute ACTION-IF-FOUND. Otherwise, ACTION-IF-NOT-FOUND. dnl dnl @author Michele Martone dnl AC_DEFUN(PAC_CHECK_HAVE_GFORTRAN, ac_exeext='' ac_ext='F' ac_link='${MPIFC-$FC} -o conftest${ac_exeext} $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' dnl Warning : square brackets are EVIL! [ cat > conftest.$ac_ext <&AC_FD_CC cat conftest.$ac_ext >&AC_FD_CC ifelse([$2], , , [ rm -rf conftest* $2 ])dnl fi rm -f conftest*]) dnl @synopsis PAC_HAVE_MODERN_GCC( [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) dnl dnl Will check if the GNU fortran version is suitable for PSBLAS. dnl If yes, will execute ACTION-IF-FOUND. Otherwise, ACTION-IF-NOT-FOUND. dnl dnl Note : Will use MPIFC; if unset, will use '$FC'. dnl dnl @author Michele Martone dnl AC_DEFUN(PAC_HAVE_MODERN_GCC, ac_exeext='' ac_ext='F' ac_link='${MPIFC-$FC} -o conftest${ac_exeext} $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' dnl Warning : square brackets are EVIL! [ cat > conftest.$ac_ext <= 4 && __GNUC_MINOR__ >= 2 ) || ( __GNUC__ > 4 ) print *, "ciao" #else this program will fail #endif end EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then ifelse([$1], , :, [rm -rf conftest* $1]) else echo "configure: failed program was:" >&AC_FD_CC cat conftest.$ac_ext >&AC_FD_CC ifelse([$2], , , [ rm -rf conftest* $2 ])dnl fi rm -f conftest*]) dnl @synopsis PAC_FORTRAN_CHECK_HAVE_MPI_MOD( [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) dnl dnl Will determine if the fortran compiler MPIFC needs to include mpi.h or needs dnl to use the mpi module. dnl dnl If yes, will execute ACTION-IF-FOUND. Otherwise, ACTION-IF-NOT-FOUND. dnl dnl @author Michele Martone dnl Modified Salvatore Filippone dnl AC_DEFUN(PAC_FORTRAN_CHECK_HAVE_MPI_MOD, ac_exeext='' ac_ext='f90' ac_link='${MPIFC-$FC} -o conftest${ac_exeext} $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' dnl Warning : square brackets are EVIL! [AC_MSG_CHECKING([MPI Fortran interface]) cat > conftest.$ac_ext <&AC_FD_CC cat conftest.$ac_ext >&AC_FD_CC AC_MSG_RESULT([ include mpif.h ]) ifelse([$2], , , [ rm -rf conftest* $2 ])dnl fi rm -f conftest*]) dnl @synopsis PAC_ARG_WITH_FLAGS(lcase_name, UCASE_NAME) dnl dnl Test for --with-lcase_name="compiler/loader flags". if defined, prepend dnl flags to standard UCASE_NAME definition. dnl dnl Use this macro to facilitate additional special flags that should be dnl passed on to the preprocessor/compilers/loader. dnl dnl NOTE : Renamed after TAC_ARG_WITH_FLAGS as in the Trilinos-8.0.4 package. dnl dnl NOTE : This macro works in a way the user should invoke dnl --with-flags=... dnl only once, otherwise the first one will take effect. dnl dnl Example use: dnl dnl PAC_ARG_WITH_FLAGS(cxxflags, CXXFLAGS) dnl dnl tests for --with-cxxflags and pre-pends to CXXFLAGS dnl dnl @author Mike Heroux dnl @notes Michele Martone dnl AC_DEFUN([PAC_ARG_WITH_FLAGS], [ AC_MSG_CHECKING([whether additional [$2] flags should be added (should be invoked only once)]) dnl AC_MSG_CHECKING([whether additional [$2] flags should be added]) AC_ARG_WITH($1, AC_HELP_STRING([--with-$1], [additional [$2] flags to be added: will prepend to [$2]]), [ $2="${withval} ${$2}" AC_MSG_RESULT([$2 = ${$2}]) ], AC_MSG_RESULT(no) ) ]) dnl @synopsis PAC_ARG_WITH_LIBS dnl dnl Test for --with-libs="name(s)". dnl dnl Prepends the specified name(s) to the list of libraries to link dnl with. dnl dnl note: Renamed after PAC_ARG_WITH_LIBS as in the Trilinos package. dnl dnl Example use: dnl dnl PAC_ARG_WITH_LIBS dnl dnl tests for --with-libs and pre-pends to LIBS dnl dnl @author Jim Willenbring dnl AC_DEFUN([PAC_ARG_WITH_LIBS], [ AC_MSG_CHECKING([whether additional libraries are needed]) AC_ARG_WITH(libs, AC_HELP_STRING([--with-libs], [List additional libraries here. For example, --with-libs=-lsuperlu or --with-libs=/path/libsuperlu.a]), [ LIBS="${withval} ${LIBS}" AC_MSG_RESULT([LIBS = ${LIBS}]) ], AC_MSG_RESULT(no) ) ] ) dnl @synopsis PAC_FORTRAN_HAVE_PSBLAS( [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) dnl dnl Will try to compile and link a program using the PSBLAS library dnl dnl Will use MPIFC, otherwise '$FC'. dnl dnl If the test passes, will execute ACTION-IF-FOUND. Otherwise, ACTION-IF-NOT-FOUND. dnl dnl @author Michele Martone dnl AC_DEFUN(PAC_FORTRAN_HAVE_PSBLAS, ac_exeext='' ac_ext='f90' ac_link='${MPIFC-$FC} -o conftest${ac_exeext} $FCFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' dnl Warning : square brackets are EVIL! [cat > conftest.$ac_ext <&AC_FD_CC cat conftest.$ac_ext >&AC_FD_CC ifelse([$2], , , [ rm -rf conftest* $2 ])dnl fi rm -f conftest*]) dnl @synopsis PAC_FORTRAN_TEST_TR15581( [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) dnl dnl Will try to compile and link a program checking the TR15581 Fortran extension support. dnl dnl Will use MPIFC, otherwise '$FC'. dnl dnl If the test passes, will execute ACTION-IF-FOUND. Otherwise, ACTION-IF-NOT-FOUND. dnl Note : This file will be likely to induce the compiler to create a module file dnl (for a module called conftest). dnl Depending on the compiler flags, this could cause a conftest.mod file to appear dnl in the present directory, or in another, or with another name. So be warned! dnl dnl @author Michele Martone dnl @author Salvatore Filippone AC_DEFUN(PAC_FORTRAN_TEST_TR15581, ac_exeext='' ac_ext='f90' ac_link='${MPIFC-$FC} -o conftest${ac_exeext} $FCFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' dnl Warning : square brackets are EVIL! [AC_MSG_CHECKING([support for Fortran allocatables TR15581]) i=0 while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do i=`expr $i + 1` done mkdir tmpdir_$i cd tmpdir_$i cat > conftest.$ac_ext <&AC_FD_CC cat conftest.$ac_ext >&AC_FD_CC ifelse([$2], , , [ $2 ])dnl fi cd .. rm -fr tmpdir_$i]) dnl @synopsis PAC_FORTRAN_TEST_VOLATILE( [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) dnl dnl Will try to compile and link a program checking the VOLATILE Fortran support. dnl dnl Will use MPIFC, otherwise '$FC'. dnl dnl If the test passes, will execute ACTION-IF-FOUND. Otherwise, ACTION-IF-NOT-FOUND. dnl Note : This file will be likely to induce the compiler to create a module file dnl (for a module called conftest). dnl Depending on the compiler flags, this could cause a conftest.mod file to appear dnl in the present directory, or in another, or with another name. So be warned! dnl dnl @author Michele Martone dnl @author Salvatore Filippone AC_DEFUN(PAC_FORTRAN_TEST_VOLATILE, ac_exeext='' ac_ext='f90' ac_link='${MPIFC-$FC} -o conftest${ac_exeext} $FCFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' dnl Warning : square brackets are EVIL! [AC_MSG_CHECKING([support for Fortran VOLATILE]) i=0 while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do i=`expr $i + 1` done mkdir tmpdir_$i cd tmpdir_$i cat > conftest.$ac_ext <&AC_FD_CC cat conftest.$ac_ext >&AC_FD_CC ifelse([$2], , , [ $2 ])dnl fi cd .. rm -fr tmpdir_$i]) dnl @synopsis PAC_CHECK_BLACS dnl dnl Will try to find the BLACS dnl dnl Will use MPIFC, otherwise '$FC'. dnl dnl If the test passes, will execute ACTION-IF-FOUND. Otherwise, ACTION-IF-NOT-FOUND. dnl Note : This file will be likely to induce the compiler to create a module file dnl (for a module called conftest). dnl Depending on the compiler flags, this could cause a conftest.mod file to appear dnl in the present directory, or in another, or with another name. So be warned! dnl dnl @author Michele Martone dnl @author Salvatore Filippone dnl AC_DEFUN(PAC_CHECK_BLACS, [AC_ARG_WITH(blacs, AC_HELP_STRING([--with-blacs=LIB], [Specify BLACSLIBNAME or -lBLACSLIBNAME or the absolute library filename.]), [psblas_cv_blacs=$withval], [psblas_cv_blacs='']) case $psblas_cv_blacs in yes | "") ;; -* | */* | *.a | *.so | *.so.* | *.o) BLACS_LIBS="$psblas_cv_blacs" ;; *) BLACS_LIBS="-l$psblas_cv_blacs" ;; esac # # Test user-defined BLACS # if test x"$psblas_cv_blacs" != "x" ; then save_LIBS="$LIBS"; AC_LANG([Fortran]) LIBS="$BLACS_LIBS $LIBS" AC_MSG_CHECKING([for dgesd2d in $BLACS_LIBS]) AC_TRY_LINK_FUNC(dgesd2d, [psblas_cv_blacs_ok=yes], [psblas_cv_blacs_ok=no;BLACS_LIBS=""]) AC_MSG_RESULT($psblas_cv_blacs_ok) if test x"$psblas_cv_blacs_ok" == x"yes"; then AC_MSG_CHECKING([for blacs_pinfo in $BLACS_LIBS]) AC_TRY_LINK_FUNC(blacs_pinfo, [psblas_cv_blacs_ok=yes], [psblas_cv_blacs_ok=no;BLACS_LIBS=""]) AC_MSG_RESULT($psblas_cv_blacs_ok) fi LIBS="$save_LIBS"; fi AC_LANG([C]) ###################################### # System BLACS with PESSL default names. ###################################### if test x"$BLACS_LIBS" == "x" ; then AC_LANG([Fortran]) PAC_CHECK_LIBS([blacssmp blacsp2 blacs], [dgesd2d], [psblas_cv_blacs_ok=yes; LIBS="$LIBS $pac_check_libs_LIBS " ] [BLACS_LIBS="$pac_check_libs_LIBS" ] AC_MSG_NOTICE([BLACS libraries detected.]),[] ) if test x"$BLACS_LIBS" != "x"; then save_LIBS="$LIBS"; LIBS="$BLACS_LIBS $LIBS" AC_MSG_CHECKING([for blacs_pinfo in $BLACS_LIBS]) AC_LANG([Fortran]) AC_TRY_LINK_FUNC(blacs_pinfo, [psblas_cv_blacs_ok=yes], [psblas_cv_blacs_ok=no;BLACS_LIBS=""]) AC_MSG_RESULT($psblas_cv_blacs_ok) LIBS="$save_LIBS"; fi fi ###################################### # Maybe we're looking at PESSL BLACS?# ###################################### if test x"$BLACS_LIBS" != "x" ; then save_LIBS="$LIBS"; LIBS="$BLACS_LIBS $LIBS" AC_MSG_CHECKING([for PESSL BLACS]) AC_LANG([Fortran]) AC_TRY_LINK_FUNC(esvemonp, [psblas_cv_pessl_blacs=yes], [psblas_cv_pessl_blacs=no]) AC_MSG_RESULT($psblas_cv_pessl_blacs) LIBS="$save_LIBS"; fi if test "x$psblas_cv_pessl_blacs" == "xyes"; then FDEFINES="$psblas_cv_define_prepend-DHAVE_ESSL_BLACS $FDEFINES" fi ############################################################################## # Netlib BLACS library with default names ############################################################################## if test x"$BLACS_LIBS" == "x" ; then save_LIBS="$LIBS"; AC_LANG([Fortran]) PAC_CHECK_LIBS([ blacs_MPI-LINUX-0 blacs_MPI-SP5-0 blacs_MPI-SP4-0 blacs_MPI-SP3-0 blacs_MPI-SP2-0 blacsCinit_MPI-ALPHA-0 blacsCinit_MPI-IRIX64-0 blacsCinit_MPI-RS6K-0 blacsCinit_MPI-SPP-0 blacsCinit_MPI-SUN4-0 blacsCinit_MPI-SUN4SOL2-0 blacsCinit_MPI-T3D-0 blacsCinit_MPI-T3E-0 ], [dgesd2d], [psblas_cv_blacs_ok=yes; LIBS="$LIBS $pac_check_libs_LIBS " psblas_have_netlib_blacs=yes; ] [BLACS_LIBS="$pac_check_libs_LIBS" ] AC_MSG_NOTICE([BLACS libraries detected.]),[] ) if test x"$BLACS_LIBS" != "x" ; then AC_LANG([Fortran]) PAC_CHECK_LIBS([ blacsF77init_MPI-LINUX-0 blacsF77init_MPI-SP5-0 blacsF77init_MPI-SP4-0 blacsF77init_MPI-SP3-0 blacsF77init_MPI-SP2-0 blacsF77init_MPI-ALPHA-0 blacsF77init_MPI-IRIX64-0 blacsF77init_MPI-RS6K-0 blacsF77init_MPI-SPP-0 blacsF77init_MPI-SUN4-0 blacsF77init_MPI-SUN4SOL2-0 blacsF77init_MPI-T3D-0 blacsF77init_MPI-T3E-0 ], [blacs_pinfo], [psblas_cv_blacs_ok=yes; LIBS="$pac_check_libs_LIBS $LIBS" ] [BLACS_LIBS="$pac_check_libs_LIBS $BLACS_LIBS" ] AC_MSG_NOTICE([Netlib BLACS Fortran initialization libraries detected.]),[] ) fi if test x"$BLACS_LIBS" != "x" ; then AC_LANG([C]) PAC_CHECK_LIBS([ blacsCinit_MPI-LINUX-0 blacsCinit_MPI-SP5-0 blacsCinit_MPI-SP4-0 blacsCinit_MPI-SP3-0 blacsCinit_MPI-SP2-0 blacsCinit_MPI-ALPHA-0 blacsCinit_MPI-IRIX64-0 blacsCinit_MPI-RS6K-0 blacsCinit_MPI-SPP-0 blacsCinit_MPI-SUN4-0 blacsCinit_MPI-SUN4SOL2-0 blacsCinit_MPI-T3D-0 blacsCinit_MPI-T3E-0 ], [Cblacs_pinfo], [psblas_cv_blacs_ok=yes; LIBS="$pac_check_libs_LIBS $LIBS" ] [BLACS_LIBS="$BLACS_LIBS $pac_check_libs_LIBS" ] AC_MSG_NOTICE([Netlib BLACS C initialization libraries detected.]),[] ) fi LIBS="$save_LIBS"; fi if test x"$BLACS_LIBS" == "x" ; then AC_MSG_ERROR([ No BLACS library detected! $PACKAGE_NAME will be unusable. Please make sure a BLACS implementation is accessible (ex.: --with-blacs="-lblacsname -L/blacs/dir" ) ]) else save_LIBS="$LIBS"; LIBS="$BLACS_LIBS $LIBS" AC_MSG_CHECKING([for ksendid in $BLACS_LIBS]) AC_LANG([Fortran]) AC_TRY_LINK_FUNC(ksendid, [psblas_cv_have_sendid=yes],[psblas_cv_have_sendid=no]) AC_MSG_RESULT($psblas_cv_have_sendid) LIBS="$save_LIBS" AC_LANG([C]) if test "x$psblas_cv_have_sendid" == "xyes"; then FDEFINES="$psblas_cv_define_prepend-DHAVE_KSENDID $FDEFINES" fi fi ])dnl dnl @synopsis PAC_MAKE_IS_GNUMAKE dnl dnl @author Salvatore Filippone dnl define(PAC_MAKE_IS_GNUMAKE,[ AC_MSG_CHECKING(for gnumake) MAKE=${MAKE:-make} if $MAKE --version 2>&1 | grep -e"GNU Make" >/dev/null; then AC_MSG_RESULT(yes) psblas_make_gnumake='yes' else AC_MSG_RESULT(no) psblas_make_gnumake='no' fi ])dnl