renamed atom types from amber99_? etc. to the original Amber names and removed Tinker...
[gromacs.git] / configure.ac
blob8f1cd5961bcf4b1ea37eb32dacd8a4b75925dbc9
1 #######################################################################
2 # Process this file wth autoconf to produce a configure script.
3 #######################################################################
4  
5 AC_PREREQ(2.50)
6 AC_INIT(gromacs, 4.5-beta1, [gmx-users@gromacs.org])
7 AC_CONFIG_SRCDIR(src/gmxlib/3dview.c)
8 AC_CONFIG_AUX_DIR(config)
9 AC_CANONICAL_HOST
11 AM_INIT_AUTOMAKE(tar-ustar)
12 AC_PREFIX_DEFAULT(/usr/local/gromacs)
14 AM_CONFIG_HEADER(src/config.h)
15 dnl This is the version info according to the libtool versioning system.
16 dnl It does *not* correspond to the release number.
17 SHARED_VERSION_INFO="6:0:0"
18 AC_SUBST(SHARED_VERSION_INFO)
20 AC_DISABLE_SHARED
23 #######################################################################
24 # Simple options and makefile variables
25 #######################################################################
27 ### Single/Double
28 AC_ARG_ENABLE(float,
29              [AC_HELP_STRING([--disable-float],
30                              [Use double instead of single precision])],, enable_float=yes)
32 AC_ARG_ENABLE(double,
33              [AC_HELP_STRING([--enable-double],
34                              [Same effect as --disable-float])],, enable_double=no)
35 if test "$enable_double" = "yes"; then
36    enable_float=no;
38 if test "$enable_float" = "no"; then
39   AC_DEFINE(GMX_DOUBLE,,[Compile in double precision])
41 AM_CONDITIONAL([GMX_DOUBLE],[test "$enable_float" = "no"])
45 ### Fortran or not
46 AC_ARG_ENABLE(fortran,
47              [AC_HELP_STRING([--enable-fortran],
48                              [Use Fortran kernels])],, 
49 [case "${host_cpu}-${host_os}" in
50   sparc*-solaris* | alpha*-* | rs6000*-aix* | powerpc*-aix* | mips*-irix*) enable_fortran=yes ;;
51   *) enable_fortran=no ;;
52  esac])
53 if test "$enable_fortran" = "yes"; then
54   AC_DEFINE(GMX_FORTRAN,,[Enable Fortran support])
56 # Generic fortran kernels will be turned off below if you enable power6-specific optimization!
57 # always use CC for linking:
58 AC_SUBST(F77LINK,"\$(LINK)")
64 ### MPI or not
65 AC_ARG_ENABLE(mpi,
66               [AC_HELP_STRING([--enable-mpi],
67                               [Compile for parallel runs using MPI]
68                               [(instead of threads)])],,enable_mpi=no)
71 ### MPI environment
72 AC_ARG_ENABLE(mpi-environment,
73               [AC_HELP_STRING([--enable-mpi-environment=VAR],
74                               [Only start parallel runs when VAR is set])],,
75 [case "${host_cpu}" in
76   mips*-irix*) enable_mpi_environment="MPI_ENVIRONMENT" ;;
77   *) enable_mpi_environment=no ;;
78 esac])
79 if test "$enable_mpi_environment" != "no"; then
80   AC_DEFINE_UNQUOTED(GMX_CHECK_MPI_ENV,"$enable_mpi_environment",[If defined, only start MPI runs when this variable is set])
83 ### MPI_IN_PLACE
84 AC_ARG_ENABLE(mpi-in-place,
85               [AC_HELP_STRING([--disable-mpi-in-place],
86                               [Disable MPI_IN_PLACE. For MPI implementations]
87                               [that have broken support for it ]
88                               [(some versions of MPICH, for example).])],, enable_mpi_in_place=yes)
92 AC_ARG_ENABLE(debug,
93               [AC_HELP_STRING([--enable-debug],
94                               [Add -g to other command line arguments])],,enable_debug=no)
96 ### IA32 assembly code
97 AC_ARG_ENABLE(ia32_sse,
98               [AC_HELP_STRING([--disable-ia32-sse],
99                               [Don't build SSE/SSE2 assembly loops on ia32])],,enable_ia32_sse=yes)
101 case "${host_cpu}-${host_vendor}" in
102    i?86-*) ;;
103    *) enable_ia32_sse=no ;;
104 esac
106 ### AMD64 assembly code
107 AC_ARG_ENABLE(x86_64_sse,
108               [AC_HELP_STRING([--disable-x86-64-sse],
109                               [Don't build SSE assembly loops on X86_64])],,enable_x86_64_sse=yes)
110 case "${host_cpu}-${host_vendor}" in
111    x86_64-* | amd64-*) ;;
112    i?86-apple) ;;
113    *) enable_x86_64_sse=no ;;
114 esac
117 ### Altivec on powerpc (motorola)
118 AC_ARG_ENABLE(ppc_altivec,
119               [AC_HELP_STRING([--disable-ppc-altivec],
120                               [Don't build Altivec loops on PowerPC])],,enable_ppc_altivec=undef)
121 # Power3/4/5 running AIX does not support altivec. We identify this with vendor=IBM.
122 # IBM powerpc 970 boxes run linux, and have vendor=unknown.
123 if test "$enable_ppc_altivec" = "undef"; then
124   case "${host_cpu}-${host_vendor}" in
125     ppc*-ibm* | powerpc*-ibm*) enable_ppc_altivec=no ;;
126     ppc*-* | powerpc*-*) enable_ppc_altivec=yes ;; 
127     *) enable_ppc_altivec=no ;;
128   esac
131 ###################################
132 ## Detect buggy version of gcc
133 ###################################
134 AC_ARG_ENABLE(gcc41_check,
135               [AC_HELP_STRING([--disable-gcc41-check],
136                               [Disable the check for buggy gcc 4.1])],,enable_gcc41_check=yes)
140 ### ia64 assembly code
141 AC_ARG_ENABLE(ia64_asm,
142               [AC_HELP_STRING([--enable-ia64-asm],
143                               [Build assembly loops on ia64])],,enable_ia64_asm=no)
144 case "${host_cpu}" in
145    ia64) ;;
146    *) enable_ia64_asm=no ;;
147 esac
150 # IBM Power6-specific optimization
151 AC_ARG_ENABLE(power6,
152              [AC_HELP_STRING([--enable-power6],
153                              [Use IBM Pwr6/PPC440/PPC450-specific F77 kernels])],,enable_power6=no)
154 # Turn off generic fortran loops if we are using power6-specific optimization
155 if test "$enable_power6" = "yes"; then
156   enable_fortran=no;
159 AC_ARG_ENABLE(bluegene,
160               [AC_HELP_STRING([--enable-bluegene],
161                               [Build assembly intrinsics kernels on bluegene])],,enable_bluegene=no)
164 ### Optimize for host cpu version
165 AC_ARG_ENABLE(cpu-optimization,     
166               [AC_HELP_STRING([--disable-cpu-optimization],
167                               [No detection or tuning flags for cpu version])],, enable_cpu_optimization=yes)
170 ### Do software 1/sqrt(x)                                                                                                            
171 AC_ARG_ENABLE(software-invsqrt,
172               [AC_HELP_STRING([--disable-software-invsqrt],
173                               [No software 1/sqrt (disabled on sgi,ibm,ia64)])],,
174 [case "${host_cpu}-${host_os}" in
175   mips*-irix* | rs6000*-aix* | powerpc*-aix | ia64*-*) enable_software_invsqrt=no ;;
176   *) enable_software_invsqrt=yes ;;
177 esac])
178 if test "$enable_software_invsqrt" = "yes"; then
179   AC_DEFINE(GMX_SOFTWARE_INVSQRT,,[Use the GROMACS software 1/sqrt(x)])
181 AM_CONDITIONAL([GMX_SOFTWARE_INVSQRT],[test "$enable_software_invsqrt" = "yes"])
183 AC_ARG_ENABLE(fahcore,
184               [AC_HELP_STRING([--enable-fahcore],
185                               [Create a library with mdrun functionality])],, enable_fahcore=no)
189 # The four options below used to improve code scheduling, but the newest CPUs can usually rearrange
190 # instructions dynamically at runtime, so they might not make much difference now:
193 AC_ARG_ENABLE(all-static,
194               [AC_HELP_STRING([--enable-all-static],
195                               [Make completely static binaries])],, enable_all_static=no)
196 # Dont add the -all-static flag until after the compiler test.
199 # FFT libraries - only use one...
200 AC_ARG_WITH(fft,
201             [AC_HELP_STRING([--with-fft=@<:@fftw3/fftw2/mkl(>=6.0)/fftpack@:>@],
202                             [FFT library to use. fftw3 is default, fftpack built in.])],,
203                              with_fft=fftw3)
205 AC_ARG_ENABLE(fftw-measure,
206             [AC_HELP_STRING([--disable-fftw-measure],
207                             [Dont optimize FFTs. This produces binary exactly]
208                             [reproducible runs (as the -reprod flag to mdrun),]
209                             [and if you are using FFTW on x86 and specified its]
210                             [--enable-sse/sse2 flag (NOT default in FFTW!) the]
211                             [kernels used are close-to-optimal anyway.])],,
212                              enable_fftw_measure=yes)
215 AC_ARG_ENABLE(threads,
216               [AC_HELP_STRING([--disable-threads],    
217                               [Disable parallel runs using threads])],,enable_threads=yes)
220 ### Use external BLAS/LAPACK libraries if the user wants to.
222 AC_ARG_WITH(external_blas,
223             [AC_HELP_STRING([--with-external-blas],
224                             [Use system BLAS library (add to LIBS). Automatic on OS X.])],,
226 # default action - check if we are on OS X
227 case "${host_vendor}-${host_os}" in
228   apple-darwin*) with_external_blas="yes" ; extra_LDFLAGS="-framework Accelerate" ;;
229   *)             with_external_blas="no"  ;;
230 esac
232 AM_CONDITIONAL([GMX_EXTERNAL_BLAS], [test "$with_external_blas" = "yes"])
235 AC_ARG_WITH(external_lapack,
236             [AC_HELP_STRING([--with-external-lapack],
237                             [Use system LAPACK library (add to LIBS). Automatic on OS X.])],,
239 # default action - check if we are on OS X
240 case "${host_vendor}-${host_os}" in
241   apple-darwin*) with_external_lapack="yes" ; extra_LDFLAGS="-framework Accelerate" ;;
242   *)             with_external_lapack="no"  ;;
243 esac
245 AM_CONDITIONAL([GMX_EXTERNAL_LAPACK], [test "$with_external_lapack" = "yes"])
250 AC_ARG_WITH(qmmm_gaussian,
251               [AC_HELP_STRING([--without-qmmm-gaussian],
252                               [Use modified Gaussian0x for QM-MM (see website)])],,with_qmmm_gaussian=yes)
253 if test "$with_qmmm_gaussian" = "yes"; then
254   AC_DEFINE(GMX_QMMM_GAUSSIAN,,[Use (modified) Gaussian0x for QM-MM calculations])
258 AC_ARG_WITH(qmmm_gamess,
259               [AC_HELP_STRING([--without-qmmm-gamess],
260                               [Use modified Gamess-UK for QM-MM (see website)])],,with_qmmm_gamess=no)
261 if test "$with_qmmm_gamess" = "yes"; then
262   AC_DEFINE(GMX_QMMM_GAMESS,,[Use (modified) Gamess-UK for QM-MM calculations])
266 AC_ARG_WITH(qmmm_mopac,
267               [AC_HELP_STRING([--without-qmmm-mopac],
268                               [Use modified Mopac 7 for QM-MM (see website)])],,with_qmmm_mopac=no)
269 if test "$with_qmmm_mopac" = "yes"; then
270   AC_DEFINE(GMX_QMMM_MOPAC,,[Use (modified) Mopac 7 for QM-MM calculations])
274 AC_ARG_WITH(qmmm_orca,
275               [AC_HELP_STRING([--without-qmmm-mopac],
276                               [Use ORCA for QM-MM])],,with_qmmm_orca=no)
277 if test "$with_qmmm_orca"="yes"; then
278   AC_DEFINE(GMX_QMMM_ORCA,,[Use ORCA for QM-MM calculations])
282 AC_ARG_WITH(dlopen,
283             [AC_HELP_STRING([--without-dlopen],
284                             [do not compile with dlopen, needed to read VMD]
285                             [supported file formats])],,with_dlopen=yes)
289 ############################################################
290 # Add some debug info: Who is building, and on what machine?
291 ############################################################
292 AC_DEFINE_UNQUOTED([BUILD_TIME],["`date`"],[Date and time for build])
293 AC_DEFINE_UNQUOTED([BUILD_USER],["`whoami`@`hostname`"],[User doing build])
294 AC_DEFINE_UNQUOTED([BUILD_MACHINE],["`uname -srm`"],[Hardware and OS version for build host])
297 ############################################################
298 # Checks for requirements for version information generation
299 ############################################################
300 generate_version=no
301 if test -d $srcdir/.git ; then
302     AC_CHECK_PROG(have_git, git, yes, no)
303     if test "$have_git" = "yes" ; then
304         AC_MSG_CHECKING(for git >= 1.5.1)
305         if test "`git --version`" \< "git version 1.5.1" ; then
306             AC_MSG_RESULT(no)
307         else
308             AC_MSG_RESULT(yes)
309             generate_version=yes
310             AC_DEFINE(USE_VERSION_H,,[Use generated version info])
311         fi
312     fi
313     if test "$generate_version" = "no" ; then
314         AC_MSG_WARN([No compatible git version found, won't be able to generate proper development version information.])
315     fi
317 AM_CONDITIONAL([USE_VERSION_H],[test "$generate_version" = "yes"])
320 ############################################################
321 # Checks for programs
322 ############################################################
324 # normally we use the default compiler, but on alpha/linux we try the compaq ones first
325 case "${host_cpu}-${host_os}" in
326   alpha*-linux*)
327     cc_names="ccc cc gcc"
328     f77_names="fort f77 g77"
329     ;;
330   *) 
331     cc_names="cc icc xlc gcc"
332     f77_names="f77 ifort xlf xlf77 cf77 fl32 g77 fort77 f90 xlf90 pgf77 cf77 fort fort77 pgf90"
333     ;;
334 esac
335 # the (non-mpi) c compiler, which is also used for programs executed during build stage
336 AC_PROG_CC( $cc_names )
337 # Check for environment variable CC_FOR_BUILD before overwriting it
338 if test -z "$CC_FOR_BUILD"; then
339   CC_FOR_BUILD=$CC
342 if test "$enable_gcc41_check" = "yes"; then
343     if $CC --version 2>&1 | grep 'gcc.* 4\.1' > /dev/null 2>&1; then
344         AC_MSG_ERROR([Uh-oh. Your compilers appears to be GCC version 4.1, which unfortunately produces]
345 [buggy code at high optimimzation levels. It would be a good idea to update or]
346 [use a different compiler. If you are ABSOLUTELY sure what you are doing, you]
347 [can override this check with --disable-gcc41-check.])
348     fi
353 AC_SUBST(CC_FOR_BUILD) 
355 if test "$enable_fortran" = "yes"; then 
356   AC_PROG_F77( $f77_names )
357   if test -z "$F77"; then
358     AC_MSG_ERROR([No fortran compiler found])
359   fi
362 AM_PROG_AS( $CC )
364 # if we are using mpi, also get an MPICC. We cannot set that in the PROG_CC macro
365 # above, since autoconf checks that the created file can be executed. This would
366 # fail on platforms where MPI executables can only be run through a batchqueue.
368 if test "$enable_mpi" = "yes"; then
369   enable_threads="no"
370   AC_CHECK_PROGS(MPICC, mpxlc mpicc mpcc hcc, $CC)
371 # now change the normal cc to the MPI one - see the comment above.
372   CC=$MPICC
373   CXX=$MPICC
374   AC_MSG_CHECKING([whether the MPI cc command works]) # be paranoid
375   AC_TRY_LINK([#include <mpi.h>],[int argc; char **argv; MPI_Init(&argc,&argv);],
376 AC_MSG_RESULT([yes]),AC_MSG_ERROR([Cannot compile and link MPI code with $CC]))
377   AC_DEFINE(GMX_MPI,,[Make a parallel version of GROMACS using MPI])
378   AC_DEFINE(GMX_LIB_MPI,,[Use a real MPI library])
380   if test "$enable_mpi_in_place" = "yes"; then
381     # not all MPIs support MPI_IN_PLACE:
382     AC_MSG_CHECKING([for MPI_IN_PLACE in collective operations])
383     AC_TRY_COMPILE([
384 #include <mpi.h>
385 void test(void)
387     void *buf;
388     MPI_Allreduce(MPI_IN_PLACE, buf, 10, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD);
390     ],,[
391         AC_MSG_RESULT([yes])
392         AC_DEFINE(MPI_IN_PLACE_EXISTS,[],[MPI_IN_PLACE available for collective operations])
393     ],[
394         AC_MSG_RESULT([no])
395     ]) 
396   fi
398 # on the cray xt3 we have to tell autoconf that we 
399 # are actually cross-compiling even if the architecture
400 # of host and target are the same. so we enforce 
401 # cross-compilation if __QK_USER__ is defined
402   AC_MSG_CHECKING([for catamount])
403   AC_TRY_COMPILE([
404 #if defined __QK_USER__
405 #else
406 #error not catamount
407 #endif
408 ],,[
409   AC_MSG_RESULT([yes])
410   cross_compiling=yes 
411   AC_DEFINE(GMX_CRAY_XT3,[],[Enable special hacks for Cray XT3])
412   AC_DEFINE(GMX_NO_SYSTEM,[],[Ignore calls to system(3)])
413   AC_DEFINE(GMX_NO_NICE,[],[Ignore calls to nice(3)])
414   AC_DEFINE(GMX_BROKEN_CALLOC,[],[Don't use calloc(3)])
415   extra_LDFLAGS="$extra_LDFLAGS -lgmalloc -lacml"
417   AC_MSG_RESULT([no])
419 # end of "$enable_mpi" = "yes"
423 AH_TEMPLATE([F77_OR_C_FUNC],
424             [Set to F77_FUNC(name,NAME) if Fortran used, otherwise 'name' for C.])
425 AH_TEMPLATE([F77_OR_C_FUNC_],
426             [Set to F77_FUNC_(name,NAME) if Fortran used, otherwise 'name' for C.])
430 if test "$enable_fortran" = "yes"; then
431   AC_F77_LIBRARY_LDFLAGS
432   AC_F77_WRAPPERS
433   AC_DEFINE([F77_OR_C_FUNC(name,NAME)],[F77_FUNC(name,NAME)])
434   AC_DEFINE([F77_OR_C_FUNC_(name,NAME)],[F77_FUNC_(name,NAME)])
435 else
436   AC_DEFINE([F77_OR_C_FUNC(name,NAME)],[name])
437   AC_DEFINE([F77_OR_C_FUNC_(name,NAME)],[name])
442 AC_PROG_CPP
443 # Needed by libtool scripts?
444 AC_PROG_EGREP
446 if test "$enable_cpu_optimization" = "yes"; then
447   ACX_DETECT_GMXCPU
448 else
449   gmxcpu=""
451 ACX_COMPILER_MAXOPT
454 # We've postponed the threads check because we need to check with the right
455 # compilers/flags
456 SAVED_LIBS="$LIBS"
457 if test "$enable_threads" = "yes"; then 
458   if test "$enable_mpi" = "yes"; then
459     AC_MSG_ERROR([Cannot use both threads and MPI - yet.])
460   fi
461   if test "$with_fft" = "fftw2"; then
462     AC_MSG_ERROR([fftw2 can't be used with threads. Use fftw3 or mkl.])
463   fi 
464   AC_CHECK_HEADERS(unistd.h)
465   AC_CHECK_HEADERS(sys/time.h)
466   AC_CHECK_HEADERS(sched.h)
467   AC_CHECK_FUNCS(sysconf)
469   # for now we just assume pthreads
470   ACX_PTHREAD(,AC_MSG_ERROR([Cannot find POSIX threads - required for thread support using configure!]))
471   LIBS="$PTHREAD_LIBS $LIBS"
472   CFLAGS="$CFLAGS $PTHREAD_CFLAGS -I$srcdir/include"
473   CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS -I$srcdir/include"
474   CC="$PTHREAD_CC "
475   AC_DEFINE(THREAD_PTHREADS,,[Use pthreads for thread_mpi multithreading])
477   # profiling
478   AC_ARG_ENABLE(tmpi-profiling,
479               [AC_HELP_STRING([--enable-tmpi-profiling],
480               [Enables profiling of thread_mpi calls and wait times])],,
481               enable_tmpi_profiling=no)
482   if test "x$enable_tmpi_profiling" = "xyes"; then
483     AC_DEFINE(TMPI_PROFILE,,[Enable profiling for call and wait times])
484   fi
486   # check the atomics
487   AC_MSG_CHECKING(if atomic operations are supported)
488   CFLAGS_RET="$CFLAGS"
489   CXXFLAGS_RET="$CXXFLAGS"
490   CFLAGS="$CFLAGS -I$srcdir/include -DTMPI_CHECK_ATOMICS"
491   CXXFLAGS="$CXXFLAGS -I$srcdir/include -DTMPI_CHECK_ATOMICS"
492   # this sets a variable 'tmpi_atomics' to 'yes' if there are atomics. 
493   AC_COMPILE_IFELSE([#include "thread_mpi/atomic.h" ],
494                       [AC_MSG_RESULT(yes); tmpi_atomics=yes],
495                       [AC_MSG_WARN(
496 [No atomics.
498 This compiler+CPU combination doesn't have working atomics.
499 Thread support will be unbearably slow: disable threads.
501 Atomics should work on all but the most obscure CPU+compiler combinations;
502 if your system is not obscure -- like, for example, x86 with gcc --  please
503 contact the developers.
504 ]); tmpi_atomics=no])
505   CFLAGS="$CFLAGS_RET"
506   CXXFLAGS="$CXXFLAGS_RET"
508   AC_DEFINE(GMX_THREADS,,[Use threads for parallelization])
509   AC_DEFINE(GMX_MPI,,[Make a parallel version of GROMACS using MPI])
510   AM_CONDITIONAL(THREAD_PARALLEL,true)
511 else
512   AM_CONDITIONAL(THREAD_PARALLEL,false)
514 LIBS="$SAVED_LIBS"
518 #############
519 # Check integer endian
520 #############
521 AC_C_BIGENDIAN([AC_DEFINE([GMX_INTEGER_BIG_ENDIAN],,[Integer byte order is big endian.])],[],[
522 AC_MSG_ERROR([Cannot determine endian in compiled output])])
523 # Little endian implied if GMX_INTEGER_BIG_ENDIAN not defined in source.
525 #############
526 # Make sure size_t can hold pointers.
527 # On some Nec machines, you reportedly need to specify a flag for size_t to be 64 bits wide.
528 #############
529 AC_MSG_CHECKING([that size_t can hold pointers])
530 AC_TRY_COMPILE([
531 #include <stdlib.h>
532 #include <stddef.h>
533 ],[int chk[sizeof(size_t)-sizeof(int *)+1];],AC_MSG_RESULT([yes]),[
534    AC_MSG_ERROR([size_t is smaller than int*. Check if your compiler needs a flag to make it 64 bit.])])
537 #############
538 # Check that SIGUSR1 is defined
539 #############
540 AC_MSG_CHECKING([for SIGUSR1])
541 AC_TRY_COMPILE([#include <signal.h>],[int i=SIGUSR1;],[
542 AC_MSG_RESULT([yes])
543 AC_DEFINE(HAVE_SIGUSR1,,[SIGUSR1 supported and defined])
544 ],AC_MSG_RESULT([no]))
546 #############
547 # Check if pipes are supported
548 #############
549 AC_MSG_CHECKING([for pipes])
550 AC_TRY_COMPILE([#include <stdio.h>],[
551 FILE *pipe=popen("/tmp/pipe","r");
553 AC_MSG_RESULT([yes])
554 AC_DEFINE(HAVE_PIPES,,[Pipes (popen/pclose) supported])
555 ],AC_MSG_RESULT([no]))
559 #############
560 # Check floating-point format and endian
561 #############
562 ACX_FLOAT_FORMAT
565 AC_PROG_INSTALL
566 AC_PROG_LN_S
567 AC_PROG_MAKE_SET
568 AC_LIBTOOL_WIN32_DLL
569 AC_PROG_LIBTOOL
570 AC_SYS_LARGEFILE
572 # Use our own version of AC_FUNC_FSEEKO from autoconf 2.63 instead
573 # of the broken one we might get from autoconf 2.61.
574 ACX_FUNC_FSEEKO_FIXED
579 ############################################################################
580 # Checks for libraries.
581 ############################################################################
583 # Don't add math library for intel compilers
584 if $CC -V 2>&1 | grep 'Intel Corporation' > /dev/null 2>&1; then
585   AC_MSG_NOTICE([Using built-in math library with intel compiler])
586 else
587   AC_CHECK_LIB(m,sqrt,,AC_MSG_ERROR([No math library found]))
590 #####
591 # Disable MASS support for now.
592 #####
594 #save current LIBS
595 SAVED_LIBS="$LIBS"
597 #set empty defaults
598 PKG_FFT=""
599 FFT_LIBS=""
600 case "$with_fft" in
601 fftw2)
602   if test "$enable_float" = "yes"; then
603     sizeof_real=4
604   else
605     sizeof_real=8
606   fi
607   ACX_CHECK_FFTW2(fftw,$sizeof_real)
608   ACX_CHECK_FFTW2(rfftw,$sizeof_real)
609   FFT_LIBS="-lfftw -lrfftw"
611   case ${ac_fftw_savedprefix} in
612    d) AC_DEFINE(FFTW2_NAME_DFFTW,,[Use the d prefix on fftw2 includes]) ;;
613    s) AC_DEFINE(FFTW2_NAME_SFFTW,,[Use the s prefix on fftw2 includes]) ;;
614    *) AC_DEFINE(FFTW2_NAME_FFTW,,[Dont use any prefix on fftw2 includes]) ;;
615   esac
617   AC_DEFINE(GMX_FFT_FFTW2,,[Use FFTW2 FFT library])
619   ;; #  end of fftw2 check
621 fftw3) # Much simpler check than fftw2
622 # Check for header <fftw3.h> AC_CHECK_HEADERS doesnt work, since we must
623 # use mpicc to get includes - cpp isnt always the same compiler.
624 AC_MSG_CHECKING([for fftw3.h])
625 AC_TRY_COMPILE([#include<fftw3.h>],,[
626 # ok, look for library file too
627 AC_MSG_RESULT(yes)
628 if test "$enable_float" = "yes"; then
629   AC_CHECK_LIB([fftw3f],main,,AC_MSG_ERROR([Cannot find fftw3f library]))
630   PKG_FFT="fftw3f"
631   FFT_LIBS="-lfftw3f"
632 else
633   AC_CHECK_LIB([fftw3],main,,AC_MSG_ERROR([Cannot find fftw3 library]))
634   PKG_FFT="fftw3"
635   FFT_LIBS="-lfftw3"
637   AC_DEFINE(GMX_FFT_FFTW3,,[Use FFTW3 FFT library])
639 # not ok, echo a warning
640 AC_MSG_ERROR(
641 [Cannot find the default external FFT library (fftw3).
642 Other alternatives are 'fftw2', or 'mkl' for Intel MKL.
643 You are STRONGLY recommended to use one of these - fftw is free.
645 Use CPPFLAGS and LDFLAGS if the library is installed in a 
646 non-standard location. (see FAQ at http://www.gromacs.org)
647                                                           
648 If you dont care about performance you can also specify 'fftpack'
649 to use a slower set of FFTs built into Gromacs. 
650 (Just install FFTW3 unless you really know what you are doing).
653   ;;
655 mkl*)
656 ###########
657 # Intel Math Kernel Library version 6 and later.
658 ##########
659 AC_MSG_CHECKING([for mkl_dfti.h])
660 AC_TRY_COMPILE([#include<mkl_dfti.h>],,AC_MSG_RESULT(yes),AC_MSG_ERROR([Cannot find mkl_dfti.h header from Intel Math Kernel Library>=6.0.]\
662 ## Check for library
663 #  AC_CHECK_LIB([guide],main,,AC_MSG_ERROR([Cannot find libguide (Intel MKL)]))
664 #  AC_CHECK_LIB([mkl],DftiComputeForward,,
665 #    AC_MSG_ERROR([Cannot find Intel Math Kernel Library >= 6.0]))
666   # first check for older MKLs
667   AC_CHECK_LIB([mkl],DftiComputeForward,,[have_mkl="no"])
668   if test "$have_mkl" == "no"; then
669     # we assume it's a new MKL
670     LIBS="$LIBS -liomp5 -lmkl_sequential -lmkl_core"
671     LMKL=" -liomp5 -lmkl_sequential -lmkl_core"
672     AC_CHECK_LIB([mkl_intel_lp64],DftiComputeForward,,[have_mkl10_64="no"])
673     FFT_LIBS="$LMKL -lmkl_intel_lp64"
674     if test "$have_mkl10_64" == "no"; then
675       AC_CHECK_LIB([mkl_intel],DftiComputeForward,,[have_mkl10_32="no"])
676       FFT_LIBS="$LMKL -lmkl_intel"
677       if test "$have_mkl10_32" == "no"; then
678         AC_MSG_ERROR([Cannot find Intel Math Kernel Library >= 6.0])
679       fi
680     fi
681   fi
682   AC_DEFINE(GMX_FFT_MKL,,[Use Intel MKL FFT library])
683   AC_SUBST(LMKL)
684   ;;
686 fftpack | no)
687   AC_MSG_WARN([The built-in FFTPACK routines are slow.
688 Are you sure you don't want to use FFTW? It is free and much faster...])
689   AC_DEFINE(GMX_FFT_FFTPACK,,[Use Built-in FFTPACK FFT library])
690   ;;
692   AC_MSG_ERROR([Unknown FFT library])
693   ;;
694 esac
695 #restore LIBS from before fft check
696 LIBS="$SAVED_LIBS"
698 #only fftw3 has support for pkg-config
699 AC_SUBST(PKG_FFT)
700 if test -z "${PKG_FFT}"; then
701   AC_SUBST(PKG_FFT_LIBS,"$FFT_LIBS")
702 else
703   AC_SUBST(PKG_FFT_LIBS,"")
705 #flag for Makefile
706 AC_SUBST(FFT_LIBS)
708 if test "$enable_fftw_measure" != "yes"; then
709    AC_DEFINE(GMX_DISABLE_FFTW_MEASURE,,[Do not optimize FFTW setups (not needed with SSE FFT kernels)])
712 ######
713 # check for xtc headers
714 case "${host_os}" in
715 cygwin* | mingw*)   # use our own xdr stuff for cygwin/mingw
716   ;;
718   AC_CHECK_HEADERS([rpc/rpc.h])
719   AC_CHECK_HEADERS([rpc/xdr.h],,,
720 [#if HAVE_RPC_RPC_H
721 # include <rpc/rpc.h>
722 #endif
724   AC_CHECK_LIB(nsl,xdr_float)
725   AC_TRY_LINK([
726 #if HAVE_RPC_RPC_H
727 #include<rpc/rpc.h> 
728 #else
729 #error NO rpc.h header
730 #endif
731 #if HAVE_RPC_XDR_H
732 #include<rpc/xdr.h>
733 #else
734 #error No xdr.h header
735 #endif
736 ],[ XDR *xd; float f; xdr_float(xd,&f);],[have_xdr="yes"])
738   if test "$have_xdr" != "yes"; then
739     AC_DEFINE(GMX_INTERNAL_XDR,,[Use our own instead of system XDR libraries])  
740     AC_MSG_WARN([Couldn't find XDR headers and/or libraries - using our own])
741   fi
742   ;;
743 esac
746 ########################################################################
747 # Checks for header files and types
748 ########################################################################
750 AC_CHECK_HEADERS([limits.h unistd.h],,AC_MSG_ERROR([Include headers not found]))
751 AC_CHECK_HEADERS(unistd.h)
752 AC_CHECK_HEADERS(sys/types.h)
753 AC_CHECK_HEADERS(sys/time.h)
754 AC_CHECK_HEADERS(dirent.h,,[AC_MSG_WARN(
756 ********************************************************************
757 * WARNING! We could not find the header file dirent.h              *
758 *                                                                  *
759 * Without this header, we will not be able to scan directories for *
760 * files, which completely breaks pdb2gmx. You will still be able   *
761 * to run simulations, but you cannot prepare input data.           *
762 * dirent.h is part of the POSIX 2001-1 standard, and should be     *
763 * present on all UNIX-like systems, CygWin, and MinGW.             *
764 ********************************************************************])])
765 ## NOTE: On native windows we do not use configure.ac
766 AC_CHECK_HEADERS(copyfile.h)
767 AC_CHECK_HEADERS(regex.h,,[AC_MSG_WARN(
768 [No regex.h found.
769 Regular expression matching in selections will be disabled.
770 Selections still work, but the default groups can differ from
771 those obtained with regular expressions enabled.
772 Consider installing the regular expression library from GNU libc.])])
776 #####
777 # Checks for additional and/or optional functions or libraries.
778 #AC_FUNC_MALLOC
779 AC_FUNC_MEMCMP
780 AC_TYPE_SIGNAL
781 AC_TYPE_OFF_T
782 AC_FUNC_VPRINTF
783 AM_WITH_DMALLOC
784 AC_CHECK_FUNCS(strcasecmp)
785 AC_CHECK_FUNCS(strdup)
786 AC_CHECK_FUNCS(gettimeofday)
787 AC_CHECK_FUNCS(cbrt)
788 AC_CHECK_FUNCS(isnan)
789 AC_CHECK_FUNCS(_isnan)
790 AC_CHECK_FUNCS(isfinite)
791 AC_CHECK_FUNCS(_isfinite)
792 AC_CHECK_FUNCS(fsync)
793 AC_CHECK_FUNCS(fileno)
794 AC_CHECK_FUNCS(copyfile)
796 # check for bool (must come late, since CFLAGS/includes might affect it)
797 AC_CHECK_TYPES([bool])
798 AC_SEARCH_LIBS(posix_memalign, c, AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, Define to 1 if you have the posix_memalign function))
799 AC_SEARCH_LIBS(memalign, c, AC_DEFINE(HAVE_MEMALIGN, 1, Define to 1 if you have the memalign function))
800 AC_CHECK_FUNCS(_aligned_malloc)
801 #AC_SEARCH_LIBS(_aligned_malloc, c, AC_DEFINE(HAVE__ALIGNED_MALLOC, 1, Define to 1 if you have the _aligned_malloc function))
808 #############
809 # Check integer sizes, set to zero if e.g. long long is not supported.
810 # (Note: this must come *after* type checks for the corresponding types!)
811 #############
812 AC_CHECK_SIZEOF(int)
813 AC_CHECK_SIZEOF(long int)
814 AC_CHECK_SIZEOF(long long int)
815 AC_CHECK_SIZEOF(off_t)
816 AC_CHECK_SIZEOF(void*)
820 # Apple OS X is a bit strange/braindead in that it always reports itself as i386, both for
821 # 32 and 64 bit builds (even with the 64 bit kernel!).
823 # To get the SSE support right we check for the size of void * that we detected above...
824 case "${host_vendor}-${host_os}" in
825   apple-darwin*)
826   if test $ac_cv_sizeof_voidp = 8; then
827      enable_ia32_sse=no;
828   else
829      enable_x86_64_sse=no;
830   fi
831   ;;
832   *) ;;
833 esac
838 #####
839 # Look for X
840 AC_PATH_XTRA
841 if test "$no_x" != "yes"; then
842   AM_CONDITIONAL(USE_X11,true)
843 else
844   AM_CONDITIONAL(USE_X11,false)
847 # GNU Scientific Library or not
848 AC_ARG_WITH(gsl,
849  [AC_HELP_STRING([--with-gsl],[Link to the GNU scientific library, ]
850                  [enables extra functions in analysis])],,with_gsl=no)
852 ######
853 PKG_GSL=""
854 GSL_LIBS=""
855 if test "$with_gsl" = "yes"; then
856   SAVED_LIBS="$LIBS"
857   AC_CHECK_HEADERS([gsl/gsl_version.h],[
858 # header found, check for libraries 
859   AC_CHECK_LIB(gslcblas,main,[
860 # gslcblas library found, check main lib
861   AC_CHECK_LIB(gsl,main,[
862 # everything need for gsl found
863   GSL_LIBS="-lgsl -lgslcblas"
864 #gsl has pkg-config support
865   PKG_GSL="gsl"
866   ],[:],[-lgslcblas])])])
867   LIBS="$SAVED_LIBS"
870 AC_SUBST(PKG_GSL)
871 AC_SUBST(GSL_LIBS)
873 ######
874 # Use OpenMM libraries
875 ######
876 AC_ARG_WITH(openmm,
877  [  --with-openmm                 Use the OpenMM libraries to run on GPUs],,with_openmm=no)
879 if test "$with_openmm" = "yes"; then
881   AC_PROG_CXX
882   CPPFLAGS="$CPPFLAGS -I$OPENMM_INSTALL_DIR/include"
883   INCLUDES="$INCLUDES -I$OPENMM_INSTALL_DIR/include"
884   LDFLAGS="$LDFLAGS -L$OPENMM_INSTALL_DIR/lib -lOpenMM"
885   #AC_CHECK_HEADERS([OpenMM.h],AC_CHECK_LIB(OpenMM,main))
886   #AC_CHECK_HEADERS([OpenMM.h],,AC_MSG_ERROR([Cannot find OpenMM.h file. Please set OPENMM_INSTALL_DIR.]))
887   AC_DEFINE([USE_OPENMM],,[Use OpenMM libraries to run on GPUs])
889 #  AS_CASE([${host_cpu}-${host_os}-${host_vendor}],
890 #    [i?86-linux*], [OPENMM_HOST=linux32],
891 #    [x86_64-linux*], [OPENMM_HOST=linux64],
892 #    [amd64-linux*], [OPENMM_HOST=linux64],
893 #    [i?86-darwin*-apple], [OPENMM_HOST=apple],
894 #    [OPENMM_HOST=""])
895 #  AC_SUBST([OPENMM_HOST])
898 AM_CONDITIONAL([USE_OPENMM],[test "$with_openmm" = "yes"])
901 AC_ARG_WITH(xml,
902  [AC_HELP_STRING([--without-xml],[do not link to the xml2 library,] 
903                  [disallows the use of certain file formats])],,with_xml=yes)
905 #########
906 # Check for libxml2, but it is optional, so dont stop
907 # if it isnt there.
908 PKG_XML=""
909 XML_LIBS=""
910 if test "$with_xml" = "yes"; then
911    SAVED_LIBS="$LIBS"
912    ac_save_CPPFLAGS="$CPPFLAGS"
913    CPPFLAGS="$ac_save_CPPFLAGS -I/usr/include/libxml2"
914    AC_CHECK_HEADERS([libxml/parser.h],AC_CHECK_LIB(xml2,main))
915    if test "$ac_cv_lib_xml2_main" = "yes"; then
916      INCLUDES="$INCLUDES -I/usr/include/libxml2"
917      PKG_XML="libxml-2.0"
918      XML_LIBS="-lxml2"
919      if test "$enable_all_static" = "yes"; then
920        LDFLAGS_RET=$LDFLAGS
921        LDFLAGS="-static $LDFLAGS"
922        LIBS_RET="$LIBS"
923        LIBS="$LIBS -lz"
924        AC_MSG_CHECKING(for broken libxml2)
925        AC_TRY_RUN([
926 #include <libxml/parser.h>
927 main() {
928   xmlInitParser();
929   return 0;
931        AC_MSG_RESULT([no]),[AC_MSG_RESULT([yes])
932        AC_MSG_ERROR([Your libxml2 is broken for static linking, recompile it without threads or build gromacs without libxml])],[-lz])
933        LDFLAGS=$LDFLAGS_RET
934        LIBS="$LIBS_RET"
935      fi
936    fi
937 # restore CPPFLAGS
938    CPPFLAGS="$ac_save_CPPFLAGS"
939    LIBS="$SAVED_LIBS"
941 AC_SUBST(PKG_XML)
942 AC_SUBST(XML_LIBS)
944 #### 
945 # And collect the f77 libs to the linker - on Solaris, f77 stuff must go first,
946 # and we need -L/usr/ucblib to find libucb... (stupid OS)
947 # On e.g. ibm the mass libraries must come before -lm... 
948 case "${host_cpu}-${host_os}" in
949   *-solaris*) 
950     LIBS="$FLIBS $LIBS" 
951     LDFLAGS="$LDFLAGS -L/usr/ucblib"
952     ;;
953   *) LIBS="$LIBS $FLIBS" ;;
954 esac
957 # add the Accelerate framework if enabled above.
958 # LDFLAGS might have been set in the CPU optimization, so we cant assign it directly before that.
959 LDFLAGS="$LDFLAGS $extra_LDFLAGS"
966 #####
967 # Checks for typedefs, structures, and compiler characteristics.
968 AC_C_CONST
969 AC_TYPE_SIZE_T
970 AC_STRUCT_TM
971 AC_C_INLINE
972 AC_C_RESTRICT
974 # AC_TYPE_UID_T is broken on Mac OS X, so use generic tests instead
975 AC_CHECK_TYPES([uid_t],[],[AC_DEFINE(uid_t, int, [Define to `int' if <sys/types.h> doesn't define.])],[[#include <sys/types.h>]])
976 AC_CHECK_TYPES([gid_t],[],[AC_DEFINE(gid_t, int, [Define to `int' if <sys/types.h> doesn't define.])],[[#include <sys/types.h>]])
978 AC_CHECK_TYPES([sig_atomic_t],[],[AC_DEFINE(sig_atomic_t, int, [Define to `int' (and hope it's atomic) if <signal.h> doesn't define it.])],[[#include <signal.h>]])
980     
983 # Test stuff for ia32 and x86_64 assembly, and add objects/libraries.
984 if test "$enable_ia32_sse" = "yes" -o "$enable_x86_64_sse" = "yes"; then
985   AC_MSG_CHECKING([whether your compiler can handle assembly files (*.s)])
987 # Use 64-bit registers (rsp/rbp) on x86_64
989 if test "$enable_x86_64_sse" = "yes"; then
990 cat > conftestasm.s << EOF
991 checkasm:
992         mov     %rsp, %rbp
993         ret
995 else
996 cat > conftestasm.s << EOF
997 checkasm:
998         movl    %esp, %ebp
999         ret
1002   if AC_TRY_COMMAND($CC $CFLAGS -c conftestasm.s); then
1003     if test -f conftestasm.o; then
1004       AC_MSG_RESULT([yes])
1005     else
1006       AC_MSG_RESULT([no])
1007       AC_MSG_ERROR([Upgrade your compiler (or disable assembly loops).])
1008     fi
1009   else
1010     AC_MSG_RESULT([no])
1011     AC_MSG_ERROR([Upgrade your compiler (or disable assembly loops).])
1012   fi
1014 # ok, cc understands assembly.
1016 # If we are using double precision we need SSE2
1017   if test "$enable_float" = "no"; then
1018 #   test SSE2 on ia32:
1019     if test "$enable_ia32_sse" = "yes"; then
1020       AC_MSG_CHECKING([whether as fully supports ia32 SSE2])
1021 cat > conftest.s << EOF
1022 checkasm:
1023         emms
1024         movapd 32(%esi,%edx,8),%xmm4
1025         emms
1026         ret
1028       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
1029         AC_MSG_RESULT([yes])
1030       else
1031         AC_MSG_RESULT([no])
1032         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
1033       fi
1034       AC_DEFINE([GMX_IA32_SSE2],,[Double-precision SSE2 instructions on ia32])
1035     fi
1036 #   test SSE2 on X86_64:
1037     if test "$enable_x86_64_sse" = "yes"; then
1038       AC_MSG_CHECKING([whether as fully supports X86_64 SSE2])
1039 cat > conftest.s << EOF
1040 checkasm:
1041         emms
1042         movapd 32(%rsi,%rdx,8),%xmm4
1043         emms
1044         ret
1046       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
1047         AC_MSG_RESULT([yes])
1048       else
1049         AC_MSG_RESULT([no])
1050         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
1051       fi
1052       AC_DEFINE([GMX_X86_64_SSE2],,[Double-precision SSE2 instructions on X86_64])
1053     fi
1054   else
1055 # end of double precision testing, now do single.
1056     if test "$enable_ia32_sse" = "yes"; then
1057       AC_MSG_CHECKING([whether as fully supports ia32 SSE])
1058 cat > conftest.s << EOF
1059 checkasm:
1060         emms
1061         movaps 32(%esi,%edx,8),%xmm4
1062         emms
1063         ret
1065       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
1066         AC_MSG_RESULT([yes])
1067       else
1068         AC_MSG_RESULT([no])
1069         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
1070       fi
1071       AC_DEFINE([GMX_IA32_SSE],,[Single-precision SSE instructions on ia32])
1072     fi
1073 #   test SSE2 on X86_64:
1074     if test "$enable_x86_64_sse" = "yes"; then
1075       AC_MSG_CHECKING([whether as fully supports X86_64 SSE instructions])
1076 cat > conftest.s << EOF
1077 checkasm:
1078         emms
1079         movaps 32(%rsi,%rdx,8),%xmm4
1080         emms
1081         ret
1083       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
1084         AC_MSG_RESULT([yes])
1085       else
1086         AC_MSG_RESULT([no])
1087         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
1088       fi
1089       AC_DEFINE([GMX_X86_64_SSE],,[Single-precision SSE instructions on X86_64])
1090     fi
1091   fi
1095 # Test stuff for ia64 assembly
1097 # Nothing to test right now.
1100   
1103 # Test altivec support.
1105 if test "$enable_ppc_altivec" = "yes"; then
1106   if test "$enable_float" = "no"; then
1107     AC_MSG_WARN([PowerPC Altivec loops can only be used in single precision - disabling])
1108     enable_ppc_altivec=no
1109   else 
1110     # On FSF (vanilla) GCC we must include altivec.h, and on apple we 
1111     # should NOT do it after using -faltivec. Go figure...
1112     case "${host_os}" in
1113     darwin*)                            
1114         # do nothing on Apple systems
1115        ;;
1116     *)
1117         AC_CHECK_HEADERS([altivec.h])
1118        ;;
1119     esac
1121     AC_MSG_CHECKING([whether the compiler supports altivec extensions])
1122     AC_TRY_COMPILE([],[
1123 #ifndef __VEC__
1124 choke_me
1125 #endif
1127     AC_MSG_RESULT([yes])
1128     AC_DEFINE([GMX_PPC_ALTIVEC],,[Use PowerPC Altivec inner loops])],[
1129       AC_MSG_RESULT([no])
1130       AC_MSG_WARN([no altivec support found - On recent PowerPC CPUs]
1131 [you can get a huge performance gain by using an altivec-enabled compiler.]
1132 [On OS X, you need GCC>=3.3, or the IBM compilers. If you are using standard]
1133 [GCC, you need at least version 4.0])
1134       enable_ppc_altivec=no])
1135   fi  
1138 if test "$enable_ia64_asm" = "yes"; then
1139   AC_DEFINE(GMX_IA64_ASM,,[Use ia64 assembly tuned for Itanium2])
1140   AC_DEFINE(DISABLE_WATER_NLIST,,[Turn off all water neighborlist optimization])
1141   AC_DEFINE(DISABLE_WATERWATER_NLIST,,[Turn off water-water neighborlist optimization only])
1144 if test "$enable_bluegene" = "yes"; then
1145   AC_DEFINE(GMX_BLUEGENE,,[Use assembly intrinsics kernels for BlueGene])
1149 # Add the appropriate assembly loops 
1151 AM_CONDITIONAL([GMX_IA32_SSE],[test "$enable_ia32_sse" = "yes" -a "$enable_float" = "yes"])
1152 AM_CONDITIONAL([GMX_IA32_SSE2],[test "$enable_ia32_sse" = "yes" -a "$enable_float" = "no"])
1153 AM_CONDITIONAL([GMX_X86_64_SSE],[test "$enable_x86_64_sse" = "yes" -a "$enable_float" = "yes"])
1154 AM_CONDITIONAL([GMX_X86_64_SSE2],[test "$enable_x86_64_sse" = "yes" -a "$enable_float" = "no"])
1155 AM_CONDITIONAL([GMX_FORTRAN],[test "$enable_fortran" = "yes"])
1156 AM_CONDITIONAL([GMX_PPC_ALTIVEC],[test "$enable_ppc_altivec" = "yes" -a "$enable_float" = "yes"])
1157 AM_CONDITIONAL([GMX_IA64_ASM],[test "$enable_ia64_asm" = "yes"])
1158 AM_CONDITIONAL([GMX_BLUEGENE],[test "$enable_bluegene" = "yes"])
1159 AM_CONDITIONAL([GMX_POWER6],[test "$enable_power6" = "yes"])
1162 #############
1163 # Check integer endian
1164 #############
1165 AC_C_BIGENDIAN([AC_DEFINE([GMX_INTEGER_BIG_ENDIAN],,[Integer byte order is big endian.])],[],[
1166 AC_MSG_ERROR([Cannot determine endian in compiled output])])
1167 # Little endian implied if GMX_INTEGER_BIG_ENDIAN not defined in source.
1171 case "${host_cpu}" in
1172    i?86) 
1173          # Check if inline assembly works
1174          AC_MSG_CHECKING(if the compiler supports gcc inline assembly)
1175       AC_TRY_LINK([],[float f;int i; asm("fld %1\nfistpl %0\n" : "=m" (*&i) : "f" (f));],[AC_MSG_RESULT(yes)
1176 AC_DEFINE(GMX_X86_GCC_INLINE_ASM,,[Enable x86 gcc inline assembly])],[AC_MSG_RESULT(no)])
1177          # Check for MSVC inline assembly
1178      AC_MSG_CHECKING(if the compiler supports MSVC inline assembly)
1179       AC_TRY_LINK([],[float f;int i; _asm { fld f } ; _asm { fistpl i };],[AC_MSG_RESULT(yes)
1180 AC_DEFINE(GMX_X86_MSVC_INLINE_ASM,,[Enable x86 MSVC inline assembly])],[AC_MSG_RESULT(no)])
1181         ;;              
1182    *) ;;
1183 esac
1186 ############
1187 # Check dlopen
1188 ###########
1189 if test "$with_dlopen" = "yes"; then
1190       AC_MSG_CHECKING(if dlopen supported)
1191       CFLAGS_RET=$CFLAGS
1192       #LDFLAGS="$lt_cv_dlopen_libs $LDFLAGS" #can't make the macro, which is getting lt_cv_dlopen_libs, to work
1193       LDFLAGS_RET=$LDFLAGS
1194       if test "$enable_all_static" = "yes"; then  #make sure we test also whether it works static
1195          LDFLAGS="$LDFLAGS -static"
1196       fi
1197       CFLAGS="-I$srcdir/include -DGMX_DLOPEN $CFLAGS"
1198       AC_TRY_LINK([#include "$srcdir/src/gmxlib/vmddlopen.c"],,[AC_MSG_RESULT([yes])\
1199         AC_DEFINE(GMX_DLOPEN,,[Compile with dlopen])],AC_MSG_RESULT([no]))
1200       CFLAGS=$CFLAGS_RET
1201       LDFLAGS=$LDFLAGS_RET
1207 ########################################################################
1208 # Final output stage
1209 ########################################################################
1210 AS="$CC"
1211 AC_SUBST(ASFLAGS)
1212 AC_SUBST(AS)
1213 AC_SUBST(INCLUDES)          # should be automatic, but doesnt seem to be?
1215 # To tell libraries apart, we use four versions of the name. For instance, libgmx:
1216 # libgmx                single prec, no mpi.
1217 # libgmx_d              double prec, no mpi.
1218 # libgmx_mpi            single prec, mpi.
1219 # libgmx_mpi_d          double prec, mpi.
1220 # However, the non-suffixed names are linked to the _mpi and/or _d suffixed
1221 # ones upon installation if that is the only version available.
1223 if test "$enable_mpi" = "yes"; then
1224   LIBSUFFIX="_mpi"
1226 if test "$enable_float" = "no"; then
1227   LIBSUFFIX="${LIBSUFFIX}_d"
1229 AC_SUBST(LIBSUFFIX) 
1231 # Unless the user has explicitly requested a prefix/suffix/transform, we
1232 # use _d on double precision files. Don't add anything for mpi, but at the
1233 # end we tell the user it is possible and smart to do in some cases!
1234 if test "$program_transform_name" = "s,x,x,"; then
1235   name_transform_provided=no;
1236   if test "$enable_float" = "no"; then
1237     program_transform_name="s,\$\$,_d,"
1238   fi
1239 else
1240   name_transform_provided=yes;
1244 # Use a variable for RPM - this way it can be 
1245 # overridden with make RPM=rpm3 rpm
1246 RPM=rpm
1247 AC_SUBST(RPM)
1249 if test "$enable_fahcore" = "yes"; then  
1250   CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/../corewrap -include swindirect.h -DFULLINDIRECT -DUSE_FAH_XDR"  
1251   if test "$enable_mpi" = "yes"; then 
1252     CFLAGS="$CFLAGS -DMPI"  
1253   fi
1255 AM_CONDITIONAL([GMX_FAHCORE],[test "$enable_fahcore" = "yes"])
1258 if test "$enable_all_static" = "yes"; then
1259   LDFLAGS="$LDFLAGS -all-static"
1262 # we have asm source, so this is necessary for automake 1.6
1263 CCAS=$CC
1264 CCASFLAGS=$CFLAGS
1266 AC_SUBST(CCAS)
1267 AC_SUBST(CCASFLAGS)
1269 AC_CONFIG_FILES([ Makefile ])
1270 AC_CONFIG_FILES([ src/Makefile ])
1271 AC_CONFIG_FILES([ src/gmxlib/Makefile ])
1272 AC_CONFIG_FILES([ src/gmxlib/libgmx${LIBSUFFIX}.pc:src/gmxlib/libgmx.pc.in ])
1273 AC_CONFIG_FILES([ src/gmxlib/gmx_blas/Makefile ])
1274 AC_CONFIG_FILES([ src/gmxlib/gmx_lapack/Makefile ])
1275 AC_CONFIG_FILES([ src/gmxlib/selection/Makefile ])
1276 AC_CONFIG_FILES([ src/gmxlib/statistics/Makefile ])
1277 AC_CONFIG_FILES([ src/gmxlib/trajana/Makefile ])
1278 AC_CONFIG_FILES([ src/gmxlib/thread_mpi/Makefile ])
1279 AC_CONFIG_FILES([ src/gmxlib/nonbonded/Makefile ])
1280 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_c/Makefile ])
1281 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia32_sse/Makefile ])
1282 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia32_sse2/Makefile ])
1283 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_x86_64_sse/Makefile ])
1284 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_x86_64_sse2/Makefile ])
1285 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ppc_altivec/Makefile ])
1286 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia64_single/Makefile ])
1287 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia64_double/Makefile ])
1288 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_bluegene/Makefile ])
1289 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_power6/Makefile ])
1290 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_f77_single/Makefile ])
1291 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_f77_double/Makefile ])
1292 AC_CONFIG_FILES([ include/Makefile ])
1293 AC_CONFIG_FILES([ include/types/Makefile ])
1294 AC_CONFIG_FILES([ include/thread_mpi/Makefile ])
1295 AC_CONFIG_FILES([ include/thread_mpi/atomic/Makefile ])
1296 AC_CONFIG_FILES([ src/mdlib/Makefile ])
1297 AC_CONFIG_FILES([ src/mdlib/libmd${LIBSUFFIX}.pc:src/mdlib/libmd.pc.in ])
1298 AC_CONFIG_FILES([ src/kernel/Makefile ])
1299 AC_CONFIG_FILES([ src/kernel/libgmxpreprocess${LIBSUFFIX}.pc:src/kernel/libgmxpreprocess.pc.in ])
1300 AC_CONFIG_FILES([ src/tools/Makefile ])
1301 AC_CONFIG_FILES([ src/tools/libgmxana${LIBSUFFIX}.pc:src/tools/libgmxana.pc.in ])
1302 AC_CONFIG_FILES([ src/ngmx/Makefile ])
1303 AC_CONFIG_FILES([ src/contrib/Makefile ])
1304 AC_CONFIG_FILES([ scripts/Makefile ])
1305 AC_CONFIG_FILES([ admin/Makefile ])
1306 AC_CONFIG_FILES([ share/Makefile ])
1307 AC_CONFIG_FILES([ share/tutor/Makefile ])
1308 AC_CONFIG_FILES([ share/tutor/gmxdemo/Makefile ])
1309 AC_CONFIG_FILES([ share/tutor/nmr1/Makefile ])
1310 AC_CONFIG_FILES([ share/tutor/nmr2/Makefile ])
1311 AC_CONFIG_FILES([ share/tutor/water/Makefile ])
1312 AC_CONFIG_FILES([ share/tutor/mixed/Makefile ])
1313 AC_CONFIG_FILES([ share/tutor/methanol/Makefile ])
1314 AC_CONFIG_FILES([ share/tutor/speptide/Makefile ])
1315 AC_CONFIG_FILES([ share/template/Makefile ])
1316 AC_CONFIG_FILES([ share/top/Makefile ])
1317 AC_CONFIG_FILES([ share/top/gmx.ff/Makefile ])
1318 AC_CONFIG_FILES([ share/top/gmx2.ff/Makefile ])
1319 AC_CONFIG_FILES([ share/top/encadv.ff/Makefile ])
1320 AC_CONFIG_FILES([ share/top/encads.ff/Makefile ])
1321 AC_CONFIG_FILES([ share/top/oplsaa.ff/Makefile ])
1322 AC_CONFIG_FILES([ share/top/gromos43a1.ff/Makefile ])
1323 AC_CONFIG_FILES([ share/top/gromos43a2.ff/Makefile ])
1324 AC_CONFIG_FILES([ share/top/gromos45a3.ff/Makefile ])
1325 AC_CONFIG_FILES([ share/top/gromos53a5.ff/Makefile ])
1326 AC_CONFIG_FILES([ share/top/gromos53a6.ff/Makefile ])
1327 AC_CONFIG_FILES([ share/top/charmm27.ff/Makefile ])
1328 AC_CONFIG_FILES([ share/top/amber94.ff/Makefile ])
1329 AC_CONFIG_FILES([ share/top/amber96.ff/Makefile ])
1330 AC_CONFIG_FILES([ share/top/amberGS.ff/Makefile ])
1331 AC_CONFIG_FILES([ share/top/amber99.ff/Makefile ])
1332 AC_CONFIG_FILES([ share/top/amber99sb.ff/Makefile ])
1333 AC_CONFIG_FILES([ share/top/amber99sb-ildn.ff/Makefile ])
1334 AC_CONFIG_FILES([ share/top/amber03.ff/Makefile ])
1335 AC_CONFIG_FILES([ share/html/Makefile ])
1336 AC_CONFIG_FILES([ share/html/images/Makefile ])
1337 AC_CONFIG_FILES([ share/html/online/Makefile ])
1338 AC_CONFIG_FILES([ man/Makefile man/man1/Makefile man/man7/Makefile ])
1339 AC_CONFIG_FILES([ Doxyfile ])
1340 AC_OUTPUT
1348 #########################################################
1349 # Echo some important info, to avoid stupid mistakes
1352 if test "$enable_float" = "no" -a "$name_transform_provided" = "no"; then
1353   echo ""
1354   echo "* You are compiling a double precision version of Gromacs -"
1355   echo "  program names will be suffixed with _d to avoid overwriting single"
1356   echo "  precision files. You can override it with --program-suffix"
1359 if test "$name_transform_provided" = "no" -a "$enable_mpi" = "yes"; then
1360   echo ""
1361   echo "* Seems you are compiling with MPI support. You can install the MPI-"
1362   echo "  enabled programs with suffixed names to have both MPI and non-MPI"
1363   echo "  versions. This is useful e.g. on supercomputers where you usually"
1364   echo "  cannot run MPI-linked programs on the login node."
1365   echo "  Set a suffix with e.g. --program-suffix=_mpi (or _mpi_d for double)."
1366   echo "  You only need MPI for mdrun, so if you already have non-MPI stuff"
1367   echo "  installed you can issue make mdrun; make install-mdrun."
1370 if test "$enable_shared" = "no"; then
1371   echo ""
1372   echo "* On most platforms you can save 10X space with dynamic libraries, although"
1373   echo "  the binaries might be less portable. Why not try --enable-shared ?"
1374 fi  
1377 if test "$tmpi_atomics" = "no"; then
1378   echo ""
1379   echo "* This compiler+CPU combination doesn't have working atomic operations."
1380   echo "  Thread support will be unbearably slow: the default number of threads"
1381   echo "  is set to 1."
1382   echo "  Atomics should work on all but the most obscure CPU+compiler"
1383   echo "  combinations; if your system is not obscure (like, for example, x86"
1384   echo "  with gcc) please contact the developers."
1385   echo ""