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