1 |
dnl **** Process this file with autoconf to produce a configure script. |
2 |
AC_PREREQ(2.59) |
3 |
AC_INIT(OpenMD, 1.0, gezelter@nd.edu, openmd) |
4 |
AC_CONFIG_AUX_DIR(ac-tools) |
5 |
AC_CONFIG_SRCDIR([src/applications/openmd/openmd.cpp]) |
6 |
AC_CONFIG_HEADER([src/config.h]) |
7 |
|
8 |
builtin(include, ac-tools/OpenMD.m4) |
9 |
builtin(include, ac-tools/AC_CXX_HAVE_STL.m4) |
10 |
builtin(include, ac-tools/AC_CXX_NAMESPACES.m4) |
11 |
builtin(include, ac-tools/AC_CXX_STD.m4) |
12 |
builtin(include, ac-tools/ax_mpi.m4) |
13 |
|
14 |
# who am i |
15 |
AC_CANONICAL_HOST |
16 |
|
17 |
AC_PREFIX_DEFAULT("/usr/local") |
18 |
|
19 |
# set program name |
20 |
PROGNAME="openmd" |
21 |
AC_SUBST(PROGNAME) |
22 |
|
23 |
AC_EXEEXT |
24 |
AC_OBJEXT |
25 |
OBJEXT=".$OBJEXT" |
26 |
|
27 |
OPENMD=openmd |
28 |
|
29 |
dnl **** define home dir of OpenMD |
30 |
if test "x${prefix}" = "xNONE" |
31 |
then |
32 |
OPENMD_HOME=${ac_default_prefix}/openmd |
33 |
else |
34 |
OPENMD_HOME=${prefix}/openmd |
35 |
fi |
36 |
AC_ARG_ENABLE(openmd-home, |
37 |
[ --enable-openmd-home=DIR define OpenMD home dir [PREFIX/openmd]], |
38 |
[OPENMD_HOME="${enableval}"]) |
39 |
|
40 |
# there are two ways to do debugging. One with the --enable-debug flag |
41 |
# and one using the DEBUG environment variable |
42 |
|
43 |
debug=0 |
44 |
AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [Compile OpenMD in debug mode]), [debug=1]) |
45 |
if test "${DEBUG}"; then |
46 |
AC_DEFINE(debug, 1, [Code compiled in debug mode]) |
47 |
msg="$msg, debug mode" |
48 |
fi |
49 |
AC_SUBST(debug) |
50 |
|
51 |
AC_ARG_ENABLE(single, [AC_HELP_STRING([--enable-single],[compile OpenMD in single precision])], ok=$enableval, ok=no) |
52 |
AC_ARG_ENABLE(float, [AC_HELP_STRING([--enable-float],[synonym for --enable-single])], ok=$enableval) |
53 |
if test "$ok" = "yes"; then |
54 |
AC_DEFINE(SINGLE_PRECISION,1,[Define to compile in single precision.]) |
55 |
USE_SINGLE_PRECISION=yes |
56 |
AC_SUBST(USE_SINGLE_PRECISION) |
57 |
fi |
58 |
|
59 |
if test x"$CC" != x; then |
60 |
AC_CHECK_PROGS(ac_cc_set,[$CC],[no]) |
61 |
AS_IF([test AS_VAR_GET([ac_cc_set]) != no],[ |
62 |
AC_PATH_PROG(ac_cc_path,[$ac_cc_set],[no])],[ |
63 |
AC_ERROR([Specified C compiler $CC doesn't seem to exist!])]) |
64 |
|
65 |
AS_IF([test AS_VAR_GET([ac_cc_path]) != no],[ |
66 |
AC_MSG_NOTICE([Will attempt to use $CC as C compiler]) |
67 |
MPICC=$CC |
68 |
],[ |
69 |
AC_ERROR([Can't find path to user-specified C compiler $CC])]) |
70 |
fi |
71 |
|
72 |
if test x"$CXX" != x; then |
73 |
AC_CHECK_PROGS(ac_cxx_set,[$CXX],[no]) |
74 |
AS_IF([test AS_VAR_GET([ac_cxx_set]) != no],[ |
75 |
AC_PATH_PROG(ac_cxx_path,[$ac_cxx_set],[no])],[ |
76 |
AC_ERROR([Specified C++ compiler $CXX doesn't seem to exist!])]) |
77 |
|
78 |
AS_IF([test AS_VAR_GET([ac_cxx_path]) != no],[ |
79 |
AC_MSG_NOTICE([Will attempt to use $CXX as C++ compiler]) |
80 |
MPICXX=$CXX |
81 |
],[ |
82 |
AC_ERROR([Can't find path to user-specified C++ compiler $CXX])]) |
83 |
fi |
84 |
|
85 |
if test x"$FC" != x; then |
86 |
AC_CHECK_PROGS(ac_fc_set,[$FC],[no]) |
87 |
AS_IF([test AS_VAR_GET([ac_fc_set]) != no],[ |
88 |
AC_PATH_PROG(ac_fc_path,[$ac_fc_set],[no])],[ |
89 |
AC_ERROR([Specified Fortran compiler $FC doesn't seem to exist!])]) |
90 |
|
91 |
AS_IF([test AS_VAR_GET([ac_fc_path]) != no],[ |
92 |
AC_MSG_NOTICE([Will attempt to use $FC as Fortran compiler]) |
93 |
MPIFC=$FC |
94 |
],[ |
95 |
AC_ERROR([Can't find path to user-specified Fortran compiler $FC])]) |
96 |
fi |
97 |
|
98 |
|
99 |
dnl do MPI checks |
100 |
save_LIBS_CHECK_CXX_LIB="$LIBS" |
101 |
|
102 |
AC_LANG([C++]) |
103 |
AX_MPI([USE_MPI="yes"], |
104 |
[USE_MPI="no" |
105 |
AC_MSG_WARN([No suitable C++ MPI implementation found. openmd_MPI will not be built.])]) |
106 |
AS_IF([test AS_VAR_GET([USE_MPI]) != no],[ |
107 |
AC_LANG([C]) |
108 |
AX_MPI([USE_MPI="yes"], |
109 |
[USE_MPI="no" |
110 |
AC_MSG_WARN([No suitable C MPI implementation found. openmd_MPI will not be built.])]) |
111 |
]) |
112 |
AS_IF([test AS_VAR_GET([USE_MPI]) != no],[ |
113 |
AC_LANG([Fortran]) |
114 |
AX_MPI([USE_MPI="yes"], |
115 |
[USE_MPI="no" |
116 |
AC_MSG_WARN([No suitable Fortran MPI implementation found. openmd_MPI will not be built.])]) |
117 |
]) |
118 |
AS_IF([test AS_VAR_GET([USE_MPI]) != no],[ |
119 |
CXX=$MPICXX |
120 |
CC=$MPICC |
121 |
FC=$MPIFC |
122 |
]) |
123 |
AC_SUBST(USE_MPI) |
124 |
|
125 |
# Checks for programs. |
126 |
AC_PROG_CXX([$CXX icpc pathCC pgCC c++ xlc++ xlC g++ CC]) |
127 |
AC_PROG_CC([$CC icc pathcc pgcc cc xlc gcc]) |
128 |
AC_PROG_FC([$FC ifort ifc pathf95 pgf95 xlf95 lf95 epcf90 pathf90 xlf90 f95 f90 gfortran g95 fort], 95) |
129 |
AC_PROG_CPP |
130 |
AC_PROG_EGREP |
131 |
AC_PROG_LN_S |
132 |
AC_PROG_MAKE_SET |
133 |
AC_PROG_RANLIB |
134 |
AX_SYS_PERLSHARPBANG |
135 |
AC_PROG_INSTALL |
136 |
case "x$INSTALL" in |
137 |
x/*) ;; |
138 |
*) INSTALL=`pwd`/ac-tools/"shtool install -c" ; |
139 |
esac |
140 |
MKINSTALLDIRS=`pwd`/ac-tools/"shtool mkdir -p -f -m 755" |
141 |
AC_CHECK_PROG(AR, ar, ar, NONE) |
142 |
if test "$AR" = "NONE"; then |
143 |
AC_CACHE_SAVE |
144 |
exit 1 |
145 |
fi |
146 |
AC_PATH_PROG(PS, ps) |
147 |
AC_CACHE_CHECK([for POSIX or BSD ps syntax], ac_cv_prog_ps_syntax, [ |
148 |
if $PS ax -o rss > /dev/null 2>&1; then |
149 |
ac_cv_prog_ps_ax=yes |
150 |
else |
151 |
ac_cv_prog_ps_ax=no |
152 |
fi |
153 |
if $PS -ef -o rss > /dev/null 2>&1; then |
154 |
ac_cv_prog_ps_ef=yes |
155 |
else |
156 |
ac_cv_prog_ps_ef=no |
157 |
fi |
158 |
if test "$ac_cv_prog_ps_ax" = yes; then |
159 |
ac_cv_prog_ps_syntax=BSD |
160 |
else |
161 |
if test "$ac_cv_prog_ps_ef" = yes; then |
162 |
ac_cv_prog_ps_syntax=POSIX |
163 |
else |
164 |
AC_MSG_ERROR(Could not determine ps syntax) |
165 |
fi |
166 |
fi |
167 |
]) |
168 |
AC_DEFINE_UNQUOTED(PSCOMMAND, $PS, [Path to ps program]) |
169 |
if test "$ac_cv_prog_ps_syntax" = BSD; then |
170 |
AC_DEFINE(PSTYPE_IS_BSD, 1, [ps uses BSD-style arguments]) |
171 |
else |
172 |
if test "$ac_cv_prog_ps_syntax" = POSIX; then |
173 |
AC_DEFINE(PSTYPE_IS_POSIX, 1, [ps uses POSIX-style arguments]) |
174 |
else |
175 |
AC_MSG_ERROR(Unknown ps syntax type!) |
176 |
fi |
177 |
fi |
178 |
|
179 |
AC_LANG_PUSH(Fortran) |
180 |
AC_FC_SRCEXT(F90) |
181 |
dnl Check the flag for Fortran90 preprocessing |
182 |
ACX_PROG_F90_PREPFLAG |
183 |
dnl Check to see if a flag is required for preprocessing defines |
184 |
ACX_PROG_F90_PREPDEFFLAG |
185 |
AC_FC_WRAPPERS |
186 |
AC_SUBST(FC_FUNC) |
187 |
AC_SUBST(FC_FUNC_) |
188 |
AC_FC_LIBRARY_LDFLAGS |
189 |
dnl Fortran 90 module suffix |
190 |
AC_CHECK_MODSUFFIX |
191 |
dnl Fortran 90 module path specifier |
192 |
AC_CHECK_MODDIRFLAG |
193 |
AC_F90_MODULE_NAMES |
194 |
pat=`echo $ac_cv_f90_module_names | sed 's/.*\(%.*%\).*/\1/'` |
195 |
F90_MODULE_NAMES=empty |
196 |
case $pat in |
197 |
%MODULE%) |
198 |
F90_MODULE_NAMES=UPPER ;; |
199 |
%Module%) |
200 |
F90_MODULE_NAMES=Mixed ;; |
201 |
%module%) |
202 |
F90_MODULE_NAMES=lower ;; |
203 |
*) |
204 |
F90_MODULE_NAMES=unknown ;; |
205 |
esac |
206 |
AC_SUBST(F90_MODULE_NAMES) |
207 |
AC_LANG_POP |
208 |
|
209 |
AC_LANG_C |
210 |
|
211 |
dnl Checks for libraries. |
212 |
AC_CHECK_LIB(m, asin, , exit) |
213 |
ACX_CHECK_ZLIB |
214 |
ACX_CHECK_FFTW |
215 |
ACX_CHECK_QHULL |
216 |
ACX_CHECK_OPENBABEL |
217 |
|
218 |
# Checks for header files. |
219 |
AC_HEADER_STDC |
220 |
AC_CHECK_HEADERS([libintl.h limits.h machine/hal_sysinfo.h stdlib.h string.h strings.h sys/param.h sys/pstat.h sys/sysctl.h sys/sysinfo.h sys/sysmp.h sys/systemcfg.h sys/table.h sys/time.h unistd.h]) |
221 |
|
222 |
# Checks for typedefs, structures, and compiler characteristics. |
223 |
AC_HEADER_STDBOOL |
224 |
AC_C_CONST |
225 |
AC_C_INLINE |
226 |
AC_TYPE_SIZE_T |
227 |
AC_HEADER_TIME |
228 |
|
229 |
# Checks for library functions. |
230 |
AC_FUNC_MALLOC |
231 |
AC_FUNC_REALLOC |
232 |
AC_FUNC_SELECT_ARGTYPES |
233 |
AC_FUNC_STRTOD |
234 |
AC_CHECK_FUNCS([floor getpagesize gettimeofday memset pow pstat_getdynamic pstat_getstatic select sqrt strcasecmp strchr strdup stricmp strncasecmp strnicmp strstr strtol sysmp getsysinfo sysctl table]) |
235 |
|
236 |
# special check for _system_configuration because AIX <4.3.2 do not |
237 |
# contain the `physmem' member. |
238 |
AC_MSG_CHECKING([for external symbol _system_configuration]) |
239 |
AC_TRY_COMPILE([#include <sys/systemcfg.h>], |
240 |
[double x = _system_configuration.physmem;], |
241 |
[AC_MSG_RESULT([yes]) |
242 |
AC_DEFINE(HAVE__SYSTEM_CONFIGURATION, 1, |
243 |
[Define if you have the _system_configuration variable.])], |
244 |
[AC_MSG_RESULT([no])]) |
245 |
|
246 |
dnl check for strong optimization options |
247 |
|
248 |
case $debug in |
249 |
1) |
250 |
;; |
251 |
*) |
252 |
ACX_PROG_FC_MAXOPT |
253 |
ACX_PROG_CC_MAXOPT |
254 |
ACX_PROG_CXX_MAXOPT |
255 |
;; |
256 |
esac |
257 |
|
258 |
BB_ENABLE_DOXYGEN |
259 |
|
260 |
AC_SUBST(EXEEXT) |
261 |
AC_SUBST(OBJEXT) |
262 |
AC_SUBST(BATEXT) |
263 |
AC_SUBST(MKINSTALLDIRS) |
264 |
AC_SUBST(OPENMD) |
265 |
AC_SUBST(OPENMD_HOME) |
266 |
AC_SUBST(SUBDIRS) |
267 |
AC_SUBST(CFLAGS) |
268 |
AC_SUBST(CXXFLAGS) |
269 |
AC_SUBST(CPPFLAGS) |
270 |
AC_SUBST(FCFLAGS) |
271 |
AC_SUBST(LDFLAGS) |
272 |
AC_SUBST(PREPDEFFLAG) |
273 |
AC_SUBST(F90_MODULE_NAMES) |
274 |
AC_CONFIG_FILES([make/Makefile src/utils/Makefile src/math/Makefile src/integrators/Makefile src/applications/atom2md/Makefile scripts/filepp], [chmod 0755 scripts/*]) |
275 |
|
276 |
AC_OUTPUT |