A freeze group can now be allowed to move rigidly in some dimension by using "freezed...
[gromacs/rigid-bodies.git] / configure.ac
blobdf265447640174fb003158a964b0ace405312bc8
1 #######################################################################
2 # Process this file wth autoconf to produce a configure script.
3 #######################################################################
4  
5 AC_PREREQ(2.50)
7 # The "-dev" suffix is important to keep because it makes possible to distinguish 
8 # between a build from official release and a build from git release branch on a 
9 # machine with no git. 
11 # NOTE: when releasing the "-dev" suffix needs to be stripped off!
12 AC_INIT(gromacs, 4.5.4-dev, [gmx-users@gromacs.org])
13 AC_CONFIG_SRCDIR(src/gmxlib/3dview.c)
14 AC_CONFIG_AUX_DIR(config)
15 AC_CANONICAL_HOST
17 AM_INIT_AUTOMAKE(tar-ustar)
18 AC_PREFIX_DEFAULT(/usr/local/gromacs)
20 AM_CONFIG_HEADER(src/config.h)
21 dnl This is the version info according to the libtool versioning system.
22 dnl It does *not* correspond to the release number.
23 SHARED_VERSION_INFO="6:0:0"
24 AC_SUBST(SHARED_VERSION_INFO)
26 AC_ENABLE_SHARED
27 test "$enable_mpi" = "yes" && AC_DISABLE_SHARED
28 PKG_CFLAGS=""
30 #######################################################################
31 # Simple options and makefile variables
32 #######################################################################
34 ### Single/Double
35 AC_ARG_ENABLE(float,
36              [AC_HELP_STRING([--disable-float],
37                              [Use double instead of single precision])],, enable_float=yes)
39 AC_ARG_ENABLE(double,
40              [AC_HELP_STRING([--enable-double],
41                              [Same effect as --disable-float])],, enable_double=no)
42 if test "$enable_double" = "yes"; then
43    enable_float=no;
45 if test "$enable_float" = "no"; then
46   AC_DEFINE(GMX_DOUBLE,,[Compile in double precision])
47   PKG_CFLAGS="$PKG_CFLAGS -DGMX_DOUBLE"
49 AM_CONDITIONAL([GMX_DOUBLE],[test "$enable_float" = "no"])
53 ### Fortran or not
54 AC_ARG_ENABLE(fortran,
55              [AC_HELP_STRING([--enable-fortran],
56                              [Use Fortran kernels])],, 
57 [case "${host_cpu}-${host_os}" in
58   sparc*-solaris* | alpha*-* | rs6000*-aix* | powerpc*-aix* | mips*-irix*) enable_fortran=yes ;;
59   *) enable_fortran=no ;;
60  esac])
61 # always use CC for linking:
62 AC_SUBST(F77LINK,"\$(LINK)")
64 #On some systems GNU libtool's la files are more confusing for libtool than helpful due to the 
65 #hard coded paths/libs in the files. And for better linking we have pkg-config files (.pc).
66 AC_ARG_ENABLE(la-files,
67         [AS_HELP_STRING([--disable-la-files],[Do NOT install GNU libtool's la files])],,
68         [enable_la_files=yes])
69 AM_CONDITIONAL(NO_LA_FILES,[test "$enable_la_files" = no])
74 ### MPI or not
75 AC_ARG_ENABLE(mpi,
76               [AC_HELP_STRING([--enable-mpi],
77                               [Compile for parallel runs using MPI]
78                               [(instead of threads)])],,enable_mpi=no)
81 ### MPI environment
82 AC_ARG_ENABLE(mpi-environment,
83               [AC_HELP_STRING([--enable-mpi-environment=VAR],
84                               [Only start parallel runs when VAR is set])],,
85 [case "${host_cpu}" in
86   mips*-irix*) enable_mpi_environment="MPI_ENVIRONMENT" ;;
87   *) enable_mpi_environment=no ;;
88 esac])
89 if test "$enable_mpi_environment" != "no"; then
90   AC_DEFINE_UNQUOTED(GMX_CHECK_MPI_ENV,"$enable_mpi_environment",[If defined, only start MPI runs when this variable is set])
93 ### MPI_IN_PLACE
94 AC_ARG_ENABLE(mpi-in-place,
95               [AC_HELP_STRING([--disable-mpi-in-place],
96                               [Disable MPI_IN_PLACE. For MPI implementations]
97                               [that have broken support for it ]
98                               [(some versions of MPICH, for example).])],, enable_mpi_in_place=yes)
102 AC_ARG_ENABLE(debug,
103               [AC_HELP_STRING([--enable-debug],
104                               [Add -g to other command line arguments])],,enable_debug=no)
106 ### IA32 assembly code
107 AC_ARG_ENABLE(ia32_sse,
108               [AC_HELP_STRING([--disable-ia32-sse],
109                               [Don't build SSE/SSE2 assembly loops on ia32])],,enable_ia32_sse=yes)
111 case "${host_cpu}-${host_vendor}" in
112    i?86-*) ;;
113    *) enable_ia32_sse=no ;;
114 esac
116 ### AMD64 assembly code
117 AC_ARG_ENABLE(x86_64_sse,
118               [AC_HELP_STRING([--disable-x86-64-sse],
119                               [Don't build SSE assembly loops on X86_64])],,enable_x86_64_sse=yes)
120 case "${host_cpu}-${host_vendor}" in
121    x86_64-* | amd64-*) ;;
122    i?86-apple) ;;
123    *) enable_x86_64_sse=no ;;
124 esac
127 ### Altivec on powerpc (motorola)
128 AC_ARG_ENABLE(ppc_altivec,
129               [AC_HELP_STRING([--disable-ppc-altivec],
130                               [Don't build Altivec loops on PowerPC])],,enable_ppc_altivec=undef)
131 # Power3/4/5 running AIX does not support altivec. We identify this with vendor=IBM.
132 # IBM powerpc 970 boxes run linux, and have vendor=unknown.
133 if test "$enable_ppc_altivec" = "undef"; then
134   case "${host_cpu}-${host_vendor}" in
135     ppc*-ibm* | powerpc*-ibm*) enable_ppc_altivec=no ;;
136     ppc*-* | powerpc*-*) enable_ppc_altivec=yes ;; 
137     *) enable_ppc_altivec=no ;;
138   esac
141 ###################################
142 ## Detect buggy version of gcc
143 ###################################
144 AC_ARG_ENABLE(gcc41_check,
145               [AC_HELP_STRING([--disable-gcc41-check],
146                               [Disable the check for buggy gcc 4.1])],,enable_gcc41_check=yes)
150 ### ia64 assembly code
151 AC_ARG_ENABLE(ia64_asm,
152               [AC_HELP_STRING([--enable-ia64-asm],
153                               [Build assembly loops on ia64])],,enable_ia64_asm=no)
154 case "${host_cpu}" in
155    ia64) ;;
156    *) enable_ia64_asm=no ;;
157 esac
160 # IBM Power6-specific optimization
161 AC_ARG_ENABLE(power6,
162              [AC_HELP_STRING([--enable-power6],
163                              [Use IBM Power6-specific F77 kernels])],,enable_power6=no)
164 if test "$enable_power6" = "yes"; then
165   AC_DEFINE(GMX_POWER6,,[Enable IBM Power6-specific F77 kernels])
168 AC_ARG_ENABLE(bluegene,
169               [AC_HELP_STRING([--enable-bluegene],
170                               [Build assembly intrinsics kernels on bluegene])],,enable_bluegene=no)
173 ### Optimize for host cpu version
174 AC_ARG_ENABLE(cpu-optimization,     
175               [AC_HELP_STRING([--disable-cpu-optimization],
176                               [No detection or tuning flags for cpu version])],, enable_cpu_optimization=yes)
179 ### Do software 1/sqrt(x)                                                                                                            
180 AC_ARG_ENABLE(software-invsqrt,
181               [AC_HELP_STRING([--disable-software-invsqrt],
182                               [No software 1/sqrt (disabled on sgi,ibm,ia64)])],,
183 [case "${host_cpu}-${host_os}" in
184   mips*-irix* | rs6000*-aix* | powerpc*-aix | powerpc*-none | ia64*-*) enable_software_invsqrt=no ;;
185   *) enable_software_invsqrt=yes ;;
186 esac])
187 if test "$enable_software_invsqrt" = "yes"; then
188   AC_DEFINE(GMX_SOFTWARE_INVSQRT,,[Use the GROMACS software 1/sqrt(x)])
189   PKG_CFLAGS="$PKG_CFLAGS -DGMX_SOFTWARE_INVSQRT"
191 AM_CONDITIONAL([GMX_SOFTWARE_INVSQRT],[test "$enable_software_invsqrt" = "yes"])
193 AC_ARG_ENABLE(fahcore,
194               [AC_HELP_STRING([--enable-fahcore],
195                               [Create a library with mdrun functionality])],, enable_fahcore=no)
199 # The four options below used to improve code scheduling, but the newest CPUs can usually rearrange
200 # instructions dynamically at runtime, so they might not make much difference now:
203 AC_ARG_ENABLE(all-static,
204               [AC_HELP_STRING([--enable-all-static],
205                               [Make completely static binaries])],, enable_all_static=no)
206 # Dont add the -all-static flag until after the compiler test.
209 # FFT libraries - only use one...
210 AC_ARG_WITH(fft,
211             [AC_HELP_STRING([--with-fft=@<:@fftw3/fftw2/mkl(>=6.0)/fftpack@:>@],
212                             [FFT library to use. fftw3 is default, fftpack built in.])],,
213                              with_fft=fftw3)
215 AC_ARG_ENABLE(fftw-measure,
216             [AC_HELP_STRING([--disable-fftw-measure],
217                             [Dont optimize FFTs. This produces binary exactly]
218                             [reproducible runs (as the -reprod flag to mdrun),]
219                             [and if you are using FFTW on x86 and specified its]
220                             [--enable-sse/sse2 flag (NOT default in FFTW!) the]
221                             [kernels used are close-to-optimal anyway.])],,
222                              enable_fftw_measure=yes)
225 AC_ARG_ENABLE(threads,
226               [AC_HELP_STRING([--disable-threads],    
227                               [Disable parallel runs using threads])],,enable_threads=yes)
230 ### Use external BLAS/LAPACK libraries if the user wants to.
232 AC_ARG_WITH(external_blas,
233             [AC_HELP_STRING([--with-external-blas],
234                             [Use system BLAS library (add to LIBS). Automatic on OS X.])],,
236 # default action - check if we are on OS X
237 case "${host_vendor}-${host_os}" in
238   apple-darwin*) with_external_blas="yes" ; extra_LDFLAGS="-framework Accelerate" ;;
239   *)             with_external_blas="no"  ;;
240 esac
242 AM_CONDITIONAL([GMX_EXTERNAL_BLAS], [test "$with_external_blas" = "yes"])
245 AC_ARG_WITH(external_lapack,
246             [AC_HELP_STRING([--with-external-lapack],
247                             [Use system LAPACK library (add to LIBS). Automatic on OS X.])],,
249 # default action - check if we are on OS X
250 case "${host_vendor}-${host_os}" in
251   apple-darwin*) with_external_lapack="yes" ; extra_LDFLAGS="-framework Accelerate" ;;
252   *)             with_external_lapack="no"  ;;
253 esac
255 AM_CONDITIONAL([GMX_EXTERNAL_LAPACK], [test "$with_external_lapack" = "yes"])
260 AC_ARG_WITH(qmmm_gaussian,
261               [AC_HELP_STRING([--without-qmmm-gaussian],
262                               [Use modified Gaussian0x for QM-MM (see website)])],,with_qmmm_gaussian=yes)
263 if test "$with_qmmm_gaussian" = "yes"; then
264   AC_DEFINE(GMX_QMMM_GAUSSIAN,,[Use (modified) Gaussian0x for QM-MM calculations])
268 AC_ARG_WITH(qmmm_gamess,
269               [AC_HELP_STRING([--without-qmmm-gamess],
270                               [Use modified Gamess-UK for QM-MM (see website)])],,with_qmmm_gamess=no)
271 if test "$with_qmmm_gamess" = "yes"; then
272   AC_DEFINE(GMX_QMMM_GAMESS,,[Use (modified) Gamess-UK for QM-MM calculations])
276 AC_ARG_WITH(qmmm_mopac,
277               [AC_HELP_STRING([--without-qmmm-mopac],
278                               [Use modified Mopac 7 for QM-MM (see website)])],,with_qmmm_mopac=no)
279 if test "$with_qmmm_mopac" = "yes"; then
280   AC_DEFINE(GMX_QMMM_MOPAC,,[Use (modified) Mopac 7 for QM-MM calculations])
284 AC_ARG_WITH(qmmm_orca,
285               [AC_HELP_STRING([--without-qmmm-orca],
286                               [Use ORCA for QM-MM])],,with_qmmm_orca=no)
287 if test "$with_qmmm_orca"="yes"; then
288   AC_DEFINE(GMX_QMMM_ORCA,,[Use ORCA for QM-MM calculations])
292 AC_ARG_WITH(dlopen,
293             [AC_HELP_STRING([--without-dlopen],
294                             [do not compile with dlopen, needed to read VMD]
295                             [supported file formats])],,with_dlopen=yes)
299 ############################################################
300 # Add some debug info: Who is building, and on what machine?
301 ############################################################
302 AC_DEFINE_UNQUOTED([BUILD_TIME],["`date`"],[Date and time for build])
303 AC_DEFINE_UNQUOTED([BUILD_USER],["`whoami`@`hostname`"],[User doing build])
304 AC_DEFINE_UNQUOTED([BUILD_MACHINE],["`uname -srm`"],[Hardware and OS version for build host])
307 ############################################################
308 # Checks for requirements for version information generation
309 ############################################################
310 generate_version=no
311 if test -d $srcdir/.git ; then
312     AC_CHECK_PROG(have_git, git, yes, no)
313     if test "$have_git" = "yes" ; then
314         AC_MSG_CHECKING(for a recent enough git)
315         if git --git-dir=$srcdir/.git rev-list -n1 --pretty=format:%cd HEAD | grep "Mon\|Tue\|Wed\|Thu\|Fri\|Sat\|Sun" >/dev/null 2>&1; then
316             AC_MSG_RESULT(yes)
317             generate_version=yes
318             AC_DEFINE(USE_VERSION_H,,[Use generated version info])
319         else
320             AC_MSG_RESULT(no)
321         fi
322     fi
323     if test "$generate_version" = "no" ; then
324         AC_MSG_WARN([No compatible git version found, won't be able to generate proper development version information.])
325     fi
327 AM_CONDITIONAL([USE_VERSION_H],[test "$generate_version" = "yes"])
330 ############################################################
331 # Checks for programs
332 ############################################################
334 # normally we use the default compiler, but on alpha/linux we try the compaq ones first
335 case "${host_cpu}-${host_os}" in
336   alpha*-linux*)
337     cc_names="ccc cc gcc"
338     f77_names="fort f77 gfortran g77"
339     ;;
340   *) 
341     cc_names="cc icc xlc gcc"
342     f77_names="f77 ifort xlf xlf77 cf77 fl32 gfortran g77 fort77 f90 xlf90 pgf77 cf77 fort fort77 pgf90"
343     ;;
344 esac
345 # the (non-mpi) c compiler, which is also used for programs executed during build stage
346 AC_PROG_CC( $cc_names )
347 # Check for environment variable CC_FOR_BUILD before overwriting it
348 if test -z "$CC_FOR_BUILD"; then
349   CC_FOR_BUILD=$CC
352 if test "$enable_gcc41_check" = "yes"; then
353     if $CC --version 2>&1 | grep 'gcc.* 4\.1' > /dev/null 2>&1; then
354         AC_MSG_ERROR([Uh-oh. Your compilers appears to be GCC version 4.1, which unfortunately produces]
355 [buggy code at high optimimzation levels. It would be a good idea to update or]
356 [use a different compiler. If you are ABSOLUTELY sure what you are doing, you]
357 [can override this check with --disable-gcc41-check.])
358     fi
363 AC_SUBST(CC_FOR_BUILD) 
365 if test "$enable_fortran" = "yes" -o "$enable_power6" = "yes"; then 
366   AC_PROG_F77( $f77_names )
367   if test -z "$F77"; then
368     AC_MSG_ERROR([No fortran compiler found])
369   fi
372 AM_PROG_AS( $CC )
374 # if we are using mpi, also get an MPICC. We cannot set that in the PROG_CC macro
375 # above, since autoconf checks that the created file can be executed. This would
376 # fail on platforms where MPI executables can only be run through a batchqueue.
378 if test "$enable_mpi" = "yes"; then
379   enable_threads="no"
380   AC_CHECK_PROGS(MPICC, mpxlc mpicc mpcc hcc, $CC)
381 # now change the normal cc to the MPI one - see the comment above.
382   CC=$MPICC
383   CXX=$MPICC
384   AC_MSG_CHECKING([whether the MPI cc command works]) # be paranoid
385   AC_TRY_LINK([#include <mpi.h>],[int argc; char **argv; MPI_Init(&argc,&argv);],
386 AC_MSG_RESULT([yes]),AC_MSG_ERROR([Cannot compile and link MPI code with $CC]))
387   AC_DEFINE(GMX_MPI,,[Make a parallel version of GROMACS using MPI])
388   AC_DEFINE(GMX_LIB_MPI,,[Use a real MPI library])
389   PKG_CFLAGS="$PKG_CFLAGS -DGMX_LIB_MPI"
391   if test "$enable_mpi_in_place" = "yes"; then
392     # not all MPIs support MPI_IN_PLACE:
393     AC_MSG_CHECKING([for MPI_IN_PLACE in collective operations])
394     AC_TRY_COMPILE([
395 #include <mpi.h>
396 void test(void)
398     void *buf;
399     MPI_Allreduce(MPI_IN_PLACE, buf, 10, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD);
401     ],,[
402         AC_MSG_RESULT([yes])
403         AC_DEFINE(MPI_IN_PLACE_EXISTS,[],[MPI_IN_PLACE available for collective operations])
404     ],[
405         AC_MSG_RESULT([no])
406     ]) 
407   fi
409 # on the cray xt3 we have to tell autoconf that we 
410 # are actually cross-compiling even if the architecture
411 # of host and target are the same. so we enforce 
412 # cross-compilation if __QK_USER__ is defined
413   AC_MSG_CHECKING([for catamount])
414   AC_TRY_COMPILE([
415 #if defined __QK_USER__
416 #else
417 #error not catamount
418 #endif
419 ],,[
420   AC_MSG_RESULT([yes])
421   cross_compiling=yes 
422   AC_DEFINE(GMX_CRAY_XT3,[],[Enable special hacks for Cray XT3])
423   PKG_CFLAGS="$PKG_CFLAGS -DGMX_CRAY_XT3"
424   AC_DEFINE(GMX_NO_SYSTEM,[],[Ignore calls to system(3)])
425   AC_DEFINE(GMX_NO_NICE,[],[Ignore calls to nice(3)])
426   AC_DEFINE(GMX_BROKEN_CALLOC,[],[Don't use calloc(3)])
427   extra_LDFLAGS="$extra_LDFLAGS -lgmalloc -lacml"
429   AC_MSG_RESULT([no])
431 # end of "$enable_mpi" = "yes"
435 AH_TEMPLATE([F77_OR_C_FUNC],
436             [Set to F77_FUNC(name,NAME) if Fortran used, otherwise 'name' for C.])
437 AH_TEMPLATE([F77_OR_C_FUNC_],
438             [Set to F77_FUNC_(name,NAME) if Fortran used, otherwise 'name' for C.])
442 if test "$enable_fortran" = "yes" -o "$enable_power6" = "yes"; then
443   AC_F77_LIBRARY_LDFLAGS
444   AC_F77_WRAPPERS
445   AC_DEFINE([F77_OR_C_FUNC(name,NAME)],[F77_FUNC(name,NAME)])
446   AC_DEFINE([F77_OR_C_FUNC_(name,NAME)],[F77_FUNC_(name,NAME)])
447 else
448   AC_DEFINE([F77_OR_C_FUNC(name,NAME)],[name])
449   AC_DEFINE([F77_OR_C_FUNC_(name,NAME)],[name])
454 AC_PROG_CPP
455 # Needed by libtool scripts?
456 AC_PROG_EGREP
457 AC_PROG_LN_S
459 if test "$enable_cpu_optimization" = "yes"; then
460   ACX_DETECT_GMXCPU
461 else
462   gmxcpu=""
464 ACX_COMPILER_MAXOPT
467 # We've postponed the threads check because we need to check with the right
468 # compilers/flags
469 SAVED_LIBS="$LIBS"
470 if test "$enable_threads" = "yes"; then 
471   if test "$enable_mpi" = "yes"; then
472     AC_MSG_ERROR([Cannot use both threads and MPI - yet.])
473   fi
474   if test "$with_fft" = "fftw2"; then
475     AC_MSG_ERROR([fftw2 can't be used with threads. Use fftw3 or mkl.])
476   fi 
477   if test "$enable_fortran" = "yes"; then
478     AC_MSG_ERROR([FORTRAN is incompatible with threads and only provides a speed-up on certain IBM compilers. Use --disable-threads if you really want to use FORTRAN kernels.])
479   fi
480   AC_CHECK_HEADERS(unistd.h)
481   AC_CHECK_HEADERS(sys/time.h)
482   AC_CHECK_HEADERS(sched.h)
483   AC_CHECK_FUNCS(sysconf)
485   # for now we just assume pthreads
486   ACX_PTHREAD(,AC_MSG_ERROR([Cannot find POSIX threads - required for thread support using configure!]))
487   LIBS="$PTHREAD_LIBS $LIBS"
488   CFLAGS="$CFLAGS $PTHREAD_CFLAGS -I$srcdir/include"
489   CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS -I$srcdir/include"
490   CC="$PTHREAD_CC "
491   AC_DEFINE(THREAD_PTHREADS,,[Use pthreads for multithreading])
493   # profiling
494   AC_ARG_ENABLE(tmpi-profiling,
495               [AC_HELP_STRING([--enable-tmpi-profiling],
496               [Enables profiling of thread_mpi calls and wait times])],,
497               enable_tmpi_profiling=no)
498   if test "x$enable_tmpi_profiling" = "xyes"; then
499     AC_DEFINE(TMPI_PROFILE,,[Enable profiling for call and wait times])
500   fi
502   # check the atomics
503   AC_MSG_CHECKING(if atomic operations are supported)
504   CFLAGS_RET="$CFLAGS"
505   CXXFLAGS_RET="$CXXFLAGS"
506   CFLAGS="$CFLAGS -I$srcdir/include -DTMPI_CHECK_ATOMICS"
507   CXXFLAGS="$CXXFLAGS -I$srcdir/include -DTMPI_CHECK_ATOMICS"
508   # this sets a variable 'tmpi_atomics' to 'yes' if there are atomics. 
509   AC_COMPILE_IFELSE([#include "thread_mpi/atomic.h" ],
510                       [AC_MSG_RESULT(yes); tmpi_atomics=yes],
511                       [AC_MSG_WARN(
512 [No atomics.
514 This compiler+CPU combination doesn't have working atomics.
515 Thread support will be unbearably slow: disable threads.
517 Atomics should work on all but the most obscure CPU+compiler combinations;
518 if your system is not obscure -- like, for example, x86 with gcc --  please
519 contact the developers.
520 ]); tmpi_atomics=no])
521   CFLAGS="$CFLAGS_RET"
522   CXXFLAGS="$CXXFLAGS_RET"
524   AC_DEFINE(GMX_THREADS,,[Use threads for parallelization])
525   PKG_CFLAGS="$PKG_CFLAGS -DGMX_THREADS"
526   AC_DEFINE(GMX_MPI,,[Make a parallel version of GROMACS using MPI])
527   AM_CONDITIONAL(THREAD_PARALLEL,true)
528 else
529   AM_CONDITIONAL(THREAD_PARALLEL,false)
531 LIBS="$SAVED_LIBS"
535 #############
536 # Check integer endian
537 #############
538 AC_C_BIGENDIAN([AC_DEFINE([GMX_INTEGER_BIG_ENDIAN],,[Integer byte order is big endian.])],[],[
539 AC_MSG_ERROR([Cannot determine endian in compiled output])])
540 # Little endian implied if GMX_INTEGER_BIG_ENDIAN not defined in source.
542 #############
543 # Make sure size_t can hold pointers.
544 # On some Nec machines, you reportedly need to specify a flag for size_t to be 64 bits wide.
545 #############
546 AC_MSG_CHECKING([that size_t can hold pointers])
547 AC_TRY_COMPILE([
548 #include <stdlib.h>
549 #include <stddef.h>
550 ],[int chk[sizeof(size_t)-sizeof(int *)+1];],AC_MSG_RESULT([yes]),[
551    AC_MSG_ERROR([size_t is smaller than int*. Check if your compiler needs a flag to make it 64 bit.])])
554 #############
555 # Check that SIGUSR1 is defined
556 #############
557 AC_MSG_CHECKING([for SIGUSR1])
558 AC_TRY_COMPILE([#include <signal.h>],[int i=SIGUSR1;],[
559 AC_MSG_RESULT([yes])
560 AC_DEFINE(HAVE_SIGUSR1,,[SIGUSR1 supported and defined])
561 ],AC_MSG_RESULT([no]))
563 #############
564 # Check if pipes are supported
565 #############
566 AC_MSG_CHECKING([for pipes])
567 AC_TRY_COMPILE([#include <stdio.h>],[
568 FILE *pipe=popen("/tmp/pipe","r");
570 AC_MSG_RESULT([yes])
571 AC_DEFINE(HAVE_PIPES,,[Pipes (popen/pclose) supported])
572 ],AC_MSG_RESULT([no]))
576 #############
577 # Check floating-point format and endian
578 #############
579 ACX_FLOAT_FORMAT
582 AC_PROG_INSTALL
583 AC_PROG_LN_S
584 AC_PROG_MAKE_SET
585 AC_LIBTOOL_WIN32_DLL
586 AC_LIBTOOL_DLOPEN
587 AC_PROG_LIBTOOL
588 AC_SYS_LARGEFILE
590 # Use our own version of AC_FUNC_FSEEKO from autoconf 2.63 instead
591 # of the broken one we might get from autoconf 2.61.
592 ACX_FUNC_FSEEKO_FIXED
597 ############################################################################
598 # Checks for libraries.
599 ############################################################################
601 # Don't add math library for intel compilers
602 if $CC -V 2>&1 | grep 'Intel Corporation' > /dev/null 2>&1; then
603   AC_MSG_NOTICE([Using built-in math library with intel compiler])
604 else
605   AC_CHECK_LIB(m,sqrt,,AC_MSG_ERROR([No math library found]))
608 #####
609 # Disable MASS support for now.
610 #####
612 #save current LIBS
613 SAVED_LIBS="$LIBS"
615 #set empty defaults
616 PKG_FFT=""
617 FFT_LIBS=""
618 case "$with_fft" in
619 fftw2)
620   if test "$enable_float" = "yes"; then
621     sizeof_real=4
622   else
623     sizeof_real=8
624   fi
625   ACX_CHECK_FFTW2(fftw,$sizeof_real)
626   ACX_CHECK_FFTW2(rfftw,$sizeof_real)
627   FFT_LIBS="-lfftw -lrfftw"
629   case ${ac_fftw_savedprefix} in
630    d) AC_DEFINE(FFTW2_NAME_DFFTW,,[Use the d prefix on fftw2 includes]) ;;
631    s) AC_DEFINE(FFTW2_NAME_SFFTW,,[Use the s prefix on fftw2 includes]) ;;
632    *) AC_DEFINE(FFTW2_NAME_FFTW,,[Dont use any prefix on fftw2 includes]) ;;
633   esac
635   AC_DEFINE(GMX_FFT_FFTW2,,[Use FFTW2 FFT library])
637   ;; #  end of fftw2 check
639 fftw3) # Much simpler check than fftw2
640 # Check for header <fftw3.h> AC_CHECK_HEADERS doesnt work, since we must
641 # use mpicc to get includes - cpp isnt always the same compiler.
642 AC_MSG_CHECKING([for fftw3.h])
643 AC_TRY_COMPILE([#include<fftw3.h>],,[
644 # ok, look for library file too
645 AC_MSG_RESULT(yes)
646 if test "$enable_float" = "yes"; then
647   AC_CHECK_LIB([fftw3f],main,,AC_MSG_ERROR([Cannot find fftw3f library]))
648   PKG_FFT="fftw3f"
649   FFT_LIBS="-lfftw3f"
650 else
651   AC_CHECK_LIB([fftw3],main,,AC_MSG_ERROR([Cannot find fftw3 library]))
652   PKG_FFT="fftw3"
653   FFT_LIBS="-lfftw3"
655   AC_DEFINE(GMX_FFT_FFTW3,,[Use FFTW3 FFT library])
657 # not ok, echo a warning
658 AC_MSG_ERROR(
659 [Cannot find the default external FFT library (fftw3).
660 Other alternatives are 'fftw2', or 'mkl' for Intel MKL.
661 You are STRONGLY recommended to use one of these - fftw is free.
663 Use CPPFLAGS and LDFLAGS if the library is installed in a 
664 non-standard location. (see FAQ at http://www.gromacs.org)
665                                                           
666 If you dont care about performance you can also specify 'fftpack'
667 to use a slower set of FFTs built into Gromacs. 
668 (Just install FFTW3 unless you really know what you are doing).
671   ;;
673 mkl*)
674 ###########
675 # Intel Math Kernel Library version 6 and later.
676 ##########
677 AC_MSG_CHECKING([for mkl_dfti.h])
678 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.]\
680 ## Check for library
681 #  AC_CHECK_LIB([guide],main,,AC_MSG_ERROR([Cannot find libguide (Intel MKL)]))
682 #  AC_CHECK_LIB([mkl],DftiComputeForward,,
683 #    AC_MSG_ERROR([Cannot find Intel Math Kernel Library >= 6.0]))
684   # first check for older MKLs
685   AC_CHECK_LIB([mkl],DftiComputeForward,,[have_mkl="no"])
686   if test "$have_mkl" = "no"; then
687     # we assume it's a new MKL
688     LIBS="$LIBS -liomp5 -lmkl_sequential -lmkl_core"
689     LMKL=" -liomp5 -lmkl_sequential -lmkl_core"
690     AC_CHECK_LIB([mkl_intel_lp64],DftiComputeForward,,[have_mkl10_64="no"])
691     FFT_LIBS="$LMKL -lmkl_intel_lp64"
692     if test "$have_mkl10_64" = "no"; then
693       AC_CHECK_LIB([mkl_intel],DftiComputeForward,,[have_mkl10_32="no"])
694       FFT_LIBS="$LMKL -lmkl_intel"
695       if test "$have_mkl10_32" = "no"; then
696         AC_MSG_ERROR([Cannot find Intel Math Kernel Library >= 6.0])
697       fi
698     fi
699   fi
700   AC_DEFINE(GMX_FFT_MKL,,[Use Intel MKL FFT library])
701   AC_SUBST(LMKL)
702   ;;
704 fftpack | no)
705   AC_MSG_WARN([The built-in FFTPACK routines are slow.
706 Are you sure you don't want to use FFTW? It is free and much faster...])
707   AC_DEFINE(GMX_FFT_FFTPACK,,[Use Built-in FFTPACK FFT library])
708   ;;
710   AC_MSG_ERROR([Unknown FFT library])
711   ;;
712 esac
713 #restore LIBS from before fft check
714 LIBS="$SAVED_LIBS"
716 #only fftw3 has support for pkg-config
717 AC_SUBST(PKG_FFT)
718 if test -z "${PKG_FFT}"; then
719   AC_SUBST(PKG_FFT_LIBS,"$FFT_LIBS")
720 else
721   AC_SUBST(PKG_FFT_LIBS,"")
723 #flag for Makefile
724 AC_SUBST(FFT_LIBS)
726 if test "$enable_fftw_measure" != "yes"; then
727    AC_DEFINE(GMX_DISABLE_FFTW_MEASURE,,[Do not optimize FFTW setups (not needed with SSE FFT kernels)])
730 ######
731 # check for xtc headers
732 case "${host_os}" in
733 cygwin* | mingw*)   # use our own xdr stuff for cygwin/mingw
734   ;;
736   AC_CHECK_HEADERS([rpc/rpc.h])
737   AC_CHECK_HEADERS([rpc/xdr.h],,,
738 [#if HAVE_RPC_RPC_H
739 # include <rpc/rpc.h>
740 #endif
742   AC_CHECK_LIB(nsl,xdr_float)
743   AC_TRY_LINK([
744 #if HAVE_RPC_RPC_H
745 #include<rpc/rpc.h> 
746 #else
747 #error NO rpc.h header
748 #endif
749 #if HAVE_RPC_XDR_H
750 #include<rpc/xdr.h>
751 #else
752 #error No xdr.h header
753 #endif
754 ],[ XDR *xd; float f; xdr_float(xd,&f);],[have_xdr="yes"])
756   if test "$have_xdr" != "yes"; then
757     AC_DEFINE(GMX_INTERNAL_XDR,,[Use our own instead of system XDR libraries])  
758     PKG_CFLAGS="$PKG_CFLAGS -DGMX_INTERNAL_XDR"
759     AC_MSG_WARN([Couldn't find XDR headers and/or libraries - using our own])
760   fi
761   ;;
762 esac
765 ########################################################################
766 # Checks for header files and types
767 ########################################################################
769 AC_CHECK_HEADERS([limits.h unistd.h],,AC_MSG_ERROR([Include headers not found]))
770 AC_CHECK_HEADERS(unistd.h)
771 AC_CHECK_HEADERS(direct.h)
772 AC_CHECK_HEADERS(sys/types.h)
773 AC_CHECK_HEADERS(sys/time.h)
774 AC_CHECK_HEADERS(dirent.h,,[AC_MSG_WARN(
776 ********************************************************************
777 * WARNING! We could not find the header file dirent.h              *
778 *                                                                  *
779 * Without this header, we will not be able to scan directories for *
780 * files, which completely breaks pdb2gmx. You will still be able   *
781 * to run simulations, but you cannot prepare input data.           *
782 * dirent.h is part of the POSIX 2001-1 standard, and should be     *
783 * present on all UNIX-like systems, CygWin, and MinGW.             *
784 ********************************************************************])])
785 ## NOTE: On native windows we do not use configure.ac
786 AC_CHECK_HEADERS(regex.h,,[AC_MSG_WARN(
787 [No regex.h found.
788 Regular expression matching in selections will be disabled.
789 Selections still work, but the default groups can differ from
790 those obtained with regular expressions enabled.
791 Consider installing the regular expression library from GNU libc.])])
795 #####
796 # Checks for additional and/or optional functions or libraries.
797 #AC_FUNC_MALLOC
798 AC_FUNC_MEMCMP
799 AC_TYPE_SIGNAL
800 AC_TYPE_OFF_T
801 AC_FUNC_VPRINTF
802 AM_WITH_DMALLOC
803 AC_CHECK_FUNCS(strcasecmp)
804 AC_CHECK_FUNCS(strdup)
805 AC_CHECK_FUNCS(gettimeofday)
806 AC_CHECK_FUNCS(cbrt)
807 AC_CHECK_FUNCS(isnan)
808 AC_CHECK_FUNCS(_isnan)
809 AC_CHECK_FUNCS(isfinite)
810 AC_CHECK_FUNCS(_isfinite)
811 AC_CHECK_FUNCS(fsync)
812 AC_CHECK_FUNCS(fileno)
814 # check for bool (must come late, since CFLAGS/includes might affect it)
815 AC_CHECK_TYPES([bool])
816 AC_SEARCH_LIBS(posix_memalign, c, AC_DEFINE(HAVE_POSIX_MEMALIGN, 1, Define to 1 if you have the posix_memalign function))
817 AC_SEARCH_LIBS(memalign, c, AC_DEFINE(HAVE_MEMALIGN, 1, Define to 1 if you have the memalign function))
818 AC_CHECK_FUNCS(_aligned_malloc)
819 #AC_SEARCH_LIBS(_aligned_malloc, c, AC_DEFINE(HAVE__ALIGNED_MALLOC, 1, Define to 1 if you have the _aligned_malloc function))
826 #############
827 # Check integer sizes, set to zero if e.g. long long is not supported.
828 # (Note: this must come *after* type checks for the corresponding types!)
829 #############
830 AC_CHECK_SIZEOF(int)
831 AC_CHECK_SIZEOF(long int)
832 AC_CHECK_SIZEOF(long long int)
833 AC_CHECK_SIZEOF(off_t)
834 AC_CHECK_SIZEOF(void*)
838 # Apple OS X is a bit strange/braindead in that it always reports itself as i386, both for
839 # 32 and 64 bit builds (even with the 64 bit kernel!).
841 # To get the SSE support right we check for the size of void * that we detected above...
842 case "${host_vendor}-${host_os}" in
843   apple-darwin*)
844   if test $ac_cv_sizeof_voidp = 8; then
845      enable_ia32_sse=no;
846   else
847      enable_x86_64_sse=no;
848   fi
849   ;;
850   *) ;;
851 esac
856 #####
857 # Look for X
858 AC_PATH_XTRA
859 if test "$no_x" != "yes"; then
860   AM_CONDITIONAL(USE_X11,true)
861 else
862   AM_CONDITIONAL(USE_X11,false)
865 # GNU Scientific Library or not
866 AC_ARG_WITH(gsl,
867  [AC_HELP_STRING([--with-gsl],[Link to the GNU scientific library, ]
868                  [enables extra functions in analysis])],,with_gsl=no)
870 ######
871 PKG_GSL=""
872 GSL_LIBS=""
873 if test "$with_gsl" = "yes"; then
874   SAVED_LIBS="$LIBS"
875   AC_CHECK_HEADERS([gsl/gsl_version.h],[
876 # header found, check for libraries 
877   AC_CHECK_LIB(gslcblas,main,[
878 # gslcblas library found, check main lib
879   AC_CHECK_LIB(gsl,main,[
880 # everything need for gsl found
881   GSL_LIBS="-lgsl -lgslcblas"
882 #gsl has pkg-config support
883   PKG_GSL="gsl"
884   AC_DEFINE(HAVE_LIBGSL,1,[Do we have libgsl])
885   ],[:],[-lgslcblas])])])
886   LIBS="$SAVED_LIBS"
889 AC_SUBST(PKG_GSL)
890 AC_SUBST(GSL_LIBS)
892 AC_ARG_WITH(xml,
893  [AC_HELP_STRING([--without-xml],[do not link to the xml2 library,] 
894                  [disallows the use of certain file formats])],,with_xml=yes)
896 #########
897 # Check for libxml2, but it is optional, so dont stop
898 # if it isnt there.
899 PKG_XML=""
900 XML_LIBS=""
901 if test "$with_xml" = "yes"; then
902    SAVED_LIBS="$LIBS"
903    ac_save_CPPFLAGS="$CPPFLAGS"
904    CPPFLAGS="$ac_save_CPPFLAGS -I/usr/include/libxml2"
905    AC_CHECK_HEADERS([libxml/parser.h],AC_CHECK_LIB(xml2,main))
906    if test "$ac_cv_lib_xml2_main" = "yes"; then
907      INCLUDES="$INCLUDES -I/usr/include/libxml2"
908      PKG_XML="libxml-2.0"
909      XML_LIBS="-lxml2"
910      if test "$enable_all_static" = "yes"; then
911        LDFLAGS_RET=$LDFLAGS
912        LDFLAGS="-static $LDFLAGS"
913        LIBS_RET="$LIBS"
914        LIBS="$LIBS -lz"
915        AC_MSG_CHECKING(for broken libxml2)
916        AC_TRY_RUN([
917 #include <libxml/parser.h>
918 main() {
919   xmlInitParser();
920   return 0;
922        AC_MSG_RESULT([no]),[AC_MSG_RESULT([yes])
923        AC_MSG_ERROR([Your libxml2 is broken for static linking, recompile it without threads or build gromacs without libxml])],[-lz])
924        LDFLAGS=$LDFLAGS_RET
925        LIBS="$LIBS_RET"
926      fi
927    fi
928 # restore CPPFLAGS
929    CPPFLAGS="$ac_save_CPPFLAGS"
930    LIBS="$SAVED_LIBS"
932 AC_SUBST(PKG_XML)
933 AC_SUBST(XML_LIBS)
935 #### 
936 # And collect the f77 libs to the linker - on Solaris, f77 stuff must go first,
937 # and we need -L/usr/ucblib to find libucb... (stupid OS)
938 # On e.g. ibm the mass libraries must come before -lm... 
939 case "${host_cpu}-${host_os}" in
940   *-solaris*) 
941     LIBS="$FLIBS $LIBS" 
942     LDFLAGS="$LDFLAGS -L/usr/ucblib"
943     ;;
944   *) LIBS="$LIBS $FLIBS" ;;
945 esac
948 # add the Accelerate framework if enabled above.
949 # LDFLAGS might have been set in the CPU optimization, so we cant assign it directly before that.
950 LDFLAGS="$LDFLAGS $extra_LDFLAGS"
957 #####
958 # Checks for typedefs, structures, and compiler characteristics.
959 AC_C_CONST
960 AC_TYPE_SIZE_T
961 AC_STRUCT_TM
962 AC_C_INLINE
963 AC_C_RESTRICT
965 # AC_TYPE_UID_T is broken on Mac OS X, so use generic tests instead
966 AC_CHECK_TYPES([uid_t],[],[AC_DEFINE(uid_t, int, [Define to `int' if <sys/types.h> doesn't define.])],[[#include <sys/types.h>]])
967 AC_CHECK_TYPES([gid_t],[],[AC_DEFINE(gid_t, int, [Define to `int' if <sys/types.h> doesn't define.])],[[#include <sys/types.h>]])
969 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>]])
971     
974 # Test stuff for ia32 and x86_64 assembly, and add objects/libraries.
975 if test "$enable_ia32_sse" = "yes" -o "$enable_x86_64_sse" = "yes"; then
976   AC_MSG_CHECKING([whether your compiler can handle assembly files (*.s)])
978 # Use 64-bit registers (rsp/rbp) on x86_64
980 if test "$enable_x86_64_sse" = "yes"; then
981 cat > conftestasm.s << EOF
982 checkasm:
983         mov     %rsp, %rbp
984         ret
986 else
987 cat > conftestasm.s << EOF
988 checkasm:
989         movl    %esp, %ebp
990         ret
993   if AC_TRY_COMMAND($CC $CFLAGS -c conftestasm.s); then
994     if test -f conftestasm.o; then
995       AC_MSG_RESULT([yes])
996     else
997       AC_MSG_RESULT([no])
998       AC_MSG_ERROR([Upgrade your compiler (or disable assembly loops).])
999     fi
1000   else
1001     AC_MSG_RESULT([no])
1002     AC_MSG_ERROR([Upgrade your compiler (or disable assembly loops).])
1003   fi
1005 # ok, cc understands assembly.
1007 # If we are using double precision we need SSE2
1008   if test "$enable_float" = "no"; then
1009 #   test SSE2 on ia32:
1010     if test "$enable_ia32_sse" = "yes"; then
1011       AC_MSG_CHECKING([whether as fully supports ia32 SSE2])
1012 cat > conftest.s << EOF
1013 checkasm:
1014         emms
1015         movapd 32(%esi,%edx,8),%xmm4
1016         emms
1017         ret
1019       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
1020         AC_MSG_RESULT([yes])
1021       else
1022         AC_MSG_RESULT([no])
1023         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
1024       fi
1025       AC_DEFINE([GMX_IA32_SSE2],,[Double-precision SSE2 instructions on ia32])
1026     fi
1027 #   test SSE2 on X86_64:
1028     if test "$enable_x86_64_sse" = "yes"; then
1029       AC_MSG_CHECKING([whether as fully supports X86_64 SSE2])
1030 cat > conftest.s << EOF
1031 checkasm:
1032         emms
1033         movapd 32(%rsi,%rdx,8),%xmm4
1034         emms
1035         ret
1037       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
1038         AC_MSG_RESULT([yes])
1039       else
1040         AC_MSG_RESULT([no])
1041         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
1042       fi
1043       AC_DEFINE([GMX_X86_64_SSE2],,[Double-precision SSE2 instructions on X86_64])
1044     fi
1045   else
1046 # end of double precision testing, now do single.
1047     if test "$enable_ia32_sse" = "yes"; then
1048       AC_MSG_CHECKING([whether as fully supports ia32 SSE])
1049 cat > conftest.s << EOF
1050 checkasm:
1051         emms
1052         movaps 32(%esi,%edx,8),%xmm4
1053         emms
1054         ret
1056       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
1057         AC_MSG_RESULT([yes])
1058       else
1059         AC_MSG_RESULT([no])
1060         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
1061       fi
1062       AC_DEFINE([GMX_IA32_SSE],,[Single-precision SSE instructions on ia32])
1063     fi
1064 #   test SSE2 on X86_64:
1065     if test "$enable_x86_64_sse" = "yes"; then
1066       AC_MSG_CHECKING([whether as fully supports X86_64 SSE instructions])
1067 cat > conftest.s << EOF
1068 checkasm:
1069         emms
1070         movaps 32(%rsi,%rdx,8),%xmm4
1071         emms
1072         ret
1074       if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
1075         AC_MSG_RESULT([yes])
1076       else
1077         AC_MSG_RESULT([no])
1078         AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
1079       fi
1080       AC_DEFINE([GMX_X86_64_SSE],,[Single-precision SSE instructions on X86_64])
1081     fi
1082   fi
1086 # Test stuff for ia64 assembly
1088 # Nothing to test right now.
1091   
1094 # Test altivec support.
1096 if test "$enable_ppc_altivec" = "yes"; then
1097   if test "$enable_float" = "no"; then
1098     AC_MSG_WARN([PowerPC Altivec loops can only be used in single precision - disabling])
1099     enable_ppc_altivec=no
1100   else 
1101     # On FSF (vanilla) GCC we must include altivec.h, and on apple we 
1102     # should NOT do it after using -faltivec. Go figure...
1103     case "${host_os}" in
1104     darwin*)                            
1105         # do nothing on Apple systems
1106        ;;
1107     *)
1108         AC_CHECK_HEADERS([altivec.h])
1109        ;;
1110     esac
1112     AC_MSG_CHECKING([whether the compiler supports altivec extensions])
1113     AC_TRY_COMPILE([],[
1114 #ifndef __VEC__
1115 choke_me
1116 #endif
1118     AC_MSG_RESULT([yes])
1119     AC_DEFINE([GMX_PPC_ALTIVEC],,[Use PowerPC Altivec inner loops])],[
1120       AC_MSG_RESULT([no])
1121       AC_MSG_WARN([no altivec support found - On recent PowerPC CPUs]
1122 [you can get a huge performance gain by using an altivec-enabled compiler.]
1123 [On OS X, you need GCC>=3.3, or the IBM compilers. If you are using standard]
1124 [GCC, you need at least version 4.0])
1125       enable_ppc_altivec=no])
1126   fi  
1129 if test "$enable_ia64_asm" = "yes"; then
1130   AC_DEFINE(GMX_IA64_ASM,,[Use ia64 assembly tuned for Itanium2])
1131   AC_DEFINE(DISABLE_WATER_NLIST,,[Turn off all water neighborlist optimization])
1132   AC_DEFINE(DISABLE_WATERWATER_NLIST,,[Turn off water-water neighborlist optimization only])
1135 if test "$enable_bluegene" = "yes"; then
1136   AC_DEFINE(GMX_BLUEGENE,,[Use assembly intrinsics kernels for BlueGene])
1137   AC_DEFINE_UNQUOTED(GMX_POWERPC_INVSQRT,,[Use the PowerPC hardware 1/sqrt(x)])
1138   PKG_CFLAGS="$PKG_CFLAGS -DGMX_POWERPC_INVSQRT"
1141 if test "$enable_fortran" = "yes"; then
1142   AC_DEFINE(GMX_FORTRAN,,[Enable Fortran support])
1146 # Add the appropriate assembly loops 
1148 AM_CONDITIONAL([GMX_IA32_SSE],[test "$enable_ia32_sse" = "yes" -a "$enable_float" = "yes"])
1149 AM_CONDITIONAL([GMX_IA32_SSE2],[test "$enable_ia32_sse" = "yes" -a "$enable_float" = "no"])
1150 AM_CONDITIONAL([GMX_X86_64_SSE],[test "$enable_x86_64_sse" = "yes" -a "$enable_float" = "yes"])
1151 AM_CONDITIONAL([GMX_X86_64_SSE2],[test "$enable_x86_64_sse" = "yes" -a "$enable_float" = "no"])
1152 AM_CONDITIONAL([GMX_FORTRAN],[test "$enable_fortran" = "yes"])
1153 AM_CONDITIONAL([GMX_PPC_ALTIVEC],[test "$enable_ppc_altivec" = "yes" -a "$enable_float" = "yes"])
1154 AM_CONDITIONAL([GMX_IA64_ASM],[test "$enable_ia64_asm" = "yes"])
1155 AM_CONDITIONAL([GMX_BLUEGENE],[test "$enable_bluegene" = "yes"])
1156 AM_CONDITIONAL([GMX_POWER6],[test "$enable_power6" = "yes"])
1159 #############
1160 # Check integer endian
1161 #############
1162 AC_C_BIGENDIAN([AC_DEFINE([GMX_INTEGER_BIG_ENDIAN],,[Integer byte order is big endian.])],[],[
1163 AC_MSG_ERROR([Cannot determine endian in compiled output])])
1164 # Little endian implied if GMX_INTEGER_BIG_ENDIAN not defined in source.
1168 case "${host_cpu}" in
1169    i?86) 
1170          # Check if inline assembly works
1171          AC_MSG_CHECKING(if the compiler supports gcc inline assembly)
1172       AC_TRY_LINK([],[float f;int i; asm("fld %1\nfistpl %0\n" : "=m" (*&i) : "f" (f));],[AC_MSG_RESULT(yes)
1173 AC_DEFINE(GMX_X86_GCC_INLINE_ASM,,[Enable x86 gcc inline assembly])],[AC_MSG_RESULT(no)])
1174          # Check for MSVC inline assembly
1175      AC_MSG_CHECKING(if the compiler supports MSVC inline assembly)
1176       AC_TRY_LINK([],[float f;int i; _asm { fld f } ; _asm { fistpl i };],[AC_MSG_RESULT(yes)
1177 AC_DEFINE(GMX_X86_MSVC_INLINE_ASM,,[Enable x86 MSVC inline assembly])],[AC_MSG_RESULT(no)])
1178         ;;              
1179    *) ;;
1180 esac
1183 ############
1184 # Check dlopen
1185 ###########
1186 if test "$with_dlopen" = "yes"; then
1187       AC_MSG_CHECKING(if dlopen supported)
1188       CFLAGS_RET=$CFLAGS
1189       #LDFLAGS="$lt_cv_dlopen_libs $LDFLAGS" #can't make the macro, which is getting lt_cv_dlopen_libs, to work
1190       LDFLAGS_RET=$LDFLAGS
1191       LIBS_RET=$LIBS
1192       if test "$enable_all_static" = "yes"; then  #make sure we test also whether it works static
1193          LDFLAGS="$LDFLAGS -static"
1194       fi
1195       CFLAGS="-I$srcdir/include -DGMX_DLOPEN $CFLAGS"
1196       LIBS="$DLOPEN_LIBS $LIBS"
1197       AC_TRY_LINK([#include "$srcdir/src/gmxlib/vmddlopen.c"],,[
1198         AC_MSG_RESULT([yes])
1199         AC_DEFINE(GMX_DLOPEN,,[Compile with dlopen])
1200         AC_SUBST(DLOPEN_LIBS)
1201       ],[
1202         AC_MSG_RESULT([no])
1203         AC_SUBST(DLOPEN_LIBS,"")
1204       ])
1205       CFLAGS=$CFLAGS_RET
1206       LIBS=$LIBS_RET
1207       LDFLAGS=$LDFLAGS_RET
1213 ########################################################################
1214 # Final output stage
1215 ########################################################################
1216 AS="$CC"
1217 AC_SUBST(ASFLAGS)
1218 AC_SUBST(AS)
1219 AC_SUBST(INCLUDES)          # should be automatic, but doesnt seem to be?
1221 # To tell libraries apart, we use four versions of the name. For instance, libgmx:
1222 # libgmx                single prec, no mpi.
1223 # libgmx_d              double prec, no mpi.
1224 # libgmx_mpi            single prec, mpi.
1225 # libgmx_mpi_d          double prec, mpi.
1226 # However, the non-suffixed names are linked to the _mpi and/or _d suffixed
1227 # ones upon installation if that is the only version available.
1229 AC_ARG_VAR(
1230   [LIBSUFFIX],
1231   [To tell libraries apart, a suffix can be used. This is normally done
1232    automatically during ./configure (_d|_mpi|_mpi_d). But with this
1233    variable you can overwrite it
1234   ]
1236 if test -z "${LIBSUFFIX}" ; then
1237   if test "$enable_mpi" = "yes"; then
1238     LIBSUFFIX="_mpi"
1239   fi
1240   if test "$enable_float" = "no"; then
1241     LIBSUFFIX="${LIBSUFFIX}_d"
1242   fi
1244 AC_SUBST(LIBSUFFIX)
1246 # Unless the user has explicitly requested a prefix/suffix/transform, we
1247 # use _d on double precision files. Don't add anything for mpi, but at the
1248 # end we tell the user it is possible and smart to do in some cases!
1249 if test "$program_transform_name" = "s,x,x,"; then
1250   name_transform_provided=no;
1251   if test "$enable_float" = "no"; then
1252     program_transform_name="s,\$\$,_d,"
1253   fi
1254 else
1255   name_transform_provided=yes;
1259 # Use a variable for RPM - this way it can be 
1260 # overridden with make RPM=rpm3 rpm
1261 RPM=rpm
1262 AC_SUBST(RPM)
1264 if test "$enable_fahcore" = "yes"; then  
1265   CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/../corewrap -include swindirect.h -DFULLINDIRECT -DUSE_FAH_XDR"  
1266   if test "$enable_mpi" = "yes"; then 
1267     CFLAGS="$CFLAGS -DMPI"  
1268   fi
1270 AM_CONDITIONAL([GMX_FAHCORE],[test "$enable_fahcore" = "yes"])
1273 if test "$enable_all_static" = "yes"; then
1274   LDFLAGS="$LDFLAGS -all-static"
1277 # we have asm source, so this is necessary for automake 1.6
1278 CCAS=$CC
1279 CCASFLAGS=$CFLAGS
1281 AC_SUBST(CCAS)
1282 AC_SUBST(CCASFLAGS)
1283 AC_SUBST(PKG_CFLAGS)
1285 AC_CONFIG_FILES([ Makefile ])
1286 AC_CONFIG_FILES([ src/Makefile ])
1287 AC_CONFIG_FILES([ src/gmxlib/Makefile ])
1288 AC_CONFIG_FILES([ src/gmxlib/libgmx${LIBSUFFIX}.pc:src/gmxlib/libgmx.pc.in ])
1289 AC_CONFIG_FILES([ src/gmxlib/gmx_blas/Makefile ])
1290 AC_CONFIG_FILES([ src/gmxlib/gmx_lapack/Makefile ])
1291 AC_CONFIG_FILES([ src/gmxlib/selection/Makefile ])
1292 AC_CONFIG_FILES([ src/gmxlib/statistics/Makefile ])
1293 AC_CONFIG_FILES([ src/gmxlib/trajana/Makefile ])
1294 AC_CONFIG_FILES([ src/gmxlib/thread_mpi/Makefile ])
1295 AC_CONFIG_FILES([ src/gmxlib/nonbonded/Makefile ])
1296 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_c/Makefile ])
1297 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia32_sse/Makefile ])
1298 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia32_sse2/Makefile ])
1299 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_x86_64_sse/Makefile ])
1300 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_x86_64_sse2/Makefile ])
1301 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ppc_altivec/Makefile ])
1302 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia64_single/Makefile ])
1303 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia64_double/Makefile ])
1304 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_bluegene/Makefile ])
1305 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_power6/Makefile ])
1306 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_f77_single/Makefile ])
1307 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_f77_double/Makefile ])
1308 AC_CONFIG_FILES([ include/Makefile ])
1309 AC_CONFIG_FILES([ include/types/Makefile ])
1310 AC_CONFIG_FILES([ include/thread_mpi/Makefile ])
1311 AC_CONFIG_FILES([ include/thread_mpi/atomic/Makefile ])
1312 AC_CONFIG_FILES([ src/mdlib/Makefile ])
1313 AC_CONFIG_FILES([ src/mdlib/libmd${LIBSUFFIX}.pc:src/mdlib/libmd.pc.in ])
1314 AC_CONFIG_FILES([ src/kernel/Makefile ])
1315 AC_CONFIG_FILES([ src/kernel/libgmxpreprocess${LIBSUFFIX}.pc:src/kernel/libgmxpreprocess.pc.in ])
1316 AC_CONFIG_FILES([ src/tools/Makefile ])
1317 AC_CONFIG_FILES([ src/tools/libgmxana${LIBSUFFIX}.pc:src/tools/libgmxana.pc.in ])
1318 AC_CONFIG_FILES([ src/ngmx/Makefile ])
1319 AC_CONFIG_FILES([ src/contrib/Makefile ])
1320 AC_CONFIG_FILES([ scripts/Makefile ])
1321 AC_CONFIG_FILES([ admin/Makefile ])
1322 AC_CONFIG_FILES([ share/Makefile ])
1323 AC_CONFIG_FILES([ share/tutor/Makefile ])
1324 AC_CONFIG_FILES([ share/tutor/gmxdemo/Makefile ])
1325 AC_CONFIG_FILES([ share/tutor/nmr1/Makefile ])
1326 AC_CONFIG_FILES([ share/tutor/nmr2/Makefile ])
1327 AC_CONFIG_FILES([ share/tutor/water/Makefile ])
1328 AC_CONFIG_FILES([ share/tutor/mixed/Makefile ])
1329 AC_CONFIG_FILES([ share/tutor/methanol/Makefile ])
1330 AC_CONFIG_FILES([ share/tutor/speptide/Makefile ])
1331 AC_CONFIG_FILES([ share/template/Makefile ])
1332 AC_CONFIG_FILES([ share/top/Makefile ])
1333 AC_CONFIG_FILES([ share/top/gmx.ff/Makefile ])
1334 AC_CONFIG_FILES([ share/top/gmx2.ff/Makefile ])
1335 AC_CONFIG_FILES([ share/top/encadv.ff/Makefile ])
1336 AC_CONFIG_FILES([ share/top/encads.ff/Makefile ])
1337 AC_CONFIG_FILES([ share/top/oplsaa.ff/Makefile ])
1338 AC_CONFIG_FILES([ share/top/gromos43a1.ff/Makefile ])
1339 AC_CONFIG_FILES([ share/top/gromos43a2.ff/Makefile ])
1340 AC_CONFIG_FILES([ share/top/gromos45a3.ff/Makefile ])
1341 AC_CONFIG_FILES([ share/top/gromos53a5.ff/Makefile ])
1342 AC_CONFIG_FILES([ share/top/gromos53a6.ff/Makefile ])
1343 AC_CONFIG_FILES([ share/top/charmm27.ff/Makefile ])
1344 AC_CONFIG_FILES([ share/top/amber94.ff/Makefile ])
1345 AC_CONFIG_FILES([ share/top/amber96.ff/Makefile ])
1346 AC_CONFIG_FILES([ share/top/amberGS.ff/Makefile ])
1347 AC_CONFIG_FILES([ share/top/amber99.ff/Makefile ])
1348 AC_CONFIG_FILES([ share/top/amber99sb.ff/Makefile ])
1349 AC_CONFIG_FILES([ share/top/amber99sb-ildn.ff/Makefile ])
1350 AC_CONFIG_FILES([ share/top/amber03.ff/Makefile ])
1351 AC_CONFIG_FILES([ share/html/Makefile ])
1352 AC_CONFIG_FILES([ share/html/images/Makefile ])
1353 AC_CONFIG_FILES([ share/html/online/Makefile ])
1354 AC_CONFIG_FILES([ man/Makefile man/man1/Makefile man/man7/Makefile ])
1355 AC_CONFIG_FILES([ Doxyfile ])
1356 AC_OUTPUT
1364 #########################################################
1365 # Echo some important info, to avoid stupid mistakes
1368 if test "$enable_float" = "no" -a "$name_transform_provided" = "no"; then
1369   echo ""
1370   echo "* You are compiling a double precision version of Gromacs -"
1371   echo "  program names will be suffixed with _d to avoid overwriting single"
1372   echo "  precision files. You can override it with --program-suffix"
1375 if test "$name_transform_provided" = "no" -a "$enable_mpi" = "yes"; then
1376   echo ""
1377   echo "* Seems you are compiling with MPI support. You can install the MPI-"
1378   echo "  enabled programs with suffixed names to have both MPI and non-MPI"
1379   echo "  versions. This is useful e.g. on supercomputers where you usually"
1380   echo "  cannot run MPI-linked programs on the login node."
1381   echo "  Set a suffix with e.g. --program-suffix=_mpi (or _mpi_d for double)."
1382   echo "  You only need MPI for mdrun, so if you already have non-MPI stuff"
1383   echo "  installed you can issue make mdrun; make install-mdrun."
1384   echo ""
1385   echo "  WARNING:"
1386   echo "  There are known problems with some MPI implementations:"
1387   echo "             OpenMPI version < 1.4.1" 
1388   echo "             MVAPICH2 version <= 1.4.1"
1391 if test "$enable_shared" = "no"; then
1392   echo ""
1393   echo "* On most platforms you can save 10X space with dynamic libraries, although"
1394   echo "  the binaries might be less portable. Why not try --enable-shared ?"
1395 fi  
1398 if test "$tmpi_atomics" = "no"; then
1399   echo ""
1400   echo "* This compiler+CPU combination doesn't have working atomic operations."
1401   echo "  Thread support will be unbearably slow: the default number of threads"
1402   echo "  is set to 1."
1403   echo "  Atomics should work on all but the most obscure CPU+compiler"
1404   echo "  combinations; if your system is not obscure (like, for example, x86"
1405   echo "  with gcc) please contact the developers."
1406   echo ""