General improvement on viewing wide and long slog2 files. This added features needed...
[mpe.git] / aclocal_mpi.m4
1 dnl
2 dnl PAC_MPI_LINK_CC_FUNC( MPI_CC, MPI_CFLAGS, MPI_LIBS,
3 dnl                       HEADERS, MPI_VARS, MPI_FUNC,
4 dnl                       [action if working], [action if not working] )
5 dnl - MPI_CC     is the MPI parallel compiler, like mpich/mpicc, AIX/mpcc
6 dnl - MPI_CFLAGS is the CFLAGS to MPI_CC, like "-I/usr/include" for mpi.h
7 dnl - MPI_CLIBS  is the LIBS to MPI_CC, like "-L/usr/lib -lmpi" for libmpi.a
8 dnl - HEADERS    is the headers, e.g. <pthread.h>.
9 dnl - MPI_VARS   is the the declaration of variables needed to call MPI_FUNC
10 dnl - MPI_FUNC   is the body of MPI function call to be checked for existence
11 dnl              e.g.  MPI_VARS="MPI_Request request; MPI_Fint a;"
12 dnl                    MPI_FUNC="a = MPI_Request_c2f( request );"
13 dnl              if MPI_FUNC is empty, assume linking with basic MPI program.
14 dnl              i.e. check if MPI definitions are valid
15 dnl
16 AC_DEFUN(PAC_MPI_LINK_CC_FUNC,[
17 dnl - set local parallel compiler environments
18 dnl   so input variables can be CC, CFLAGS or LIBS
19     pac_MPI_CC="$1"
20     pac_MPI_CFLAGS="$2"
21     pac_MPI_LIBS="$3"
22     AC_LANG_SAVE
23     AC_LANG_C
24 dnl - save the original environment
25     pac_saved_CC="$CC"
26     pac_saved_CFLAGS="$CFLAGS"
27     pac_saved_LIBS="$LIBS"
28 dnl - set the parallel compiler environment
29     CC="$pac_MPI_CC"
30     CFLAGS="$pac_MPI_CFLAGS"
31     LIBS="$pac_MPI_LIBS"
32     AC_LINK_IFELSE( [ AC_LANG_PROGRAM( [
33 /* <stdlib.h> is included to get NULL defined */
34 #if defined( STDC_HEADERS ) || defined( HAVE_STDLIB_H )
35 #include <stdlib.h>
36 #else
37 #if !defined( NULL )
38 #define NULL 0
39 #endif
40 #endif
41
42 $4
43 #include "mpi.h"
44
45     ], [
46     int argc; char **argv;
47     $5 ; 
48     MPI_Init(&argc, &argv);
49     $6 ;
50     MPI_Finalize();
51                     ] ) ], pac_mpi_working=yes, pac_mpi_working=no )
52     CC="$pac_saved_CC"
53     CFLAGS="$pac_saved_CFLAGS"
54     LIBS="$pac_saved_LIBS"
55     AC_LANG_RESTORE
56     if test "$pac_mpi_working" = "yes" ; then
57        ifelse([$7],,:,[$7])
58     else
59        ifelse([$8],,:,[$8])
60     fi
61 ])dnl
62 dnl
63 dnl PAC_MPI_LINK_F77_FUNC( MPI_F77, MPI_FFLAGS, MPI_LIBS,
64 dnl                        MPI_VARS, MPI_FUNC,
65 dnl                        [action if working], [action if not working] )
66 dnl - MPI_F77    is the MPI parallel compiler, like mpich/mpif77, AIX/mpxlf
67 dnl - MPI_FFLAGS is the FFLAGS to MPI_F77, like "-I/usr/include" for mpif.h
68 dnl - MPI_LIBS   is the LIBS to MPI_F77, like "-L/usr/lib -lmpi" for libmpi.a
69 dnl - MPI_VARS   is the the declaration of variables needed to call MPI_FUNC
70 dnl - MPI_FUNC   is the body of MPI function call to be checked for existence
71 dnl              e.g.  MPI_VARS="MPI_Request request; MPI_Fint a;"
72 dnl                    MPI_FUNC="a = MPI_Request_c2f( request );"
73 dnl              if MPI_FUNC is empty, assume linking with basic MPI program.
74 dnl              i.e. check if MPI definitions are valid
75 dnl
76 AC_DEFUN(PAC_MPI_LINK_F77_FUNC,[
77 dnl - set local parallel compiler environments
78 dnl   so input variables can be F77, FFLAGS or LIBS
79     pac_MPI_F77="$1"
80     pac_MPI_FFLAGS="$2"
81     pac_MPI_LIBS="$3"
82     AC_LANG_SAVE
83     AC_LANG_FORTRAN77
84 dnl - save the original environment
85     pac_saved_F77="$F77"
86     pac_saved_FFLAGS="$FFLAGS"
87     pac_saved_LIBS="$LIBS"
88 dnl - set the parallel compiler environment for TRY_LINK
89     F77="$pac_MPI_F77"
90     FFLAGS="$pac_MPI_FFLAGS"
91     LIBS="$pac_MPI_LIBS"
92     AC_LINK_IFELSE( [ AC_LANG_PROGRAM( [], [
93         include 'mpif.h'
94         integer pac_ierr
95         $4
96         call MPI_Init( pac_ierr )
97         $5
98         call MPI_Finalize( pac_ierr )
99                     ] ) ], pac_mpi_working=yes, pac_mpi_working=no )
100     F77="$pac_saved_F77"
101     FFLAGS="$pac_saved_FFLAGS"
102     LIBS="$pac_saved_LIBS"
103     AC_LANG_RESTORE
104     if test "$pac_mpi_working" = "yes" ; then
105        ifelse([$6],,:,[$6])
106     else
107        ifelse([$7],,:,[$7])
108     fi
109 ])dnl
110 dnl
111 dnl PAC_MPI_RUN_CC_PGM( MPI_CC, MPI_CFLAGS,
112 dnl                     SER_CC, SER_CFLAGS, SER_LIBS,
113 dnl                     PGM_BODY,
114 dnl                     [action if working], [action if not working] )
115 dnl - MPI_CC     MPI parallel compiler for compilation of the PGM_BODY
116 dnl              e.g. mpich/mpicc & AIX/mpcc
117 dnl - MPI_CFLAGS FFLAGS to MPI_CC for compilation of the PGM_BODY
118 dnl              e.g. "-I/usr/include" for mpi.h
119 dnl - SER_CC     serial compiler, like AIX/xlc, to generate of serial exeutable
120 dnl - SER_CFLAGS FFLAGS to SER_CC, used to generate serial executable
121 dnl - SER_LIBS   LIBS to SER_CC, used to generate serial executable
122 dnl - PGM_BODY   C program body
123 dnl
124 AC_DEFUN(PAC_MPI_RUN_CC_PGM,[
125 dnl - set local parallel and serial compiler environments
126 dnl   so input variables can be CC, CFLAGS or LIBS
127     pac_MPI_CC="$1"
128     pac_MPI_CFLAGS="$2"
129     pac_SER_CC="$3"
130     pac_SER_CFLAGS="$4"
131     pac_SER_LIBS="$5"
132     AC_LANG_SAVE
133     AC_LANG_C
134 dnl - save the original environment
135     pac_saved_CC="$CC"
136     pac_saved_CFLAGS="$CFLAGS"
137     pac_saved_LIBS="$LIBS"
138 dnl - set the parallel compiler environment
139     CC="$pac_MPI_CC"
140     CFLAGS="$pac_MPI_CFLAGS"
141 dnl
142     rm -rf conftest*
143     cat > conftest.c <<EOF
144 #include "confdefs.h"
145 $6
146 EOF
147 dnl
148     pac_compile='${CC-cc} -c $CFLAGS conftest.c 1>&AC_FD_CC'
149     if AC_TRY_EVAL(pac_compile) && test -s conftest.${ac_objext} ; then
150         CC="$pac_SER_CC"
151         CFLAGS="$pac_SER_CFLAGS"
152         LIBS="$pac_SER_LIBS"
153         pac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $LDFLAGS conftest.${ac_objext} $LIBS 1>&AC_FD_CC'
154         if AC_TRY_EVAL(pac_link) && test -s conftest${ac_exeext} && (./conftest${ac_exeext} ; exit) 2>/dev/null ; then
155             pac_mpi_working=yes
156         else
157             pac_mpi_working=no
158         fi
159     else
160         pac_mpi_working=no
161     fi
162     rm -rf conftest*
163     CC="$pac_saved_CC"
164     CFLAGS="$pac_saved_CFLAGS"
165     LIBS="$pac_saved_LIBS"
166     AC_LANG_RESTORE
167     if test "$pac_mpi_working" = "yes" ; then
168        ifelse([$7],,:,[$7])
169     else
170        ifelse([$8],,:,[$8])
171     fi
172 ])dnl
173 dnl
174 dnl PAC_MPI_RUN_F77_PGM( MPI_F77, MPI_FFLAGS,
175 dnl                      SER_F77, SER_FFLAGS, SER_LIBS,
176 dnl                      PGM_BODY,
177 dnl                      [action if working], [action if not working] )
178 dnl - MPI_F77    MPI parallel compiler for compilation of the PGM_BODY
179 dnl              e.g. mpich/mpif77 & AIX/mpxlf
180 dnl - MPI_FFLAGS FFLAGS to MPI_F77 for compilation of the PGM_BODY
181 dnl              e.g. "-I/usr/include" for mpif.h
182 dnl - SER_F77    serial compiler, like AIX/xlf, to generate of serial exeutable
183 dnl - SER_FFLAGS FFLAGS to SER_F77, used to generate serial executable
184 dnl - SER_LIBS   LIBS to SER_F77, used to generate serial executable
185 dnl - PGM_BODY   F77 program body
186 dnl
187 AC_DEFUN(PAC_MPI_RUN_F77_PGM,[
188 dnl - set local parallel and serial compiler environments
189 dnl   so input variables can be F77, FFLAGS or LIBS
190     pac_MPI_F77="$1"
191     pac_MPI_FFLAGS="$2"
192     pac_SER_F77="$3"
193     pac_SER_FFLAGS="$4"
194     pac_SER_LIBS="$5"
195     AC_LANG_SAVE
196     AC_LANG_FORTRAN77
197 dnl - save the original environment
198     pac_saved_F77="$F77"
199     pac_saved_FFLAGS="$FFLAGS"
200     pac_saved_LIBS="$LIBS"
201 dnl - set the parallel compiler environment
202     F77="$pac_MPI_F77"
203     FFLAGS="$pac_MPI_FFLAGS"
204 dnl
205     rm -rf conftest*
206     cat > conftest.f <<EOF
207         $6
208 EOF
209 dnl
210     pac_compile='${F77-f77} -c $FFLAGS conftest.f 1>&AC_FD_CC'
211     if AC_TRY_EVAL(pac_compile) && test -s conftest.${ac_objext} ; then
212         F77="$pac_SER_F77"
213         FFLAGS="$pac_SER_FFLAGS"
214         LIBS="$pac_SER_LIBS"
215         pac_link='${F77-f77} -o conftest${ac_exeext} $FFLAGS $LDFLAGS conftest.${ac_objext} $LIBS 1>&AC_FD_CC'
216         if AC_TRY_EVAL(pac_link) && test -s conftest${ac_exeext} && (./conftest${ac_exeext} ; exit) 2>/dev/null ; then
217             pac_mpi_working=yes
218         else
219             pac_mpi_working=no
220         fi
221     else
222         pac_mpi_working=no
223     fi
224     rm -rf conftest*
225     F77="$pac_saved_F77"
226     FFLAGS="$pac_saved_FFLAGS"
227     LIBS="$pac_saved_LIBS"
228     AC_LANG_RESTORE
229     if test "$pac_mpi_working" = "yes" ; then
230        ifelse([$7],,:,[$7])
231     else
232        ifelse([$8],,:,[$8])
233     fi
234 ])dnl
235 dnl
236 dnl PAC_MPI_RUN_F77_FUNC_FROM_C( MPI_F77, MPI_FFLAGS,
237 dnl                              MPI_CC, MPI_CFLAGS,
238 dnl                              SER_CC, SER_CFLAGS, SER_LIBS,
239 dnl                              [ FORTRAN routine ], [ C program ],
240 dnl                              [action if working], [action if not working] )
241 dnl - MPI_F77    MPI parallel compiler for compilation of the FORTRAN routine
242 dnl              e.g. mpich/mpif77 & AIX/mpxlf.  It can be serial compiler if 
243 dnl              no MPI variables in the FORTRAN routine
244 dnl - MPI_FFLAGS FFLAGS to MPI_F77 for compilation of the FORTRAN routine
245 dnl              e.g. "-I/usr/include" for mpif.h
246 dnl - MPI_CC     MPI parallel compiler for compilation of the C program
247 dnl              e.g. mpich/mpicc & AIX/mpcc.  It can be serial compiler if
248 dnl              no MPI variables in the C program
249 dnl - MPI_CFLAGS FFLAGS to MPI_CC for compilation of the C program
250 dnl              e.g. "-I/usr/include" for mpi.h
251 dnl - SER_CC     serial compiler, like AIX/xlc, to generate of serial exeutable
252 dnl - SER_CFLAGS FFLAGS to SER_CC, used to generate serial executable
253 dnl - SER_LIBS   LIBS to SER_CC, used to generate serial executable
254 dnl User needs to put in #define F77_NAME_xxxx to get C code to understand
255 dnl the fortran subroutine name.
256 dnl 
257 AC_DEFUN(PAC_MPI_RUN_F77_FUNC_FROM_C,[
258 dnl - set local parallel compiler environments
259 dnl   so input variables can be CC, CFLAGS or LIBS
260     pac_MPI_F77="$1"
261     pac_MPI_FFLAGS="$2"
262     pac_MPI_CC="$3"
263     pac_MPI_CFLAGS="$4"
264     pac_SER_CC="$5"
265     pac_SER_CFLAGS="$6"
266     pac_SER_LIBS="$7"
267 dnl
268     AC_LANG_SAVE
269     AC_LANG_FORTRAN77
270 dnl - save the original environment
271     pac_saved_F77="$F77"
272     pac_saved_FFLAGS="$FFLAGS"
273     pac_saved_LIBS="$LIBS"
274 dnl - set the parallel compiler environment
275     F77="$pac_MPI_F77"
276     FFLAGS="$pac_MPI_FFLAGS"
277 dnl
278     rm -f conftest*
279     cat > conftestf.f <<EOF
280         $8
281 EOF
282 dnl - try compile f77 program
283     pac_Fcompile='${F77-f77} -c $FFLAGS conftestf.f 1>&AC_FD_CC'
284     if AC_TRY_EVAL(pac_Fcompile) && test -s conftestf.${ac_objext} ; then
285         pac_mpi_working=yes
286     else
287         pac_mpi_working=no
288     fi
289     F77="$pac_saved_F77"
290     FFLAGS="$pac_saved_FFLAGS"
291 dnl
292     AC_LANG_C
293 dnl - set the parallel compiler environment
294     CC="$pac_MPI_CC"
295     CFLAGS="$pac_MPI_CFLAGS"
296 dnl
297     cat > conftestc.c <<EOF
298 #include "confdefs.h"
299 $9
300 EOF
301     pac_Ccompile='${CC-cc} -c $CFLAGS conftestc.c 1>&AC_FD_CC'
302 dnl - try compile C program
303     if test "$pac_mpi_working" = "yes" && AC_TRY_EVAL(pac_Ccompile) && test -s conftestc.${ac_objext} ; then
304         CC="$pac_SER_CC"
305         CFLAGS="$pac_SER_CFLAGS"
306         LIBS="$pac_SER_LIBS"
307         pac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $LDFLAGS conftestc.${ac_objext} conftestf.${ac_objext} $LIBS 1>&AC_FD_CC'
308         if AC_TRY_EVAL(pac_link) && test -s conftest${ac_exeext} && (./conftest${ac_exeext} ; exit) 2>/dev/null ; then
309             pac_mpi_working=yes
310         else
311             pac_mpi_working=no
312         fi
313     else
314         pac_mpi_working=no
315     fi
316     rm -f conftest*
317     CC="$pac_saved_CC"
318     CFLAGS="$pac_saved_CFLAGS"
319     LIBS="$pac_saved_LIBS"
320     AC_LANG_RESTORE
321     if test "$pac_mpi_working" = "yes" ; then
322         ifelse([$10],,:,[$10])
323     else
324         ifelse([$11],,:,[$11])
325     fi
326 ])