General improvement on viewing wide and long slog2 files. This added features needed...
[mpe.git] / configure.in
1 dnl
2 dnl Caching is usually WRONG for systems with cross-mounted file systems
3 dnl (the cache file may correspond to a different system).  Since configure
4 dnl is not on a performance-critical path, go for robustness over speed.
5 dnl
6 define([AC_CACHE_LOAD], )dnl
7 define([AC_CACHE_SAVE], )dnl
8 dnl
9 dnl
10 AC_INIT()
11 AC_PREREQ(2.52)
12 AC_CONFIG_AUX_DIR([.])
13 AC_CONFIG_HEADER(mpe_conf.h)
14 #
15 echo "Configuring MPE Profiling System with $ac_configure_args"
16 dnl
17 dnl  Set top_srcdir_abs to be the ABSOLUTE path to the home directory of MPE
18 dnl  top_srcdir is in relative path.
19 if test "X$srcdir" != "X." -a -s $srcdir/include/mpe.h ; then
20     top_srcdir_abs=$srcdir
21 else
22     PAC_GETWD( top_srcdir_abs, include/mpe.h )
23 fi
24 AC_SUBST(top_srcdir_abs)
25
26 # Determine this package's name based on its directory name
27 changequote(,)dnl
28 tmpname="`echo $top_srcdir_abs | sed -e 's%\(.*\)/\([^/]*\)%\2%'`"
29 pkgname="`echo $tmpname | sed -e 'y%abcdefghijklmnopqrstuvwxyz/%ABCDEFGHIJKLMNOPQRSTUVWXYZ_%'`"
30 changequote([,])dnl
31 if test "x$pkgname" = "x" ; then
32     pkgname="MPE-2"
33 fi
34
35 AC_ARG_ENABLE( echo,
36 [--enable-echo                      - Turn on strong echoing.
37                                      The default is enable=no.],
38 set -x )
39
40 AC_ARG_ENABLE( softerror,
41 [--enable-softerror                 - Turn on soft error, i.e. instead of
42                                      issuing MSG_ERROR, MSG_WARN + exit 0
43                                      are used.  The default is enable=no.],
44 , enable_softerror=${mpe_enable_softerror:-no} )
45
46 dnl Don't preset F77 when MPE is configured with MPICH2 
47 dnl otherwise AC_PROG_F77 or other PAC F77 tests could be messed up below.
48 dnl This is especially true when no fortran compiler in PATH.
49 VERSION=""
50 if test "$FROM_MPICH2" != "yes" ; then
51     CC=${CC:-cc}
52     F77=${F77:-f77}
53     CFLAGS=${CFLAGS}
54     FFLAGS=${FFLAGS}
55 fi
56 MPE_LIBNAME=""
57
58 dnl Read FROM_MPICHx variables from the environment
59 MAKE=${MAKE:-make}
60 FROM_MPICH=${FROM_MPICH:-no}
61 FROM_MPICH2=${FROM_MPICH2:-no}
62 FROM_LAM=${FROM_LAM:-no}
63
64
65 dnl Fixup for make
66 PAC_MAKE_IS_GNUMAKE
67 PAC_MAKE_IS_BSD44
68 PAC_MAKE_IS_OSF
69 PAC_MAKE_VPATH
70 AC_SUBST(MAKE)
71  
72 dnl If we are relying on vpath and no vpath is set, then we must exit
73 if test ! -s include/mpe.h -a -z "$VPATH" ; then
74     AC_MSG_ERROR( [No virtual MAKE path command found.
75         You may need to set your make command
76         The GNU make (sometimes available as gnumake) can be used.] )
77 fi
78
79 dnl CPRP is the version of cp that accepts -r and -p arguments.
80 MKDIR=mkdir
81 CPRP=cp
82 RM=rm
83 MV=mv
84 AC_SUBST(MKDIR)
85 AC_SUBST(CPRP)
86 AC_SUBST(RM)
87 AC_SUBST(MV)
88
89 AC_ARG_ENABLE( strict,
90 [--enable-strict                    - Turn on strict compilation testing
91                                      when using gcc],,enable_strict=no )
92 dnl
93 AC_ARG_ENABLE( g,
94 [--enable-g                         - Turn on/off the compilation flag -g.
95                                      The default is enable=no.],
96 [if test "$enable_g" != "no" ; then enable_g=yes ; fi],
97 [enable_g=no] )
98
99 dnl MPE_BUILD_FORTRAN2C=yes means that ALL subpackages will be building
100 dnl the fortran2c wrapper libraries.  This does not necessarily mean that
101 dnl specific subpackage has to build fortran2c wrapper library.  One example:
102 dnl src/wrappers may have --with-f2cmpilibs set by user, so src/wrappers's
103 dnl own libmpe_f2cmpi.a will not be built but MPE_BUILD_FORTRAN2C could
104 dnl still be set to yes because it means other subpackages like src/graphics
105 dnl and src/logging will build their fortran2c wrapper objects.  So treat
106 dnl MPE_BUILD_FORTRAN2C as a directive, i.e. generally a necessary but
107 dnl insufficient condition to build fortran2c wrapper library.
108 AC_ARG_ENABLE( f77,
109 [--enable-f77                       - Compile routines that require a Fortran
110                                      compiler.  If configuring with MPICH, the
111                                      configure in the top-level MPICH directory
112                                      will choose the appropriate value for you.
113                                      The default is enable=yes.], ,
114 enable_f77=yes )
115 if test "$enable_f77" = "yes" ; then
116     MPE_BUILD_FORTRAN2C=yes
117 else
118     MPE_BUILD_FORTRAN2C=no
119 fi
120
121 AC_ARG_ENABLE( mpich,
122 [--enable-mpich                     - Indicates if this MPE will be built as
123                                      part of the MPICH build.  The default is
124                                      enable=no.], ,
125 enable_mpich=no )
126
127 dnl  Translating FROM_MPICHx into MPI_IMPL.  So don't pass FROM_MPICHx down
128 dnl  to subpackages.  All subpackages will use MPI_IMPL instead.
129 dnl  BUILDING_MPI=yes disables the linkage test during building, i.e. make
130 dnl  BUILDING_MPI=yes when MPI_IMPL=MPICH or MPI_IMPL=MPICH2
131 dnl  MPE_KNOWN_MPI_IMPL can be tested by testing MPI_IMPL = MPICH, MPICH2
132 if test "$enable_mpich" = "yes" -o "$FROM_MPICH" = "yes" ; then
133     AC_MSG_RESULT([This MPE build is part of the MPICH build])
134     MPI_IMPL="MPICH"
135     enable_softerror=yes
136     enable_checkMPI=no
137 dnl BUILDING_MPI=yes & MPE_KNOWN_MPI_IMPL=yes
138 elif test "$FROM_MPICH2" = "yes" ; then
139     AC_MSG_RESULT([This MPE build is part of the MPICH2 build])
140     MPI_IMPL="MPICH2"
141     if test -d "$includebuild_dir" ; then
142         MPICPPFLAGS="$MPICPPFLAGS -I$includebuild_dir"
143     else
144         MPICPPFLAGS="$MPICPPFLAGS -I$master_top_srcdir/src/include -I$master_top_builddir/src/include"
145     fi
146     enable_softerror=yes
147     enable_checkMPI=no
148 dnl BUILDING_MPI=yes & MPE_KNOWN_MPI_IMPL=yes
149 dnl elif test "$FROM_LAM" = yes ; then
150 dnl    AC_MSG_RESULT([This MPE build is part of the LAM build])
151 dnl    MPI_IMPL="LAM"
152 dnl BUILDING_MPI=yes & MPE_KNOWN_MPI_IMPL=yes
153 else
154     AC_MSG_RESULT([User supplied MPI implmentation (Good Luck!)])
155     MPI_IMPL="UserSupplied"
156     enable_checkMPI=yes
157 dnl BUILDING_MPI=no & MPE_KNOWN_MPI_IMPL=no
158 fi
159
160 AC_ARG_ENABLE( checkMPI,
161 [--enable-checkMPI                  - Turn on/off the linking test for the MPI
162                                      include files, MPI libraries and MPI_CC
163                                      compiler. The default is enable=yes.],
164 enable_checkMPI=${mpe_enable_checkMPI:-$enableval} )
165
166 AC_ARG_ENABLE( checkMPIwtime,
167 [--enable-checkMPIwtime             - Turn on/off the linking test for the
168                                      MPI_Wtime(). The default is enable=no.], ,
169 enable_checkMPIwtime=no )
170
171 dnl
172 dnl  Set the MPE Libraries name
173 dnl
174 AC_ARG_WITH( mpelibname,
175 [--with-mpelibname=MPE_LIBNAME      - Set the MPE library name instead of the
176                                      default 'mpe', e.g. if MPE_LIBNAME=mpe_new,
177                                      then the libraries generated will be
178                                      libmpe_new.a, liblmpe_new.a, libtmpe_new.a
179                                      and libampe_new.a.],
180 MPE_LIBNAME="$withval" )
181
182 dnl
183 dnl  Set the Fortran Include Library Leading Characters
184 dnl
185 AC_ARG_WITH( finc_path_leader,
186 [--with-finc_path_leader=FINC_PATH_LEADER - Specify a Fortran include path
187                                      leader for compilation,
188                                      default value is -I.],
189 FINC_PATH_LEADER="$withval" )
190 dnl
191 AC_ARG_WITH( flib_path_leader,
192 [--with-flib_path_leader=FLIB_PATH_LEADER - Specify a Fortran library path
193                                      leader for linking, default value is -L.],
194 FLIB_PATH_LEADER="$withval" )
195 dnl
196
197 dnl
198 dnl Check if -g is needed to appended to CFLAGS and FFLAGS
199 dnl
200 dnl Append "-g" to xFLAGS and MPI_xFLAGS if enable_g=yes
201 if test "$enable_g" = "yes" ; then
202     for flagname in CFLAGS FFLAGS MPI_CFLAGS MPI_FFLAGS ; do
203         eval flagvalue=\$"$flagname"
204         case " $flagvalue " in
205            *" -g "*)
206               ;;  # Avoid duplication, do nothing
207            *)
208               # Split eval command into 2 lines so
209               # vi's hightlight mode won't get confused. 
210               flagcmd="$flagname=\"$flagvalue -g\""
211               eval ${flagcmd}
212               ;;
213         esac
214     done
215 fi
216
217 # Set the various build directories and export them as environmental variables.
218 #
219 # [mpe_]includebuild_dir is for all user header files
220 # [mpe_]libbuild_dir is for building the libraries in before they are installed.
221 # [mpe_]binbuild_dir is for the scripts/programs
222 # [mpe_]sbinbuild_dir is for all system admin tools
223 # [mpe_]etcbuild_dir is for all system admin configuration settings
224 #
225 rootbuild_dir=`pwd`
226 for dir in include lib bin sbin etc ; do
227     dirname=${dir}build_dir
228     eval dirvalue=\$"$dirname"
229     eval $dirname=$rootbuild_dir/$dir
230     mpe_dirname=mpe_$dirname
231     eval $mpe_dirname=\$"$dirname"
232     export $mpe_dirname
233 done
234
235 srcbuild_dir=$rootbuild_dir/src
236 for dir in include lib bin sbin src etc ; do
237     dirname=${dir}build_dir
238     eval dirvalue=\$"$dirname"
239     if test -n "$dirvalue" ; then
240         if test ! -d $dirvalue ; then
241             if mkdir -p $dirvalue ; then
242                 :
243             else
244                 PAC_MSG_ERROR( $enable_softerror,
245                                [Could not create directory $dirvalue] )
246             fi
247         fi
248     fi
249 done
250
251 AC_SUBST(includebuild_dir)
252 AC_SUBST(libbuild_dir)
253 AC_SUBST(binbuild_dir)
254 AC_SUBST(sbinbuild_dir)
255 AC_SUBST(etcbuild_dir)
256
257
258 dnl
259 dnl  Unknown MPI implmentation, i.e. User defined MPI_LIBS and MPI_INC
260 dnl
261 AC_ARG_WITH( mpicc,
262 [--with-mpicc=MPI_CC                - C compiler for MPI program,
263                                      e.g. mpixlc_r for BG/P MPI, or
264                                      mpicc from MPICHx, Open-MPI, or LAM-MPI.
265                                      Setting --with-mpicc to MPI wrapper
266                                      means no need to set --with-mpiinc
267                                      and --with-mpilibs.],
268 MPI_CC="$withval" )
269  
270 AC_ARG_WITH( mpif77,
271 [--with-mpif77=MPI_F77              - Fortran compiler for MPI program,
272                                      e.g. mpixlf77_r for BG/P MPI, or
273                                      mpif77 from MPICHx, Open-MPI, or LAM-MPI.
274                                      Setting --with-mpif77 to MPI wrapper
275                                      means no need to set --with-mpiinc
276                                      and --with-mpilibs.],
277 MPI_F77="$withval" )
278  
279 AC_ARG_WITH( mpiinc,
280 [--with-mpiinc=MPI_INC              - MPI include path prefixed with -I.
281                                      It specifies MPI header files location,
282                                      where mpi.h and mpif.h are located,
283                                      e.g. -I/pkgs/MPI/include. This flag will
284                                      be added to MPI_CFLAGS and MPI_FFLAGS,
285                                      i.e. the MPI include path can be
286                                      explicitly set in MPI_CFLAGS and
287                                      MPI_FFLAGS without setting --with-mpiinc.],
288 MPI_INC="$withval" )
289  
290 AC_ARG_WITH( mpilibs,
291 [--with-mpilibs=MPI_LIBS            - MPI library flags with -L and -l.
292                                      It specifies the location of the MPI
293                                      libraries.  The flags contains library
294                                      path prefixed with -L and MPI libraries
295                                      name prefixed with -l,
296                                      e.g. -L/opt/MPI/lib -lpmpich -lmpich.],
297 MPI_LIBS="$withval" )
298
299 dnl
300 misc_dirname="src/misc"
301 callstack_dirname="src/callstack"
302 logging_dirname="src/logging"
303 wrappers_dirname="src/wrappers"
304 graphics_dirname="src/graphics"
305 collchk_dirname="src/collchk"
306 slog2_dirname="src/slog2sdk"
307
308 dnl Cleanup the subpackages' Makefiles if they exist
309 AC_MSG_CHECKING( [for leftover Makefiles in subpackages] )
310 leftover_pkgs=""
311 for pkg in misc callstack logging wrappers graphics collchk slog2 ; do
312     dirname=${pkg}_dirname
313     eval dirvalue=\$"$dirname"
314     if test -s $rootbuild_dir/$dirvalue/Makefile ; then
315         leftover_pkgs="$leftover_pkgs \"$dirvalue\""
316         ( cd $rootbuild_dir/$dirvalue && $MAKE distclean > /dev/null 2>&1 )
317         dnl Just in case "make distclean" does not remove Makefile.
318         if test -f $rootbuild_dir/$dirvalue/Makefile ; then
319             $RM -f $rootbuild_dir/$dirvalue/Makefile
320         fi
321     fi
322 done
323 if test "X$leftover_pkgs" = "X" ; then
324     AC_MSG_RESULT( [none] )
325 else
326     AC_MSG_RESULT( [$leftover_pkgs cleaned] )
327 fi
328
329 dnl trial_pkgs="misc callstack logging wrappers graphics collchk"
330
331 dnl
332 AC_ARG_ENABLE( misc,
333 [--enable-misc                      - Build MPE miscellaneous routines, e.g.
334                                      MPE_Errors_xxx(), MPE_Seq_xxx(),
335                                      MPE_xxxTags() and MPE_GetHostName()....
336                                      The default enable=yes.],
337 , enable_misc=yes )
338
339 dnl
340 AC_ARG_ENABLE( callstack,
341 [--enable-callstack                 - Build MPE callstack routines, i.e.
342                                      MPE_CallStack_xxx()...
343                                      The default enable=yes.],
344 , enable_callstack=yes )
345
346 dnl
347 AC_ARG_ENABLE( logging,
348 [--enable-logging                   - Build MPE logging routines for 
349                                      CLOG-2, e.g.  MPE_Log_xxx()...
350                                      The default enable=yes.],
351 , enable_logging=yes )
352
353 dnl
354 AC_ARG_ENABLE( wrappers,
355 [--enable-wrappers                  - Build various MPI wrapper libraries.
356                                      MPI logging library, liblmpe.a;
357                                      MPI tracing library, libtmpe.a;
358                                      MPI Fortran to C library, libmpe_f2cmpi.a],
359 , enable_wrappers=yes )
360 dnl  src/wrappers requires at least src/logging
361 if test "$enable_wrappers" = "yes" ; then
362     if test "$enable_logging" != "yes" ; then
363         enable_logging=yes
364         AC_MSG_WARN( [Enabling Logging which is required by Wrappers.] ); 
365     fi
366 fi
367
368 dnl  Determine if the X graphics is going to be configured
369 AC_ARG_ENABLE( graphics,
370 [--enable-graphics                  - Build MPE graphics routines and MPI
371                                      animation library, libampe.a.  If disabled
372                                      then the MPE routines that make use of X11
373                                      graphics will NOT be built.  This is
374                                      appropriate for systems that either do not
375                                      have the X11 include files or that do not
376                                      support X11 graphics.
377                                      The default enable=yes.],
378 , enable_graphics=yes )
379 dnl  src/graphics's libmpe_nompi.a requires mpehname.c defined in src/misc
380 dnl  but then libmpe_nompi.a is rarely used, tests in src/grahics will pass
381 dnl  without src/misc.  Let user decides.
382 if test "$enable_graphics" = "yes" -a "$enable_misc" != "yes" ; then
383     AC_MSG_WARN( [libmpe_nompi.a in src/graphics needs mpehname.c in src/misc!
384         If you need libmpe_nompi.a, reconfigure with --enable-misc.] )
385 fi
386
387 AC_ARG_ENABLE( collchk,
388 [--enable-collchk                   - Build MPI Collective and Datatype 
389                                      checking library, libmpe_collchk.a],
390 , enable_collchk=yes )
391 dnl  src/collchk requires at least src/callstack
392 if test "$enable_collchk" = "yes" ; then
393     if test "$enable_callstack" != "yes" ; then
394         enable_callstack=yes
395         AC_MSG_WARN( [Enabling CallStack which is required by CollChk.] ); 
396     fi
397 fi
398
399 selected_pkgs=""
400
401 if test "$enable_misc" = "yes" -a -s $srcdir/src/misc/configure ; then
402     selected_pkgs="$selected_pkgs misc"
403     AC_CONFIG_SUBDIRS(src/misc)
404 fi
405 if test "$enable_callstack" = "yes" -a -s $srcdir/src/callstack/configure ; then
406     selected_pkgs="$selected_pkgs callstack"
407     AC_CONFIG_SUBDIRS(src/callstack)
408 fi
409 if test "$enable_logging" = "yes" -a -s $srcdir/src/logging/configure ; then
410     selected_pkgs="$selected_pkgs logging"
411     AC_CONFIG_SUBDIRS(src/logging)
412 fi
413 if test "$enable_wrappers" = "yes" -a -s $srcdir/src/wrappers/configure ; then
414     selected_pkgs="$selected_pkgs wrappers"
415     AC_CONFIG_SUBDIRS(src/wrappers)
416 fi
417 if test "$enable_graphics" = "yes" -a -s $srcdir/src/graphics/configure ; then
418     selected_pkgs="$selected_pkgs graphics"
419     AC_CONFIG_SUBDIRS(src/graphics)
420 fi
421 if test "$enable_collchk" = "yes" -a -s $srcdir/src/collchk/configure ; then
422     selected_pkgs="$selected_pkgs collchk"
423     AC_CONFIG_SUBDIRS(src/collchk)
424 fi
425
426 dnl  Determine if the slog2sdk directory is going to be configured.
427 AC_ARG_ENABLE( slog2,
428 [--enable-slog2{=build}             - Configure all the SLOG-2 tools.
429                                      --enable-slog2 without any argument will
430                                      use the prebuilt jar files.
431                                      --enable-slog2=build will rebuild all the
432                                      jar files from the source code.
433                                      The default is enable=yes.], ,
434 enable_slog2=yes )
435
436
437 dnl if SLOG-2 is here, configure it
438 if test -s $srcdir/$slog2_dirname/configure ; then
439     if test "$enable_slog2" = "yes" -o "$enable_slog2" = "build" ; then
440         if test "$enable_slog2" = "build" ; then
441             slog2_enable_source=yes
442         else
443             slog2_enable_source=no
444         fi
445         export slog2_enable_source
446         dnl  Enable softerror in SLOG2 configure won't abort the entire process
447         slog2_enable_softerror=yes
448         export slog2_enable_softerror
449         selected_pkgs="$selected_pkgs slog2"
450         if test "$MPI_IMPL" = "MPICH" -o "$MPI_IMPL" = "MPICH2" ; then
451             dnl  Disable the SAMPLE code in slog2sdk for MPICH2
452             slog2_enable_sample=no
453             export slog2_enable_sample
454         fi
455         AC_CONFIG_SUBDIRS(src/slog2sdk)
456     fi
457 fi
458
459 dnl The following statement is no longer true as of 6/24/2007,
460 dnl a thread-specific MPE logging on/off switch has been added
461 dnl to mpe_log_thread[.h/.c] and MPI logging wrappper library
462 dnl has been updated accordingly.
463 dnl
464 dnl AC_ARG_ENABLE( threadlogging,
465 dnl [--enable-threadlogging             - Turn on/off the coarse-grained thread
466 dnl                                      support in MPE logging.  The default
467 dnl                                      is enable=no.], ,
468 dnl enable_threadlogging=no )
469 dnl
470 dnl When thread-logging is enabled in multi-thread environment,
471 dnl safePMPI guard can't be used, i.e. global variables is_mpelog_on
472 dnl can't be used in coarse-grained thread support,
473 dnl becasue these varaibles need to be thread-specific.  Otherwise
474 dnl turn off logging on 1 thread would mean turning it off for all
475 dnl threads.
476 dnl
477 dnl if test "$enable_threadlogging" = "yes" ; then
478 dnl     enable_safePMPI=no
479 dnl     export enable_safePMPI
480 dnl fi
481
482
483 AC_ARG_VAR( MPI_CC, [C compiler for MPI program, e.g. mpixlc_r for BG/P MPI, or mpicc from MPICHx, Open-MPI, or LAM-MPI.  Setting MPI_CC to MPI wrapper means no need to set MPI_INC and MPI_LIBS.] )
484 AC_ARG_VAR( MPI_F77, [Fortran compiler for MPI program, e.g. mpixlf77_r for BG/P MPI, or mpif77 from MPICHx, Open-MPI, or LAM-MPI.  Setting MPI_F77 to MPI wrapper means no need to set MPI_INC and MPI_LIBS.] )
485 AC_ARG_VAR( MPI_INC, [MPI include path prefixed with -I.  It specifies MPI header files location, where mpi.h and mpif.h are located, e.g. -I/pkgs/MPI/include. This flag will be added to MPI_CFLAGS and MPI_FFLAGS, i.e. the MPI include path can be explicitly set in MPI_CFLAGS and MPI_FFLAGS without setting MPI_INC.] )
486 AC_ARG_VAR( MPI_CFLAGS, [MPI C compiler flags to compile MPI program.] )
487 AC_ARG_VAR( MPI_FFLAGS, [MPI Fortran compiler flags to compile MPI Fortran program.] )
488 AC_ARG_VAR( MPI_LIBS, [MPI library flags with -L and -l. It specifies the location of the MPI libraries.  The flags contains library path prefixed with -L and MPI libraries name prefixed with -l, e.g. -L/opt/MPI/lib -lpmpich -lmpich.] )
489 dnl AC_ARG_VAR( MPI_LDFLAGS, [MPI linker flags used with MPI_CC or MPI_F77 during linking.] )
490 AC_ARG_VAR( MPERUN, [MPI application launch command.  This variable is necessary only if user wants to run "make check", "make installcheck-all" or "$sbindir/mpecheckinstall -run" when the default MPERUN value, "$bindir/mpiexec -n 4", is not correct.] )
491
492 # Prepend/Append '"' before/after MPERUN.
493 if test "x$MPERUN" != "x" ; then
494     MPERUN="\"$MPERUN\""
495 fi
496
497 # Preppend MPI_INC to MPI_CFLAGS/MPI_FFLAGS
498 if test "x$MPI_INC" != "x" ; then
499     MPI_CFLAGS="$MPI_INC $MPI_CFLAGS"
500     MPI_FFLAGS="$MPI_INC $MPI_FFLAGS"
501 fi
502
503 dnl
504 AC_ARG_WITH( cross-spec,
505 [--with-cross-spec=file             - Specify the values of variables that
506                                      configure cannot determine in a
507                                      cross-compilation environment through
508                                      a file], ,
509 with_cross_spec=no )
510 dnl
511 pac_cross_compiling=no
512 if test "$with_cross_spec" != "no" ; then
513     if test -s "$with_cross_spec" ; then
514         AC_MSG_RESULT([Reading the cross-compilation file $with_cross_spec])
515         . $with_cross_spec
516         # Autoconf 2.52 no longer sets cross_compiling except with the
517         # awkward "targethost" options.
518         pac_cross_compiling=yes
519         cross_compiling=yes
520         ac_cv_prog_cc_cross=yes
521         ac_cv_prog_f77_cross=yes
522         ac_cv_prog_f90_cross=yes
523         ac_cv_prog_cxx_cross=yes
524         export cross_compiling
525         # Export all the variables in cross_spec/cross_spec.txt
526         # i.e. CROSS_xxx, MPI_xxx and friends...
527         cross_spec_vars=`grep -v '^#' $with_cross_spec | sed -e 's/=.*//g'`
528         for var in $cross_spec_vars ; do
529             eval value=\$"$var"
530             echo "Exporting $var=$value ..."
531             export $var
532         done
533     fi
534 fi
535
536
537 dnl
538 AC_ARG_WITH( config-args,
539 [--with-config-args=filename        - Specify configure argument file that
540                                      contains the values of variables that
541                                      configure reads, e.g. CC, CFLAGS, 
542                                      F77, FFLAGS, MPI_CC, MPI_F77....
543                                      If the filename does not begin with
544                                      / (absolute path), . or .. (relative path),
545                                      the filename will be assumed to be
546                                      $top_srcdir/configargs/<filename>.cfg.], ,
547 with_config_args=no )
548 dnl
549 if test "$with_config_args" != "no" ; then
550     case "$with_config_args" in
551         /*|../*|./*)
552             config_args_file="$with_config_args"
553             ;;
554         *)
555             config_args_file="$srcdir/configargs/${with_config_args}.cfg"
556             ;;
557     esac
558     if test -s "$config_args_file" ; then
559         AC_MSG_RESULT([Reading the configure arguments in ${config_args_file}.])
560         . $config_args_file
561         # Export all the variables in $config_args_file
562         # i.e. CC, F77, CFLAGS, FFLAGS and friends...
563         config_args_vars=`grep -v '^#' $config_args_file | sed -e 's/=.*//g'`
564         for var in $config_args_vars ; do
565             eval value=\$"$var"
566             echo "Exporting $var=$value ..."
567             export $var
568         done
569     else
570         AC_MSG_WARN([Non-existent ${config_args_file}.])
571     fi
572 fi
573
574
575 AC_PROG_CC
576 dnl Check for broken handling of common symbols
577 dnl PAC_PROG_C_BROKEN_COMMON
578
579 dnl Adding --enable-strict flags to CFLAGS if needed.
580 dnl No space should be added after "(" and before ")", otherwise invalid
581 dnl statement, like 'CFLAGS  ="$CFLAGS ..."', will be resulted in configure.
582 dnl Also, PAC_GET_GCC_STRICT_FLAGS should be called after AC_PROG_CC.
583 if test "$FROM_MPICH2" != "yes" ; then
584     MPE_COPTION=""
585     PAC_GET_GCC_STRICT_FLAGS([MPE_COPTION])
586     if test "x$MPE_COPTION" != "x" ; then
587         CFLAGS="$CFLAGS $MPE_COPTION"
588         MPI_CFLAGS="$MPI_CFLAGS $MPE_COPTION"
589     fi
590 fi
591
592 dnl  MPI_CC is only use for MPI programs.  
593 dnl  CC should be the same compiler that is used within the MPI_CC
594 dnl  environment.  MPI_LIBS should also be set for linking MPI programs
595 AC_MSG_CHECKING( whether MPI_CC has been set )
596 if test -z "$MPI_CC" ; then
597     MPI_CC="$CC $MPICPPFLAGS"
598 fi
599 AC_MSG_RESULT( $MPI_CC )
600
601 if test "$MPE_BUILD_FORTRAN2C" = "yes" ; then
602     AC_PROG_F77
603     if test "x$F77" = "x" ; then
604         MPE_BUILD_FORTRAN2C=no
605     fi
606     AC_MSG_CHECKING( whether MPI_F77 has been set )
607     if test -z "$MPI_F77" ; then
608         # FIXME: Temporary for F77 accepting the same flags as CC for 
609         # file includes
610         MPI_F77="$F77 $MPICPPFLAGS"
611     fi
612     AC_MSG_RESULT( $MPI_F77 )
613 fi
614
615 # Determine the name of the various library being built
616 if test -z "$MPE_LIBNAME" ; then
617     MPE_LIBNAME=mpe
618 fi
619
620
621
622 dnl
623 dnl  Check if MPI_CC, MPI_CFLAGS, and MPI_LIBS together provide
624 dnl  a linkable environment for a simple MPI program
625 dnl
626 if test "$MPI_IMPL" != "MPICH" -a "$MPI_IMPL" != "MPICH2" ; then
627     if test "$enable_checkMPI" = "yes" ; then
628         AC_MSG_CHECKING( [for the linkage of the supplied MPI C definitions] )
629         PAC_MPI_LINK_CC_FUNC( $MPI_CC, [$MPI_CFLAGS], $MPI_LIBS, , , ,
630                               [ mpe_link_ok=yes ], [ mpe_link_ok=no ] )
631         if test "$mpe_link_ok" = "yes" ; then
632             AC_MSG_RESULT(yes)
633         else
634             AC_MSG_RESULT(no)
635             PAC_MSG_ERROR( $enable_softerror,
636                            [Cannot link with basic MPI C program!
637         Check your MPI include paths, MPI libraries and MPI CC compiler] )
638         fi
639     fi
640     if test "$enable_checkMPI" = "yes" -a "$MPE_BUILD_FORTRAN2C" = "yes" ; then
641         AC_MSG_CHECKING( [for the linkage of the supplied MPI F77 definitions] )
642         PAC_MPI_LINK_F77_FUNC( $MPI_F77, [$MPI_FFLAGS], $MPI_LIBS, [
643         integer mytid
644         integer ierr
645         ], [
646         call MPI_Comm_rank( MPI_COMM_WORLD, mytid, ierr )
647         ],
648         [ mpe_link_ok=yes ], [ mpe_link_ok=no ] )
649         if test "$mpe_link_ok" = "yes" ; then
650             AC_MSG_RESULT(yes)
651         else
652             AC_MSG_RESULT(no)
653             PAC_MSG_ERROR( $enable_softerror,
654                            [Cannot link with basic MPI F77 program!
655         Check your MPI include paths, MPI libraries and MPI F77 compiler ] )
656         fi
657     fi
658
659     dnl
660     dnl Some MPI's seem to have trouble with
661     dnl MPI_Wtime, PMPI_Wtime, and MPI_Attr_get
662     dnl (Fujitsu for MPI_Wtime and MPI_Attr_get; IBM's PMPI_Wtime returned 0)
663     dnl Check at least that we can link with MPI_Wtime and MPI_Attr_get
664     dnl
665     if test "$enable_checkMPI" = "yes" -a "$enable_checkMPIwtime" = "yes" ; then
666         AC_MSG_CHECKING( [for the C version of MPI_Wtime()] )
667         PAC_MPI_LINK_CC_FUNC( $MPI_CC, [$MPI_CFLAGS], $MPI_LIBS, ,
668                               [ double d ],
669                               [ d=MPI_Wtime() ],
670                               [ mpe_link_ok=yes ], [ mpe_link_ok=no ] )
671         if test "$mpe_link_ok" = "yes" ; then
672             AC_MSG_RESULT(yes)
673             AC_DEFINE( HAVE_MPI_WTIME,1,[Define if MPI_Wtime available] )
674         else
675             AC_MSG_RESULT(no)
676             PAC_MSG_ERROR( $enable_softerror, [Cannot link with MPI_Wtime()!
677         Check your MPI include paths, MPI libraries and MPI CC compiler ] )
678         fi
679     fi
680 fi
681
682 if test -z "$CC" -o -z "$MPI_CC"; then
683     PAC_MSG_ERROR( $enable_softerror,
684                    [You must configure MPE with a specific MPI] )
685 fi
686  
687 if test -n "$F77" -a "$MPE_BUILD_FORTRAN2C" = "yes" ; then 
688     FLIBS_save="$FLIBS"
689     FLIBS=""
690     AC_F77_LIBRARY_LDFLAGS
691     # The autoconf macro for finding FLIBS sometimes makes mistakes
692     # (particularly with the Fujitsu frt compiler).  This next step
693     # first sees if the FLIBS is valid with the Fortran compiler
694     PAC_PROG_F77_FLIBS_VALID
695     # Now see if FLIBS works with the C compiler
696     PAC_PROG_F77_CHECK_FLIBS
697
698     PAC_PROG_F77_LINKER_WITH_C
699     PAC_PROG_F77_OBJ_LINKS_WITH_C
700     # For name mangle, we need the library flags
701     PAC_PROG_F77_NAME_MANGLE
702     # Check whether additional libraries are needed when linking with C
703     PAC_PROG_F77_AND_C_STDIO_LIBS
704     AC_SUBST(F77_OTHER_LIBS)
705
706     PAC_PROG_F77_LIBRARY_DIR_FLAG
707     if test -z "$FLIB_PATH_LEADER" ; then
708         FLIB_PATH_LEADER=$F77_LIBDIR_LEADER
709     fi
710     PAC_PROG_F77_HAS_INCDIR(f77tmpdir)
711     FINC_PATH_LEADER=$F77_INCDIR
712
713     # Replace all -I in MPI_FFLAGS by $FINC_PATH_LEADER
714     MPI_FFLAGS=`echo "$MPI_FFLAGS" | sed -e "s|-I|$FINC_PATH_LEADER|g"`
715     # If there is MPI_FLIBS, to replace -L by $FLIB_PATH_LEADER
716 fi
717
718 dnl  We need to check that this has worked.  The autoconf macro is broken
719 AC_PROG_CPP
720 if test "$CPP" = "/lib/cpp" -a ! -x /lib/cpp ; then
721     AC_MSG_ERROR( [configure could not find a working C preprocessor] )
722 fi
723
724 dnl  check for "ln -s" exists.  It is for install program, mpeinstall
725 AC_PROG_LN_S
726
727 dnl checking for working INSTALL
728 AC_PROG_INSTALL
729 PAC_PROG_CHECK_INSTALL_WORKS
730 PAC_PROG_INSTALL_BREAKS_LIBS
731
732 dnl
733 dnl MPE_CFLAGS/MPE_FFLAGS are used to pass MPE-modified CFLAGS/FFLAGS
734 dnl to other subpackages.  Can't use CFLAGS to pass this info because
735 dnl user may have set CFLAGS in the environment.  In that scenario,
736 dnl env variable CFLAGS can't be set! So subpackages cannot get the
737 dnl MPE-modified CFLAGS.
738 dnl
739 MPE_CFLAGS="$CFLAGS"
740 if test "$MPE_BUILD_FORTRAN2C" = "yes" ; then
741     MPE_FFLAGS="$FFLAGS"
742 fi
743
744 dnl Determine if this is "UserSupplied" MPI implmentation.
745 dnl If so, build mpecc and mpefc.
746 dnl    MPE_CLINKER/MPE_FLINKER need to sync with sbin/mpeinstall
747 if test "$MPI_IMPL" != "MPICH" -a "$MPI_IMPL" != "MPICH2" ; then
748     mpe_compilers=bin/mpecc
749     if test "$MPE_BUILD_FORTRAN2C" = "yes" ; then
750         mpe_compilers="$mpe_compilers bin/mpefc"
751     fi
752     MPE_CLINKER="$binbuild_dir/mpecc -"
753     MPE_FLINKER="$binbuild_dir/mpefc -"
754 else dnl This is MPICH2.
755     MPE_CLINKER="$MPI_CC -mpe="
756     MPE_FLINKER="$MPI_F77 -mpe="
757 fi
758
759 dnl The following does not work as expected because
760 dnl AC_CONFIG_SUBDIRS sets the "precious" variables like CFLAGS from the
761 dnl settings recorded at the top of the configure. That means CFLAGS cannot
762 dnl be inherit from the mpich2's configure enviroment.
763 dnl
764 dnl Include --enable-strict option only if this isn't part of MPICHx build.
765 dnl MPE does not even need to check enable_strict_done passed down by MPICH2.
766 dnl if test "$MPI_IMPL" != "MPICH" -a "$MPI_IMPL" != "MPICH2" ; then
767 dnl     MPE_CFLAGS="$MPE_CFLAGS $STRICT_COPTS"
768 dnl fi
769 dnl
770 if test -z "$CLINKER" ; then CLINKER="$CC" ; fi
771 if test -z "$FLINKER" ; then FLINKER="$F77" ; fi
772 AC_SUBST(MPI_IMPL)
773 AC_SUBST(MPE_LIBNAME)
774 AC_SUBST(MPE_BUILD_FORTRAN2C)
775 dnl "precious" AC_SUBST(CC)
776 AC_SUBST(CLINKER)
777 AC_SUBST(MPE_CFLAGS)
778 dnl "precious" AC_SUBST(MPI_CC)
779 dnl "precious" AC_SUBST(MPI_CFLAGS)
780 AC_SUBST(MPE_CLINKER)
781 AC_SUBST(F77)
782 AC_SUBST(FLINKER)
783 AC_SUBST(MPE_FFLAGS)
784 dnl "precious" AC_SUBST(MPI_F77)
785 dnl "precious" AC_SUBST(MPI_FFLAGS)
786 AC_SUBST(MPE_FLINKER)
787 dnl "precious" AC_SUBST(MPI_LIBS)
788 dnl "precious" AC_SUBST(LDFLAGS)
789 dnl "precious" AC_SUBST(MPERUN)
790
791 dnl  Make the directories that do not contain Makefiles (should they?) but 
792 dnl  are needed for the subsequent directories.
793 $RM -f $srcdir/mpe_conf.h
794
795 export MPI_IMPL
796 export MPE_LIBNAME
797 export MPE_BUILD_FORTRAN2C
798 export CC
799 export CLINKER
800 export MPI_CC
801 export MPI_CFLAGS
802 export MPE_CLINKER
803 export MPE_CFLAGS
804 export F77
805 export FLINKER
806 export MPI_F77
807 export MPI_FFLAGS
808 export MPE_FLINKER
809 export MPE_FFLAGS
810 export MPI_LIBS
811 export LDFLAGS
812 export FINC_PATH_LEADER
813 export FLIB_PATH_LEADER
814
815 mpe_enable_softerror=yes
816 export mpe_enable_softerror
817
818
819
820
821 AC_OUTPUT_COMMANDS( [
822 if test ! -x ./sbin/mpeinstall -a -s ./sbin/mpeinstall ; then
823     chmod u+x ./sbin/mpeinstall
824 fi
825 if test ! -x ./sbin/mpecheckinstall -a -s ./sbin/mpecheckinstall ; then
826     chmod u+x ./sbin/mpecheckinstall
827 fi
828 if test ! -x ./sbin/mpecheckbuild -a -s ./sbin/mpecheckbuild ; then
829     chmod u+x ./sbin/mpecheckbuild
830 fi
831 if test ! -x ./sbin/mpetestlink -a -s ./sbin/mpetestlink ; then
832     chmod u+x ./sbin/mpetestlink
833 fi
834 if test ! -x ./sbin/mpetestexec -a -s ./sbin/mpetestexec ; then
835     chmod u+x ./sbin/mpetestexec
836 fi
837 if test ! -x ./sbin/mpetestexeclog -a -s ./sbin/mpetestexeclog ; then
838     chmod u+x ./sbin/mpetestexeclog
839 fi
840 if test ! -x ./bin/mpecc -a -s ./bin/mpecc ; then
841     chmod a+x ./bin/mpecc
842 fi
843 if test ! -x ./bin/mpefc -a -s ./bin/mpefc ; then
844     chmod a+x ./bin/mpefc
845 fi
846 ] )
847 AC_OUTPUT( Makefile sbin/mpetestlink sbin/mpetestexec sbin/mpetestexeclog \
848            sbin/mpeinstall sbin/mpecheckinstall sbin/mpecheckbuild \
849            etc/mpe_help.conf etc/mpe_f77env.conf $mpe_compilers )
850
851 configured_pkgs=""
852 for pkg in $selected_pkgs ; do
853     dirname=${pkg}_dirname
854     eval dirvalue=\$"$dirname"
855     if test -s $dirvalue/Makefile ; then
856         configured_pkgs="$configured_pkgs \"$dirvalue\""
857     fi
858 done
859
860 if test -z "$configured_pkgs" ; then
861     AC_MSG_WARN([$pkgname: No sub-package has been configured])
862 else
863     AC_MSG_RESULT([$pkgname: $configured_pkgs have been configured])
864 fi