1AC_DEFUN([AC_CHECK_ABINIT], 2[ 3 AC_MSG_CHECKING([for Abinit support]) 4 AC_ARG_WITH([abinit], 5 [AS_HELP_STRING([--with-abinit=ARG],[ABINIT directory (with include and lib subdirs)])], 6 [AB_PATH=$withval], 7 [AB_PATH="no"]) 8 9 AC_ARG_WITH([abinit_include], 10 [AS_HELP_STRING([--with-abinit-include=ARG],[specific ABINIT include directory])], 11 [AB_PATH_INC=$withval], 12 [AB_PATH_INC=""]) 13 14 AC_ARG_WITH([abinit_libdir], 15 [AS_HELP_STRING([--with-abinit-libdir=ARG],[specific ABINIT library directory])], 16 [AB_PATH_LIBDIR=$withval], 17 [AB_PATH_LIBDIR=""]) 18 AC_MSG_RESULT($AB_PATH) 19 20 dnl In case ABINIT is demanded, we test Lapack first. 21 if test "z$AB_PATH" != "zno" ; then 22 AC_REQUIRE([ACX_LAPACK]) 23 if test x"$acx_lapack_ok" = xno; then 24 AC_WARN([ABINIT support has been disabled since Lapack is not available.]) 25 AB_PATH="no" 26 fi 27 fi 28 dnl We also test ETSF_IO 29 if test "z$AB_PATH" != "zno" ; then 30 31 AC_REQUIRE([AC_CHECK_ETSF_IO]) 32 if test x"$ac_etsf_io_ok" = xno; then 33 AC_WARN([ABINIT support may not compile since ETSF_IO is not available.]) 34 fi 35 fi 36 dnl We also test LibXC 37 if test "z$AB_PATH" != "zno" ; then 38 39 AC_REQUIRE([AC_CHECK_LIBXC]) 40 if test x"$ac_libxc_ok" = xno; then 41 AC_WARN([ABINIT support may not compile since LibXC is not available.]) 42 fi 43 fi 44 45 if test "z$AB_PATH" != "zno" ; then 46 AS_IF([test "z$AB_PATH" = "zyes"],[AB_PATH="/opt/etsf/abinit"]) 47 AS_IF([test "z$AB_PATH_LIBDIR" = "z"],[AB_PATH_LIBDIR="$AB_PATH/lib"]) 48 AS_IF([test "z$AB_PATH_INC" = "z"],[AB_PATH_INC="$AB_PATH/include"]) 49 50 dnl First thing is to test the header files. 51 CPPFLAGS_SVG=$CPPFLAGS 52 CPPFLAGS="$CPPFLAGS -I$AB_PATH_INC" 53 AC_CHECK_HEADER([ab6_invars.h], 54 [ac_abinit_parser_header="ab6_invars.h"], 55 [ac_abinit_parser_header="no"]) 56 if test $ac_abinit_parser_header = "no" ; then 57 AC_CHECK_HEADER([ab7_invars.h], 58 [ac_abinit_parser_header="ab7_invars.h"], 59 [ac_abinit_parser_header="no"]) 60 fi 61 CPPFLAGS=$CPPFLAGS_SVG 62 63 dnl Try to guess the lib name. 64 AB_LIBRARY="abinis" 65 AB_LIBRARY_VERSION=6 66 if test -f $AB_PATH_LIBDIR/libabinit6.a ; then 67 AB_LIBRARY="abinit6" 68 fi 69 if test -f $AB_PATH_LIBDIR/libabinit7.a ; then 70 AB_LIBRARY="abinit7" 71 AB_LIBRARY_VERSION=7 72 fi 73 74 dnl Try to find the missing dependencies in libabinis.a. 75 AC_FC_WRAPPERS() 76 AC_FC_FUNC([wrtout]) 77 AC_FC_FUNC([leave_new]) 78 AC_FC_FUNC([timab]) 79 AC_FC_FUNC([psp_from_data]) 80 81 AC_LANG_PUSH([C]) 82 83 LIBS_SVG=$LIBS 84 LIBS="$LIBS_SVG -L$AB_PATH_LIBDIR -l$AB_LIBRARY $ETSF_IO_LIBS $LIBXC_LIBS $LAPACK_LIBS $BLAS_LIBS $FCLIBS" 85 CFLAGS_SVG=$CFLAGS 86 CFLAGS="$CFLAGS -Wno-error" 87 88 dnl Look for the parser in libabinis. 89 AC_MSG_CHECKING([for parser capabilities in lib$AB_LIBRARY.a from $AB_PATH_LIBDIR]) 90 AC_LINK_IFELSE([AC_LANG_SOURCE([ 91void $wrtout() 92{ 93} 94void $leave_new() 95{ 96} 97void $timab() 98{ 99} 100void $psp_from_data() 101{ 102} 103int main(int argc, const char **argv) 104{ 105 ab${AB_LIBRARY_VERSION}_invars_new_from_file(); 106 return 0; 107} 108])], [ac_abinit_parser_ok=yes], [ac_abinit_parser_ok=no]) 109 AC_MSG_RESULT([$ac_abinit_parser_ok]) 110 111 dnl Look for specific functions in the parser routines. 112 if test $ac_abinit_parser_ok = "yes" ; then 113 AC_MSG_CHECKING([for invars.new_from_file_with_pseudo() routine in lib$AB_LIBRARY.a]) 114 AC_LINK_IFELSE([AC_LANG_SOURCE([ 115 void $wrtout() 116 { 117 } 118 void $leave_new() 119 { 120 } 121 void $timab() 122 { 123 } 124 void $psp_from_data() 125 { 126 } 127 int main(int argc, const char **argv) 128 { 129 ab${AB_LIBRARY_VERSION}_invars_new_from_file_with_pseudo(); 130 return 0; 131 } 132 ])], [ac_abinit_invars_has_new_with_pseudo=yes], 133 [ac_abinit_invars_has_new_with_pseudo=no]) 134 AC_MSG_RESULT([$ac_abinit_invars_has_new_with_pseudo]) 135 AC_DEFINE([HAVE_NEW_WITH_PSEUDO], [], [If set, we can call ab_invars_new_from_file_with_pseudo()]) 136 fi 137 138 LIBS=$LIBS_SVG 139 CFLAGS=$CFLAGS_SVG 140 141 AC_LANG_POP([C]) 142 143 AS_IF([test "z$ac_abinit_parser_header" != "zno" -a "z$ac_abinit_parser_ok" = "zyes"], 144 [ac_abinit_parser=yes], 145 [ac_abinit_parser=no]) 146 AS_IF([test "z$ac_abinit_parser" = "zyes"], 147 [AB_LIBS="-L$AB_PATH_LIBDIR -l$AB_LIBRARY $LIBXC_LIBS $ETSF_IO_LIBS $LAPACK_LIBS $BLAS_LIBS"; 148 AB_CPPFLAGS="-I$AB_PATH_INC"], 149 []) 150 151 dnl For buit-in symmetry routines. 152 ABI_FC_MODULE_MANGLING() 153 ac_abinit=yes 154 else 155 ac_abinit=no 156 fi 157]) 158