1dnl
2dnl This files contains additional macros for using autoconf to
3dnl build configure scripts.
4dnl
5dnl Almost all of this file is taken from the aclocal.m4 of MPICH
6dnl
7dnl Get the format of Fortran names.  Uses F77, FFLAGS, and sets WDEF.
8dnl If the test fails, sets NOF77 to 1, HAVE_FORTRAN to 0.
9dnl
10dnl
11AC_DEFUN([PAC_GET_FORTNAMES],[
12   rm -f confftest.f confftest.$OBJEXT
13   cat > confftest.f <<EOF
14       subroutine mpir_init_fop( a )
15       integer a
16       a = 1
17       return
18       end
19EOF
20   $F77 $FFLAGS -c confftest.f > /dev/null 2>&1
21   if test ! -s confftest.$OBJEXT ; then
22	AC_MSG_WARN([Unable to test Fortran compiler.  Compiling a test
23program failed to produce an object file])
24	NOF77=1
25   elif test -z "$FORTRANNAMES" ; then
26     # MAC OS X (and probably FreeBSD need strings - (not strings -a)
27     # Cray doesn't accept -a ...
28     allstrings="-a"
29     if test $arch_CRAY ; then
30	allstrings=""
31     elif strings - confftest.$OBJEXT < /dev/null >/dev/null 2>&1 ; then
32         allstrings="-"
33     elif strings -a confftest.$OBJEXT < /dev/null >/dev/null 2>&1 ; then
34         allstrings="-a"
35     fi
36
37     nameform1=`strings $allstrings confftest.$OBJEXT | grep mpir_init_fop_  | head -1`
38     nameform2=`strings $allstrings confftest.$OBJEXT | grep MPIR_INIT_FOP   | head -1`
39     nameform3=`strings $allstrings confftest.$OBJEXT | grep mpir_init_fop   | head -1`
40     nameform4=`strings $allstrings confftest.$OBJEXT | grep mpir_init_fop__ | head -1`
41    rm -f confftest.f confftest.$OBJEXT
42    if test -n "$nameform4" ; then
43	echo "Fortran externals are lower case and have two trailing underscores"
44	FORTRANNAMES="FORTRANDOUBLEUNDERSCORE"
45    elif test -n "$nameform1" ; then
46        # We don't set this in CFLAGS; it is a default case
47        echo "Fortran externals have a trailing underscore and are lowercase"
48	FORTRANNAMES="FORTRANUNDERSCORE"
49    elif test -n "$nameform2" ; then
50	echo "Fortran externals are uppercase"
51	FORTRANNAMES="FORTRANCAPS"
52    elif test -n "$nameform3" ; then
53	echo "Fortran externals are lower case"
54	FORTRANNAMES="FORTRANNOUNDERSCORE"
55    else
56	AC_MSG_WARN([Unable to determine the form of Fortran external names.
57Make sure that the compiler $F77 can be run on this system.
58Turning off Fortran (-nof77 being assumed)])
59	NOF77=1
60    fi
61    fi
62    if test -n "$FORTRANNAMES" ; then
63        WDEF="-D$FORTRANNAMES"
64    fi
65    # Delete confftest files with any extension.  This catches the case
66    # where auxillary files, such as coverage files, are removed.
67    rm -f confftest.*
68    ])dnl
69dnl
70define(PAC_GET_SPECIAL_SYSTEM_INFO,[
71#
72if test -n "$arch_IRIX"; then
73   AC_MSG_CHECKING(for IRIX OS version)
74   dnl This block of code replaces a generic "IRIX" arch value with
75   dnl  IRIX_<version>_<chip>
76   dnl  For example
77   dnl  IRIX_5_4400 (IRIX 5.x, using MIPS 4400)
78   osversion=`uname -r | sed 's/\..*//'`
79   dnl Note that we need to allow brackets here, so we briefly turn off
80   dnl the macro quotes
81   changequote(,)dnl
82   dnl Get the second field (looking for 6.1)
83   osvminor=`uname -r | sed 's/[0-9]\.\([0-9]*\)\..*/\1/'`
84   changequote([,])dnl
85   AC_MSG_RESULT($osversion)
86   dnl Get SGI processor count by quick hack
87   AC_MSG_CHECKING(for IRIX cpucount)
88   changequote(,)dnl
89   cpucount=`hinv | grep '[0-9]* [0-9]* MHZ IP[0-9]* Proc' | cut -f 1 -d' '`
90   if test "$cpucount" = "" ; then
91     cpucount=`hinv | grep 'Processor [0-9]*:' | wc -l | sed -e 's/ //g'`
92   fi
93   changequote([,])dnl
94   if test "$cpucount" = "" ; then
95     AC_MSG_RESULT([Could not determine cpucount.  Please send])
96     hinv
97     AC_MSG_ERROR([to romio-maint@mcs.anl.gov])
98   fi
99   AC_MSG_RESULT($cpucount)
100   dnl
101   AC_MSG_CHECKING(for IRIX cpumodel)
102   dnl The tail -1 is necessary for multiple processor SGI boxes
103   dnl We might use this to detect SGI multiprocessors and recommend
104   dnl -comm=shared
105   cputype=`hinv -t cpu | tail -1 | cut -f 3 -d' '`
106   if test -z "$cputype" ; then
107        AC_MSG_RESULT([Could not get cputype from hinv -t cpu command. Please send])
108        hinv -t cpu 2>&1
109        hinv -t cpu | cut -f 3 -d' ' 2>&1
110	AC_MSG_ERROR([to romio-maint@mcs.anl.gov])
111   fi
112   AC_MSG_RESULT($cputype)
113   dnl echo "checking for osversion and cputype"
114   dnl cputype may contain R4400, R2000A/R3000, or something else.
115   dnl We may eventually need to look at it.
116   if test -z "$osversion" ; then
117        AC_MSG_RESULT([Could not determine OS version.  Please send])
118        uname -a
119        AC_MSG_ERROR([to romio-maint@mcs.anl.gov])
120   elif test $osversion = 4 ; then
121        true
122   elif test $osversion = 5 ; then
123        true
124   elif test $osversion = 6 ; then
125        true
126   else
127       AC_MSG_RESULT([Could not recognize the version of IRIX (got $osversion).
128ROMIO knows about versions 4, 5 and 6; the version being returned from
129uname -r is $osversion.  Please send])
130       uname -a 2>&1
131       hinv 2>&1
132       AC_MSG_ERROR([to romio-maint@mcs.anl.gov])
133   fi
134   AC_MSG_CHECKING(for cputype)
135   OLD_ARCH=IRIX
136   IRIXARCH="$ARCH_$osversion"
137   dnl Now, handle the chip set
138   changequote(,)dnl
139   cputype=`echo $cputype | sed -e 's%.*/%%' -e 's/R//' | tr -d "[A-Z]"`
140   changequote([,])dnl
141   case $cputype in
142        3000) ;;
143        4000) ;;
144        4400) ;;
145        4600) ;;
146        5000) ;;
147        8000) ;;
148        10000);;
149	12000);;
150        *)
151	AC_MSG_WARN([Unexpected IRIX/MIPS chipset $cputype.  Please send the output])
152        uname -a 2>&1
153        hinv 2>&1
154        AC_MSG_WARN([to romio-maint@mcs.anl.gov
155ROMIO will continue and assume that the cputype is
156compatible with a MIPS 4400 processor.])
157        cputype=4400
158        ;;
159   esac
160   AC_MSG_RESULT($cputype)
161   IRIXARCH="$IRIXARCH_$cputype"
162   echo "IRIX-specific architecture is $IRIXARCH"
163fi
164])dnl
165dnl
166dnl
167define(PAC_TEST_MPI,[
168  AC_MSG_CHECKING(if a simple MPI program compiles and links)
169  rm -f mpitest.c
170  cat > mpitest.c <<EOF
171#include "mpi.h"
172     main(int argc, char **argv)
173     {
174         MPI_Init(&argc,&argv);
175         MPI_Finalize();
176     }
177EOF
178  rm -f conftest$EXEEXT
179  cmd="$CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB"
180  echo "$as_me:$LINENO: $cmd" >&5
181  $cmd >&5 2>&5
182  if test ! -x conftest$EXEEXT ; then
183      echo "$as_me:$LINENO: failed program was:" >&5
184      sed 's/^/| /' mpitest.c >&5
185      rm -f conftest$EXEEXT mpitest.c
186      AC_MSG_ERROR([Unable to compile a simple MPI program.
187Use environment variables to provide the location of MPI libraries and
188include directories])
189  else
190      rm -f conftest$EXEEXT mpitest.c
191  fi
192AC_MSG_RESULT(yes)
193])dnl
194dnl
195dnl
196dnl
197define(PAC_NEEDS_FINT,[
198  AC_MSG_CHECKING(if MPI_Fint is defined in the MPI implementation)
199  cat > mpitest1.c <<EOF
200#include "mpi.h"
201     main()
202     {
203         MPI_Fint i;
204         i = 0;
205     }
206EOF
207  rm -f mpitest1.$OBJEXT
208  $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -c mpitest1.c > /dev/null 2>&1
209  if test ! -s mpitest1.$OBJEXT ; then
210      NEEDS_MPI_FINT="#define NEEDS_MPI_FINT"
211      CFLAGS="$CFLAGS -DNEEDS_MPI_FINT"
212      AC_MSG_RESULT(no)
213      rm -f mpitest1.$OBJEXT mpitest1.c
214  else
215      NEEDS_MPI_FINT=""
216      AC_MSG_RESULT(yes)
217      rm -f mpitest1.$OBJEXT mpitest1.c
218  fi
219])dnl
220dnl
221define(PAC_MPI_LONG_LONG_INT,[
222  AC_MSG_CHECKING(if MPI_LONG_LONG_INT is defined in mpi.h)
223  rm -f mpitest.c
224  cat > mpitest.c <<EOF
225#include "mpi.h"
226     main(int argc, char **argv)
227     {
228         long long i;
229         MPI_Init(&argc,&argv);
230         MPI_Send(&i, 1, MPI_LONG_LONG_INT, 0, 0, MPI_COMM_WORLD);
231         MPI_Finalize();
232     }
233EOF
234  rm -f conftest$EXEEXT
235  $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
236  if test -x conftest$EXEEXT ; then
237      AC_MSG_RESULT(yes)
238      AC_DEFINE(HAVE_MPI_LONG_LONG_INT,,[Define if mpi has long long it])
239  else
240      AC_MSG_RESULT(no)
241  fi
242  rm -f conftest$EXEEXT mpitest.c
243])dnl
244dnl
245dnl PAC_LONG_LONG_64: check if there is a 64-bit long long
246dnl
247define(PAC_LONG_LONG_64,[
248if test -n "$longlongsize" ; then
249    if test "$longlongsize" = 8 ; then
250       echo "defining MPI_Offset as long long in C and integer*8 in Fortran"
251       AC_DEFINE(HAVE_LONG_LONG_64,,[Define if long long is 64 bits])
252       DEFINE_MPI_OFFSET="typedef long long MPI_Offset;"
253       FORTRAN_MPI_OFFSET="integer*8"
254       LL="\%lld"
255    elif test "$longlongsize" = "int" ; then  # a hack to set MPI_Offset as int
256       echo "defining MPI_Offset as int in C and integer in Fortran"
257       DEFINE_MPI_OFFSET="typedef int MPI_Offset;"
258       FORTRAN_MPI_OFFSET="integer"
259       AC_DEFINE(MPI_OFFSET_IS_INT,,[Define if MPI_Offset is int])
260       LL="\%d"
261       MPI_OFFSET_KIND1="!"
262       MPI_OFFSET_KIND2="!"
263    else
264       echo "defining MPI_Offset as long in C and integer in Fortran"
265       DEFINE_MPI_OFFSET="typedef long MPI_Offset;"
266       FORTRAN_MPI_OFFSET="integer"
267       LL="\%ld"
268       MPI_OFFSET_KIND1="!"
269       MPI_OFFSET_KIND2="!"
270    fi
271else
272   PAC_GET_TYPE_SIZE(long long, longlongsize)
273   if test -n "$longlongsize" ; then
274      if test "$longlongsize" = 8 ; then
275         PAC_TEST_LONG_LONG()
276      else
277         echo "defining MPI_Offset as long in C and integer in Fortran"
278         DEFINE_MPI_OFFSET="typedef long MPI_Offset;"
279         FORTRAN_MPI_OFFSET="integer"
280         LL="\%ld"
281         MPI_OFFSET_KIND1="!"
282         MPI_OFFSET_KIND2="!"
283      fi
284   else
285dnl   check if longlong is not supported or only its size cannot be determined
286dnl   because the program cannot be run.
287      rm -f ltest.c
288      cat > ltest.c <<EOF
289        main()
290        {
291           long long i=8;
292           return 0;
293        }
294EOF
295      rm -f conftest$EXEEXT
296      $CC $USER_CFLAGS -o conftest$EXEEXT ltest.c > /dev/null 2>&1
297      if test -x conftest$EXEEXT ; then
298         echo "assuming size of long long is 8bytes; use '-longlongsize' to indicate otherwise"
299         rm -f conftest$EXEEXT ltest.c
300         echo "defining MPI_Offset as long long in C and integer*8 in Fortran"
301         AC_DEFINE(HAVE_LONG_LONG_64,,[Define if long long is 64 bits])
302         DEFINE_MPI_OFFSET="typedef long long MPI_Offset;"
303         FORTRAN_MPI_OFFSET="integer*8"
304         LL="\%lld"
305      else
306         echo "assuming long long is not available; use '-longlongsize' to indicate otherwise"
307         echo "defining MPI_Offset as long in C and integer in Fortran"
308         DEFINE_MPI_OFFSET="typedef long MPI_Offset;"
309         FORTRAN_MPI_OFFSET="integer"
310         LL="\%ld"
311         MPI_OFFSET_KIND1="!"
312         MPI_OFFSET_KIND2="!"
313      fi
314   fi
315fi
316])dnl
317dnl
318dnl
319define(PAC_MPI_INFO,[
320  AC_MSG_CHECKING(if MPI_Info functions are defined in the MPI implementation)
321  rm -f mpitest.c
322  cat > mpitest.c <<EOF
323#include "mpi.h"
324     main(int argc, char **argv)
325     {
326         MPI_Info info;
327         MPI_Init(&argc,&argv);
328         MPI_Info_create(&info);
329         MPI_Finalize();
330     }
331EOF
332  rm -f conftest$EXEEXT
333  $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
334  if test -x conftest$EXEEXT ; then
335      AC_MSG_RESULT(yes)
336      AC_DEFINE(HAVE_MPI_INFO,1,[Define if MPI_Info available])
337      HAVE_MPI_INFO="#define HAVE_MPI_INFO"
338      MPI_FINFO1="!"
339      MPI_FINFO2="!"
340      MPI_FINFO3="!"
341      MPI_FINFO4="!"
342  else
343      AC_MSG_RESULT(no)
344      BUILD_MPI_INFO=1
345      MPI_FINFO1="      INTEGER MPI_MAX_INFO_KEY, MPI_MAX_INFO_VAL"
346      MPI_FINFO2="      PARAMETER (MPI_MAX_INFO_KEY=255, MPI_MAX_INFO_VAL=1024)"
347      MPI_FINFO3="      INTEGER MPI_INFO_NULL"
348      MPI_FINFO4="      PARAMETER (MPI_INFO_NULL=0)"
349  fi
350  rm -f conftest$EXEEXT mpitest.c
351])dnl
352dnl
353dnl
354define(PAC_MPI_DARRAY_SUBARRAY,[
355  AC_MSG_CHECKING(if darray and subarray constructors are defined in the MPI implementation)
356  rm -f mpitest.c
357  cat > mpitest.c <<EOF
358#include "mpi.h"
359     main(int argc, char **argv)
360     {
361         int i=MPI_DISTRIBUTE_CYCLIC;
362         MPI_Datatype t;
363         MPI_Init(&argc,&argv);
364         MPI_Type_create_darray(i, i, i, &i, &i, &i, &i, i, MPI_INT, &t);
365         MPI_Type_create_subarray(i, &i, &i, &i, i, MPI_INT, &t);
366         MPI_Finalize();
367     }
368EOF
369  rm -f conftest$EXEEXT
370  $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
371  if test -x conftest$EXEEXT ; then
372      AC_MSG_RESULT(yes)
373      AC_DEFINE(HAVE_MPI_DARRAY_SUBARRAY,,[Define if MPI Darray available])
374      HAVE_MPI_DARRAY_SUBARRAY="#define HAVE_MPI_DARRAY_SUBARRAY"
375      MPI_FARRAY1="!"
376      MPI_FARRAY2="!"
377      MPI_FARRAY3="!"
378      MPI_FARRAY4="!"
379      MPI_FARRAY5="!"
380      MPI_FARRAY6="!"
381      MPI_FARRAY7="!"
382  else
383      AC_MSG_RESULT(no)
384      BUILD_MPI_ARRAY=1
385      MPI_FARRAY1="      INTEGER MPI_ORDER_C, MPI_ORDER_FORTRAN"
386      MPI_FARRAY2="      PARAMETER (MPI_ORDER_C=56, MPI_ORDER_FORTRAN=57)"
387      MPI_FARRAY3="      INTEGER MPI_DISTRIBUTE_BLOCK, MPI_DISTRIBUTE_CYCLIC"
388      MPI_FARRAY4="      INTEGER MPI_DISTRIBUTE_NONE, MPI_DISTRIBUTE_DFLT_DARG"
389      MPI_FARRAY5="      PARAMETER (MPI_DISTRIBUTE_BLOCK=121, MPI_DISTRIBUTE_CYCLIC=122)"
390      MPI_FARRAY6="      PARAMETER (MPI_DISTRIBUTE_NONE=123)"
391      MPI_FARRAY7="      PARAMETER (MPI_DISTRIBUTE_DFLT_DARG=-49767)"
392  fi
393  rm -f conftest$EXEEXT mpitest.c
394])dnl
395dnl
396dnl
397define(PAC_CHECK_MPI_SGI_INFO_NULL,[
398  AC_MSG_CHECKING([if MPI_INFO_NULL is defined in mpi.h])
399  rm -f mpitest.c
400  cat > mpitest.c <<EOF
401#include "mpi.h"
402     main(int argc, char **argv)
403     {
404	int i;
405	i = MPI_INFO_NULL;
406     }
407EOF
408  rm -f conftest$EXEEXT
409  $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
410  if test -x conftest$EXEEXT ; then
411      AC_MSG_RESULT(yes)
412      cp adio/sgi/mpi3.1/*.h include
413  else
414      AC_MSG_RESULT(no)
415  fi
416  rm -f conftest$EXEEXT mpitest.c
417])dnl
418dnl
419dnl
420dnl
421define(PAC_CHECK_MPIOF_H,[
422  AC_MSG_CHECKING(if mpiof.h is included in mpif.h)
423  rm -f mpitest.f
424  cat > mpitest.f <<EOF
425      program main
426      implicit none
427      include 'mpif.h'
428      integer i
429      i = MPI_MODE_RDWR
430      stop
431      end
432EOF
433  rm -f conftest$EXEEXT
434  $F77 $FFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.f $MPI_LIB > /dev/null 2>&1
435  if test -x conftest$EXEEXT ; then
436      AC_MSG_RESULT(yes)
437      MPIOF_H_INCLUDED=1
438  else
439      AC_MSG_RESULT(no)
440  fi
441  rm -f conftest$EXEEXT mpitest.f
442])dnl
443dnl
444dnl
445dnl check if pread64 is defined in IRIX. needed on IRIX 6.5
446dnl
447define(PAC_HAVE_PREAD64,[
448  AC_MSG_CHECKING(if pread64 is defined)
449  rm -f conftest.c
450  cat > conftest.c <<EOF
451#include <unistd.h>
452     main()
453     {
454         int fd=0, buf=0, i=0;
455         off64_t off=0;
456         pread64(fd, &buf, i, off);
457     }
458EOF
459  rm -f conftest$EXEEXT
460  $CC $USER_CFLAGS -o conftest$EXEEXT conftest.c > /dev/null 2>&1
461  if test -x conftest$EXEEXT ; then
462      AC_MSG_RESULT(yes)
463      AC_DEFINE(HAVE_PREAD64,,[Define if pread64 available])
464  else
465      AC_MSG_RESULT(no)
466  fi
467rm -f conftest$EXEEXT conftest.c
468])dnl
469dnl
470dnl
471define(PAC_TEST_MPI_SGI_type_is_contig,[
472  AC_MSG_CHECKING(if MPI_SGI_type_is_contig is defined)
473  rm -f mpitest.c
474  cat > mpitest.c <<EOF
475#include "mpi.h"
476     main(int argc, char **argv)
477     {
478         MPI_Datatype type;
479         int i;
480
481         MPI_Init(&argc,&argv);
482         i = MPI_SGI_type_is_contig(type);
483         MPI_Finalize();
484     }
485EOF
486  rm -f conftest$EXEEXT
487  $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
488  if test -x conftest$EXEEXT ; then
489     AC_MSG_RESULT(yes)
490  else
491     AC_MSG_RESULT(no)
492     AC_DEFINE(NO_MPI_SGI_type_is_contig,,[Define if no MPI type is contig])
493  fi
494  rm -f conftest$EXEEXT mpitest.c
495])dnl
496dnl
497dnl
498dnl
499define(PAC_TEST_MPI_COMBINERS,[
500  AC_MSG_CHECKING(if MPI-2 combiners are defined in mpi.h)
501  rm -f mpitest.c
502  cat > mpitest.c <<EOF
503#include "mpi.h"
504     main(int argc, char **argv)
505     {
506         int i;
507
508         MPI_Init(&argc,&argv);
509         i = MPI_COMBINER_STRUCT;
510         MPI_Finalize();
511     }
512EOF
513  rm -f conftest$EXEEXT
514  $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
515  if test -x conftest$EXEEXT ; then
516     AC_MSG_RESULT(yes)
517     AC_DEFINE(HAVE_MPI_COMBINERS,,[Define if MPI combiners available])
518  else
519     AC_MSG_RESULT(no)
520  fi
521  rm -f conftest$EXEEXT mpitest.c
522])dnl
523dnl
524dnl
525dnl PAC_MPI_OFFSET_KIND()
526dnl
527dnl tries to determine the Fortran 90 kind parameter for 8-byte integers
528dnl
529define(PAC_MPI_OFFSET_KIND,
530[
531# This is needed for Mac OSX 10.5
532rm -rf conftest.dSYM
533rm -f conftest*
534# Determine the extension for Fortran 90 files (not all compilers accept
535# .f and not all accept .f90)
536if test -z "$ac_f90ext" ; then
537    if test -z "$FC" ; then
538       # This list should correspond to the list in aclocal_fc.m4
539       AC_CHECK_PROGS(FC,ifort pgf90 pathf90 pathf95 xlf90 xlf95 f90 epcf90 \
540       f95 fort lf95 gfortran g95 ifc efc)
541    fi
542    AC_MSG_CHECKING([for extension for Fortran 90 programs])
543    ac_f90ext="f90"
544    ac_f90compile='${FC-f90} -c $FCFLAGS conftest.$ac_f90ext 1>&AC_FD_CC'
545    cat > conftest.$ac_f90ext <<EOF
546      program conftest
547      end
548EOF
549    if AC_TRY_EVAL(ac_f90compile) ; then
550        AC_MSG_RESULT([f90])
551    else
552	# This is needed for Mac OSX 10.5
553	rm -rf conftest.dSYM
554        rm -f conftest*
555        ac_f90ext="f"
556        cat > conftest.$ac_f90ext <<EOF
557      program conftest
558      end
559EOF
560        if AC_TRY_EVAL(ac_f90compile) ; then
561            AC_MSG_RESULT([f])
562        else
563            AC_MSG_RESULT([unknown!])
564        fi
565    fi
566fi
567AC_MSG_CHECKING([for Fortran 90 KIND parameter for 8-byte integers])
568cat <<EOF > conftest.$ac_f90ext
569      program main
570      integer i
571      i = selected_int_kind(16)
572      open(8, file="conftest.out", form="formatted")
573      write (8,*) i
574      close(8)
575      stop
576      end
577EOF
578if test -z "$FC" ; then
579   FC=f90
580fi
581KINDVAL=""
582if $FC -o conftest$EXEEXT conftest.$ac_f90ext >/dev/null 2>&1 ; then
583    ./conftest$EXEEXT >/dev/null 2>&1
584    if test -s conftest.out ; then
585        KINDVAL=`cat conftest.out`
586    fi
587fi
588# This is needed for Mac OSX 10.5
589rm -rf conftest.dSYM
590rm -f conftest*
591if test -n "$KINDVAL" -a "$KINDVAL" != "-1" ; then
592   AC_MSG_RESULT($KINDVAL)
593   MPI_OFFSET_KIND1="      INTEGER MPI_OFFSET_KIND"
594   MPI_OFFSET_KIND2="      PARAMETER (MPI_OFFSET_KIND=$KINDVAL)"
595else
596    AC_MSG_RESULT(unavailable)
597fi
598])dnl
599dnl
600dnl
601define(PAC_TEST_MPI_HAVE_OFFSET_KIND,[
602  AC_MSG_CHECKING(if MPI_OFFSET_KIND is defined in mpif.h)
603  rm -f mpitest.f
604  cat > mpitest.f <<EOF
605      program main
606      implicit none
607      include 'mpif.h'
608      integer i
609      i = MPI_OFFSET_KIND
610      stop
611      end
612EOF
613  rm -f conftest$EXEEXT
614  $F77 $FFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.f $MPI_LIB > /dev/null 2>&1
615  if test -x conftest$EXEEXT ; then
616     AC_MSG_RESULT(yes)
617     MPI_OFFSET_KIND1="!"
618     MPI_OFFSET_KIND2="!"
619  else
620     AC_MSG_RESULT(no)
621  fi
622  rm -f conftest$EXEEXT mpitest.f
623])dnl
624dnl
625dnl
626dnl PAC_GET_XFS_MEMALIGN
627dnl
628dnl
629define(PAC_GET_XFS_MEMALIGN,
630[AC_MSG_CHECKING([for memory alignment needed for direct I/O])
631rm -f memalignval
632rm -f /tmp/romio_tmp.bin
633AC_TEST_PROGRAM([#include <stdio.h>
634#include <unistd.h>
635#include <fcntl.h>
636#include <stdio.h>
637main() {
638  struct dioattr st;
639  int fd = open("/tmp/romio_tmp.bin", O_RDWR | O_CREAT, 0644);
640  FILE *f=fopen("memalignval","w");
641  if (fd == -1) exit(1);
642  if (!f) exit(1);
643  fcntl(fd, F_DIOINFO, &st);
644  fprintf( f, "%u\n", st.d_mem);
645  exit(0);
646}],Pac_CV_NAME=`cat memalignval`,Pac_CV_NAME="")
647rm -f memalignval
648rm -f /tmp/romio_tmp.bin
649if test -n "$Pac_CV_NAME" -a "$Pac_CV_NAME" != 0 ; then
650    AC_MSG_RESULT($Pac_CV_NAME)
651    CFLAGS="$CFLAGS -DXFS_MEMALIGN=$Pac_CV_NAME"
652else
653    AC_MSG_RESULT(unavailable, assuming 128)
654    CFLAGS="$CFLAGS -DXFS_MEMALIGN=128"
655fi
656])dnl
657dnl
658
659define(PAC_HAVE_MOUNT_NFS,[
660  AC_MSG_CHECKING([if MOUNT_NFS is defined in the include files])
661  rm -f conftest.c
662  cat > conftest.c <<EOF
663#include <sys/param.h>
664#include <sys/mount.h>
665     main()
666     {
667         int i=MOUNT_NFS;
668     }
669EOF
670  rm -f conftest$EXEEXT
671  $CC $USER_CFLAGS -o conftest$EXEEXT conftest.c > /dev/null 2>&1
672  if test -x conftest$EXEEXT ; then
673     AC_MSG_RESULT(yes)
674     ROMIO_HAVE_MOUNT_NFS=1
675     AC_DEFINE(HAVE_MOUNT_NFS,,[Define if MOUNT_NFS defined])
676  else
677     ROMIO_HAVE_MOUNT_NFS=0
678     AC_MSG_RESULT(no)
679  fi
680  rm -f conftest$EXEEXT conftest.c
681])dnl
682dnl
683dnl
684dnl PAC_MPI_OFFSET_KIND_4BYTE()
685dnl
686dnl tries to determine the Fortran 90 kind parameter for 4-byte integers
687dnl
688define(PAC_MPI_OFFSET_KIND_4BYTE,
689[AC_MSG_CHECKING([for Fortran 90 KIND parameter for 4-byte integers])
690rm -f kind.f kind.$OBJEXT kind$EXEEXT
691cat <<EOF > kind.f
692      program main
693      integer i
694      i = selected_int_kind(8)
695      open(8, file="k.out", form="formatted")
696      write (8,*) i
697      close(8)
698      stop
699      end
700EOF
701if test -z "$FC" ; then
702   FC=f90
703fi
704KINDVAL=""
705if $FC -o kind$EXEEXT kind.f >/dev/null 2>&1 ; then
706    ./kind >/dev/null 2>&1
707    if test -s k.out ; then
708        KINDVAL=`cat k.out`
709    fi
710fi
711rm -f kind$EXEEXT k.out kind.f kind.$OBJEXT
712if test -n "$KINDVAL" -a "$KINDVAL" != "-1" ; then
713   AC_MSG_RESULT($KINDVAL)
714   MPI_OFFSET_KIND1="      INTEGER MPI_OFFSET_KIND"
715   MPI_OFFSET_KIND2="      PARAMETER (MPI_OFFSET_KIND=$KINDVAL)"
716else
717    AC_MSG_RESULT(unavailable)
718fi
719])dnl
720dnl
721dnl
722define(PAC_FUNC_STRERROR,[
723  AC_MSG_CHECKING([for strerror()])
724  rm -f conftest.c
725  cat > conftest.c <<EOF
726#include <string.h>
727     main()
728     {
729        char *s = strerror(5);
730     }
731EOF
732  rm -f conftest$EXEEXT
733  $CC $USER_CFLAGS -o conftest$EXEXT conftest.c >> config.log 2>&1
734  if test -x conftest$EXEEXT ; then
735     AC_MSG_RESULT(yes)
736     AC_DEFINE(HAVE_STRERROR,,[Define if strerror available])
737  else
738     AC_MSG_RESULT(no)
739     AC_MSG_CHECKING([for sys_errlist])
740     rm -f conftest.c
741changequote(,)
742     cat > conftest.c <<EOF
743#include <stdio.h>
744        main()
745        {
746           extern char *sys_errlist[];
747	   printf("%s\n", sys_errlist[34]);
748        }
749EOF
750changequote([,])
751     rm -f conftest$EXEEXT
752     $CC $USER_CFLAGS -o conftest$EXEEXT conftest.c > config.log 2>&1
753     if test -x conftest$EXEEXT ; then
754        AC_MSG_RESULT(yes)
755        AC_DEFINE(HAVE_SYSERRLIST,,[Define if syserrlist available])
756     else
757        AC_MSG_RESULT(no)
758     fi
759  fi
760  rm -f conftest$EXEEXT conftest.c
761])dnl
762dnl
763define(PAC_TEST_MPIR_STATUS_SET_BYTES,[
764  AC_MSG_CHECKING(if MPIR_Status_set_bytes is defined)
765  rm -f mpitest.c
766  cat > mpitest.c <<EOF
767#include "mpi.h"
768     main(int argc, char **argv)
769     {
770     	 MPI_Status status;
771         MPI_Datatype type;
772	 int err;
773
774         MPI_Init(&argc,&argv);
775         MPIR_Status_set_bytes(status,type,err);
776         MPI_Finalize();
777     }
778EOF
779  rm -f conftest$EXEEXT
780  $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
781  if test -x conftest$EXEEXT ; then
782     AC_MSG_RESULT(yes)
783     AC_DEFINE(HAVE_STATUS_SET_BYTES,,[Define if status set bytes available])
784  else
785     AC_MSG_RESULT(no)
786  fi
787  rm -f conftest$EXEEXT mpitest.c
788])dnl
789define(PAC_TEST_MPIU_FUNCS,[
790  AC_MSG_CHECKING(support for MPICH2 memory macros)
791  rm -f mpitest.c
792  cat > mpitest.c <<EOF
793#include "mpi.h"
794#include "stdio.h"
795  main(Int argc, char **argv)
796  {
797      MPIU_Free(NULL);
798  }
799EOF
800  rm -f conftest$EXEEXT
801  $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
802  if test -x conftest$EXEEXT ; then
803     AC_MSG_RESULT(yes)
804     AC_DEFINE(HAVE_MPIU_FUNCS,1,[Define if MPICH2 memory tracing macros defined])
805  else
806     AC_MSG_RESULT(no)
807  fi
808  rm -f conftest$EXEEXT mpitest.c
809])dnl
810dnl
811define(PAC_TEST_MPI_GREQUEST,[
812  AC_MSG_CHECKING(support for generalized requests)
813  rm -f mpitest.c
814  cat > mpitest.c <<EOF
815#include "mpi.h"
816#include "stdio.h"
817    main(int argc, char **argv)
818    {
819       MPI_Request request;
820       MPI_Init(&argc, &argv);
821       MPI_Grequest_start(NULL, NULL, NULL, NULL, &request);
822       MPI_Finalize();
823     }
824EOF
825  rm -f conftest$EXEEXT
826  $CC $USER_CFLAGS -I$MPI_INCLUDE_DIR -o conftest$EXEEXT mpitest.c $MPI_LIB > /dev/null 2>&1
827  if test -x conftest$EXEEXT ; then
828     AC_MSG_RESULT(yes)
829     AC_DEFINE(HAVE_MPI_GREQUEST,1,[Define if generalized requests avaliable])
830     DEFINE_HAVE_MPI_GREQUEST="#define HAVE_MPI_GREQUEST 1"
831  else
832     AC_MSG_RESULT(no)
833  fi
834  rm -f conftest$EXEEXT mpitest.c
835])dnl
836