Merge branch 'master' of git://git.gromacs.org/gromacs
[gromacs/adressmacs.git] / configure.ac
blob0b0633b0a9952a210ada975c50f6af98a6aee9b7
1 #######################################################################
2 # Process this file wth autoconf to produce a configure script.
3 #######################################################################
4  
5 AC_PREREQ(2.50)
6 AC_INIT(gromacs, 4.0.99-dev-20100305, [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:1: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
133 ### ia64 assembly code
134 AC_ARG_ENABLE(ia64_asm,
135               [AC_HELP_STRING([--disable-ia64-asm],
136                               [Don't build assembly loops on ia64])],,enable_ia64_asm=yes)
137 case "${host_cpu}" in
138    ia64) ;;
139    *) enable_ia64_asm=no ;;
140 esac
143 # IBM Power6-specific optimization
144 AC_ARG_ENABLE(power6,
145              [AC_HELP_STRING([--enable-power6],
146                              [Use IBM Pwr6/PPC440/PPC450-specific F77 kernels])],,enable_power6=no)
147 # Turn off generic fortran loops if we are using power6-specific optimization
148 if test "$enable_power6" = "yes"; then
149   enable_fortran=no;
152 AC_ARG_ENABLE(bluegene,
153               [AC_HELP_STRING([--enable-bluegene],
154                               [Build assembly intrinsics kernels on bluegene])],,enable_bluegene=no)
157 ### Optimize for host cpu version
158 AC_ARG_ENABLE(cpu-optimization,     
159               [AC_HELP_STRING([--disable-cpu-optimization],
160                               [No detection or tuning flags for cpu version])],, enable_cpu_optimization=yes)
163 ### Do software 1/sqrt(x)                                                                                                            
164 AC_ARG_ENABLE(software-invsqrt,
165               [AC_HELP_STRING([--disable-software-invsqrt],
166                               [No software 1/sqrt (disabled on sgi,ibm,ia64)])],,
167 [case "${host_cpu}-${host_os}" in
168   mips*-irix* | rs6000*-aix* | powerpc*-aix | ia64*-*) enable_software_invsqrt=no ;;
169   *) enable_software_invsqrt=yes ;;
170 esac])
171 if test "$enable_software_invsqrt" = "yes"; then
172   AC_DEFINE(GMX_SOFTWARE_INVSQRT,,[Use the GROMACS software 1/sqrt(x)])
174 AM_CONDITIONAL([GMX_SOFTWARE_INVSQRT],[test "$enable_software_invsqrt" = "yes"])
176 AC_ARG_ENABLE(fahcore,
177               [AC_HELP_STRING([--enable-fahcore],
178                               [Create a library with mdrun functionality])],, enable_fahcore=no)
182 # The four options below used to improve code scheduling, but the newest CPUs can usually rearrange
183 # instructions dynamically at runtime, so they might not make much difference now:
186 AC_ARG_ENABLE(all-static,
187               [AC_HELP_STRING([--enable-all-static],
188                               [Make completely static binaries])],, enable_all_static=no)
189 # Dont add the -all-static flag until after the compiler test.
191 AC_ARG_ENABLE(cgunits,
192               [AC_HELP_STRING([--enable-cgunits],
193                               [Build a gromacs with uses reduced units])],,enable_cgunits=no)
195 if test "$enable_cgunits" = "yes"; then
196   AC_DEFINE(CGUNITS,,[Use reduced (CG) units])
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])
273 AC_ARG_WITH(dlopen,
274             [AC_HELP_STRING([--without-dlopen],
275                             [do not compile with dlopen, needed to read VMD]
276                             [supported file formats])],,with_dlopen=yes)
280    
282 ############################################################
283 # Add some debug info: Who is building, and on what machine?
284 ############################################################
285 AC_DEFINE_UNQUOTED([BUILD_TIME],["`date`"],[Date and time for build])
286 AC_DEFINE_UNQUOTED([BUILD_USER],["`whoami`@`hostname`"],[User doing build])
287 AC_DEFINE_UNQUOTED([BUILD_MACHINE],["`uname -srm`"],[Hardware and OS version for build host])
290 ############################################################
291 # Checks for requirements for version information generation
292 ############################################################
293 generate_version=no
294 if test -d $srcdir/.git ; then
295     AC_CHECK_PROG(have_git, git, yes, no)
296     if test "$have_git" = "yes" ; then
297         AC_MSG_CHECKING(for git >= 1.5.1)
298         if test "`git --version`" \< "git version 1.5.1" ; then
299             AC_MSG_RESULT(no)
300         else
301             AC_MSG_RESULT(yes)
302             generate_version=yes
303             AC_DEFINE(USE_VERSION_H,,[Use generated version info])
304         fi
305     fi
306     if test "$generate_version" = "no" ; then
307         AC_MSG_WARN([No compatible git version found, won't be able to generate proper development version information.])
308     fi
310 AM_CONDITIONAL([USE_VERSION_H],[test "$generate_version" = "yes"])
313 ############################################################
314 # Checks for programs
315 ############################################################
317 # normally we use the default compiler, but on alpha/linux we try the compaq ones first
318 case "${host_cpu}-${host_os}" in
319   alpha*-linux*)
320     cc_names="ccc cc gcc"
321     f77_names="fort f77 g77"
322     ;;
323   *) 
324     cc_names="cc icc xlc gcc"
325     f77_names="f77 ifort xlf xlf77 cf77 fl32 g77 fort77 f90 xlf90 pgf77 cf77 fort fort77 pgf90"
326     ;;
327 esac
328 # the (non-mpi) c compiler, which is also used for programs executed during build stage
329 AC_PROG_CC( $cc_names )
330 # Check for environment variable CC_FOR_BUILD before overwriting it
331 if test -z "$CC_FOR_BUILD"; then
332   CC_FOR_BUILD=$CC
334 AC_SUBST(CC_FOR_BUILD) 
336 if test "$enable_fortran" = "yes"; then 
337   AC_PROG_F77( $f77_names )
338   if test -z "$F77"; then
339     AC_MSG_ERROR([No fortran compiler found])
340   fi
343 AM_PROG_AS( $CC )
345 # if we are using mpi, also get an MPICC. We cannot set that in the PROG_CC macro
346 # above, since autoconf checks that the created file can be executed. This would
347 # fail on platforms where MPI executables can only be run through a batchqueue.
349 if test "$enable_mpi" = "yes"; then
350   enable_threads="no"
351   AC_CHECK_PROGS(MPICC, mpxlc mpicc mpcc hcc, $CC)
352 # now change the normal cc to the MPI one - see the comment above.
353   CC=$MPICC
354   CXX=$MPICC
355   AC_MSG_CHECKING([whether the MPI cc command works]) # be paranoid
356   AC_TRY_LINK([#include <mpi.h>],[int argc; char **argv; MPI_Init(&argc,&argv);],
357 AC_MSG_RESULT([yes]),AC_MSG_ERROR([Cannot compile and link MPI code with $CC]))
358   AC_DEFINE(GMX_MPI,,[Make a parallel version of GROMACS using MPI])
359   AC_DEFINE(GMX_LIB_MPI,,[Use a real MPI library])
361   if test "$enable_mpi_in_place" = "yes"; then
362     # not all MPIs support MPI_IN_PLACE:
363     AC_MSG_CHECKING([for MPI_IN_PLACE in collective operations])
364     AC_TRY_COMPILE([
365 #include <mpi.h>
366 void test(void)
368     void *buf;
369     MPI_Allreduce(MPI_IN_PLACE, buf, 10, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD);
371     ],,[
372         AC_MSG_RESULT([yes])
373         AC_DEFINE(MPI_IN_PLACE_EXISTS,[],[MPI_IN_PLACE available for collective operations])
374     ],[
375         AC_MSG_RESULT([no])
376     ]) 
377   fi
379 # on the cray xt3 we have to tell autoconf that we 
380 # are actually cross-compiling even if the architecture
381 # of host and target are the same. so we enforce 
382 # cross-compilation if __QK_USER__ is defined
383   AC_MSG_CHECKING([for catamount])
384   AC_TRY_COMPILE([
385 #if defined __QK_USER__
386 #else
387 #error not catamount
388 #endif
389 ],,[
390   AC_MSG_RESULT([yes])
391   cross_compiling=yes 
392   AC_DEFINE(GMX_CRAY_XT3,[],[Enable special hacks for Cray XT3])
393   AC_DEFINE(GMX_NO_SYSTEM,[],[Ignore calls to system(3)])
394   AC_DEFINE(GMX_NO_NICE,[],[Ignore calls to nice(3)])
395   AC_DEFINE(GMX_BROKEN_CALLOC,[],[Don't use calloc(3)])
396   extra_LDFLAGS="$extra_LDFLAGS -lgmalloc -lacml"
398   AC_MSG_RESULT([no])
400 # end of "$enable_mpi" = "yes"
404 AH_TEMPLATE([F77_OR_C_FUNC],
405             [Set to F77_FUNC(name,NAME) if Fortran used, otherwise 'name' for C.])
406 AH_TEMPLATE([F77_OR_C_FUNC_],
407             [Set to F77_FUNC_(name,NAME) if Fortran used, otherwise 'name' for C.])
411 if test "$enable_fortran" = "yes"; then
412   AC_F77_LIBRARY_LDFLAGS
413   AC_F77_WRAPPERS
414   AC_DEFINE([F77_OR_C_FUNC(name,NAME)],[F77_FUNC(name,NAME)])
415   AC_DEFINE([F77_OR_C_FUNC_(name,NAME)],[F77_FUNC_(name,NAME)])
416 else
417   AC_DEFINE([F77_OR_C_FUNC(name,NAME)],[name])
418   AC_DEFINE([F77_OR_C_FUNC_(name,NAME)],[name])
423 AC_PROG_CPP
424 # Needed by libtool scripts?
425 AC_PROG_EGREP
427 if test "$enable_cpu_optimization" = "yes"; then
428   ACX_DETECT_GMXCPU
429 else
430   gmxcpu=""
432 ACX_COMPILER_MAXOPT
435 # We've postponed the threads check because we need to check with the right
436 # compilers/flags 
437 if test "$enable_threads" = "yes"; then 
438   if test "$enable_mpi" = "yes"; then
439     AC_MSG_ERROR([Cannot use both threads and MPI - yet.])
440   fi
441   if test "$with_fft" = "fftw2"; then
442     AC_MSG_ERROR([fftw2 can't be used with threads. Use fftw3 or mkl.])
443   fi 
444   AC_CHECK_HEADERS(unistd.h)
445   AC_CHECK_HEADERS(sys/time.h)
446   AC_CHECK_HEADERS(sched.h)
447   AC_CHECK_FUNCS(sysconf)
449   # for now we just assume pthreads
450   ACX_PTHREAD(,AC_MSG_ERROR([Cannot find POSIX threads - required for thread support using configure!]))
451   LIBS="$PTHREAD_LIBS $LIBS"
452   CFLAGS="$CFLAGS $PTHREAD_CFLAGS -I$srcdir/include"
453   CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS -I$srcdir/include"
454   CC="$PTHREAD_CC "
455   AC_DEFINE(THREAD_PTHREADS,,[Use pthreads for thread_mpi multithreading])
457   # profiling
458   AC_ARG_ENABLE(tmpi-profiling,
459               [AC_HELP_STRING([--enable-tmpi-profiling],
460               [Enables profiling of thread_mpi calls and wait times])],,
461               enable_tmpi_profiling=no)
462   if test "x$enable_tmpi_profiling" = "xyes"; then
463     AC_DEFINE(TMPI_PROFILE,,[Enable profiling for call and wait times])
464   fi
466   # check the atomics
467   AC_MSG_CHECKING(if atomic operations are supported)
468   CFLAGS_RET="$CFLAGS"
469   CXXFLAGS_RET="$CXXFLAGS"
470   CFLAGS="$CFLAGS -I$srcdir/include -DTMPI_CHECK_ATOMICS"
471   CXXFLAGS="$CXXFLAGS -I$srcdir/include -DTMPI_CHECK_ATOMICS"
472   # this sets a variable 'tmpi_atomics' to 'yes' if there are atomics. 
473   AC_COMPILE_IFELSE([#include "thread_mpi/atomic.h" ],
474                       [AC_MSG_RESULT(yes); tmpi_atomics=yes],
475                       [AC_MSG_WARN(
476 [No atomics.
478 This compiler+CPU combination doesn't have working atomics.
479 Thread support will be unbearably slow: disable threads.
481 Atomics should work on all but the most obscure CPU+compiler combinations;
482 if your system is not obscure -- like, for example, x86 with gcc --  please
483 contact the developers.
484 ]); tmpi_atomics=no])
485   CFLAGS="$CFLAGS_RET"
486   CXXFLAGS="$CXXFLAGS_RET"
488   AC_DEFINE(GMX_THREADS,,[Use threads for parallelization])
489   AC_DEFINE(GMX_MPI,,[Make a parallel version of GROMACS using MPI])
490   AM_CONDITIONAL(THREAD_PARALLEL,true)
491 else
492   AM_CONDITIONAL(THREAD_PARALLEL,false)
497 #############
498 # Check integer endian
499 #############
500 AC_C_BIGENDIAN([AC_DEFINE([GMX_INTEGER_BIG_ENDIAN],,[Integer byte order is big endian.])],[],[
501 AC_MSG_ERROR([Cannot determine endian in compiled output])])
502 # Little endian implied if GMX_INTEGER_BIG_ENDIAN not defined in source.
504 #############
505 # Make sure size_t can hold pointers.
506 # On some Nec machines, you reportedly need to specify a flag for size_t to be 64 bits wide.
507 #############
508 AC_MSG_CHECKING([that size_t can hold pointers])
509 AC_TRY_COMPILE([
510 #include <stdlib.h>
511 #include <stddef.h>
512 ],[int chk[sizeof(size_t)-sizeof(int *)+1];],AC_MSG_RESULT([yes]),[
513    AC_MSG_ERROR([size_t is smaller than int*. Check if your compiler needs a flag to make it 64 bit.])])
516 #############
517 # Check that SIGUSR1 is defined
518 #############
519 AC_MSG_CHECKING([for SIGUSR1])
520 AC_TRY_COMPILE([#include <signal.h>],[int i=SIGUSR1;],[
521 AC_MSG_RESULT([yes])
522 AC_DEFINE(HAVE_SIGUSR1,,[SIGUSR1 supported and defined])
523 ],AC_MSG_RESULT([no]))
525 #############
526 # Check if pipes are supported
527 #############
528 AC_MSG_CHECKING([for pipes])
529 AC_TRY_COMPILE([#include <stdio.h>],[
530 FILE *pipe=popen("/tmp/pipe","r");
532 AC_MSG_RESULT([yes])
533 AC_DEFINE(HAVE_PIPES,,[Pipes (popen/pclose) supported])
534 ],AC_MSG_RESULT([no]))
538 #############
539 # Check floating-point format and endian
540 #############
541 ACX_FLOAT_FORMAT
544 AC_PROG_INSTALL
545 AC_PROG_LN_S
546 AC_PROG_MAKE_SET
547 AC_LIBTOOL_WIN32_DLL
548 AC_PROG_LIBTOOL
549 AC_SYS_LARGEFILE
551 # Use our own version of AC_FUNC_FSEEKO from autoconf 2.63 instead
552 # of the broken one we might get from autoconf 2.61.
553 ACX_FUNC_FSEEKO_FIXED
558 ############################################################################
559 # Checks for libraries.
560 ############################################################################
562 # Don't add math library for intel compilers
563 if $CC -V 2>&1 | grep 'Intel Corporation' > /dev/null 2>&1; then
564   AC_MSG_NOTICE([Using built-in math library with intel compiler])
565 else
566   AC_CHECK_LIB(m,sqrt,,AC_MSG_ERROR([No math library found]))
569 #####
570 # Disable MASS support for now.
571 #####
574 case "$with_fft" in
575 fftw2)
576   if test "$enable_float" = "yes"; then
577     sizeof_real=4
578   else
579     sizeof_real=8
580   fi
581   ACX_CHECK_FFTW2(fftw,$sizeof_real)
582   ACX_CHECK_FFTW2(rfftw,$sizeof_real)
584   case ${ac_fftw_savedprefix} in
585    d) AC_DEFINE(FFTW2_NAME_DFFTW,,[Use the d prefix on fftw2 includes]) ;;
586    s) AC_DEFINE(FFTW2_NAME_SFFTW,,[Use the s prefix on fftw2 includes]) ;;
587    *) AC_DEFINE(FFTW2_NAME_FFTW,,[Dont use any prefix on fftw2 includes]) ;;
588   esac
590   AC_DEFINE(GMX_FFT_FFTW2,,[Use FFTW2 FFT library])
592   ;; #  end of fftw2 check
594 fftw3) # Much simpler check than fftw2
595 # Check for header <fftw3.h> AC_CHECK_HEADERS doesnt work, since we must
596 # use mpicc to get includes - cpp isnt always the same compiler.
597 AC_MSG_CHECKING([for fftw3.h])
598 AC_TRY_COMPILE([#include<fftw3.h>],,[
599 # ok, look for library file too
600 AC_MSG_RESULT(yes)
601 if test "$enable_float" = "yes"; then
602   AC_CHECK_LIB([fftw3f],main,,AC_MSG_ERROR([Cannot find fftw3f library]))
603   PKG_FFTW="fftw3f"
604 else
605   AC_CHECK_LIB([fftw3],main,,AC_MSG_ERROR([Cannot find fftw3 library]))
606   PKG_FFTW="fftw3"
608   AC_DEFINE(GMX_FFT_FFTW3,,[Use FFTW3 FFT library])
610 # not ok, echo a warning
611 AC_MSG_ERROR(
612 [Cannot find the default external FFT library (fftw3).
613 Other alternatives are 'fftw2', or 'mkl' for Intel MKL.
614 You are STRONGLY recommended to use one of these - fftw is free.
616 Use CPPFLAGS and LDFLAGS if the library is installed in a 
617 non-standard location. (see FAQ at http://www.gromacs.org)
618                                                           
619 If you dont care about performance you can also specify 'fftpack'
620 to use a slower set of FFTs built into Gromacs. 
621 (Just install FFTW3 unless you really know what you are doing).
624   AC_SUBST(PKG_FFTW)
625   ;;
627 mkl*)
628 ###########
629 # Intel Math Kernel Library version 6 and later.
630 ##########
631 AC_MSG_CHECKING([for mkl_dfti.h])
632 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.]\
634 ## Check for library
635 #  AC_CHECK_LIB([guide],main,,AC_MSG_ERROR([Cannot find libguide (Intel MKL)]))
636 #  AC_CHECK_LIB([mkl],DftiComputeForward,,
637 #    AC_MSG_ERROR([Cannot find Intel Math Kernel Library >= 6.0]))
638   # first check for older MKLs
639   AC_CHECK_LIB([mkl],DftiComputeForward,,[have_mkl="no"])
640   if test "$have_mkl" == "no"; then
641     # we assume it's a new MKL
642     LIBS="$LIBS -liomp5 -lmkl_sequential -lmkl_core"
643     LMKL=" -liomp5 -lmkl_sequential -lmkl_core"
644     AC_CHECK_LIB([mkl_intel_lp64],DftiComputeForward,,[have_mkl10_64="no"])
645     if test "$have_mkl10_64" == "no"; then
646       AC_CHECK_LIB([mkl_intel],DftiComputeForward,,[have_mkl10_32="no"])
647       if test "$have_mkl10_32" == "no"; then
648         AC_MSG_ERROR([Cannot find Intel Math Kernel Library >= 6.0])
649       fi
650     fi
651   fi
652   AC_DEFINE(GMX_FFT_MKL,,[Use Intel MKL FFT library])
653   AC_SUBST(LMKL)
654   ;;
656 fftpack | no)
657   AC_MSG_WARN([The built-in FFTPACK routines are slow.
658 Are you sure you don't want to use FFTW? It is free and much faster...])
659   AC_DEFINE(GMX_FFT_FFTPACK,,[Use Built-in FFTPACK FFT library])
660   ;;
662   AC_MSG_ERROR([Unknown FFT library])
663   ;;
664 esac
667 if test "$enable_fftw_measure" != "yes"; then
668    AC_DEFINE(GMX_DISABLE_FFTW_MEASURE,,[Do not optimize FFTW setups (not needed with SSE FFT kernels)])
671 ######
672 # check for xtc headers
673 case "${host_os}" in
674 cygwin* | mingw*)   # use our own xdr stuff for cygwin/mingw
675   ;;
677   AC_CHECK_HEADERS([rpc/rpc.h])
678   AC_CHECK_HEADERS([rpc/xdr.h],,,
679 [#if HAVE_RPC_RPC_H
680 # include <rpc/rpc.h>
681 #endif
683   AC_CHECK_LIB(nsl,xdr_float)
684   AC_TRY_LINK([
685 #if HAVE_RPC_RPC_H
686 #include<rpc/rpc.h> 
687 #else
688 #error NO rpc.h header
689 #endif
690 #if HAVE_RPC_XDR_H
691 #include<rpc/xdr.h>
692 #else
693 #error No xdr.h header
694 #endif
695 ],[ XDR *xd; float f; xdr_float(xd,&f);],[have_xdr="yes"])
697   if test "$have_xdr" != "yes"; then
698     AC_DEFINE(GMX_INTERNAL_XDR,,[Use our own instead of system XDR libraries])  
699     AC_MSG_WARN([Couldn't find XDR headers and/or libraries - using our own])
700   fi
701   ;;
702 esac
705 ########################################################################
706 # Checks for header files and types
707 ########################################################################
709 AC_CHECK_HEADERS([limits.h unistd.h],,AC_MSG_ERROR([Include headers not found]))
710 AC_CHECK_HEADERS(unistd.h)
711 AC_CHECK_HEADERS(sys/types.h)
712 AC_CHECK_HEADERS(sys/time.h)
713 AC_CHECK_HEADERS(dirent.h)
714 AC_CHECK_HEADERS(copyfile.h)
715 AC_CHECK_HEADERS(regex.h,,[AC_MSG_WARN(
716 [No regex.h found.
717 Regular expression matching in selections will be disabled.
718 Selections still work, but the default groups can differ from
719 those obtained with regular expressions enabled.
720 Consider installing the regular expression library from GNU libc.])])
722 #####
723 # Checks for additional and/or optional functions or libraries.
724 #AC_FUNC_MALLOC
725 AC_FUNC_MEMCMP
726 AC_TYPE_SIGNAL
727 AC_TYPE_OFF_T
728 AC_FUNC_VPRINTF
729 AM_WITH_DMALLOC
730 AC_CHECK_FUNCS(strcasecmp)
731 AC_CHECK_FUNCS(strdup)
732 AC_CHECK_FUNCS(gettimeofday)
733 AC_CHECK_FUNCS(cbrt)
734 AC_CHECK_FUNCS(isnan)
735 AC_CHECK_FUNCS(_isnan)
736 AC_CHECK_FUNCS(isfinite)
737 AC_CHECK_FUNCS(_isfinite)
738 AC_CHECK_FUNCS(fsync)
739 AC_CHECK_FUNCS(fileno)
740 AC_CHECK_FUNCS(copyfile)
742 # check for bool (must come late, since CFLAGS/includes might affect it)
743 AC_CHECK_TYPES([bool])
749 #############
750 # Check integer sizes, set to zero if e.g. long long is not supported.
751 # (Note: this must come *after* type checks for the corresponding types!)
752 #############
753 AC_CHECK_SIZEOF(int)
754 AC_CHECK_SIZEOF(long int)
755 AC_CHECK_SIZEOF(long long int)
756 AC_CHECK_SIZEOF(off_t)
757 AC_CHECK_SIZEOF(void*)
761 # Apple OS X is a bit strange/braindead in that it always reports itself as i386, both for
762 # 32 and 64 bit builds (even with the 64 bit kernel!).
764 # To get the SSE support right we check for the size of void * that we detected above...
765 case "${host_vendor}-${host_os}" in
766   apple-darwin*)
767   if test $ac_cv_sizeof_voidp = 8; then
768      enable_ia32_sse=no;
769   else
770      enable_x86_64_sse=no;
771   fi
772   ;;
773   *) ;;
774 esac
779 #####
780 # Look for X
781 AC_PATH_XTRA
782 if test "$no_x" != "yes"; then
783   LIBS="$X_LIBS $LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
784   INCLUDES="$INCLUDES $X_CFLAGS"
785   AM_CONDITIONAL(USE_X11,true)
786 else
787   AM_CONDITIONAL(USE_X11,false)
790 # GNU Scientific Library or not
791 AC_ARG_WITH(gsl,
792  [AC_HELP_STRING([--with-gsl],[Link to the GNU scientific library, ]
793                  [enables extra functions in analysis])],,with_gsl=no)
795 ######
796 if test "$with_gsl" = "yes"; then
797   ac_save_LDFLAGS="$LDFLAGS"
798   AC_CHECK_HEADERS([gsl/gsl_version.h],[
799 # header found, check for libraries 
800   AC_CHECK_LIB(gslcblas,main,[
801   LDFLAGS="$ac_save_LDFLAGS -lgslcblas"
802 # gslcblas library found, check main lib
803   AC_CHECK_LIB(gsl,main)])])
804   PKG_GSL="gsl"
805   AC_SUBST(PKG_GSL)
809 ######
810 # Use OpenMM libraries
811 ######
812 AC_ARG_WITH(openmm,
813  [  --with-openmm                 Use the OpenMM libraries to run on GPUs],,with_openmm=no)
815 if test "$with_openmm" = "yes"; then
817   AC_PROG_CXX
818   CPPFLAGS="$CPPFLAGS -I$OPENMM_INSTALL_DIR/include"
819   INCLUDES="$INCLUDES -I$OPENMM_INSTALL_DIR/include"
820   LDFLAGS="$LDFLAGS -L$OPENMM_INSTALL_DIR/lib -lOpenMM"
821   #AC_CHECK_HEADERS([OpenMM.h],AC_CHECK_LIB(OpenMM,main))
822   #AC_CHECK_HEADERS([OpenMM.h],,AC_MSG_ERROR([Cannot find OpenMM.h file. Please set OPENMM_INSTALL_DIR.]))
823   AC_DEFINE([USE_OPENMM],,[Use OpenMM libraries to run on GPUs])
825 #  AS_CASE([${host_cpu}-${host_os}-${host_vendor}],
826 #    [i?86-linux*], [OPENMM_HOST=linux32],
827 #    [x86_64-linux*], [OPENMM_HOST=linux64],
828 #    [amd64-linux*], [OPENMM_HOST=linux64],
829 #    [i?86-darwin*-apple], [OPENMM_HOST=apple],
830 #    [OPENMM_HOST=""])
831 #  AC_SUBST([OPENMM_HOST])
834 AM_CONDITIONAL([USE_OPENMM],[test "$with_openmm" = "yes"])
837 AC_ARG_WITH(xml,
838  [AC_HELP_STRING([--without-xml],[do not link to the xml2 library,] 
839                  [disallows the use of certain file formats])],,with_xml=yes)
841 #########
842 # Check for libxml2, but it is optional, so dont stop
843 # if it isnt there.
844 if test "$with_xml" = "yes"; then
845    ac_save_CPPFLAGS="$CPPFLAGS"
846    CPPFLAGS="$ac_save_CPPFLAGS -I/usr/include/libxml2"
847    AC_CHECK_HEADERS([libxml/parser.h],AC_CHECK_LIB(xml2,main))
848    if test "$ac_cv_lib_xml2_main" = "yes"; then
849      INCLUDES="$INCLUDES -I/usr/include/libxml2"
850      PKG_XML2="libxml-2.0"
851      AC_SUBST(PKG_XML2)
852      if test "$enable_all_static" = "yes"; then
853        LDFLAGS_RET=$LDFLAGS
854        LDFLAGS="-static $LDFLAGS"
855        LIBS_RET="$LIBS"
856        LIBS="$LIBS -lz"
857        AC_MSG_CHECKING(for broken libxml2)
858        AC_TRY_RUN([
859 #include <libxml/parser.h>
860 main() {
861   xmlInitParser();
862   return 0;
864        AC_MSG_RESULT([no]),[AC_MSG_RESULT([yes])
865        AC_MSG_ERROR([Your libxml2 is broken for static linking, recompile it without threads or build gromacs without libxml])],[-lz])
866        LDFLAGS=$LDFLAGS_RET
867        LIBS="$LIBS_RET"
868      fi
869    fi
870 # restore CPPFLAGS
871    CPPFLAGS="$ac_save_CPPFLAGS"
874 #### 
875 # And collect the f77 libs to the linker - on Solaris, f77 stuff must go first,
876 # and we need -L/usr/ucblib to find libucb... (stupid OS)
877 # On e.g. ibm the mass libraries must come before -lm... 
878 case "${host_cpu}-${host_os}" in
879   *-solaris*) 
880     LIBS="$FLIBS $LIBS" 
881     LDFLAGS="$LDFLAGS -L/usr/ucblib"
882     ;;
883   *) LIBS="$LIBS $FLIBS" ;;
884 esac
887 # add the Accelerate framework if enabled above.
888 # LDFLAGS might have been set in the CPU optimization, so we cant assign it directly before that.
889 LDFLAGS="$LDFLAGS $extra_LDFLAGS"
896 #####
897 # Checks for typedefs, structures, and compiler characteristics.
898 AC_C_CONST
899 AC_TYPE_SIZE_T
900 AC_STRUCT_TM
901 AC_C_INLINE
903 # AC_TYPE_UID_T is broken on Mac OS X, so use generic tests instead
904 AC_CHECK_TYPES([uid_t],[],[AC_DEFINE(uid_t, int, [Define to `int' if <sys/types.h> doesn't define.])],[[#include <sys/types.h>]])
905 AC_CHECK_TYPES([gid_t],[],[AC_DEFINE(gid_t, int, [Define to `int' if <sys/types.h> doesn't define.])],[[#include <sys/types.h>]])
907 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>]])
909     
912 # Test stuff for ia32 and x86_64 assembly, and add objects/libraries.
913 if test "$enable_ia32_sse" = "yes" -o "$enable_x86_64_sse" = "yes"; then
914   AC_MSG_CHECKING([whether your compiler can handle assembly files (*.s)])
916 # Use 64-bit registers (rsp/rbp) on x86_64
918 if test "$enable_x86_64_sse" = "yes"; then
919 cat > conftestasm.s << EOF
920 checkasm:
921         mov     %rsp, %rbp
922         ret
924 else
925 cat > conftestasm.s << EOF
926 checkasm:
927         movl    %esp, %ebp
928         ret
931   if AC_TRY_COMMAND($CC $CFLAGS -c conftestasm.s); then
932     if test -f conftestasm.o; then
933       AC_MSG_RESULT([yes])
934     else
935       AC_MSG_RESULT([no])
936       AC_MSG_ERROR([Upgrade your compiler (or disable assembly loops).])
937     fi
938   else
939     AC_MSG_RESULT([no])
940     AC_MSG_ERROR([Upgrade your compiler (or disable assembly loops).])
941   fi
943 # ok, cc understands assembly.
945 # If we are using double precision we need SSE2
946   if test "$enable_float" = "no"; then
947 #   test SSE2 on ia32:
948     if test "$enable_ia32_sse" = "yes"; then
949       AC_MSG_CHECKING([whether as fully supports ia32 SSE2])
950 cat > conftest.s << EOF
951 checkasm:
952         emms
953         movapd 32(%esi,%edx,8),%xmm4
954         emms
955         ret
957       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
958         AC_MSG_RESULT([yes])
959       else
960         AC_MSG_RESULT([no])
961         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
962       fi
963       AC_DEFINE([GMX_IA32_SSE2],,[Double-precision SSE2 instructions on ia32])
964     fi
965 #   test SSE2 on X86_64:
966     if test "$enable_x86_64_sse" = "yes"; then
967       AC_MSG_CHECKING([whether as fully supports X86_64 SSE2])
968 cat > conftest.s << EOF
969 checkasm:
970         emms
971         movapd 32(%rsi,%rdx,8),%xmm4
972         emms
973         ret
975       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
976         AC_MSG_RESULT([yes])
977       else
978         AC_MSG_RESULT([no])
979         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
980       fi
981       AC_DEFINE([GMX_X86_64_SSE2],,[Double-precision SSE2 instructions on X86_64])
982     fi
983   else
984 # end of double precision testing, now do single.
985     if test "$enable_ia32_sse" = "yes"; then
986       AC_MSG_CHECKING([whether as fully supports ia32 SSE])
987 cat > conftest.s << EOF
988 checkasm:
989         emms
990         movaps 32(%esi,%edx,8),%xmm4
991         emms
992         ret
994       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
995         AC_MSG_RESULT([yes])
996       else
997         AC_MSG_RESULT([no])
998         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
999       fi
1000       AC_DEFINE([GMX_IA32_SSE],,[Single-precision SSE instructions on ia32])
1001     fi
1002 #   test SSE2 on X86_64:
1003     if test "$enable_x86_64_sse" = "yes"; then
1004       AC_MSG_CHECKING([whether as fully supports X86_64 SSE instructions])
1005 cat > conftest.s << EOF
1006 checkasm:
1007         emms
1008         movaps 32(%rsi,%rdx,8),%xmm4
1009         emms
1010         ret
1012       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
1013         AC_MSG_RESULT([yes])
1014       else
1015         AC_MSG_RESULT([no])
1016         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
1017       fi
1018       AC_DEFINE([GMX_X86_64_SSE],,[Single-precision SSE instructions on X86_64])
1019     fi
1020   fi
1024 # Test stuff for ia64 assembly
1026 # Nothing to test right now.
1029   
1032 # Test altivec support.
1034 if test "$enable_ppc_altivec" = "yes"; then
1035   if test "$enable_float" = "no"; then
1036     AC_MSG_WARN([PowerPC Altivec loops can only be used in single precision - disabling])
1037     enable_ppc_altivec=no
1038   else 
1039     # On FSF (vanilla) GCC we must include altivec.h, and on apple we 
1040     # should NOT do it after using -faltivec. Go figure...
1041     case "${host_os}" in
1042     darwin*)                            
1043         # do nothing on Apple systems
1044        ;;
1045     *)
1046         AC_CHECK_HEADERS([altivec.h])
1047        ;;
1048     esac
1050     AC_MSG_CHECKING([whether the compiler supports altivec extensions])
1051     AC_TRY_COMPILE([],[
1052 #ifndef __VEC__
1053 choke_me
1054 #endif
1056     AC_MSG_RESULT([yes])
1057     AC_DEFINE([GMX_PPC_ALTIVEC],,[Use PowerPC Altivec inner loops])],[
1058       AC_MSG_RESULT([no])
1059       AC_MSG_WARN([no altivec support found - On recent PowerPC CPUs]
1060 [you can get a huge performance gain by using an altivec-enabled compiler.]
1061 [On OS X, you need GCC>=3.3, or the IBM compilers. If you are using standard]
1062 [GCC, you need at least version 4.0])
1063       enable_ppc_altivec=no])
1064   fi  
1067 if test "$enable_ia64_asm" = "yes"; then
1068   AC_DEFINE(GMX_IA64_ASM,,[Use ia64 assembly tuned for Itanium2])
1069   AC_DEFINE(DISABLE_WATER_NLIST,,[Turn off all water neighborlist optimization])
1070   AC_DEFINE(DISABLE_WATERWATER_NLIST,,[Turn off water-water neighborlist optimization only])
1073 if test "$enable_bluegene" = "yes"; then
1074   AC_DEFINE(GMX_BLUEGENE,,[Use assembly intrinsics kernels for BlueGene])
1078 # Add the appropriate assembly loops 
1080 AM_CONDITIONAL([GMX_IA32_SSE],[test "$enable_ia32_sse" = "yes" -a "$enable_float" = "yes"])
1081 AM_CONDITIONAL([GMX_IA32_SSE2],[test "$enable_ia32_sse" = "yes" -a "$enable_float" = "no"])
1082 AM_CONDITIONAL([GMX_X86_64_SSE],[test "$enable_x86_64_sse" = "yes" -a "$enable_float" = "yes"])
1083 AM_CONDITIONAL([GMX_X86_64_SSE2],[test "$enable_x86_64_sse" = "yes" -a "$enable_float" = "no"])
1084 AM_CONDITIONAL([GMX_FORTRAN],[test "$enable_fortran" = "yes"])
1085 AM_CONDITIONAL([GMX_PPC_ALTIVEC],[test "$enable_ppc_altivec" = "yes" -a "$enable_float" = "yes"])
1086 AM_CONDITIONAL([GMX_IA64_ASM],[test "$enable_ia64_asm" = "yes"])
1087 AM_CONDITIONAL([GMX_BLUEGENE],[test "$enable_bluegene" = "yes"])
1088 AM_CONDITIONAL([GMX_POWER6],[test "$enable_power6" = "yes"])
1091 #############
1092 # Check integer endian
1093 #############
1094 AC_C_BIGENDIAN([AC_DEFINE([GMX_INTEGER_BIG_ENDIAN],,[Integer byte order is big endian.])],[],[
1095 AC_MSG_ERROR([Cannot determine endian in compiled output])])
1096 # Little endian implied if GMX_INTEGER_BIG_ENDIAN not defined in source.
1100 case "${host_cpu}" in
1101    i?86) 
1102          # Check if inline assembly works
1103          AC_MSG_CHECKING(if the compiler supports gcc inline assembly)
1104       AC_TRY_LINK([],[float f;int i; asm("fld %1\nfistpl %0\n" : "=m" (*&i) : "f" (f));],[AC_MSG_RESULT(yes)
1105 AC_DEFINE(GMX_X86_GCC_INLINE_ASM,,[Enable x86 gcc inline assembly])],[AC_MSG_RESULT(no)])
1106          # Check for MSVC inline assembly
1107      AC_MSG_CHECKING(if the compiler supports MSVC inline assembly)
1108       AC_TRY_LINK([],[float f;int i; _asm { fld f } ; _asm { fistpl i };],[AC_MSG_RESULT(yes)
1109 AC_DEFINE(GMX_X86_MSVC_INLINE_ASM,,[Enable x86 MSVC inline assembly])],[AC_MSG_RESULT(no)])
1110         ;;              
1111    *) ;;
1112 esac
1115 ############
1116 # Check dlopen
1117 ###########
1118 if test "$with_dlopen" = "yes"; then
1119       AC_MSG_CHECKING(if dlopen supported)
1120       CFLAGS_RET=$CFLAGS
1121       #LDFLAGS="$lt_cv_dlopen_libs $LDFLAGS" #can't make the macro, which is getting lt_cv_dlopen_libs, to work
1122       LDFLAGS_RET=$LDFLAGS
1123       if test "$enable_all_static" = "yes"; then  #make sure we test also whether it works static
1124          LDFLAGS="$LDFLAGS -static"
1125       fi
1126       CFLAGS="-I$srcdir/include -DGMX_DLOPEN $CFLAGS"
1127       AC_TRY_LINK([#include "$srcdir/src/gmxlib/vmddlopen.c"],,[AC_MSG_RESULT([yes])\
1128         AC_DEFINE(GMX_DLOPEN,,[Compile with dlopen])],AC_MSG_RESULT([no]))
1129       CFLAGS=$CFLAGS_RET
1130       LDFLAGS=$LDFLAGS_RET
1136 ########################################################################
1137 # Final output stage
1138 ########################################################################
1139 AS="$CC"
1140 AC_SUBST(ASFLAGS)
1141 AC_SUBST(AS)
1142 AC_SUBST(INCLUDES)          # should be automatic, but doesnt seem to be?
1144 # To tell libraries apart, we use four versions of the name. For instance, libgmx:
1145 # libgmx                single prec, no mpi.
1146 # libgmx_d              double prec, no mpi.
1147 # libgmx_mpi            single prec, mpi.
1148 # libgmx_mpi_d          double prec, mpi.
1149 # However, the non-suffixed names are linked to the _mpi and/or _d suffixed
1150 # ones upon installation if that is the only version available.
1152 if test "$enable_mpi" = "yes"; then
1153   LIBSUFFIX="_mpi"
1155 if test "$enable_float" = "no"; then
1156   LIBSUFFIX="${LIBSUFFIX}_d"
1158 AC_SUBST(LIBSUFFIX) 
1160 # Unless the user has explicitly requested a prefix/suffix/transform, we
1161 # use _d on double precision files. Don't add anything for mpi, but at the
1162 # end we tell the user it is possible and smart to do in some cases!
1163 if test "$program_transform_name" = "s,x,x,"; then
1164   name_transform_provided=no;
1165   if test "$enable_float" = "no"; then
1166     program_transform_name="s,\$\$,_d,"
1167   fi
1168 else
1169   name_transform_provided=yes;
1173 # Use a variable for RPM - this way it can be 
1174 # overridden with make RPM=rpm3 rpm
1175 RPM=rpm
1176 AC_SUBST(RPM)
1178 if test "$enable_fahcore" = "yes"; then  
1179   CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/../corewrap -include swindirect.h -DFULLINDIRECT -DUSE_FAH_XDR"  
1180   if test "$enable_mpi" = "yes"; then 
1181     CFLAGS="$CFLAGS -DMPI"  
1182   fi
1184 AM_CONDITIONAL([GMX_FAHCORE],[test "$enable_fahcore" = "yes"])
1187 if test "$enable_all_static" = "yes"; then
1188   LDFLAGS="$LDFLAGS -all-static"
1191 # we have asm source, so this is necessary for automake 1.6
1192 CCAS=$CC
1193 CCASFLAGS=$CFLAGS
1195 AC_SUBST(CCAS)
1196 AC_SUBST(CCASFLAGS)
1198 AC_CONFIG_FILES([ Makefile ])
1199 AC_CONFIG_FILES([ src/Makefile ])
1200 AC_CONFIG_FILES([ src/gmxlib/Makefile ])
1201 AC_CONFIG_FILES([ src/gmxlib/libgmx${LIBSUFFIX}.pc:src/gmxlib/libgmx.pc.in ])
1202 AC_CONFIG_FILES([ src/gmxlib/gmx_blas/Makefile ])
1203 AC_CONFIG_FILES([ src/gmxlib/gmx_lapack/Makefile ])
1204 AC_CONFIG_FILES([ src/gmxlib/selection/Makefile ])
1205 AC_CONFIG_FILES([ src/gmxlib/statistics/Makefile ])
1206 AC_CONFIG_FILES([ src/gmxlib/trajana/Makefile ])
1207 AC_CONFIG_FILES([ src/gmxlib/thread_mpi/Makefile ])
1208 AC_CONFIG_FILES([ src/gmxlib/nonbonded/Makefile ])
1209 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_c/Makefile ])
1210 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia32_sse/Makefile ])
1211 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia32_sse2/Makefile ])
1212 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_x86_64_sse/Makefile ])
1213 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_x86_64_sse2/Makefile ])
1214 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ppc_altivec/Makefile ])
1215 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia64_single/Makefile ])
1216 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia64_double/Makefile ])
1217 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_bluegene/Makefile ])
1218 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_power6/Makefile ])
1219 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_f77_single/Makefile ])
1220 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_f77_double/Makefile ])
1221 AC_CONFIG_FILES([ include/Makefile ])
1222 AC_CONFIG_FILES([ include/types/Makefile ])
1223 AC_CONFIG_FILES([ include/thread_mpi/Makefile ])
1224 AC_CONFIG_FILES([ include/thread_mpi/atomic/Makefile ])
1225 AC_CONFIG_FILES([ src/mdlib/Makefile ])
1226 AC_CONFIG_FILES([ src/mdlib/libmd${LIBSUFFIX}.pc:src/mdlib/libmd.pc.in ])
1227 AC_CONFIG_FILES([ src/kernel/Makefile ])
1228 AC_CONFIG_FILES([ src/kernel/libgmxpreprocess${LIBSUFFIX}.pc:src/kernel/libgmxpreprocess.pc.in ])
1229 AC_CONFIG_FILES([ src/tools/Makefile ])
1230 AC_CONFIG_FILES([ src/tools/libgmxana${LIBSUFFIX}.pc:src/tools/libgmxana.pc.in ])
1231 AC_CONFIG_FILES([ src/ngmx/Makefile ])
1232 AC_CONFIG_FILES([ src/contrib/Makefile ])
1233 AC_CONFIG_FILES([ scripts/Makefile ])
1234 AC_CONFIG_FILES([ admin/Makefile ])
1235 AC_CONFIG_FILES([ share/Makefile ])
1236 AC_CONFIG_FILES([ share/tutor/Makefile ])
1237 AC_CONFIG_FILES([ share/tutor/gmxdemo/Makefile ])
1238 AC_CONFIG_FILES([ share/tutor/nmr1/Makefile ])
1239 AC_CONFIG_FILES([ share/tutor/nmr2/Makefile ])
1240 AC_CONFIG_FILES([ share/tutor/water/Makefile ])
1241 AC_CONFIG_FILES([ share/tutor/mixed/Makefile ])
1242 AC_CONFIG_FILES([ share/tutor/methanol/Makefile ])
1243 AC_CONFIG_FILES([ share/tutor/speptide/Makefile ])
1244 AC_CONFIG_FILES([ share/template/Makefile ])
1245 AC_CONFIG_FILES([ share/top/Makefile ])
1246 AC_CONFIG_FILES([ share/top/gmx.ff/Makefile ])
1247 AC_CONFIG_FILES([ share/top/gmx2.ff/Makefile ])
1248 AC_CONFIG_FILES([ share/top/encadv.ff/Makefile ])
1249 AC_CONFIG_FILES([ share/top/encads.ff/Makefile ])
1250 AC_CONFIG_FILES([ share/top/oplsaa.ff/Makefile ])
1251 AC_CONFIG_FILES([ share/top/gromos43a1.ff/Makefile ])
1252 AC_CONFIG_FILES([ share/top/gromos43a2.ff/Makefile ])
1253 AC_CONFIG_FILES([ share/top/gromos45a3.ff/Makefile ])
1254 AC_CONFIG_FILES([ share/top/gromos53a5.ff/Makefile ])
1255 AC_CONFIG_FILES([ share/top/gromos53a6.ff/Makefile ])
1256 AC_CONFIG_FILES([ share/top/charmm27.ff/Makefile ])
1257 AC_CONFIG_FILES([ share/html/Makefile ])
1258 AC_CONFIG_FILES([ share/html/images/Makefile ])
1259 AC_CONFIG_FILES([ share/html/online/Makefile ])
1260 AC_CONFIG_FILES([ man/Makefile man/man1/Makefile man/man7/Makefile ])
1261 AC_CONFIG_FILES([ Doxyfile ])
1262 AC_OUTPUT
1270 #########################################################
1271 # Echo some important info, to avoid stupid mistakes
1274 if test "$enable_float" = "no" -a "$name_transform_provided" = "no"; then
1275   echo ""
1276   echo "* You are compiling a double precision version of Gromacs -"
1277   echo "  program names will be suffixed with _d to avoid overwriting single"
1278   echo "  precision files. You can override it with --program-suffix"
1281 if test "$name_transform_provided" = "no" -a "$enable_mpi" = "yes"; then
1282   echo ""
1283   echo "* Seems you are compiling with MPI support. You can install the MPI-"
1284   echo "  enabled programs with suffixed names to have both MPI and non-MPI"
1285   echo "  versions. This is useful e.g. on supercomputers where you usually"
1286   echo "  cannot run MPI-linked programs on the login node."
1287   echo "  Set a suffix with e.g. --program-suffix=_mpi (or _mpi_d for double)."
1288   echo "  You only need MPI for mdrun, so if you already have non-MPI stuff"
1289   echo "  installed you can issue make mdrun; make install-mdrun."
1292 if test "$enable_shared" = "no"; then
1293   echo ""
1294   echo "* On most platforms you can save 10X space with dynamic libraries, although"
1295   echo "  the binaries might be less portable. Why not try --enable-shared ?"
1296 fi  
1299 if test "$tmpi_atomics" = "no"; then
1300   echo ""
1301   echo "* This compiler+CPU combination doesn't have working atomic operations."
1302   echo "  Thread support will be unbearably slow: the default number of threads"
1303   echo "  is set to 1."
1304   echo "  Atomics should work on all but the most obscure CPU+compiler"
1305   echo "  combinations; if your system is not obscure (like, for example, x86"
1306   echo "  with gcc) please contact the developers."
1307   echo ""