1define([sc_mmm_version],[2.3.1])
2define([sc_buildid],[])
3define([sc_so_version],[8:0:1])
4
5dnl Process this file with autoconf to produce a configure script.
6define([AC_CACHE_LOAD], )dnl for debugging configure.in
7define([AC_CACHE_SAVE], )dnl for debugging configure.in
8AC_INIT(src/lib/util/ref/ref.h)
9AC_PREREQ(2.55)
10AC_CONFIG_HEADER(src/lib/scconfig.h)
11AC_CONFIG_AUX_DIR(bin)
12
13AC_CANONICAL_SYSTEM
14
15AC_DEFINE_UNQUOTED(HOST_ARCH, "$host")
16AC_DEFINE_UNQUOTED(TARGET_ARCH, "$target")
17
18define([default_prefix_dash],ifelse(sc_buildid, ,[],[-]))
19define([default_prefix],builtin(format,"/usr/local/mpqc/%s%s%s",
20                        sc_mmm_version,default_prefix_dash,sc_buildid))
21
22SC_MMM_VERSION=sc_mmm_version
23
24SC_SO_VERSION=sc_so_version
25AC_SUBST(SC_SO_VERSION)
26
27changequote(<<, >>)dnl
28SC_MAJOR_VERSION=`echo $SC_MMM_VERSION|sed 's/\([0-9]*\)\.[0-9]*\.[0-9]*/\1/'`
29SC_MINOR_VERSION=`echo $SC_MMM_VERSION|sed 's/[0-9]*\.\([0-9]*\)\.[0-9]*/\1/'`
30SC_MICRO_VERSION=`echo $SC_MMM_VERSION|sed 's/[0-9]*\.[0-9]*\.\([0-9]*\)/\1/'`
31changequote([, ])dnl
32AC_DEFINE_UNQUOTED(SC_MAJOR_VERSION,$SC_MAJOR_VERSION)
33AC_DEFINE_UNQUOTED(SC_MINOR_VERSION,$SC_MINOR_VERSION)
34AC_DEFINE_UNQUOTED(SC_MICRO_VERSION,$SC_MICRO_VERSION)
35
36EXCLUDED_DIRS=
37
38dnl --------- Features ---------
39
40AC_ARG_ENABLE(debug,
41[  --enable-debug          Compile with debugging options],
42[
43case $enableval in
44  yes)
45    DEBUG=yes
46  ;;
47  no)
48    DEBUG=no
49  ;;
50  opt)
51    DEBUG=opt
52  ;;
53  *)
54    AC_MSG_ERROR([Invalid value for --enable-debug ($enableval)])
55  ;;
56esac
57],[
58    DEBUG=no
59]
60)
61
62AC_ARG_ENABLE(strict-arch,
63[  --enable-strict-arch    Code might only work on target cpu type],
64[
65case $enableval in
66  yes)
67    STRICT_ARCH=yes
68  ;;
69  no)
70    STRICT_ARCH=no
71  ;;
72  *)
73    AC_MSG_ERROR([Invalid value for --enable-strict-arch ($enableval)])
74  ;;
75esac
76],[
77    STRICT_ARCH=no
78]
79)
80
81enableproduction=no
82AC_ARG_ENABLE(production,
83[  --enable-production     Prepare for a production install.],
84[
85case $enableval in
86  yes)
87    enableproduction=yes
88  ;;
89  no)
90  ;;
91  *)
92    AC_MSG_ERROR([Invalid value for --enable-production ($enableval)])
93  ;;
94esac
95])
96
97AC_ARG_ENABLE(sysv-ipc,
98[  --disable-sysv-ipc      Disable use of SysV IPC.],
99[
100case $enableval in
101  yes)
102    SYSVIPC=yes
103  ;;
104  no)
105    SYSVIPC=no
106  ;;
107  *)
108    AC_MSG_ERROR([Invalid value for --enable-sysv-ipc ($enableval)])
109  ;;
110esac
111],[
112    SYSVIPC=yes
113]
114)
115
116AC_ARG_ENABLE(parallel,
117[  --disable-parallel      Compile for serial execution.],
118[
119case $enableval in
120  yes)
121    PARALLEL=yes
122  ;;
123  no)
124    PARALLEL=no
125  ;;
126  *)
127    AC_MSG_ERROR([Invalid value for --enable-parallel ($enableval)])
128  ;;
129esac
130],[
131    PARALLEL=yes
132]
133)
134
135AC_ARG_ENABLE(always-use-mpi,
136[  --enable-always-use-mpi Causes MPI_Init to always be called from main],
137[
138case $enableval in
139  yes)
140    ALWAYS_USE_MPI=yes
141  ;;
142  no)
143    ALWAYS_USE_MPI=no
144  ;;
145  *)
146    AC_MSG_ERROR([Invalid value for --enable-always-use-mpi ($enableval)])
147  ;;
148esac
149],[
150    ALWAYS_USE_MPI=no
151]
152)
153
154DEFAULT_PARALLEL=none
155AC_ARG_WITH(default-parallel,
156[  --with-default-parallel Default parallism model: none, mpi, armcimpi or mtmpi],
157DEFAULT_PARALLEL=$withval
158)
159if test $DEFAULT_PARALLEL = mpi; then
160  AC_DEFINE(DEFAULT_MPI)
161elif test $DEFAULT_PARALLEL = mtmpi; then
162  AC_DEFINE(DEFAULT_MPI)
163  AC_DEFINE(DEFAULT_MTMPI)
164elif test $DEFAULT_PARALLEL = armcimpi; then
165  AC_DEFINE(DEFAULT_MPI)
166  AC_DEFINE(DEFAULT_ARMCI)
167fi
168
169SC_MPI_THREAD_LEVEL=MPI_THREAD_MULTIPLE
170AC_ARG_WITH(mpi-thread,
171[  --with-mpi-thread       Thread level for MPI (multiple,serialized,funneled,single)],
172[
173   case $withval in
174   multiple)
175        SC_MPI_THREAD_LEVEL=MPI_THREAD_MULTIPLE
176   ;;
177   serialized)
178        SC_MPI_THREAD_LEVEL=MPI_THREAD_SERIALIZED
179   ;;
180   funneled)
181        SC_MPI_THREAD_LEVEL=MPI_THREAD_FUNNELED
182   ;;
183   single)
184        SC_MPI_THREAD_LEVEL=MPI_THREAD_SINGLE
185   ;;
186   *)
187     AC_MSG_ERROR([Invalid value for --with-mpi-thread ($withval)])
188   ;;
189   esac
190]
191)
192AC_DEFINE_UNQUOTED(SC_MPI_THREAD_LEVEL,$SC_MPI_THREAD_LEVEL)
193
194AC_ARG_ENABLE(long-long,
195[  --disable-long-long     Disable use of long long.],
196[
197case $enableval in
198  yes)
199    LONGLONG=yes
200  ;;
201  no)
202    LONGLONG=no
203  ;;
204  *)
205    AC_MSG_ERROR([Invalid value for --enable-long-long ($enableval)])
206  ;;
207esac
208],[
209    LONGLONG=yes
210]
211)
212
213AC_ARG_ENABLE(threads,
214[  --enable-threads        Compile allowing use of threads, if possible.],
215[
216case $enableval in
217  yes)
218    THREADS=yes
219  ;;
220  no)
221    THREADS=no
222  ;;
223  *)
224    AC_MSG_ERROR([Invalid value for --enable-threads ($enableval)])
225  ;;
226esac
227],[
228    THREADS=yes
229]
230)
231
232AC_ARG_ENABLE(ref-debug,
233[  --enable-ref-debug      Check for reference count overwrites/overflows/etc],
234[
235case $enableval in
236  yes)
237  ;;
238  no)
239    AC_DEFINE(REF_OPTIMIZE)
240  ;;
241  *)
242    AC_MSG_ERROR([Invalid value for --enable-ref-debug ($enableval)])
243  ;;
244esac
245],[
246  if test $DEBUG = no -o $DEBUG = opt; then
247    AC_DEFINE(REF_OPTIMIZE)
248  fi
249]
250)
251
252AC_ARG_ENABLE(cross-compile,
253[  --enable-cross-compile  Rather than checking, assume cross compilation.],
254[
255case $enableval in
256  yes)
257    cross_compiling=yes
258  ;;
259  no)
260  ;;
261  *)
262    AC_MSG_ERROR([Invalid value for --enable-cross-compile ($enableval)])
263  ;;
264esac
265])
266
267DOXYGEN_MAN=YES
268AC_ARG_ENABLE(doxygen-man,
269[  --disable-doxygen-man   Disable doxygen man pages.],
270[
271case $enableval in
272  yes)
273  ;;
274  no)
275    DOXYGEN_MAN=NO
276  ;;
277  *)
278    AC_MSG_ERROR([Invalid value for --(dis|en)able-doxygen-man ($enableval)])
279  ;;
280esac
281]
282)
283AC_SUBST(DOXYGEN_MAN)
284
285AC_ARG_ENABLE(sourceforge,
286[  --enable-sourceforge    Enable SourceForge web page generation],
287[
288case $enableval in
289  yes)
290    FOOTER_HTML=sf_footer.html
291  ;;
292  no)
293    FOOTER_HTML=footer.html
294  ;;
295  *)
296    AC_MSG_ERROR([Invalid value for --enable-sourceforge ($enableval)])
297  ;;
298esac
299],[
300    FOOTER_HTML=footer.html
301]
302)
303AC_SUBST(FOOTER_HTML)
304
305AC_ARG_ENABLE(components,
306[  --enable-components     Enable CCA components],
307[
308case $enableval in
309  yes)
310    components=yes
311  ;;
312  no)
313    components=no
314  ;;
315  *)
316    AC_MSG_ERROR([Invalid value for --enable-components ($enableval)])
317  ;;
318esac
319],[
320    components=no
321]
322)
323ENABLECCA=$components
324AC_SUBST(ENABLECCA)
325
326BUILDID="sc_buildid"
327AC_ARG_WITH(build-id,
328[  --with-build-id         Gives an identifier for the build.],
329BUILDID=$withval
330)
331AC_SUBST(BUILDID)
332AC_DEFINE_UNQUOTED(SC_BUILDID,"$BUILDID")
333
334DEFAULT_SC_MEMORY=32000000
335AC_ARG_WITH(default-memory,
336[  --with-default-memory   Gives the default memory allocation.],
337DEFAULT_SC_MEMORY=$withval
338)
339AC_DEFINE_UNQUOTED(DEFAULT_SC_MEMORY,$DEFAULT_SC_MEMORY)
340
341if test "$BUILDID"; then
342  SC_VERSION="$SC_MMM_VERSION-$BUILDID"
343else
344  SC_VERSION="$SC_MMM_VERSION"
345fi
346
347AC_DEFINE_UNQUOTED(SC_VERSION, "$SC_VERSION")
348AC_SUBST(SC_VERSION)
349
350ac_default_prefix="/usr/local/mpqc/$SC_VERSION"
351
352AC_ARG_WITH(cc,
353[  --with-cc               Gives the name of the C compiler to use.],
354CC=$withval
355)
356
357AC_ARG_WITH(cxx,
358[  --with-cxx              Gives the name of the C++ compiler to use.],
359CXX=$withval
360)
361
362AC_ARG_WITH(f77,
363[  --with-f77              Gives the name of the FORTRAN 77 compiler to use.],
364F77=$withval
365)
366
367AC_ARG_WITH(cxx-optflags,
368[  --with-cxx-optflags     Optimization flags to use with the C++ compiler.],
369GIVEN_CXXOPTIONS_OPT=$withval
370)
371
372AC_ARG_WITH(cc-optflags,
373[  --with-cc-optflags      Optimization flags to use with the C compiler.],
374GIVEN_COPTIONS_OPT=$withval
375)
376
377DOT=yes
378AC_ARG_WITH(dot,
379[  --with-dot              Gives the path to the dot graph generator.],
380DOT=$withval
381)
382
383AC_ARG_WITH(ranlib,
384[  --with-ranlib           Gives the name of the ranlib program.],
385RANLIB=$withval
386)
387
388AC_ARG_WITH(ar,
389[  --with-ar               Names the archive creator.],
390AR=$withval
391)
392
393ARFLAGS=r
394AC_ARG_WITH(ar-flags,
395[  --with-ar-flags         Flags for the the archive creator.],
396ARFLAGS=$withval
397)
398AC_SUBST(ARFLAGS)
399
400AC_ARG_WITH(ld,
401[  --with-ld               Names the object linker.],
402LD=$withval
403)
404
405changequote(<<, >>)dnl
406LAUNCH="%MPQC% [-o %OUTPUT%] %INPUT%"
407changequote([, ])dnl
408AC_ARG_WITH(launch,
409[  --with-launch           The mpqcrun script launch string.],
410LAUNCH=$withval
411)
412AC_SUBST(LAUNCH)
413
414changequote(<<, >>)dnl
415CCALAUNCH="%CCAFE% --ccafe-rc %INPUT% --ccafe-remap-stdio --ccafe-outputdir %OUTPUT%";
416changequote([, ])dnl
417AC_ARG_WITH(cca-launch,
418[  --with-cca-launch        The ccarun script launch string.],
419CCALAUNCH=$withval
420)
421AC_SUBST(CCALAUNCH)
422
423if test $prefix = $ac_default_prefix -o $prefix = NONE; then
424  scdatadir=$datadir
425else
426  scdatadir=$datadir/mpqc/$SC_VERSION
427fi
428AC_ARG_WITH(sc-datadir,
429[  --with-sc-datadir       Specifies arch-independent install subdir.],
430scdatadir=$withval
431)
432AC_SUBST(scdatadir)
433
434AC_ARG_WITH(include,
435[  --with-include          Specifies include directories (-Idir1 -Idir2).],
436EXTRAINCLUDE=$withval
437CPPFLAGS=$withval
438echo Using extra include directories: $withval
439)
440
441template_instantiation=none
442AC_ARG_WITH(template,
443[  --with-template         Specifies template instantation model.],
444template_instantiation=$withval
445echo Using extra include directories: $withval
446)
447
448scincludedir=$includedir
449AC_ARG_WITH(sc-includedir,
450[  --with-sc-includedir    Specifies include file install subdir.],
451scincludedir=$withval
452)
453AC_SUBST(scincludedir)
454
455AC_ARG_WITH(libs,
456[  --with-libs             Specifies libraries (-llib1 -llib2).],
457LIBS=$withval
458echo Using extra libraries: $withval
459)
460
461XTRA_FLIBS=
462AC_ARG_WITH(extra-flibs,
463[  --with-extra-flibs      Specifies libs needing a F77 runtime (-llib1 -llib2).],
464XTRA_FLIBS=$withval
465echo Using extra FORTRAN libraries: $withval
466)
467
468have_flibs=no
469AC_ARG_WITH(flibs,
470[  --with-flibs            Specifies the F77 runtime (by default, will guess).],
471FLIBS=$withval
472have_flibs=yes
473echo Using FORTRAN runtime libraries: $withval
474)
475
476LDFLAGS=
477LIBDIRS=
478AC_ARG_WITH(libdirs,
479[  --with-libdirs          Specifies library directories (-Ldir1 -Ldir2).],
480LIBDIRS=$withval
481LDFLAGS=$withval
482echo Using extra library directories: $withval
483)
484
485AC_ARG_WITH(cca-chem-config,
486[  --with-cca-chem-config  Specifies full pathname of cca-chem-config script.],
487[
488  CCA_CHEM_CONFIG=$withval
489  echo Using cca-chem-config: $withval
490],[
491  if test "$components" == "yes"; then
492    AC_PATH_PROG(CCA_CHEM_CONFIG,cca-chem-config,"not-found")
493  fi
494]
495)
496
497dnl --------- Want absolute path for srcdir, not relative. ---------
498
499if test X$ac_srcdir_defaulted = Xyes; then
500  case $srcdir in
501    .|..|./*|../*)
502      srcdir=`(cd $srcdir; pwd)`
503      #srcdir=`(cd $srcdir; echo $PWD)`
504      ;;
505  esac
506fi
507
508dnl --------- Get the path to the compile dir. ---------
509
510compiledir=`pwd`
511AC_SUBST(compiledir)
512
513dnl --------- Need actual paths for substitution outside of a makefile. ---------
514
515if test $exec_prefix = "NONE"; then
516  if test $prefix = "NONE"; then
517    scbindir=$ac_default_prefix/bin;
518    sclibdir=$ac_default_prefix/lib;
519  else
520    scbindir=$prefix/bin;
521    sclibdir=$prefix/lib;
522  fi
523else
524  scbindir=$exec_prefix/bin
525  sclibdir=$exec_prefix/lib
526fi
527AC_SUBST(scbindir)
528AC_SUBST(sclibdir)
529
530dnl --------- Checks for programs. ---------
531AC_PROG_LN_S
532AC_PROG_INSTALL
533AC_PROG_RANLIB
534AC_PROG_CC
535dnl ac_prog_cxx's order isn't what i need
536AC_CHECK_PROGS(CXX, g++ c++ gcc CC cxx xlC_r, gcc)
537dnl sees if CXX is a GNU compiler
538AC_PROG_CXX
539if test ! "$F77" = no ; then
540  AC_PROG_F77
541  if test "X$have_flibs" = Xno; then
542    AC_F77_LIBRARY_LDFLAGS
543  fi
544fi
545FLIBS="$XTRA_FLIBS $FLIBS"
546AC_PROG_CPP
547AC_PROG_CXXCPP
548AC_CHECK_PROG(AR,ar,ar)
549AC_CHECK_PROG(PERL,perl,perl)
550AC_CHECK_PROG(WISH,wish,/usr/bin/wish)
551
552dnl The lack of certain tools is a show stopper
553
554changequote(<<, >>)dnl
555
556if [ X$PERL = X ]; then
557  echo "Could not find the program perl.  It can be obtained at"
558  echo "ftp://prep.ai.mit.edu/pub/gnu"
559  exit 1
560fi
561
562changequote([, ])dnl
563
564dnl --------- Check for the graph generator used by doxygen
565
566DOT_PATH=""
567if test X$DOT = Xno; then
568  HAVE_DOT=NO
569elif test X$DOT = Xyes; then
570  AC_CHECK_PROG(HAVE_DOT,dot,YES,NO)
571else
572  HAVE_DOT=YES
573  DOT_PATH=$DOT
574fi
575AC_SUBST(DOT_PATH)
576AC_SUBST(HAVE_DOT)
577
578dnl -------- Checks for cross compiling. ----------
579
580# obsolete starting at autoconf 2.12
581#if test X$cross_compiling != Xyes; then
582#AC_C_CROSS
583#fi
584
585#if test X$cross_compiling = Xyes -a X$target = X$host; then
586#  AC_MSG_ERROR([Cross compiling, but target is host (use --host).])
587#fi
588
589dnl -------- Checks for compiler/linker options. ----------
590
591# options needed only for optimization
592COPTIONS_OPT=-O
593# options needed only for debugging
594COPTIONS_DBG=-g
595# options that are always needed
596COPTIONS_MISC=
597
598# options needed only for optimization
599CXXOPTIONS_OPT=-O
600# options needed only for debugging
601CXXOPTIONS_DBG=-g
602# options that are always needed
603CXXOPTIONS_MISC=
604
605OBJSUF=o
606LIBSUF=a
607
608dnl -- check how dependency information is built --
609
610# The GNU compilers work with:
611CCDEPENDSUF=none
612CXXDEPENDSUF=none
613CCDEPENDFLAGS=-M
614CXXDEPENDFLAGS=-M
615
616/bin/rm -f depcheck.u depcheck.c depcheck.o
617
618# Check for an IBM visual age C compiler
619echo "#include <stdio.h>" > depcheck.c
620$CC $CPPFLAGS $CFLAGS -M depcheck.c > /dev/null 2>&1
621if test -f depcheck.u; then
622  CCDEPENDSUF=u
623fi
624/bin/rm -f depcheck.u depcheck.c depcheck.o
625
626# Check for an IBM visual age C++ compiler
627echo "#include <iostream>" > depcheck.cc
628$CXX $CPPFLAGS $CXXFLAGS -M -E depcheck.cc > /dev/null 2>&1
629if test -f depcheck.u; then
630  CXXDEPENDSUF=u
631  CXXDEPENDFLAGS="-M -E"
632fi
633/bin/rm -f depcheck.u depcheck.c depcheck.o
634
635dnl -- special misc options --
636
637AC_MSG_CHECKING([for miscellaneous flags])
638case $target in
639  *-cray-unicos*)
640    if test ! X$GXX = Xyes; then
641      CXXOPTIONS_MISC="$CXXOPTIONS_MISC -h new_for_init"
642    fi
643    AC_MSG_RESULT(cray)
644  ;;
645  *)
646    AC_MSG_RESULT(none)
647  ;;
648esac
649
650dnl -- special optimization options --
651
652AC_MSG_CHECKING([for special optimization options])
653case $target in
654  rs6000-ibm-aix3.2.* | rs6000-ibm-aix4.* | powerpc-ibm-aix4.* | powerpc-ibm-aix5.*)
655    if test X$GCC != Xyes; then
656      COPTIONS_OPT="-O -qnolm"
657    fi
658    if test X$GXX != Xyes; then
659      CXXOPTIONS_OPT="-O -qnolm -qrtti"
660    fi
661    AC_MSG_RESULT("rs6000 or powerpc")
662  ;;
663  alphaev6-*)
664    if test X$GCC = Xyes; then
665      COPTIONS_OPT="-O3 -mcpu=ev6"
666    else
667      COPTIONS_OPT="-O5 -arch ev6"
668    fi
669    if test X$GXX = Xyes; then
670      CXXOPTIONS_OPT="-O3 -mcpu=ev6"
671    else
672      CXXOPTIONS_OPT="-O5 -arch ev6"
673    fi
674    AC_MSG_RESULT("alphaev6")
675  ;;
676  alphaev56-*)
677    if test X$GCC = Xyes; then
678      COPTIONS_OPT="-O3 -mcpu=ev56"
679    else
680      COPTIONS_OPT="-O5 -arch ev56"
681    fi
682    if test X$GXX = Xyes; then
683      CXXOPTIONS_OPT="-O3 -mcpu=ev56"
684    else
685      CXXOPTIONS_OPT="-O5 -arch ev56"
686    fi
687    AC_MSG_RESULT("alphaev56")
688  ;;
689  mips*-sgi-irix5*)
690    if test X$GCC != Xyes; then
691      COPTIONS_OPT="-O -Olimit 2000"
692    fi
693    AC_MSG_RESULT("mips*-sgi-irix5")
694  ;;
695changequote(<<, >>)dnl
696  mips*-sgi-irix6.[01]*)
697changequote([, ])dnl
698    if test X$GCC != Xyes; then
699      COPTIONS_OPT="-O2 -TENV:use_fp \
700        -OPT:const_copy_limit=20000:fold_arith_limit=20000:global_limit=20000"
701    fi
702    if test X$GXX != Xyes; then
703      CXXOPTIONS_OPT="-O2 -TENV:use_fp \
704        -OPT:const_copy_limit=20000:fold_arith_limit=20000:global_limit=20000"
705    fi
706    AC_MSG_RESULT("mips*-sgi-irix6.0 or mips*-sgi-irix6.1")
707  ;;
708  mips*-sgi-irix*)
709    if test X$GCC != Xyes; then
710      COPTIONS_OPT="-O2 -OPT:Olimit=0"
711    fi
712    if test X$GXX != Xyes; then
713      CXXOPTIONS_OPT="-O2 -OPT:Olimit=0"
714    fi
715    AC_MSG_RESULT("mips*-sgi-irix")
716  ;;
717changequote(<<, >>)dnl
718  i[56]86-*)
719changequote([, ])dnl
720    if test X$GCC = Xyes; then
721      COPTIONS_OPT="-O2"
722    fi
723    if test X$GXX = Xyes; then
724      CXXOPTIONS_OPT="-O2"
725    fi
726    AC_MSG_RESULT("i586 or i686")
727  ;;
728  i860-intel-*)
729    if test X$GCC != Xyes; then
730      COPTIONS_OPT="-O3 -Knoieee"
731    fi
732    AC_MSG_RESULT("i860")
733  ;;
734  *)
735    AC_MSG_RESULT("none")
736  ;;
737esac
738
739dnl -- special architecture options --
740
741case $target_cpu in
742     i786)
743        opt_target_cpu=pentium4
744     ;;
745     *)
746        opt_target_cpu=$target_cpu
747     ;;
748esac
749
750if test X$GXX == Xyes; then
751  AC_MSG_CHECKING([for C++ cpu tuning flag])
752  AC_LANG_SAVE
753  AC_LANG_CPLUSPLUS
754  CXXFLAGS_SAV=$CXXFLAGS
755  CXXFLAGS="-mtune=$opt_target_cpu $CXXFLAGS_SAV"
756  AC_COMPILE_IFELSE([int main(){}],cxx_tuneflag="-mtune",cxx_tuneflag="-mcpu")
757  CXXFLAGS=$CXXFLAGS_SAV
758  AC_LANG_RESTORE
759  AC_MSG_RESULT($cxx_tuneflag)
760fi
761
762if test X$GCC == Xyes; then
763  AC_MSG_CHECKING([for C cpu tuning flag])
764  CFLAGS_SAV=$CFLAGS
765  CFLAGS="-mtune=$opt_target_cpu $CFLAGS_SAV"
766  AC_COMPILE_IFELSE([int main(){}],cc_tuneflag="-mtune",cc_tuneflag="-mcpu")
767  CFLAGS=$CFLAGS_SAV
768  AC_MSG_RESULT($cc_tuneflag)
769fi
770
771AC_MSG_CHECKING([for special architecture options])
772case $target in
773  *-solaris2*)
774  if test X$GCC != Xyes; then
775    CCDEPENDFLAGS="-xM"
776  fi
777  if test X$GXX != Xyes; then
778    CXXDEPENDFLAGS="-xM"
779  fi
780  ;;
781  rs6000-ibm-aix* | powerpc-ibm-aix*)
782    if test X$GCC != Xyes; then
783      LDFLAGS="$LDFLAGS -bmaxdata:0x70000000"
784    fi
785    AC_MSG_RESULT(rs6000 or powerpc)
786  ;;
787  i686-intel-cougar*)
788    COPTIONS_MISC="$COPTIONS_MISC -mcougar"
789    CXXOPTIONS_MISC="$CXXOPTIONS_MISC -mcougar"
790    EXTRADEFINES="-D_REENTRANT $EXTRADEFINES"
791    if test X$cross_compiling = Xyes; then
792      AR=tflop-ar
793    fi
794    AC_MSG_RESULT(teraflop cougar)
795  ;;
796changequote(<<, >>)dnl
797  i[4567]86-* | pentium-* | pentium4-* | pentiumpro-* | k6-* | athlon-*)
798changequote([, ])dnl
799
800    if test X$STRICT_ARCH = Xyes; then
801      cxx_cpu_arch_option="-march=$opt_target_cpu"
802      cc_cpu_arch_option="-march=$opt_target_cpu"
803    else
804      cxx_cpu_arch_option="$cxx_tuneflag=$opt_target_cpu"
805      cc_cpu_arch_option="$cc_tuneflag=$opt_target_cpu"
806    fi
807    if test X$GCC = Xyes; then
808      COPTIONS_OPT="$COPTIONS_OPT $cc_cpu_arch_option"
809    fi
810    if test X$GXX = Xyes; then
811      CXXOPTIONS_OPT="$CXXOPTIONS_OPT $cxx_cpu_arch_option"
812    fi
813    AC_MSG_RESULT(IA-32: $cpu_arch_option)
814  ;;
815  i860-intel-puma*)
816    if test X$GCC = Xyes; then
817      COPTIONS_MISC="$COPTIONS_MISC -mpuma"
818    else
819      COPTIONS_MISC="$COPTIONS_MISC -D__PUMAGON__"
820      COPTIONS_MISC="$COPTIONS_MISC -L$PARAGON_XDEV/paragon/lib-coff/puma"
821      COPTIONS_MISC="$COPTIONS_MISC -YS,$PARAGON_XDEV/paragon/lib-coff/puma"
822      COPTIONS_MISC="$COPTIONS_MISC -lpuma -lm -lkmath"
823      COPTIONS_MISC="$COPTIONS_MISC $PARAGON_XDEV/paragon/lib-coff/puma/libstubs.o"
824    fi
825    if test X$GXX = Xyes; then
826      CXXOPTIONS_MISC="$CXXOPTIONS_MISC -mpuma"
827    fi
828    if test X$cross_compiling = Xyes; then
829      AR=ar860
830    fi
831    AC_MSG_RESULT(paragon puma)
832  ;;
833  i860-intel-sunmos*)
834    if test X$GCC = Xyes; then
835      COPTIONS_MISC="$COPTIONS_MISC -msunmos"
836    else
837      COPTIONS_MISC="$COPTIONS_MISC -DSUNMOS -D__PUMAGON__"
838      COPTIONS_MISC="$COPTIONS_MISC -L$PARAGON_XDEV/paragon/lib-coff/sunmos"
839      COPTIONS_MISC="$COPTIONS_MISC -Wl,-d0x4000000,-k"
840      COPTIONS_MISC="$COPTIONS_MISC -YS,$PARAGON_XDEV/paragon/lib-coff/sunmos"
841      COPTIONS_MISC="$COPTIONS_MISC -lm -lsunmos -lm"
842    fi
843    if test X$GXX = Xyes; then
844      CXXOPTIONS_MISC="$CXXOPTIONS_MISC -msunmos"
845    fi
846    if test X$cross_compiling = Xyes; then
847      AR=ar860
848    fi
849    AC_MSG_RESULT(paragon sunmos)
850  ;;
851  i860-intel-osf*)
852    if test X$GCC = Xyes; then
853      COPTIONS_MISC="$COPTIONS_MISC -mnx"
854    fi
855    if test X$GXX = Xyes; then
856      CXXOPTIONS_MISC="$CXXOPTIONS_MISC -mnx"
857    fi
858    if test X$cross_compiling = Xyes; then
859      AR=ar860
860    fi
861    AC_MSG_RESULT(paragon osf)
862  ;;
863  *)
864    AC_MSG_RESULT("none")
865  ;;
866esac
867
868dnl -- check for overriden optimization options --
869
870if test -n "$GIVEN_COPTIONS_OPT"; then
871  COPTIONS_OPT=$GIVEN_COPTIONS_OPT
872  AC_MSG_NOTICE("overriding C optimization flags with $COPTIONS_OPT")
873fi
874
875if test -n "$GIVEN_CXXOPTIONS_OPT"; then
876  CXXOPTIONS_OPT=$GIVEN_CXXOPTIONS_OPT
877  AC_MSG_NOTICE("overriding C++ optimization flags with $CXXOPTIONS_OPT")
878fi
879
880dnl ----------- check for C++ typename ---------------
881dnl This is done before template flags are set to avoid
882dnl undefined symbol problems.
883
884AC_LANG_SAVE
885AC_LANG_CPLUSPLUS
886AC_MSG_CHECKING("for C++ typename keyword")
887AC_TRY_LINK([
888  class X { public: typedef int t; X(){} };
889  template <class T> void f(T i) {typename T::t x;}
890],[
891  X g;
892  f(g);
893],[
894AC_DEFINE(HAVE_TYPENAME)
895AC_MSG_RESULT("yes")
896],
897AC_MSG_RESULT("no")
898);
899AC_LANG_RESTORE
900
901dnl  ----------- check for C++ restrict extension ---------------
902
903AC_LANG_SAVE
904AC_LANG_CPLUSPLUS
905AC_TRY_LINK(,[double *restrict x=0;],AC_DEFINE(CXX_RESTRICT))
906AC_LANG_RESTORE
907
908dnl ---------- Checks for C++ header files. -----------
909
910AC_LANG_SAVE
911AC_LANG_CPLUSPLUS
912AC_CHECK_HEADERS(iostream sstream)
913AC_LANG_RESTORE
914
915AC_MSG_CHECKING(iostream name)
916if test x$ac_cv_header_iostream = xyes; then
917  iostream=iostream
918else
919  iostream=iostream.h
920fi
921AC_MSG_RESULT($iostream)
922
923dnl ----------- check for namespace std ---------------
924
925AC_LANG_SAVE
926AC_LANG_CPLUSPLUS
927AC_MSG_CHECKING("for namespace std")
928AC_TRY_LINK([
929#include <$iostream>
930using namespace std;
931],[
932  ostream &o = cout;
933  o << endl;
934],[
935AC_DEFINE(USING_NAMESPACE_STD)
936NAMESPACE_STD=std::
937AC_MSG_RESULT("yes")
938],
939NAMESPACE_STD=
940AC_MSG_RESULT("no")
941);
942AC_LANG_RESTORE
943
944dnl ----------- check for GNU libc++-v3 prerelease bug ---------------
945
946if test X$GXX = Xyes; then
947AC_LANG_SAVE
948AC_LANG_CPLUSPLUS
949AC_MSG_CHECKING("for GNU libc++-v3 prerelease bug")
950AC_TRY_LINK([
951#include <stdio.h>
952#include <$iostream>
953],[
954],[
955AC_MSG_RESULT("no")
956],
957EXTRADEFINES="$EXTRADEFINES -D_ISOC99_SOURCE=1"
958AC_MSG_RESULT("yes")
959);
960AC_LANG_RESTORE
961fi
962
963dnl -- other options --
964
965if test $DEBUG = yes; then
966  CFLAGS="$COPTIONS_DBG $COPTIONS_MISC"
967  CXXFLAGS="$CXXOPTIONS_DBG $CXXOPTIONS_MISC"
968  LDFLAGS="$LDFLAGS -g"
969elif test $DEBUG = opt; then
970  CFLAGS="$COPTIONS_DBG $COPTIONS_OPT $COPTIONS_MISC"
971  CXXFLAGS="$CXXOPTIONS_DBG $CXXOPTIONS_OPT $CXXOPTIONS_MISC"
972  LDFLAGS="$LDFLAGS -g"
973else
974  CFLAGS="$COPTIONS_OPT $COPTIONS_MISC"
975  CXXFLAGS="$CXXOPTIONS_OPT $CXXOPTIONS_MISC"
976fi
977
978AC_SUBST(EXTRAINCLUDE)
979
980AC_SUBST(CFLAGS)
981AC_SUBST(CXXFLAGS)
982
983AC_SUBST(LDFLAGS)
984AC_SUBST(LIBDIRS)
985
986AC_SUBST(OBJSUF)
987AC_SUBST(LIBSUF)
988AC_SUBST(CCDEPENDSUF)
989AC_SUBST(CXXDEPENDSUF)
990AC_SUBST(CCDEPENDFLAGS)
991AC_SUBST(CXXDEPENDFLAGS)
992
993dnl -------- Checks for architecture specific features. --------
994dnl (Doesn't work for cross compilation.)
995dnl AC_CHECK_SIZEOF(void*)
996
997dnl This version works on more machines without the need to run
998dnl a test program.
999AC_DEFUN([SC_C_BIGENDIAN],
1000[AC_CHECK_HEADERS(fp.h endian.h machine/endian.h sys/endian.h sys/machine.h)
1001AC_CACHE_CHECK(whether byte ordering is bigendian, sc_cv_c_bigendian,
1002[sc_cv_c_bigendian=unknown
1003# See if sys/param.h defines the BYTE_ORDER macro.
1004AC_TRY_COMPILE([#include "confdefs.h"
1005#ifdef HAVE_FP_H
1006#include <fp.h>
1007#endif
1008#ifdef HAVE_ENDIAN_H
1009#include <endian.h>
1010#endif
1011#ifdef HAVE_MACHINE_ENDIAN_H
1012#include <machine/endian.h>
1013#endif
1014#ifdef HAVE_SYS_ENDIAN_H
1015#include <sys/endian.h>
1016#endif
1017#ifdef HAVE_SYS_MACHINE_H
1018#include <sys/machine.h>
1019#endif
1020#include <sys/types.h>
1021#include <sys/param.h>], [
1022#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
1023 bogus endian macros
1024#endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
1025AC_TRY_COMPILE([#include "confdefs.h"
1026#ifdef HAVE_FP_H
1027#include <fp.h>
1028#endif
1029#ifdef HAVE_MP_H
1030#include <mp.h>
1031#endif
1032#ifdef HAVE_ENDIAN_H
1033#include <endian.h>
1034#endif
1035#ifdef HAVE_MACHINE_ENDIAN_H
1036#include <machine/endian.h>
1037#endif
1038#ifdef HAVE_SYS_ENDIAN_H
1039#include <sys/endian.h>
1040#endif
1041#ifdef HAVE_SYS_MACHINE_H
1042#include <sys/machine.h>
1043#endif
1044#include <sys/types.h>
1045#include <sys/param.h>], [
1046#if BYTE_ORDER != BIG_ENDIAN
1047 not big endian
1048#endif], sc_cv_c_bigendian=yes, sc_cv_c_bigendian=no)])
1049if test $sc_cv_c_bigendian = unknown; then
1050AC_TRY_RUN([main () {
1051  /* Are we little or big endian?  From Harbison&Steele.  */
1052  union
1053  {
1054    long l;
1055    char c[sizeof (long)];
1056  } u;
1057  u.l = 1;
1058  exit (u.c[sizeof (long) - 1] == 1);
1059}], sc_cv_c_bigendian=no, sc_cv_c_bigendian=yes,
1060AC_MSG_ERROR([Could not determine endianness and cross compiling])
1061)
1062fi])
1063if test $sc_cv_c_bigendian = yes; then
1064  AC_DEFINE(WORDS_BIGENDIAN)
1065fi
1066])
1067
1068SC_C_BIGENDIAN
1069
1070dnl --------- Checks for libraries. ---------
1071dnl -- libpthread should be linked in last.
1072dnl -- Check on pthread_join since pthread_create, but not pthread_join,
1073dnl -- seems to be in libc on IRIX and we must generate a -lpthread in LIBS.
1074if test "(" X$PARALLEL = Xyes -a X$THREADS != Xno ")" -o X$THREADS = Xyes; then
1075
1076AC_MSG_CHECKING([pthreads])
1077dnl see if posix threads are automatically linked ...
1078AC_LANG_SAVE
1079AC_LANG_CPLUSPLUS
1080LIBSSAV="$LIBS"
1081AC_TRY_LINK([#include <pthread.h>],[pthread_join(0,0);],[
1082HAVE_PTHREAD=yes],[
1083HAVE_PTHREAD=no])
1084AC_LANG_RESTORE
1085
1086dnl see if posix threads are in -lpthread
1087if test $HAVE_PTHREAD = no; then
1088AC_LANG_SAVE
1089AC_LANG_CPLUSPLUS
1090LIBSSAV="$LIBS"
1091LIBS="$LIBS -lpthread"
1092AC_TRY_LINK([#include <pthread.h>],[pthread_join(0,0);],[
1093HAVE_PTHREAD=yes],[
1094HAVE_PTHREAD=no
1095LIBS="$LIBSSAV"])
1096AC_LANG_RESTORE
1097fi
1098
1099dnl see if posix threads are in -lpthreads
1100if test $HAVE_PTHREAD = no; then
1101AC_LANG_SAVE
1102AC_LANG_CPLUSPLUS
1103LIBSSAV="$LIBS"
1104LIBS="$LIBS -lpthreads"
1105AC_TRY_LINK([#include <pthread.h>],[pthread_join(0,0);],[
1106HAVE_PTHREAD=yes],[
1107HAVE_PTHREAD=no
1108LIBS="$LIBSSAV"])
1109AC_LANG_RESTORE
1110fi
1111
1112AC_MSG_RESULT($HAVE_PTHREAD)
1113fi
1114if test X$HAVE_PTHREAD = Xyes; then
1115  AC_DEFINE(HAVE_PTHREAD)
1116  EXTRADEFINES="-D_REENTRANT $EXTRADEFINES"
1117  AC_CHECK_FUNC(pthread_attr_getstacksize)
1118  AC_CHECK_FUNC(pthread_attr_setstacksize)
1119  AC_CHECK_FUNC(pthread_attr_setscope)
1120  AC_CHECK_FUNC(pthread_attr_getscope)
1121  AC_CHECK_FUNC(pthread_attr_setinheritsched)
1122  AC_CHECK_FUNC(pthread_attr_getinheritsched)
1123  AC_CHECK_FUNC(pthread_attr_setschedpolicy)
1124  AC_CHECK_FUNC(pthread_attr_getschedpolicy)
1125  AC_CHECK_FUNC(pthread_attr_setschedparam)
1126  AC_CHECK_FUNC(pthread_attr_getschedparam)
1127  AC_CHECK_FUNC(sched_get_priority_max)
1128  AC_CHECK_FUNC(sched_get_priority_min)
1129fi
1130
1131AC_CHECK_LIB(dl,main)
1132dnl commented out for Cray X1 (-lsun falsely detected)
1133dnl AC_CHECK_LIB(sun,main)
1134AC_CHECK_LIB(m,main)
1135AC_CHECK_LIB(fl,main)
1136AC_CHECK_HEADER(perf.h,[
1137  AC_CHECK_LIB(perf,perf_set_config,[
1138    HAVE_PERF=yes
1139    LIBS="-lperf $LIBS"
1140    AC_DEFINE(HAVE_PERF)
1141    ])
1142  ]
1143)
1144
1145AC_CHECK_HEADER(execinfo.h,HAVE_EXECINFO_H_INC=1)
1146AC_CHECK_FUNC(backtrace, HAVE_BACKTRACE_FUNC=1)
1147AC_CHECK_FUNC(backtrace_symbols_fd, HAVE_BACKTRACE_SYMBOLS_FD_FUNC=1)
1148if test -n "$HAVE_EXECINFO_H_INC" -a -n "$HAVE_BACKTRACE_FUNC"  -a -n "$HAVE_BACKTRACE_SYMBOLS_FD_FUNC"; then
1149  AC_DEFINE(HAVE_BACKTRACE)
1150fi
1151
1152if test X$PARALLEL = Xyes; then
1153
1154  dnl ----- check for the mpi library
1155  AC_LANG_SAVE
1156  AC_LANG_CPLUSPLUS
1157  dnl Must use try_link since check_header runs cpp which doesn't
1158  dnl always find mpi.h (if mpicc and no -I is used for example)
1159  AC_MSG_CHECKING(for mpi.h)
1160  AC_TRY_LINK([#include <mpi.h>],[],have_mpi_h=yes,have_mpi_h=no)
1161  AC_MSG_RESULT($have_mpi_h)
1162  if test "$have_mpi_h" = yes; then
1163    AC_CHECK_FUNC(MPI_Init,HAVE_MPI=yes,HAVE_MPI=no)
1164    if test "$HAVE_MPI" = no; then
1165      AC_CHECK_LIB(mpi,MPI_Init,[HAVE_MPI=yes;LIBS="-lmpi $LIBS"])
1166    fi
1167    if test "$HAVE_MPI" = no; then
1168      AC_CHECK_LIB(mpich,MPI_Init,[HAVE_MPI=yes;LIBS="-lmpich $LIBS"])
1169    fi
1170  fi
1171  if test X$HAVE_MPI = Xyes; then
1172    AC_DEFINE(HAVE_MPI)
1173    AC_CHECK_FUNC(MPI_File_open,
1174                 [HAVE_MPIIO=yes;AC_DEFINE(HAVE_MPIIO)])
1175    AC_CHECK_FUNC(MPI_Init_thread,
1176                 [AC_DEFINE(HAVE_MPI_INIT_THREAD)])
1177    HAVE_MPIPP=no;
1178    AC_CHECK_LIB(mpi++,MPI_Abort,[HAVE_MPIPP=yes;LIBS="-lmpi++ $LIBS"])
1179    if test X$HAVE_MPIPP = Xno; then
1180      AC_CHECK_LIB(pmpich++,MPI_Abort,[HAVE_MPIPP=yes;LIBS="-lpmpich++ $LIBS"])
1181    fi
1182    AC_DEFINE(HAVE_MPIPP)
1183  fi
1184  AC_LANG_RESTORE
1185fi
1186
1187if test X$HAVE_MPI != Xyes -a $ALWAYS_USE_MPI = yes; then
1188  AC_MSG_ERROR([--enable-always-use-mpi is set but MPI is not available])
1189elif test $ALWAYS_USE_MPI = yes; then
1190  AC_DEFINE(ALWAYS_USE_MPI)
1191fi
1192
1193  dnl ------ check for the armci library
1194  AC_LANG_SAVE
1195  AC_LANG_CPLUSPLUS
1196  AC_CHECK_HEADER(armci.h,[
1197    AC_CHECK_FUNC(ARMCI_Init,HAVE_ARMCI=yes,[
1198      AC_CHECK_LIB(armci,ARMCI_Init,[HAVE_ARMCI=yes;LIBS="-larmci $LIBS"])
1199    ])
1200  ])
1201  AC_LANG_RESTORE
1202
1203  if test X$HAVE_ARMCI = Xyes; then
1204    AC_DEFINE(HAVE_ARMCI)
1205  fi
1206
1207if test $DEFAULT_PARALLEL = mtmpi -a X$HAVE_MPI != Xyes; then
1208  AC_MSG_ERROR([--with-default-parallel=mtmpi but MPI not available])
1209fi
1210if test $DEFAULT_PARALLEL = armcimpi -a X$HAVE_MPI != Xyes; then
1211  AC_MSG_ERROR([--with-default-parallel=armcimpi but MPI not available])
1212fi
1213if test $DEFAULT_PARALLEL = armcimpi -a X$HAVE_ARMCI != Xyes; then
1214  AC_MSG_ERROR([--with-default-parallel=armcimpi but ARMCI not available])
1215fi
1216
1217AC_SUBST(HAVE_PERF)
1218AC_SUBST(HAVE_MPI)
1219AC_SUBST(ALWAYS_USE_MPI)
1220AC_SUBST(HAVE_ARMCI)
1221AC_SUBST(HAVE_MPIIO)
1222AC_SUBST(HAVE_PTHREAD)
1223AC_SUBST(EXTRADEFINES)
1224
1225dnl ---------- Checks for header files. -----------
1226
1227AC_HEADER_STDC
1228AC_CHECK_HEADERS(fcntl.h limits.h sys/ioctl.h sys/time.h unistd.h pwd.h)
1229AC_CHECK_HEADERS(sys/times.h sys/resource.h time.h machine/fpu.h asm/fpu.h)
1230AC_CHECK_HEADERS(termios.h sys/stat.h sys/types.h dlfcn.h stdint.h)
1231
1232dnl -- Checks for typedefs, structures, and compiler characteristics. --
1233AC_C_CONST
1234AC_TYPE_SIZE_T
1235AC_STRUCT_TM
1236
1237dnl --------- Checks for library functions. ---------
1238AC_TYPE_SIGNAL
1239AC_FUNC_VPRINTF
1240AC_CHECK_FUNCS(strerror sigfillset signal system getpwuid geteuid)
1241AC_CHECK_FUNCS(gethostname time ctime)
1242AC_CHECK_FUNCS(setrlimit setenv)
1243
1244dnl --------- Check for an isnan and make sure it can be used
1245dnl           with iostream (it can't on OS X)
1246AC_LANG_SAVE
1247AC_LANG_CPLUSPLUS
1248AC_MSG_CHECKING(isnan and iostream)
1249AC_LINK_IFELSE([
1250  #include <iostream>
1251  #include <math.h>
1252  int main(int,char**) { isnan(1.0); return 0; }
1253  ],
1254  AC_DEFINE(HAVE_ISNAN)
1255  AC_MSG_RESULT(yes),
1256  AC_MSG_RESULT(no)
1257)
1258AC_LANG_RESTORE
1259
1260dnl --------- Check for the glibc extensions to C99 fenv.h. ---------
1261
1262AC_CHECK_HEADERS(fenv.h)
1263AC_CHECK_FUNCS(feenableexcept fedisableexcept)
1264
1265dnl --------- Checks for a C++ linkable fchdir. ---------
1266AC_LANG_SAVE
1267AC_LANG_CPLUSPLUS
1268AC_MSG_CHECKING([fchdir])
1269AC_TRY_COMPILE([#include <unistd.h>],[
1270fchdir(0);
1271],[HAVE_FCHDIR=yes
1272AC_DEFINE(HAVE_FCHDIR)
1273AC_MSG_RESULT(yes)],[
1274AC_MSG_RESULT(no)
1275HAVE_FCHDIR=no
1276])
1277AC_LANG_RESTORE
1278AC_SUBST(HAVE_FCHDIR)
1279
1280dnl --------- Check for ios::fmtflags. ---------
1281
1282AC_LANG_SAVE
1283AC_LANG_CPLUSPLUS
1284AC_MSG_CHECKING([ios::fmtflags])
1285AC_TRY_COMPILE([#include <$iostream>],[
1286$NAMESPACE_STD ios::fmtflags flags;
1287],[HAVE_IOS_FMTFLAGS=yes
1288AC_DEFINE(HAVE_IOS_FMTFLAGS)
1289AC_MSG_RESULT(yes)],[
1290AC_MSG_RESULT(no)
1291HAVE_IOS_FMTFLAGS=no
1292])
1293AC_LANG_RESTORE
1294AC_SUBST(HAVE_IOS_FMTFLAGS)
1295
1296dnl --------- check for long long  ---------
1297
1298if test X"$LONGLONG" = Xyes; then
1299AC_LANG_SAVE
1300AC_LANG_CPLUSPLUS
1301AC_MSG_CHECKING(long long)
1302AC_TRY_COMPILE([],[
1303long long i;
1304],[AC_DEFINE(HAVE_LONG_LONG)
1305AC_MSG_RESULT(yes)],[
1306AC_MSG_RESULT(no)
1307])
1308AC_LANG_RESTORE
1309fi
1310
1311dnl --------- Check for sgetn. ---------
1312
1313AC_LANG_SAVE
1314AC_LANG_CPLUSPLUS
1315AC_MSG_CHECKING([sgetn])
1316AC_TRY_COMPILE([#include <$iostream>],[
1317char *c=0;
1318$NAMESPACE_STD streambuf *s=0; s->sgetn(c,0);
1319],[HAVE_SGETN=yes
1320AC_DEFINE(HAVE_SGETN)
1321AC_MSG_RESULT(yes)],[
1322AC_MSG_RESULT(no)
1323HAVE_SGETN=no
1324])
1325AC_LANG_RESTORE
1326AC_SUBST(HAVE_SGETN)
1327
1328dnl --------- Check for pubseekoff. ---------
1329
1330AC_LANG_SAVE
1331AC_LANG_CPLUSPLUS
1332AC_MSG_CHECKING([pubseekoff])
1333AC_TRY_COMPILE([#include <$iostream>],[
1334$NAMESPACE_STD cout.rdbuf()->pubseekoff(0,$NAMESPACE_STD ios::beg,
1335                                        $NAMESPACE_STD ios::out);
1336],[HAVE_PUBSEEKOFF=yes
1337AC_DEFINE(HAVE_PUBSEEKOFF)
1338AC_MSG_RESULT(yes)],[
1339AC_MSG_RESULT(no)
1340HAVE_PUBSEEKOFF=no
1341])
1342AC_LANG_RESTORE
1343AC_SUBST(HAVE_PUBSEEKOFF)
1344
1345dnl --------- Check for seekoff. ---------
1346
1347AC_LANG_SAVE
1348AC_LANG_CPLUSPLUS
1349AC_MSG_CHECKING([seekoff])
1350AC_TRY_COMPILE([#include <$iostream>],[
1351$NAMESPACE_STD cout.rdbuf()->seekoff(0,$NAMESPACE_STD ios::beg,
1352                                     $NAMESPACE_STD ios::out);
1353],[HAVE_SEEKOFF=yes
1354AC_DEFINE(HAVE_SEEKOFF)
1355AC_MSG_RESULT(yes)],[
1356AC_MSG_RESULT(no)
1357HAVE_SEEKOFF=no
1358])
1359AC_LANG_RESTORE
1360AC_SUBST(HAVE_SEEKOFF)
1361
1362dnl --------- Check for signal handler argument lists. ---------
1363
1364AC_LANG_SAVE
1365AC_LANG_CPLUSPLUS
1366AC_MSG_CHECKING([signal handler needs ellipsis])
1367AC_TRY_LINK([
1368#include <signal.h>
1369extern "C" {
1370  typedef void (*signal_handler)(...);
1371  void handler(int);
1372}
1373void handler(int) {}
1374],[
1375  signal(SIGINT, (signal_handler)handler);
1376],
1377AC_DEFINE(SIGHASELLIP) AC_MSG_RESULT(yes),
1378AC_MSG_RESULT(no))
1379AC_LANG_RESTORE
1380
1381dnl --------- Checks for rand functions ---------
1382
1383AC_LANG_SAVE
1384AC_LANG_CPLUSPLUS
1385AC_CHECK_FUNCS(drand48)
1386AC_LANG_RESTORE
1387
1388dnl --------- Checks for SYSV IPC. ---------
1389
1390if test "X$SYSVIPC" = Xyes; then
1391  AC_CHECK_FUNCS(shmget semget)
1392  AC_CHECK_HEADERS(sys/ipc.h sys/sem.h sys/shm.h)
1393  AC_MSG_CHECKING([for SYSV IPC])
1394  if test X$ac_cv_func_shmget = Xyes -a \
1395          X$ac_cv_func_semget = Xyes -a \
1396          X$ac_cv_header_sys_ipc_h = Xyes -a \
1397          X$ac_cv_header_sys_sem_h = Xyes -a \
1398          X$ac_cv_header_sys_shm_h = Xyes; then
1399    HAVE_SYSV_IPC=yes
1400    AC_DEFINE(HAVE_SYSV_IPC)
1401  else
1402    HAVE_SYSV_IPC=no
1403  fi
1404  AC_MSG_RESULT($HAVE_SYSV_IPC)
1405  AC_SUBST(HAVE_SYSV_IPC)
1406else
1407  HAVE_SYSV_IPC=no
1408  AC_SUBST(HAVE_SYSV_IPC)
1409fi
1410
1411AC_LANG_SAVE
1412AC_LANG_CPLUSPLUS
1413AC_MSG_CHECKING([if semctl requires semun])
1414AC_TRY_LINK([
1415#include <sys/types.h>
1416#include <sys/ipc.h>
1417#include <sys/sem.h>
1418],[
1419  int val = 0;
1420  semctl(0,0,0,val);
1421],[
1422case $target in
1423  *-sgi-irix*)
1424    AC_DEFINE(SEMCTL_REQUIRES_SEMUN) AC_MSG_RESULT(sgi-irix -- yes)
1425  ;;
1426  *)
1427    AC_MSG_RESULT(no)
1428  ;;
1429esac
1430],
1431AC_DEFINE(SEMCTL_REQUIRES_SEMUN) AC_MSG_RESULT(yes))
1432AC_LANG_RESTORE
1433
1434dnl ----------- See if Fortran works --------------
1435
1436AC_MSG_CHECKING(if fortran compiler works)
1437if test -n "$F77" -a "$F77" != no ; then
1438  /bin/rm -f ffunc.f flink.c
1439  echo "      program main" > ffunc.f
1440  echo "      end" >> ffunc.f
1441  if $F77 -o ffunc ffunc.f 1>&5 2>&5; then
1442    AC_MSG_RESULT(yes)
1443  else
1444    AC_MSG_RESULT(no)
1445    AC_MSG_FAILURE(fortran compiler does not work)
1446  fi
1447  /bin/rm -f ffunc ffunc.f
1448fi
1449
1450dnl ----------- Fortran symbol names --------------
1451
1452AC_MSG_CHECKING(fortran symbols)
1453if test -n "$F77" -a "$F77" != no ; then
1454  /bin/rm -f ffunc.f flink.c
1455  echo "      subroutine ffunc()" > ffunc.f
1456  echo "      return" >> ffunc.f
1457  echo "      end" >> ffunc.f
1458  $F77 -c ffunc.f 1>/dev/null 2>/dev/null
1459  echo "main(){ FF(); return 0; }" > flink.c
1460  if $CC -o flink -DFF=ffunc flink.c ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then
1461    AC_MSG_RESULT(same as C)
1462    F77_SYMBOLS=symbol
1463  elif $CC -o flink -DFF=ffunc_ flink.c ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then
1464    AC_MSG_RESULT(lowercase with underscore)
1465    F77_SYMBOLS=symbol_
1466  elif $CC -o flink -DFF=FFUNC flink.c ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then
1467    AC_MSG_RESULT(uppercase)
1468    F77_SYMBOLS=SYMBOL
1469  elif $CC -o flink -DFF=FFUNC_ flink.c ffunc.o $LDFLAGS $LIBS 1>/dev/null 2>/dev/null; then
1470    AC_MSG_RESULT(uppercase with underscore)
1471    F77_SYMBOLS=SYMBOL_
1472  else
1473    AC_MSG_RESULT(giving up)
1474    AC_MSG_ERROR(could not determine F77 symbol names)
1475  fi
1476  /bin/rm -f ffunc.f ffunc.o flink flink.c flink.o ffunc
1477else
1478  F77_SYMBOLS=symbol_
1479  AC_MSG_RESULT(guessing lowercase with underscore)
1480fi
1481AC_SUBST(F77_SYMBOLS)
1482
1483dnl ----------- check for FORTRAN libraries --------------
1484
1485AC_LANG_SAVE
1486AC_LANG_CPLUSPLUS
1487LIBSSAV="$LIBS"
1488LIBS="$LIBSSAV $FLIBS"
1489
1490LIBBLAS=""
1491F77_DGEMM=`$PERL $srcdir/bin/mkf77sym.pl.in -method $F77_SYMBOLS DAXPY`
1492AC_CHECK_FUNC($F77_DGEMM,HAVE_BLAS=yes,[
1493  AC_CHECK_LIB(essl,$F77_DGEMM,[HAVE_BLAS=yes;LIBBLAS="-lessl"],
1494    AC_CHECK_LIB(blas,$F77_DGEMM,[HAVE_BLAS=yes;LIBBLAS="-lblas"])
1495  )]
1496)
1497if test X$HAVE_BLAS != Xyes; then
1498  LIBSSAV2="$LIBS"
1499  LIBS="-latlas $LIBS"
1500  AC_CHECK_LIB(f77blas,$F77_DGEMM,[HAVE_BLAS=yes;LIBBLAS="-lf77blas -latlas"],
1501               LIBS="$LIBSSAV2")
1502fi
1503AC_SUBST(HAVE_BLAS)
1504if test X$HAVE_BLAS != Xyes; then
1505  echo "WARNING: Could not link to the BLAS library.  It can be obtained at"
1506  echo "http://www.netlib.org/blas.  Use --with-libdirs and/or --with-libs"
1507  echo "to specify the name of the library."
1508  AC_MSG_ERROR([BLAS is required to complete the build])
1509fi
1510
1511LIBS="$LIBSSAV $LIBBLAS $FLIBS"
1512
1513LIBLAPACK=""
1514F77_DGESVD=`$PERL $srcdir/bin/mkf77sym.pl.in -method $F77_SYMBOLS DGESVD`
1515AC_CHECK_FUNC($F77_DGESVD,HAVE_LAPACK=yes,[
1516  AC_CHECK_LIB(lapack,$F77_DGESVD,[HAVE_LAPACK=yes;LIBLAPACK="-llapack"]
1517  )]
1518)
1519AC_SUBST(HAVE_LAPACK)
1520if test X$HAVE_LAPACK != Xyes; then
1521  echo "Could not link to the LAPACK library.  It can be obtained at"
1522  echo "http://www.netlib.org/lapack.  Use --with-libdirs and/or --with-libs"
1523  echo "to specify the name of the library."
1524  AC_MSG_ERROR([LAPACK is required to complete the build])
1525fi
1526
1527FLIBS="$LIBLAPACK $LIBBLAS $FLIBS"
1528AC_LANG_RESTORE
1529
1530dnl ----------- check for Scalable BLAS library --------------
1531
1532LIBSSAV="$LIBS"
1533LIBS="$LIBS $FLIBS"
1534HAVE_SCALABLE_BLAS=no
1535AC_CHECK_FUNC(sB_init,
1536  HAVE_SCALABLE_BLAS=yes,[
1537  AC_CHECK_LIB(sB_BLAS,sB_init,[
1538    HAVE_SCALABLE_BLAS=yes
1539    LIBSSAV="-lsB_BLAS $LIBSSAV"
1540  ])]
1541)
1542LIBS="$LIBSSAV"
1543if test $HAVE_SCALABLE_BLAS = yes; then
1544  AC_DEFINE(HAVE_SCALABLE_BLAS)
1545fi
1546
1547dnl ----------- NIAMA library checks --------------
1548
1549AC_LANG_SAVE
1550AC_LANG_CPLUSPLUS
1551AC_CHECK_PROG(NIAMACFG,niama-config,niama-config)
1552if test X$NIAMACFG != X; then
1553  LIBSSAV="$LIBS"
1554  CPPSAV="$CPPFLAGS"
1555  NIAMALIBS="`niama-config --libs` `niama-config --corbalibs`"
1556  CPPFLAGS="$CPPFLAGS `niama-config --cppflags`"
1557  LIBS="$NIAMALIBS $LIBS"
1558AC_TRY_LINK([
1559#include <niama.h>
1560],[
1561  exit(0);
1562],[
1563  AC_DEFINE(HAVE_NIAMA)
1564],[
1565  LIBS="$LIBSSAV"
1566  CPPFLAGS="$CPPSAV"
1567]
1568)
1569fi
1570AC_LANG_RESTORE
1571
1572dnl ----------- libint library checks --------------
1573
1574AC_LANG_SAVE
1575AC_LANG_CPLUSPLUS
1576AC_CHECK_HEADERS(libint/libint.h,
1577  AC_CHECK_LIB(int,init_libint_base,
1578    HAVE_LIBINT=yes
1579    AC_DEFINE(HAVE_LIBINT)
1580    AC_SUBST(HAVE_LIBINT)
1581    LIBS="-lint $LIBS"
1582    )
1583  )
1584AC_LANG_RESTORE
1585
1586dnl ----------- libr12 library checks --------------
1587
1588AC_LANG_SAVE
1589AC_LANG_CPLUSPLUS
1590AC_CHECK_HEADERS(libr12/libr12.h,
1591  AC_CHECK_LIB(r12,init_libr12_base,
1592    HAVE_LIBR12=yes
1593    AC_DEFINE(HAVE_LIBR12)
1594    AC_SUBST(HAVE_LIBR12)
1595    LIBS="-lr12 $LIBS"
1596    )
1597  )
1598AC_LANG_RESTORE
1599
1600dnl ----------- libderiv library checks --------------
1601
1602AC_LANG_SAVE
1603AC_LANG_CPLUSPLUS
1604AC_CHECK_HEADERS(libderiv/libderiv.h,
1605  AC_CHECK_LIB(deriv,init_libderiv_base,
1606    HAVE_LIBDERIV=yes
1607    AC_DEFINE(HAVE_LIBDERIV)
1608    AC_SUBST(HAVE_LIBDERIV)
1609    LIBS="-lderiv $LIBS"
1610    )
1611  )
1612AC_LANG_RESTORE
1613
1614dnl ----------- make sure we have everything for cints and mbptr12 ----------
1615
1616if test ! X$HAVE_LIBR12 = Xyes -o ! X$HAVE_LIBINT = Xyes; then
1617  EXCLUDED_DIRS="-x SRC_LIB_CHEMISTRY_QC_CINTS -x SRC_LIB_CHEMISTRY_QC_MBPTR12 $EXCLUDED_DIRS"
1618fi
1619
1620dnl --------- Template instantiation. ---------
1621
1622if test $template_instantiation = auto; then
1623AC_MSG_CHECKING(choosing template instantiation method)
1624  if test X$GXX = Xyes; then
1625    AC_MSG_RESULT("gcc (none)")
1626  else
1627    case $target in
1628      *-sgi-irix6.0*)
1629        AC_MSG_RESULT("*-sgi-irix6.0* (none)")
1630        ;;
1631      *-sgi-irix*)
1632        template_instantiation=ptused
1633        AC_MSG_RESULT("*-sgi-irix* (ptused)")
1634        ;;
1635      *-cray-unicos*)
1636        template_instantiation=craysimp
1637        AC_MSG_RESULT("*-cray-unicos* (craysimp)")
1638        ;;
1639      *-dec-osf*)
1640        template_instantiation=repodir
1641        AC_MSG_RESULT("*-dec-osf* (repodir)")
1642        ;;
1643      alpha*)
1644        template_instantiation=repodir
1645        AC_MSG_RESULT("alpha* non-GNU C++ (repodir)")
1646        ;;
1647      *-solaris*)
1648        template_instantiation=sunexpl
1649        AC_MSG_RESULT("*-solaris* (sunexpl)")
1650        ;;
1651      *)
1652        AC_MSG_RESULT("generic non GNU (none)")
1653        ;;
1654    esac
1655  fi
1656fi
1657
1658if test $template_instantiation = auto; then
1659  template_instantiation=none
1660fi
1661
1662AC_MSG_CHECKING(template instantiation flags)
1663TMPLINST=no
1664TMPLREPO=
1665TMPLINLIB=no
1666case $template_instantiation in
1667  repodir)
1668    TMPLREPO=cxx_repository
1669    TMPLINLIB=yes
1670    ;;
1671  craysimp)
1672    CXXFLAGS="$CXXFLAGS -h simple_templates"
1673    ;;
1674  gnurepo)
1675    TMPLINST=yes
1676    CXXFLAGS="$CXXFLAGS -frepo"
1677    AC_MSG_RESULT(gnurepo)
1678    ;;
1679  gnuexpl)
1680    # automatic template instantiation causes problems with libstc++-v3
1681    CXXFLAGS="$CXXFLAGS -fno-implicit-templates"
1682    EXPLICIT_TEMPLATE_INSTANTIATION=yes
1683    AC_DEFINE(EXPLICIT_TEMPLATE_INSTANTIATION)
1684    ;;
1685  sunexpl)
1686    CXXFLAGS="$CXXFLAGS -instances=explicit"
1687    AC_DEFINE(EXPLICIT_TEMPLATE_INSTANTIATION)
1688    ;;
1689  ptused)
1690    CXXFLAGS="$CXXFLAGS -ptused"
1691    ;;
1692  none)
1693    AC_MSG_RESULT(none)
1694    ;;
1695  *)
1696    AC_MSG_RESULT($template_instantiation)
1697    AC_MSG_ERROR(unknown template instantiation method)
1698esac
1699
1700AC_SUBST(TMPLINST)
1701AC_SUBST(TMPLREPO)
1702AC_SUBST(TMPLINLIB)
1703
1704dnl --------- Checks that must be done last. ---------
1705
1706AC_MSG_CHECKING([for special flags that must be set last])
1707case $target in
1708  i860-intel-puma*)
1709    LDFLAGS="$LDFLAGS -mpuma -mnoieee"
1710    AC_MSG_RESULT(paragon puma)
1711  ;;
1712  i686-intel-cougar*)
1713    LDFLAGS="$LDFLAGS -mcougar -mnoieee"
1714    AC_MSG_RESULT(teraflop cougar)
1715  ;;
1716  i860-intel-sunmos*)
1717    LDFLAGS="$LDFLAGS -msunmos -mnoieee"
1718    AC_MSG_RESULT(paragon sunmos)
1719  ;;
1720  i860-intel-osf*)
1721    LDFLAGS="$LDFLAGS -mnx -mnoieee"
1722    AC_MSG_RESULT(osf paragon)
1723  ;;
1724  *)
1725    AC_MSG_RESULT(none)
1726  ;;
1727esac
1728
1729dnl --------- Shared library configuration. ---------
1730
1731enablelibtool=yes
1732AC_ARG_ENABLE(libtool,
1733[  --disable-libtool       Do not use libtool.],
1734[
1735case $enableval in
1736  yes)
1737  ;;
1738  no)
1739    enablelibtool=no
1740  ;;
1741  *)
1742    AC_MSG_ERROR([Invalid value for --(dis|en)able-libtool ($enableval)])
1743  ;;
1744esac
1745])
1746
1747if test "$enablelibtool" = yes; then
1748
1749dnl by default make only static libraries
1750AC_DISABLE_SHARED
1751AC_PROG_LIBTOOL
1752
1753OBJSUF=lo
1754LIBSUF=la
1755
1756else
1757
1758enable_shared=no
1759
1760fi
1761
1762if test "$enable_shared" = "no"; then
1763  OBJSUF=o
1764  LIBSUF=a
1765fi
1766
1767ENABLESHARED=$enable_shared
1768AC_SUBST(ENABLESHARED)
1769
1770dnl --------- CCA component configuration ---------
1771
1772if test $components == "yes"; then
1773
1774  if test $HAVE_MPI == "yes" &&
1775     test $HAVE_MPIPP == "no"; then
1776    AC_MSG_ERROR([libmpi++ needed for mpi cca components])
1777  fi
1778
1779  if test -z $CCA_CHEM_CONFIG && ! test -x $CCA_CHEM_CONFIG; then
1780    AC_MSG_ERROR([cca-chem-config is required to build CCA component code])
1781  fi
1782
1783  CCA_CHEM_INCLUDE=`$CCA_CHEM_CONFIG --includedir`
1784  CCA_CHEM_LIB=`$CCA_CHEM_CONFIG --libdir`
1785  CCA_CHEM_PREFIX=`$CCA_CHEM_CONFIG --prefix`
1786  CCA_CHEM_REPO=$CCA_CHEM_PREFIX/repo
1787  AC_SUBST(CCA_CHEM_INCLUDE)
1788  AC_SUBST(CCA_CHEM_LIB)
1789  AC_SUBST(CCA_CHEM_REPO)
1790
1791  CCAFE_CONFIG=`$CCA_CHEM_CONFIG --ccafe-config`
1792  ENABLE_PYTHON="no" # no need for python checks
1793  AC_CHECK_CCA()
1794
1795  LIBS="-L$CCAFE_LIB $LIBS"
1796  CCA_CHEM_INCLUDE=-I$CCA_CHEM_INCLUDE
1797  BABEL_INCLUDE=-I$BABEL_INCLUDE
1798  CCA_SPEC_BABEL_INCLUDE=-I$CCA_SPEC_BABEL_INCLUDE
1799  CCAFE_INCLUDE="-I$CCAFE_INCLUDE -I$CCAFE_INCLUDE/dc/babel/babel-cca/server"
1800  CPPFLAGS="$CPPFLAGS $BABEL_INCLUDE $CCA_SPEC_BABEL_INCLUDE $CCA_CHEM_INCLUDE $CCAFE_INCLUDE"
1801
1802  AC_CHECK_HEADER(sidl.h,
1803    AC_DEFINE(HAVE_SIDL_HEADERS),
1804    AC_MSG_ERROR([problem with babel headers]) )
1805  AC_CHECK_HEADER(gov_cca_IOR.h,
1806    AC_DEFINE(HAVE_CCA_SPEC_BABEL_HEADERS),
1807    AC_MSG_ERROR([problem with cca-spec-babel headers]) )
1808  AC_CHECK_HEADER(Chemistry_QC_Model_IOR.h,
1809    AC_DEFINE(HAVE_CCA_CHEM_HEADERS),
1810    AC_MSG_ERROR([problem with cca-chem-generic headers]) )
1811
1812else
1813  EXCLUDED_DIRS="-x LIB_CCA -x SRC_LIB_CHEMISTRY_CCA -x SRC_LIB_CHEMISTRY_QC_INTCCA $EXCLUDED_DIRS"
1814fi
1815
1816dnl --------- Find the list of all sc libraries. ---------
1817
1818SCLIBS=`$PERL $srcdir/bin/listlibs.pl -I$srcdir/src/lib -DLIBSUF=$LIBSUF $srcdir/src/lib`
1819AC_SUBST(SCLIBS)
1820
1821dnl --------- Define the library directory macros. ---------
1822
1823if test "$enableproduction" = "no"; then
1824AC_DEFINE_DIR(SRC_SCLIBDIR, srcdir/lib)
1825fi
1826AC_DEFINE_DIR(INSTALLED_SCLIBDIR, prefix/lib)
1827AC_DEFINE_DIR(SCDATADIR, scdatadir)
1828
1829dnl --------- Create the stub Makefiles. ---------
1830
1831$PERL $srcdir/bin/objectdir.pl $EXCLUDED_DIRS $srcdir
1832
1833AC_OUTPUT(lib/LocalMakefile lib/cca/components.cca bin/sc-config bin/mkf77sym.pl src/bin/mpqc/mpqcrun src/bin/mpqc/ccarun src/bin/mpqc/validate/makeccain.pl doc/doxygen.cfg doc/doxygen.man1.cfg doc/doxygen.man3.cfg)
1834chmod +x bin/sc-config
1835chmod +x src/bin/mpqc/mpqcrun
1836chmod +x src/bin/mpqc/ccarun
1837chmod +x src/bin/mpqc/validate/makeccain.pl
1838