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