Merge branch 'master' into rotation
[gromacs/adressmacs.git] / configure.ac
blob8ed12482c0f5f51f5ed56d2b89422be9466f3fe8
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_development_20090927, [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="5:0:0"
18 AC_SUBST(SHARED_VERSION_INFO)
20 AC_DISABLE_SHARED
23 #######################################################################
24 # Simple options and makefile variables
25 #######################################################################
28 ### Single/Double
29 AC_ARG_ENABLE(float,
30              [AC_HELP_STRING([--disable-float],
31                              [Use double instead of single precision])],, enable_float=yes)
33 AC_ARG_ENABLE(double,
34              [AC_HELP_STRING([--enable-double],
35                              [Same effect as --disable-float])],, enable_double=no)
36 if test "$enable_double" = "yes"; then
37    enable_float=no;
39 if test "$enable_float" = "no"; then
40   AC_DEFINE(GMX_DOUBLE,,[Compile in double precision])
42 AM_CONDITIONAL([GMX_DOUBLE],[test "$enable_float" = "no"])
46 ### Fortran or not
47 AC_ARG_ENABLE(fortran,
48              [AC_HELP_STRING([--enable-fortran],
49                              [Use Fortran kernels])],, 
50 [case "${host_cpu}-${host_os}" in
51   sparc*-solaris* | alpha*-* | rs6000*-aix* | powerpc*-aix* | mips*-irix*) enable_fortran=yes ;;
52   *) enable_fortran=no ;;
53  esac])
54 if test "$enable_fortran" = "yes"; then
55   AC_DEFINE(GMX_FORTRAN,,[Enable Fortran support])
57 # Generic fortran kernels will be turned off below if you enable power6-specific optimization!
58 # always use CC for linking:
59 AC_SUBST(F77LINK,"\$(LINK)")
65 ### MPI or not
66 AC_ARG_ENABLE(mpi,
67               [AC_HELP_STRING([--enable-mpi],
68                               [Compile for parallel runs using MPI])],,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 that have broken support for it (some versions of MPICH, for example).])],, enable_mpi_in_place=yes)
90 AC_ARG_ENABLE(debug,
91               [AC_HELP_STRING([--enable-debug],
92                               [Add -g to other command line arguments])],,enable_debug=no)
94 ### IA32 assembly code
95 AC_ARG_ENABLE(ia32_sse,
96               [AC_HELP_STRING([--disable-ia32-sse],
97                               [Don't build SSE/SSE2 assembly loops on ia32])],,enable_ia32_sse=yes)
99 case "${host_cpu}-${host_vendor}" in
100    i?86-*) ;;
101    *) enable_ia32_sse=no ;;
102 esac
104 ### AMD64 assembly code
105 AC_ARG_ENABLE(x86_64_sse,
106               [AC_HELP_STRING([--disable-x86-64-sse],
107                               [Don't build SSE assembly loops on X86_64])],,enable_x86_64_sse=yes)
108 case "${host_cpu}-${host_vendor}" in
109    x86_64-* | amd64-*) ;;
110    i?86-apple) ;;
111    *) enable_x86_64_sse=no ;;
112 esac
115 ### Altivec on powerpc (motorola)
116 AC_ARG_ENABLE(ppc_altivec,
117               [AC_HELP_STRING([--disable-ppc-altivec],
118                               [Don't build Altivec loops on PowerPC])],,enable_ppc_altivec=undef)
119 # Power3/4/5 running AIX does not support altivec. We identify this with vendor=IBM.
120 # IBM powerpc 970 boxes run linux, and have vendor=unknown.
121 if test "$enable_ppc_altivec" = "undef"; then
122   case "${host_cpu}-${host_vendor}" in
123     ppc*-ibm* | powerpc*-ibm*) enable_ppc_altivec=no ;;
124     ppc*-* | powerpc*-*) enable_ppc_altivec=yes ;; 
125     *) enable_ppc_altivec=no ;;
126   esac
131 ### ia64 assembly code
132 AC_ARG_ENABLE(ia64_asm,
133               [AC_HELP_STRING([--disable-ia64-asm],
134                               [Don't build assembly loops on ia64])],,enable_ia64_asm=yes)
135 case "${host_cpu}" in
136    ia64) ;;
137    *) enable_ia64_asm=no ;;
138 esac
141 # IBM Power6-specific optimization
142 AC_ARG_ENABLE(power6,
143              [AC_HELP_STRING([--enable-power6],
144                              [Use IBM Pwr6/PPC440/PPC450-specific F77 kernels])],,enable_power6=no)
145 # Turn off generic fortran loops if we are using power6-specific optimization
146 if test "$enable_power6" = "yes"; then
147   enable_fortran=no;
150 AC_ARG_ENABLE(bluegene,
151               [AC_HELP_STRING([--enable-bluegene],
152                               [Build assembly intrinsics kernels on bluegene])],,enable_bluegene=no)
155 ### Optimize for host cpu version
156 AC_ARG_ENABLE(cpu-optimization,     
157               [AC_HELP_STRING([--disable-cpu-optimization],
158                               [No detection or tuning flags for cpu version])],, enable_cpu_optimization=yes)
161 ### Do software 1/sqrt(x)                                                                                                            
162 AC_ARG_ENABLE(software-invsqrt,
163               [AC_HELP_STRING([--disable-software-invsqrt],
164                               [No software 1/sqrt (disabled on sgi,ibm,ia64)])],,
165 [case "${host_cpu}-${host_os}" in
166   mips*-irix* | rs6000*-aix* | powerpc*-aix | ia64*-*) enable_software_invsqrt=no ;;
167   *) enable_software_invsqrt=yes ;;
168 esac])
169 if test "$enable_software_invsqrt" = "yes"; then
170   AC_DEFINE(GMX_SOFTWARE_INVSQRT,,[Use the GROMACS software 1/sqrt(x)])
172 AM_CONDITIONAL([GMX_SOFTWARE_INVSQRT],[test "$enable_software_invsqrt" = "yes"])
174 AC_ARG_ENABLE(fahcore,
175               [AC_HELP_STRING([--enable-fahcore],
176                               [Create a library with mdrun functionality])],, enable_fahcore=no)
180 # The four options below used to improve code scheduling, but the newest CPUs can usually rearrange
181 # instructions dynamically at runtime, so they might not make much difference now:
184 AC_ARG_ENABLE(all-static,
185               [AC_HELP_STRING([--enable-all-static],
186                               [Make completely static binaries])],, enable_all_static=no)
187 # Dont add the -all-static flag until after the compiler test.
190 # FFT libraries - only use one...
191 AC_ARG_WITH(fft,
192             [AC_HELP_STRING([--with-fft=@<:@fftw3/fftw2/mkl(>=6.0)/fftpack@:>@],
193                             [FFT library to use. fftw3 is default, fftpack built in.])],,
194                              with_fft=fftw3)
196 AC_ARG_ENABLE(fftw-measure,
197             [AC_HELP_STRING([--disable-fftw-measure],
198                             [Dont optimize FFTs. This produces binary exactly]
199                             [reproducible runs (as the -reprod flag to mdrun),]
200                             [and if you are using FFTW on x86 and specified its]
201                             [--enable-sse/sse2 flag (NOT default in FFTW!) the]
202                             [kernels used are close-to-optimal anyway.])],,
203                              enable_fftw_measure=yes)
206 AC_ARG_ENABLE(threads,
207               [AC_HELP_STRING([--enable-threads],    
208                               [Compile for parallel runs using threads])],,enable_threads=no)
210 # if test "$enable_threads" = "yes"; then
211 #   with_threads=pthreads;
215 ### Use external BLAS/LAPACK libraries if the user wants to.
217 AC_ARG_WITH(external_blas,
218             [AC_HELP_STRING([--with-external-blas],
219                             [Use system BLAS library (add to LIBS). Automatic on OS X.])],,
221 # default action - check if we are on OS X
222 case "${host_vendor}-${host_os}" in
223   apple-darwin*) with_external_blas="yes" ; extra_LDFLAGS="-framework Accelerate" ;;
224   *)             with_external_blas="no"  ;;
225 esac
227 AM_CONDITIONAL([GMX_EXTERNAL_BLAS], [test "$with_external_blas" = "yes"])
230 AC_ARG_WITH(external_lapack,
231             [AC_HELP_STRING([--with-external-lapack],
232                             [Use system LAPACK library (add to LIBS). Automatic on OS X.])],,
234 # default action - check if we are on OS X
235 case "${host_vendor}-${host_os}" in
236   apple-darwin*) with_external_lapack="yes" ; extra_LDFLAGS="-framework Accelerate" ;;
237   *)             with_external_lapack="no"  ;;
238 esac
240 AM_CONDITIONAL([GMX_EXTERNAL_LAPACK], [test "$with_external_lapack" = "yes"])
245 AC_ARG_WITH(qmmm_gaussian,
246               [AC_HELP_STRING([--without-qmmm-gaussian],
247                               [Use modified Gaussian0x for QM-MM (see website)])],,with_qmmm_gaussian=yes)
248 if test "$with_qmmm_gaussian" = "yes"; then
249   AC_DEFINE(GMX_QMMM_GAUSSIAN,,[Use (modified) Gaussian0x for QM-MM calculations])
253 AC_ARG_WITH(qmmm_gamess,
254               [AC_HELP_STRING([--without-qmmm-gamess],
255                               [Use modified Gamess-UK for QM-MM (see website)])],,with_qmmm_gamess=no)
256 if test "$with_qmmm_gamess" = "yes"; then
257   AC_DEFINE(GMX_QMMM_GAMESS,,[Use (modified) Gamess-UK for QM-MM calculations])
261 AC_ARG_WITH(qmmm_mopac,
262               [AC_HELP_STRING([--without-qmmm-mopac],
263                               [Use modified Mopac 7 for QM-MM (see website)])],,with_qmmm_mopac=no)
264 if test "$with_qmmm_mopac" = "yes"; then
265   AC_DEFINE(GMX_QMMM_MOPAC,,[Use (modified) Mopac 7 for QM-MM calculations])
268 AC_ARG_WITH(dlopen,
269  [  --without-dlopen        do not compile with dlopen, needed to read VMD supported file formats],,with_dlopen=yes)
273    
275 ############################################################
276 # Add some debug info: Who is building, and on what machine?
277 ############################################################
278 AC_DEFINE_UNQUOTED([BUILD_TIME],["`date`"],[Date and time for build])
279 AC_DEFINE_UNQUOTED([BUILD_USER],["`whoami`@`hostname`"],[User doing build])
280 AC_DEFINE_UNQUOTED([BUILD_MACHINE],["`uname -srm`"],[Hardware and OS version for build host])
284 ############################################################
285 # Checks for programs
286 ############################################################
288 # normally we use the default compiler, but on alpha/linux we try the compaq ones first
289 case "${host_cpu}-${host_os}" in
290   alpha*-linux*)
291     cc_names="ccc cc gcc"
292     f77_names="fort f77 g77"
293     ;;
294   *) 
295     cc_names="cc icc xlc gcc"
296     f77_names="f77 ifort xlf xlf77 cf77 fl32 g77 fort77 f90 xlf90 pgf77 cf77 fort fort77 pgf90"
297     ;;
298 esac
299 # the (non-mpi) c compiler, which is also used for programs executed during build stage
300 AC_PROG_CC( $cc_names )
301 # Check for environment variable CC_FOR_BUILD before overwriting it
302 if test -z "$CC_FOR_BUILD"; then
303   CC_FOR_BUILD=$CC
305 AC_SUBST(CC_FOR_BUILD) 
307 if test "$enable_fortran" = "yes"; then 
308   AC_PROG_F77( $f77_names )
309   if test -z "$F77"; then
310     AC_MSG_ERROR([No fortran compiler found])
311   fi
314 AM_PROG_AS( $CC )
316 # if we are using mpi, also get an MPICC. We cannot set that in the PROG_CC macro
317 # above, since autoconf checks that the created file can be executed. This would
318 # fail on platforms where MPI executables can only be run through a batchqueue.
320 if test "$enable_mpi" = "yes"; then
321   AC_CHECK_PROGS(MPICC, mpxlc mpicc mpcc hcc, $CC)
322 # now change the normal cc to the MPI one - see the comment above.
323   CC=$MPICC
324   AC_MSG_CHECKING([whether the MPI cc command works]) # be paranoid
325   AC_TRY_LINK([#include <mpi.h>],[int argc; char **argv; MPI_Init(&argc,&argv);],
326 AC_MSG_RESULT([yes]),AC_MSG_ERROR([Cannot compile and link MPI code with $CC]))
327   AC_DEFINE(GMX_MPI,,[Make a parallel version of GROMACS using MPI])
328   AC_DEFINE(GMX_LIB_MPI,,[Use a real MPI library])
330   if test "$enable_mpi_in_place" = "yes"; then
331     # not all MPIs support MPI_IN_PLACE:
332     AC_MSG_CHECKING([for MPI_IN_PLACE in collective operations])
333     AC_TRY_COMPILE([
334 #include <mpi.h>
335 void test(void)
337     void *buf;
338     MPI_Allreduce(MPI_IN_PLACE, buf, 10, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD);
340     ],,[
341         AC_MSG_RESULT([yes])
342         AC_DEFINE(MPI_IN_PLACE_EXISTS,[],[MPI_IN_PLACE available for collective operations])
343     ],[
344         AC_MSG_RESULT([no])
345     ]) 
346   fi
348 # on the cray xt3 we have to tell autoconf that we 
349 # are actually cross-compiling even if the architecture
350 # of host and target are the same. so we enforce 
351 # cross-compilation if __QK_USER__ is defined
352   AC_MSG_CHECKING([for catamount])
353   AC_TRY_COMPILE([
354 #if defined __QK_USER__
355 #else
356 #error not catamount
357 #endif
358 ],,[
359   AC_MSG_RESULT([yes])
360   cross_compiling=yes 
361   AC_DEFINE(GMX_CRAY_XT3,[],[Enable special hacks for Cray XT3])
362   AC_DEFINE(GMX_NO_SYSTEM,[],[Ignore calls to system(3)])
363   AC_DEFINE(GMX_NO_NICE,[],[Ignore calls to nice(3)])
364   AC_DEFINE(GMX_BROKEN_CALLOC,[],[Don't use calloc(3)])
365   extra_LDFLAGS="$extra_LDFLAGS -lgmalloc -lacml"
367   AC_MSG_RESULT([no])
369 # end of "$enable_mpi" = "yes"
373 AH_TEMPLATE([F77_OR_C_FUNC],
374             [Set to F77_FUNC(name,NAME) if Fortran used, otherwise 'name' for C.])
375 AH_TEMPLATE([F77_OR_C_FUNC_],
376             [Set to F77_FUNC_(name,NAME) if Fortran used, otherwise 'name' for C.])
380 if test "$enable_fortran" = "yes"; then
381   AC_F77_LIBRARY_LDFLAGS
382   AC_F77_WRAPPERS
383   AC_DEFINE([F77_OR_C_FUNC(name,NAME)],[F77_FUNC(name,NAME)])
384   AC_DEFINE([F77_OR_C_FUNC_(name,NAME)],[F77_FUNC_(name,NAME)])
385 else
386   AC_DEFINE([F77_OR_C_FUNC(name,NAME)],[name])
387   AC_DEFINE([F77_OR_C_FUNC_(name,NAME)],[name])
392 AC_PROG_CPP
393 # Needed by libtool scripts?
394 AC_PROG_EGREP
396 if test "$enable_cpu_optimization" = "yes"; then
397   ACX_DETECT_GMXCPU
398 else
399   gmxcpu=""
401 ACX_COMPILER_MAXOPT
404 # We've postponed the threads check because we need to check with the right
405 # compilers/flags 
406 if test "$enable_threads" = "yes"; then 
407   if test "$enable_mpi" = "yes"; then
408     AC_MSG_ERROR([Cannot use both threads and MPI - yet.])
409   fi
410   if test "$with_fft" = "fftw2"; then
411     AC_MSG_ERROR([fftw2 can't be used with threads. Use fftw3 or mkl.])
412   fi 
413   # for now we just assume pthreads
414   ACX_PTHREAD(,AC_MSG_ERROR([Cannot find POSIX threads - required for thread    support using configure!]))
415   LIBS="$PTHREAD_LIBS $LIBS"
416   CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
417   CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
418   CC="$PTHREAD_CC "
419   AC_DEFINE(THREAD_PTHREADS,,[Use pthreads for thread_mpi multithreading])
420   AC_DEFINE(GMX_THREADS,,[Use threads for parallelization])
421   AC_DEFINE(GMX_MPI,,[Make a parallel version of GROMACS using MPI])
422   AM_CONDITIONAL(THREAD_PARALLEL,true)
423 else
424   AM_CONDITIONAL(THREAD_PARALLEL,false)
429 #############
430 # Check integer endian
431 #############
432 AC_C_BIGENDIAN([AC_DEFINE([GMX_INTEGER_BIG_ENDIAN],,[Integer byte order is big endian.])],[],[
433 AC_MSG_ERROR([Cannot determine endian in compiled output])])
434 # Little endian implied if GMX_INTEGER_BIG_ENDIAN not defined in source.
436 #############
437 # Make sure size_t can hold pointers.
438 # On some Nec machines, you reportedly need to specify a flag for size_t to be 64 bits wide.
439 #############
440 AC_MSG_CHECKING([that size_t can hold pointers])
441 AC_TRY_COMPILE([
442 #include <stdlib.h>
443 #include <stddef.h>
444 ],[int chk[sizeof(size_t)-sizeof(int *)+1];],AC_MSG_RESULT([yes]),[
445    AC_MSG_ERROR([size_t is smaller than int*. Check if your compiler needs a flag to make it 64 bit.])])
448 #############
449 # Check that SIGUSR1 is defined
450 #############
451 AC_MSG_CHECKING([for SIGUSR1])
452 AC_TRY_COMPILE([#include <signal.h>],[int i=SIGUSR1;],[
453 AC_MSG_RESULT([yes])
454 AC_DEFINE(HAVE_SIGUSR1,,[SIGUSR1 supported and defined])
455 ],AC_MSG_RESULT([no]))
457 #############
458 # Check if pipes are supported
459 #############
460 AC_MSG_CHECKING([for pipes])
461 AC_TRY_COMPILE([#include <stdio.h>],[
462 FILE *pipe=popen("/tmp/pipe","r");
464 AC_MSG_RESULT([yes])
465 AC_DEFINE(HAVE_PIPES,,[Pipes (popen/pclose) supported])
466 ],AC_MSG_RESULT([no]))
470 #############
471 # Check floating-point format and endian
472 #############
473 ACX_FLOAT_FORMAT
476 AC_PROG_INSTALL
477 AC_PROG_LN_S
478 AC_PROG_MAKE_SET
479 AC_LIBTOOL_WIN32_DLL
480 AC_PROG_LIBTOOL
481 AC_SYS_LARGEFILE
483 # Use our own version of AC_FUNC_FSEEKO from autoconf 2.63 instead
484 # of the broken one we might get from autoconf 2.61.
485 ACX_FUNC_FSEEKO_FIXED
490 ############################################################################
491 # Checks for libraries.
492 ############################################################################
494 # Don't add math library for intel compilers
495 if $CC -V 2>&1 | grep 'Intel Corporation' > /dev/null 2>&1; then
496   AC_MSG_NOTICE([Using built-in math library with intel compiler])
497 else
498   AC_CHECK_LIB(m,sqrt,,AC_MSG_ERROR([No math library found]))
501 #####
502 # Disable MASS support for now.
503 #####
506 case "$with_fft" in
507 fftw2)
508   if test "$enable_float" = "yes"; then
509     sizeof_real=4
510   else
511     sizeof_real=8
512   fi
513   ACX_CHECK_FFTW2(fftw,$sizeof_real)
514   ACX_CHECK_FFTW2(rfftw,$sizeof_real)
516   case ${ac_fftw_savedprefix} in
517    d) AC_DEFINE(FFTW2_NAME_DFFTW,,[Use the d prefix on fftw2 includes]) ;;
518    s) AC_DEFINE(FFTW2_NAME_SFFTW,,[Use the s prefix on fftw2 includes]) ;;
519    *) AC_DEFINE(FFTW2_NAME_FFTW,,[Dont use any prefix on fftw2 includes]) ;;
520   esac
522   AC_DEFINE(GMX_FFT_FFTW2,,[Use FFTW2 FFT library])
524   ;; #  end of fftw2 check
526 fftw3) # Much simpler check than fftw2
527 # Check for header <fftw3.h> AC_CHECK_HEADERS doesnt work, since we must
528 # use mpicc to get includes - cpp isnt always the same compiler.
529 AC_MSG_CHECKING([for fftw3.h])
530 AC_TRY_COMPILE([#include<fftw3.h>],,[
531 # ok, look for library file too
532 AC_MSG_RESULT(yes)
533 if test "$enable_float" = "yes"; then
534   AC_CHECK_LIB([fftw3f],main,,AC_MSG_ERROR([Cannot find fftw3f library]))
535 else
536   AC_CHECK_LIB([fftw3],main,,AC_MSG_ERROR([Cannot find fftw3 library]))
538   AC_DEFINE(GMX_FFT_FFTW3,,[Use FFTW3 FFT library])
540 # not ok, echo a warning
541 AC_MSG_ERROR(
542 [Cannot find the default external FFT library (fftw3).
543 Other alternatives are 'fftw2', or 'mkl' for Intel MKL.
544 You are STRONGLY recommended to use one of these - fftw is free.
546 Use CPPFLAGS and LDFLAGS if the library is installed in a 
547 non-standard location. (see FAQ at http://www.gromacs.org)
548                                                           
549 If you dont care about performance you can also specify 'fftpack'
550 to use a slower set of FFTs built into Gromacs. 
551 (Just install FFTW3 unless you really know what you are doing).
554   ;;
556 mkl*)
557 ###########
558 # Intel Math Kernel Library version 6 and later.
559 ##########
560 AC_MSG_CHECKING([for mkl_dfti.h])
561 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.]\
563 ## Check for library
564 #  AC_CHECK_LIB([guide],main,,AC_MSG_ERROR([Cannot find libguide (Intel MKL)]))
565   AC_CHECK_LIB([mkl],DftiComputeForward,,
566     AC_MSG_ERROR([Cannot find Intel Math Kernel Library >= 6.0]))
568   AC_DEFINE(GMX_FFT_MKL,,[Use Intel MKL FFT library])
569   ;;
571 fftpack | no)
572   AC_MSG_WARN([The built-in FFTPACK routines are slow.
573 Are you sure you don't want to use FFTW? It is free and much faster...])
574   AC_DEFINE(GMX_FFT_FFTPACK,,[Use Built-in FFTPACK FFT library])
575   ;;
577   AC_MSG_ERROR([Unknown FFT library])
578   ;;
579 esac
582 if test "$enable_fftw_measure" != "yes"; then
583    AC_DEFINE(GMX_DISABLE_FFTW_MEASURE,,[Do not optimize FFTW setups (not needed with SSE FFT kernels)])
586 ######
587 # check for xtc headers
588 case "${host_os}" in
589 cygwin* | mingw*)   # use our own xdr stuff for cygwin/mingw
590   ;;
592   AC_CHECK_HEADERS([rpc/rpc.h])
593   AC_CHECK_HEADERS([rpc/xdr.h],,,
594 [#if HAVE_RPC_RPC_H
595 # include <rpc/rpc.h>
596 #endif
598   AC_CHECK_LIB(nsl,xdr_float)
599   AC_TRY_LINK([
600 #if HAVE_RPC_RPC_H
601 #include<rpc/rpc.h> 
602 #else
603 #error NO rpc.h header
604 #endif
605 #if HAVE_RPC_XDR_H
606 #include<rpc/xdr.h>
607 #else
608 #error No xdr.h header
609 #endif
610 ],[ XDR *xd; float f; xdr_float(xd,&f);],[have_xdr="yes"])
612   if test "$have_xdr" != "yes"; then
613     AC_DEFINE(GMX_INTERNAL_XDR,,[Use our own instead of system XDR libraries])  
614     AC_MSG_WARN([Couldn't find XDR headers and/or libraries - using our own])
615   fi
616   ;;
617 esac
620 ########################################################################
621 # Checks for header files and types
622 ########################################################################
624 AC_CHECK_HEADERS([limits.h unistd.h],,AC_MSG_ERROR([Include headers not found]))
625 AC_CHECK_HEADERS(unistd.h)
626 AC_CHECK_HEADERS(sys/types.h)
627 AC_CHECK_HEADERS(sys/time.h)
628 AC_CHECK_HEADERS(regex.h,,[AC_MSG_WARN(
629 [No regex.h found.
630 Regular expression matching in selections will be disabled.
631 Selections still work, but the default groups can differ from
632 those obtained with regular expressions enabled.
633 Consider installing the regular expression library from GNU libc.])])
635 #####
636 # Checks for additional and/or optional functions or libraries.
637 #AC_FUNC_MALLOC
638 AC_FUNC_MEMCMP
639 AC_TYPE_SIGNAL
640 AC_TYPE_OFF_T
641 AC_FUNC_VPRINTF
642 AM_WITH_DMALLOC
643 AC_CHECK_FUNCS(strcasecmp)
644 AC_CHECK_FUNCS(strdup)
645 AC_CHECK_FUNCS(gettimeofday)
646 AC_CHECK_FUNCS(isnan)
647 AC_CHECK_FUNCS(_isnan)
649 # check for bool (must come late, since CFLAGS/includes might affect it)
650 AC_CHECK_TYPES([bool])
656 #############
657 # Check integer sizes, set to zero if e.g. long long is not supported.
658 # (Note: this must come *after* type checks for the corresponding types!)
659 #############
660 AC_CHECK_SIZEOF(int)
661 AC_CHECK_SIZEOF(long int)
662 AC_CHECK_SIZEOF(long long int)
663 AC_CHECK_SIZEOF(off_t)
664 AC_CHECK_SIZEOF(void*)
668 # Apple OS X is a bit strange/braindead in that it always reports itself as i386, both for
669 # 32 and 64 bit builds (even with the 64 bit kernel!).
671 # To get the SSE support right we check for the size of void * that we detected above...
672 case "${host_vendor}-${host_os}" in
673   apple-darwin*)
674   if test $ac_cv_sizeof_voidp = 8; then
675      enable_ia32_sse=no;
676   else
677      enable_x86_64_sse=no;
678   fi
679   ;;
680   *) ;;
681 esac
686 #####
687 # Look for X
688 AC_PATH_XTRA
689 if test "$no_x" != "yes"; then
690   LIBS="$X_LIBS $LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
691   INCLUDES="$INCLUDES $X_CFLAGS"
692   AM_CONDITIONAL(USE_X11,true)
693 else
694   AM_CONDITIONAL(USE_X11,false)
697 # GNU Scientific Library or not
698 AC_ARG_WITH(gsl,
699  [  --with-gsl                    Link to the GNU scientific library, enables extra functions in analysis],,with_gsl=no)
701 ######
702 if test "$with_gsl" = "yes"; then
703   ac_save_LDFLAGS="$LDFLAGS"
704   AC_CHECK_HEADERS([gsl/gsl_version.h],[
705 # header found, check for libraries 
706   AC_CHECK_LIB(gslcblas,main,[
707   LDFLAGS="$ac_save_LDFLAGS -lgslcblas"
708 # gslcblas library found, check main lib
709   AC_CHECK_LIB(gsl,main)])])
714 AC_ARG_WITH(xml,
715  [  --without-xml                 do not link to the xml2 library, disallows the use of certain file formats],,with_xml=yes)
717 #########
718 # Check for libxml2, but it is optional, so dont stop
719 # if it isnt there.
720 if test "$with_xml" = "yes"; then
721    ac_save_CPPFLAGS="$CPPFLAGS"
722    CPPFLAGS="$ac_save_CPPFLAGS -I/usr/include/libxml2"
723    AC_CHECK_HEADERS([libxml/parser.h],AC_CHECK_LIB(xml2,main))
724    if test "$ac_cv_lib_xml2_main" = "yes"; then
725      INCLUDES="$INCLUDES -I/usr/include/libxml2"
726    fi
727 # restore CPPFLAGS
728    CPPFLAGS="$ac_save_CPPFLAGS"
731 #### 
732 # And collect the f77 libs to the linker - on Solaris, f77 stuff must go first,
733 # and we need -L/usr/ucblib to find libucb... (stupid OS)
734 # On e.g. ibm the mass libraries must come before -lm... 
735 case "${host_cpu}-${host_os}" in
736   *-solaris*) 
737     LIBS="$FLIBS $LIBS" 
738     LDFLAGS="$LDFLAGS -L/usr/ucblib"
739     ;;
740   *) LIBS="$LIBS $FLIBS" ;;
741 esac
744 # add the Accelerate framework if enabled above.
745 # LDFLAGS might have been set in the CPU optimization, so we cant assign it directly before that.
746 LDFLAGS="$LDFLAGS $extra_LDFLAGS"
753 #####
754 # Checks for typedefs, structures, and compiler characteristics.
755 AC_C_CONST
756 AC_TYPE_SIZE_T
757 AC_STRUCT_TM
758 AC_C_INLINE
760 # AC_TYPE_UID_T is broken on Mac OS X, so use generic tests instead
761 AC_CHECK_TYPES([uid_t],[],[AC_DEFINE(uid_t, int, [Define to `int' if <sys/types.h> doesn't define.])],[[#include <sys/types.h>]])
762 AC_CHECK_TYPES([gid_t],[],[AC_DEFINE(gid_t, int, [Define to `int' if <sys/types.h> doesn't define.])],[[#include <sys/types.h>]])
763     
766 # Test stuff for ia32 and x86_64 assembly, and add objects/libraries.
767 if test "$enable_ia32_sse" = "yes" -o "$enable_x86_64_sse" = "yes"; then
768   AC_MSG_CHECKING([whether your compiler can handle assembly files (*.s)])
770 # Use 64-bit registers (rsp/rbp) on x86_64
772 if test "$enable_x86_64_sse" = "yes"; then
773 cat > conftestasm.s << EOF
774 checkasm:
775         mov     %rsp, %rbp
776         ret
778 else
779 cat > conftestasm.s << EOF
780 checkasm:
781         movl    %esp, %ebp
782         ret
785   if AC_TRY_COMMAND($CC $CFLAGS -c conftestasm.s); then
786     if test -f conftestasm.o; then
787       AC_MSG_RESULT([yes])
788     else
789       AC_MSG_RESULT([no])
790       AC_MSG_ERROR([Upgrade your compiler (or disable assembly loops).])
791     fi
792   else
793     AC_MSG_RESULT([no])
794     AC_MSG_ERROR([Upgrade your compiler (or disable assembly loops).])
795   fi
797 # ok, cc understands assembly.
799 # If we are using double precision we need SSE2
800   if test "$enable_float" = "no"; then
801 #   test SSE2 on ia32:
802     if test "$enable_ia32_sse" = "yes"; then
803       AC_MSG_CHECKING([whether as fully supports ia32 SSE2])
804 cat > conftest.s << EOF
805 checkasm:
806         emms
807         movapd 32(%esi,%edx,8),%xmm4
808         emms
809         ret
811       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
812         AC_MSG_RESULT([yes])
813       else
814         AC_MSG_RESULT([no])
815         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
816       fi
817       AC_DEFINE([GMX_IA32_SSE2],,[Double-precision SSE2 instructions on ia32])
818     fi
819 #   test SSE2 on X86_64:
820     if test "$enable_x86_64_sse" = "yes"; then
821       AC_MSG_CHECKING([whether as fully supports X86_64 SSE2])
822 cat > conftest.s << EOF
823 checkasm:
824         emms
825         movapd 32(%rsi,%rdx,8),%xmm4
826         emms
827         ret
829       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
830         AC_MSG_RESULT([yes])
831       else
832         AC_MSG_RESULT([no])
833         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
834       fi
835       AC_DEFINE([GMX_X86_64_SSE2],,[Double-precision SSE2 instructions on X86_64])
836     fi
837   else
838 # end of double precision testing, now do single.
839     if test "$enable_ia32_sse" = "yes"; then
840       AC_MSG_CHECKING([whether as fully supports ia32 SSE])
841 cat > conftest.s << EOF
842 checkasm:
843         emms
844         movaps 32(%esi,%edx,8),%xmm4
845         emms
846         ret
848       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
849         AC_MSG_RESULT([yes])
850       else
851         AC_MSG_RESULT([no])
852         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
853       fi
854       AC_DEFINE([GMX_IA32_SSE],,[Single-precision SSE instructions on ia32])
855     fi
856 #   test SSE2 on X86_64:
857     if test "$enable_x86_64_sse" = "yes"; then
858       AC_MSG_CHECKING([whether as fully supports X86_64 SSE instructions])
859 cat > conftest.s << EOF
860 checkasm:
861         emms
862         movaps 32(%rsi,%rdx,8),%xmm4
863         emms
864         ret
866       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
867         AC_MSG_RESULT([yes])
868       else
869         AC_MSG_RESULT([no])
870         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
871       fi
872       AC_DEFINE([GMX_X86_64_SSE],,[Single-precision SSE instructions on X86_64])
873     fi
874   fi
878 # Test stuff for ia64 assembly
880 # Nothing to test right now.
883   
886 # Test altivec support.
888 if test "$enable_ppc_altivec" = "yes"; then
889   if test "$enable_float" = "no"; then
890     AC_MSG_WARN([PowerPC Altivec loops can only be used in single precision - disabling])
891     enable_ppc_altivec=no
892   else 
893     # On FSF (vanilla) GCC we must include altivec.h, and on apple we 
894     # should NOT do it after using -faltivec. Go figure...
895     case "${host_os}" in
896     darwin*)                            
897         # do nothing on Apple systems
898        ;;
899     *)
900         AC_CHECK_HEADERS([altivec.h])
901        ;;
902     esac
904     AC_MSG_CHECKING([whether the compiler supports altivec extensions])
905     AC_TRY_COMPILE([],[
906 #ifndef __VEC__
907 choke_me
908 #endif
910     AC_MSG_RESULT([yes])
911     AC_DEFINE([GMX_PPC_ALTIVEC],,[Use PowerPC Altivec inner loops])],[
912       AC_MSG_RESULT([no])
913       AC_MSG_WARN([no altivec support found - On recent PowerPC CPUs]
914 [you can get a huge performance gain by using an altivec-enabled compiler.]
915 [On OS X, you need GCC>=3.3, or the IBM compilers. If you are using standard]
916 [GCC, you need at least version 4.0])
917       enable_ppc_altivec=no])
918   fi  
921 if test "$enable_ia64_asm" = "yes"; then
922   AC_DEFINE(GMX_IA64_ASM,,[Use ia64 assembly tuned for Itanium2])
923   AC_DEFINE(DISABLE_WATER_NLIST,,[Turn off all water neighborlist optimization])
924   AC_DEFINE(DISABLE_WATERWATER_NLIST,,[Turn off water-water neighborlist optimization only])
927 if test "$enable_bluegene" = "yes"; then
928   AC_DEFINE(GMX_BLUEGENE,,[Use assembly intrinsics kernels for BlueGene])
932 # Add the appropriate assembly loops 
934 AM_CONDITIONAL([GMX_IA32_SSE],[test "$enable_ia32_sse" = "yes" -a "$enable_float" = "yes"])
935 AM_CONDITIONAL([GMX_IA32_SSE2],[test "$enable_ia32_sse" = "yes" -a "$enable_float" = "no"])
936 AM_CONDITIONAL([GMX_X86_64_SSE],[test "$enable_x86_64_sse" = "yes" -a "$enable_float" = "yes"])
937 AM_CONDITIONAL([GMX_X86_64_SSE2],[test "$enable_x86_64_sse" = "yes" -a "$enable_float" = "no"])
938 AM_CONDITIONAL([GMX_FORTRAN],[test "$enable_fortran" = "yes"])
939 AM_CONDITIONAL([GMX_PPC_ALTIVEC],[test "$enable_ppc_altivec" = "yes" -a "$enable_float" = "yes"])
940 AM_CONDITIONAL([GMX_IA64_ASM],[test "$enable_ia64_asm" = "yes"])
941 AM_CONDITIONAL([GMX_BLUEGENE],[test "$enable_bluegene" = "yes"])
942 AM_CONDITIONAL([GMX_POWER6],[test "$enable_power6" = "yes"])
945 #############
946 # Check integer endian
947 #############
948 AC_C_BIGENDIAN([AC_DEFINE([GMX_INTEGER_BIG_ENDIAN],,[Integer byte order is big endian.])],[],[
949 AC_MSG_ERROR([Cannot determine endian in compiled output])])
950 # Little endian implied if GMX_INTEGER_BIG_ENDIAN not defined in source.
954 case "${host_cpu}" in
955    i?86) 
956          # Check if inline assembly works
957          AC_MSG_CHECKING(if the compiler supports gcc inline assembly)
958       AC_TRY_LINK([],[float f;int i; asm("fld %1\nfistpl %0\n" : "=m" (*&i) : "f" (f));],[AC_MSG_RESULT(yes)
959 AC_DEFINE(GMX_X86_GCC_INLINE_ASM,,[Enable x86 gcc inline assembly])],[AC_MSG_RESULT(no)])
960          # Check for MSVC inline assembly
961      AC_MSG_CHECKING(if the compiler supports MSVC inline assembly)
962       AC_TRY_LINK([],[float f;int i; _asm { fld f } ; _asm { fistpl i };],[AC_MSG_RESULT(yes)
963 AC_DEFINE(GMX_X86_MSVC_INLINE_ASM,,[Enable x86 MSVC inline assembly])],[AC_MSG_RESULT(no)])
964         ;;              
965    *) ;;
966 esac
969 ############
970 # Check dlopen
971 ###########
972 if test "$with_dlopen" = "yes"; then
973       AC_MSG_CHECKING(if dlopen supported)
974       CFLAGS_RET=$CFLAGS
975       CFLAGS="-I$srcdir/include -DGMX_DLOPEN $CFLAGS"
976       AC_TRY_LINK([#include "$srcdir/src/gmxlib/vmddlopen.c"],,[AC_MSG_RESULT([yes])\
977         AC_DEFINE(GMX_DLOPEN,,[Compile with dlopen])],AC_MSG_RESULT([no]))
978       CFLAGS=$CFLAGS_RET
984 ########################################################################
985 # Final output stage
986 ########################################################################
987 AS="$CC"
988 AC_SUBST(ASFLAGS)
989 AC_SUBST(AS)
990 AC_SUBST(INCLUDES)          # should be automatic, but doesnt seem to be?
992 # To tell libraries apart, we use four versions of the name. For instance, libgmx:
993 # libgmx                single prec, no mpi.
994 # libgmx_d              double prec, no mpi.
995 # libgmx_mpi            single prec, mpi.
996 # libgmx_mpi_d          double prec, mpi.
997 # However, the non-suffixed names are linked to the _mpi and/or _d suffixed
998 # ones upon installation if that is the only version available.
1000 if test "$enable_mpi" = "yes"; then
1001   LIBSUFFIX="_mpi"
1003 if test "$enable_float" = "no"; then
1004   LIBSUFFIX="${LIBSUFFIX}_d"
1006 AC_SUBST(LIBSUFFIX) 
1008 # Unless the user has explicitly requested a prefix/suffix/transform, we
1009 # use _d on double precision files. Don't add anything for mpi, but at the
1010 # end we tell the user it is possible and smart to do in some cases!
1011 if test "$program_transform_name" = "s,x,x,"; then
1012   name_transform_provided=no;
1013   if test "$enable_float" = "no"; then
1014     program_transform_name="s,\$\$,_d,"
1015   fi
1016 else
1017   name_transform_provided=yes;
1021 # Use a variable for RPM - this way it can be 
1022 # overridden with make RPM=rpm3 rpm
1023 RPM=rpm
1024 AC_SUBST(RPM)
1026 if test "$enable_fahcore" = "yes"; then  
1027   CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/../corewrap -include swindirect.h -DFULLINDIRECT -DUSE_FAH_XDR"  
1028   if test "$enable_mpi" = "yes"; then 
1029     CFLAGS="$CFLAGS -DMPI"  
1030   fi
1032 AM_CONDITIONAL([GMX_FAHCORE],[test "$enable_fahcore" = "yes"])
1035 if test "$enable_all_static" = "yes"; then
1036   LDFLAGS="$LDFLAGS -all-static"
1039 # we have asm source, so this is necessary for automake 1.6
1040 CCAS=$CC
1041 CCASFLAGS=$CFLAGS
1043 AC_SUBST(CCAS)
1044 AC_SUBST(CCASFLAGS)
1046 AC_CONFIG_FILES([ Makefile ])
1047 AC_CONFIG_FILES([ src/Makefile ])
1048 AC_CONFIG_FILES([ src/gmxlib/Makefile ])
1049 AC_CONFIG_FILES([ src/gmxlib/gmx_blas/Makefile ])
1050 AC_CONFIG_FILES([ src/gmxlib/gmx_lapack/Makefile ])
1051 AC_CONFIG_FILES([ src/gmxlib/selection/Makefile ])
1052 AC_CONFIG_FILES([ src/gmxlib/statistics/Makefile ])
1053 AC_CONFIG_FILES([ src/gmxlib/trajana/Makefile ])
1054 AC_CONFIG_FILES([ src/gmxlib/thread_mpi/Makefile ])
1055 AC_CONFIG_FILES([ src/gmxlib/nonbonded/Makefile ])
1056 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_c/Makefile ])
1057 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia32_sse/Makefile ])
1058 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia32_sse2/Makefile ])
1059 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_x86_64_sse/Makefile ])
1060 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_x86_64_sse2/Makefile ])
1061 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ppc_altivec/Makefile ])
1062 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia64_single/Makefile ])
1063 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia64_double/Makefile ])
1064 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_bluegene/Makefile ])
1065 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_power6/Makefile ])
1066 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_f77_single/Makefile ])
1067 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_f77_double/Makefile ])
1068 AC_CONFIG_FILES([ include/Makefile ])
1069 AC_CONFIG_FILES([ include/types/Makefile ])
1070 AC_CONFIG_FILES([ include/thread_mpi/Makefile ])
1071 AC_CONFIG_FILES([ include/thread_mpi/atomic/Makefile ])
1072 AC_CONFIG_FILES([ src/mdlib/Makefile ])
1073 AC_CONFIG_FILES([ src/kernel/Makefile ])
1074 AC_CONFIG_FILES([ src/tools/Makefile ])
1075 AC_CONFIG_FILES([ src/ngmx/Makefile ])
1076 AC_CONFIG_FILES([ src/contrib/Makefile ])
1077 AC_CONFIG_FILES([ scripts/Makefile ])
1078 AC_CONFIG_FILES([ admin/Makefile ])
1079 AC_CONFIG_FILES([ share/Makefile ])
1080 AC_CONFIG_FILES([ share/tutor/Makefile ])
1081 AC_CONFIG_FILES([ share/tutor/gmxdemo/Makefile ])
1082 AC_CONFIG_FILES([ share/tutor/nmr1/Makefile ])
1083 AC_CONFIG_FILES([ share/tutor/nmr2/Makefile ])
1084 AC_CONFIG_FILES([ share/tutor/water/Makefile ])
1085 AC_CONFIG_FILES([ share/tutor/mixed/Makefile ])
1086 AC_CONFIG_FILES([ share/tutor/methanol/Makefile ])
1087 AC_CONFIG_FILES([ share/tutor/speptide/Makefile ])
1088 AC_CONFIG_FILES([ share/template/Makefile ])
1089 AC_CONFIG_FILES([ share/top/Makefile ])
1090 AC_CONFIG_FILES([ share/html/Makefile ])
1091 AC_CONFIG_FILES([ share/html/images/Makefile ])
1092 AC_CONFIG_FILES([ share/html/online/Makefile ])
1093 AC_CONFIG_FILES([ man/Makefile man/man1/Makefile man/man7/Makefile ])
1094 AC_CONFIG_FILES([ Doxyfile ])
1095 AC_OUTPUT
1103 #########################################################
1104 # Echo some important info, to avoid stupid mistakes
1107 if test "$enable_float" = "no" -a "$name_transform_provided" = "no"; then
1108   echo ""
1109   echo "* You are compiling a double precision version of Gromacs -"
1110   echo "  program names will be suffixed with _d to avoid overwriting single"
1111   echo "  precision files. You can override it with --program-suffix"
1114 if test "$name_transform_provided" = "no" -a "$enable_mpi" = "yes"; then
1115   echo ""
1116   echo "* Seems you are compiling with MPI support. You can install the MPI-"
1117   echo "  enabled programs with suffixed names to have both MPI and non-MPI"
1118   echo "  versions. This is useful e.g. on supercomputers where you usually"
1119   echo "  cannot run MPI-linked programs on the login node."
1120   echo "  Set a suffix with e.g. --program-suffix=_mpi (or _mpi_d for double)."
1121   echo "  You only need MPI for mdrun, so if you already have non-MPI stuff"
1122   echo "  installed you can issue make mdrun; make install-mdrun."
1125 if test "$enable_shared" = "no"; then
1126   echo ""
1127   echo "* On most platforms you can save 10X space with dynamic libraries, although"
1128   echo "  the binaries might be less portable. Why not try --enable-shared ?"
1129 fi