3 # Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
4 # University Research and Technology
5 # Corporation. All rights reserved.
6 # Copyright (c) 2004-2005 The University of Tennessee and The University
7 # of Tennessee Research Foundation. All rights
9 # Copyright (c) 2004-2006 High Performance Computing Center Stuttgart,
10 # University of Stuttgart. All rights reserved.
11 # Copyright (c) 2004-2005 The Regents of the University of California.
12 # All rights reserved.
13 # Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
16 # Additional copyrights may follow
22 ############################################################################
23 # Initialization, version number, and other random setup/init stuff
24 ############################################################################
28 # We don't have the version number to put in here yet, and we can't
29 # call OMPI_GET_VERSION (etc.) before AC_INIT. So use the shell
33 [m4_normalize(esyscmd([config/ompi_get_version.sh VERSION --base]))],
34 [http://www.open-mpi.org/community/help/], [openmpi])
36 AC_CONFIG_AUX_DIR(./config)
37 AC_CONFIG_MACRO_DIR(./config)
39 # Get our platform support file. This has to be done very, very early
40 # because it twiddles random bits of autoconf
47 AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects no-define])
49 # Make configure depend on the VERSION file, since it's used in AC_INIT
50 AC_SUBST([CONFIGURE_DEPENDENCIES], ['$(top_srcdir)/VERSION'])
57 ompi_show_title "Configuring Open MPI"
59 ompi_show_subtitle "Checking versions"
61 # Get the version of OMPI that we are installing
63 OMPI_SAVE_VERSION([OMPI], [Open MPI], [$srcdir/VERSION],
64 [ompi/include/ompi/version.h])
66 OMPI_SAVE_VERSION([ORTE], [Open Run-Time Environment], [$srcdir/VERSION],
67 [orte/include/orte/version.h])
69 OMPI_SAVE_VERSION([OPAL], [Open Portable Access Layer], [$srcdir/VERSION],
70 [opal/include/opal/version.h])
72 # override/fixup the version numbers set by AC_INIT, since on
73 # developer builds, there's no good way to know what the version is
74 # before running configure :(. We only use the base version number
75 # (ie, no svn r numbers) for the version set in AC_INIT. This will
76 # always match reality because we add the VERSION file (the only way
77 # to change the major.minor.release{greek}) into the configure
78 # dependencies. PACKAGE_VERSION the AC_DEFINE doesn't change once set
79 # the first time -- AC_INIT's input (so it doesn't have an r number in
80 # it). PACKAGE_VERSION the AC_SUBST can be rewritten along the way,
81 # and we'd like it to have the r number in it so that it shows up in
82 # the tarball name, so it is set to the full version here.
83 PACKAGE_VERSION="$OPAL_VERSION"
84 PACKAGE_STRING="${PACKAGE_NAME} ${PACKAGE_VERSION}"
85 VERSION="${PACKAGE_VERSION}"
87 ompi_show_subtitle "Initialization, setup"
89 OMPI_TOP_BUILDDIR="`pwd`"
90 AC_SUBST(OMPI_TOP_BUILDDIR)
92 OMPI_TOP_SRCDIR="`pwd`"
93 AC_SUBST(OMPI_TOP_SRCDIR)
94 cd "$OMPI_TOP_BUILDDIR"
96 AC_MSG_NOTICE([builddir: $OMPI_TOP_BUILDDIR])
97 AC_MSG_NOTICE([srcdir: $OMPI_TOP_SRCDIR])
98 if test "$OMPI_TOP_BUILDDIR" != "$OMPI_TOP_SRCDIR"; then
99 AC_MSG_NOTICE([Detected VPATH build])
102 # Setup the top of the opal/include/opal_config.h file
106 * Copyright (c) 2004-2005 The Trustees of Indiana University.
107 * All rights reserved.
108 * Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
109 * All rights reserved.
110 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
111 * University of Stuttgart. All rights reserved.
112 * Copyright (c) 2004-2005 The Regents of the University of California.
113 * All rights reserved.
116 * Additional copyrights may follow
120 * Function: - OS, CPU and compiler dependent configuration
123 #ifndef OPAL_CONFIG_H
124 #define OPAL_CONFIG_H
127 #include "opal_config_bottom.h"
128 #endif /* OPAL_CONFIG_H */
131 # Other basic setup stuff (shared with components)
135 top_ompi_srcdir="$OMPI_TOP_SRCDIR"
136 AC_SUBST(top_ompi_srcdir)
137 top_ompi_builddir="$OMPI_TOP_BUILDDIR"
138 AC_SUBST(top_ompi_builddir)
140 ############################################################################
141 # Configuration options
142 ############################################################################
144 OMPI_CONFIGURE_OPTIONS
146 ############################################################################
148 # (before C compiler setup)
149 ############################################################################
152 # Part one of libtool magic. Enable static so that we have the --with
153 # tests done up here and can check for OS. Save the values of
154 # $enable_static and $enable_shared before setting the defaults,
155 # because if the user specified --[en|dis]able-[static|shared] on the
156 # command line, they'll already be set. In this way, we can tell if
157 # the user requested something or if the default was set here.
160 ompi_enable_shared="$enable_shared"
161 ompi_enable_static="$enable_static"
165 OMPI_SETUP_WRAPPER_INIT
168 ############################################################################
169 # Check for compilers and preprocessors
170 ############################################################################
171 ompi_show_title "Compiler and preprocessor tests"
173 ##################################
174 # C compiler characteristics
175 ##################################
179 # If we build on a windows environment with the windows compiler and linker
180 # then we need some translation functions from the opal/win32 directory.
181 AM_CONDITIONAL(OMPI_NEED_WINDOWS_REPLACEMENTS,
182 test "$ompi_cv_c_compiler_vendor" = "microsoft" )
185 # Check for some types
188 AC_CHECK_TYPES(long long)
189 AC_CHECK_TYPES(long double)
190 AC_CHECK_TYPES(int8_t)
191 AC_CHECK_TYPES(uint8_t)
192 AC_CHECK_TYPES(int16_t)
193 AC_CHECK_TYPES(uint16_t)
194 AC_CHECK_TYPES(int32_t)
195 AC_CHECK_TYPES(uint32_t)
196 AC_CHECK_TYPES(int64_t)
197 AC_CHECK_TYPES(uint64_t)
198 AC_CHECK_TYPES(intptr_t)
199 AC_CHECK_TYPES(uintptr_t)
200 AC_CHECK_TYPES(mode_t)
204 # Check for type sizes
207 AC_CHECK_SIZEOF(char)
208 AC_CHECK_SIZEOF(short)
210 AC_CHECK_SIZEOF(long)
211 if test $ac_cv_type_long_long = yes; then
212 AC_CHECK_SIZEOF(long long)
214 if test $ac_cv_type_long_double = yes; then
215 AC_CHECK_SIZEOF(long double)
217 AC_CHECK_SIZEOF(float)
218 AC_CHECK_SIZEOF(double)
219 AC_CHECK_SIZEOF(void *)
220 AC_CHECK_SIZEOF(size_t)
223 # Check for type alignments
226 OMPI_C_GET_ALIGNMENT(char, OMPI_ALIGNMENT_CHAR)
227 OMPI_C_GET_ALIGNMENT(short, OMPI_ALIGNMENT_SHORT)
228 OMPI_C_GET_ALIGNMENT(wchar_t, OMPI_ALIGNMENT_WCHAR)
229 OMPI_C_GET_ALIGNMENT(int, OMPI_ALIGNMENT_INT)
230 OMPI_C_GET_ALIGNMENT(long, OMPI_ALIGNMENT_LONG)
231 if test $ac_cv_type_long_long = yes; then
232 OMPI_C_GET_ALIGNMENT(long long, OMPI_ALIGNMENT_LONG_LONG)
234 OMPI_C_GET_ALIGNMENT(float, OMPI_ALIGNMENT_FLOAT)
235 OMPI_C_GET_ALIGNMENT(double, OMPI_ALIGNMENT_DOUBLE)
236 if test $ac_cv_type_long_double = yes; then
237 OMPI_C_GET_ALIGNMENT(long double, OMPI_ALIGNMENT_LONG_DOUBLE)
239 OMPI_C_GET_ALIGNMENT(void *, OMPI_ALIGNMENT_VOID_P)
242 # Does the C compiler native support "bool"? (i.e., without
243 # <stdbool.h> or any other help)
246 AC_MSG_CHECKING(for C bool type)
247 AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[
248 AC_INCLUDES_DEFAULT]],
249 [[bool bar, foo = true; bar = foo;]]),
250 [OMPI_NEED_C_BOOL=0 MSG=yes],[OMPI_NEED_C_BOOL=1 MSG=no])
251 AC_DEFINE_UNQUOTED(OMPI_NEED_C_BOOL, $OMPI_NEED_C_BOOL,
252 [Whether the C compiler supports "bool" without any other help (such as <stdbool.h>)])
253 AC_MSG_RESULT([$MSG])
256 # Check for other compiler characteristics
259 if test "$GCC" = "yes"; then
261 # gcc 2.96 will emit oodles of warnings if you use "inline" with
262 # -pedantic (which we do in developer builds). However,
263 # "__inline__" is ok. So we have to force gcc to select the
264 # right one. If you use -pedantic, the AC_C_INLINE test will fail
265 # (because it names a function foo() -- without the (void)). So
266 # we turn off all the picky flags, turn on -ansi mode (which is
267 # implied by -pedantic), and set warnings to be errors. Hence,
268 # this does the following (for 2.96):
270 # - causes the check for "inline" to emit a warning, which then
272 # - checks for __inline__, which then emits no error, and works
274 # This also works nicely for gcc 3.x because "inline" will work on
275 # the first check, and all is fine. :-)
277 CFLAGS_save="$CFLAGS"
278 CFLAGS="$OMPI_CFLAGS_BEFORE_PICKY -Werror -ansi"
283 if test "$GCC" = "yes"; then
284 CFLAGS="$CFLAGS_save"
287 if test "x$CC" = "xicc"; then
288 OMPI_CHECK_ICC_VARARGS
291 # If we want the profiling layer:
292 # - If the C compiler has weak symbols, use those.
293 # - If not, then set to compile the code again with #define's in a
294 # separate directory.
296 if test "$WANT_WEAK_SYMBOLS" = "0"; then
297 OMPI_C_HAVE_WEAK_SYMBOLS=0
299 if test "$WANT_MPI_PROFILING" = "1"; then
300 if test "$OMPI_C_HAVE_WEAK_SYMBOLS" = "1"; then
301 OMPI_PROFILING_COMPILE_SEPARATELY=0
303 OMPI_PROFILING_COMPILE_SEPARATELY=1
306 OMPI_PROFILING_COMPILE_SEPARATELY=0
310 # There are 2 layers to the MPI Language binidings One layer generates
311 # MPI_* bindings. The other layer generates PMPI_* bindings. The
312 # following conditions determine whether each (or both) these layers
314 # 1. MPI_* bindings are needed if:
315 # - Profiling is not required
316 # - Profiling is required but weak symbols are not
318 # 2. PMPI_* bindings are needed if profiling is required. Hence we
319 # define 2 conditionals which tell us whether each of these layers
320 # need to be built or NOT
323 AM_CONDITIONAL(WANT_MPI_BINDINGS_LAYER,
324 test "$WANT_MPI_PROFILING" = 0 -o "$OMPI_PROFILING_COMPILE_SEPARATELY" = 1)
326 AM_CONDITIONAL(WANT_PMPI_BINDINGS_LAYER,
327 test "$WANT_MPI_PROFILING" = 1)
328 AM_CONDITIONAL(COMPILE_PROFILING_SEPARATELY,
329 test "$OMPI_PROFILING_COMPILE_SEPARATELY" = 1)
330 AC_DEFINE_UNQUOTED(OMPI_ENABLE_MPI_PROFILING, $WANT_MPI_PROFILING,
331 [Whether we want MPI profiling or not])
332 AC_DEFINE_UNQUOTED(OMPI_HAVE_WEAK_SYMBOLS, $OMPI_C_HAVE_WEAK_SYMBOLS,
333 [Wehther we have weak symbols or not])
336 ##################################
337 # C++ compiler characteristics
338 ##################################
342 # check for type sizes
345 AC_CHECK_SIZEOF(bool)
347 # check for type alignments
349 OMPI_C_GET_ALIGNMENT(bool, OMPI_ALIGNMENT_CXX_BOOL)
352 # check if we want C++ support
354 AM_CONDITIONAL(WANT_MPI_CXX_BINDINGS,
355 test "$WANT_MPI_CXX_SUPPORT" = 1)
356 AC_DEFINE_UNQUOTED(OMPI_WANT_CXX_BINDINGS, $WANT_MPI_CXX_SUPPORT,
357 [Whether we want MPI cxx support or not])
360 ##################################
361 # Assembler Configuration
362 ##################################
364 ompi_show_subtitle "Assembler"
370 ##################################
372 ##################################
379 OMPI_F77_FIND_EXT_SYMBOL_CONVENTION
381 # This allows us to mark bogus types, but still have them be a valid
384 AC_DEFINE([ompi_fortran_bogus_type_t], [int],
385 [A bogus type that allows us to have sentinel type values that are still valid])
387 # We want to set the #define's for all of these, so invoke the macros
388 # regardless of whether we have F77 support or not.
390 OMPI_F77_CHECK([LOGICAL], [yes],
391 [char, int32_t, int, int64_t, long long, long], [-1])
392 OMPI_F77_CHECK([INTEGER], [yes],
393 [int32_t, int, int64_t, long long, long], [-1])
394 OMPI_F77_CHECK([INTEGER*1], [no],
395 [char, int8_t, short, int, int64_t, long long, long], [1])
396 OMPI_F77_CHECK([INTEGER*2], [no],
397 [short, int16_t, int32_t, int, int64_t, long long, long], [2])
398 OMPI_F77_CHECK([INTEGER*4], [no],
399 [int32_t, int, int64_t, long long, long], [4])
400 OMPI_F77_CHECK([INTEGER*8], [no],
401 [int, int64_t, long long, long], [8])
402 OMPI_F77_CHECK([INTEGER*16], [no],
403 [int, int64_t, long long, long], [16])
405 OMPI_F77_CHECK([REAL], [yes],
406 [float, double, long double], [-1])
407 OMPI_F77_CHECK([REAL*4], [no],
408 [float, double, long double], [4])
409 OMPI_F77_CHECK([REAL*8], [no],
410 [float, double, long double], [8])
411 OMPI_F77_CHECK([REAL*16], [no],
412 [float, double, long double], [16])
413 OMPI_F77_CHECK([DOUBLE PRECISION], [yes],
414 [float, double, long double], [-1])
416 OMPI_F77_CHECK([COMPLEX], [yes], [], [-1])
418 # The complex*N tests are a bit different (note: the complex tests are
419 # the same as all the rest, because complex is a composite of two
420 # reals, which we *have* to have. It's only the complex*N tests that
421 # are different). The fortran complex types are composites of the
422 # real*(N/2) types. So for us to support complex*N, two conditions
425 # a) we must support real*(N/2) (i.e., compiler supports it and we
426 # have a back-end C type for it)
427 # b) compiler supports complex*N
429 OMPI_F77_CHECK([COMPLEX*8], [no], [], [8])
430 OMPI_F77_CHECK([COMPLEX*16], [no], [], [16])
431 OMPI_F77_CHECK([COMPLEX*32], [no], [], [32])
433 # Regardless of whether we have fortran bindings, or even a fortran
434 # compiler, get the max value for a fortran MPI handle (this macro
435 # handles the case where we don't have a fortran compiler).
437 OMPI_F77_GET_FORTRAN_HANDLE_MAX
440 # Check for Fortran compilers value of TRUE and for the correct assumption
441 # on LOGICAL for conversion into what C considers to be a true value
443 OMPI_F77_GET_VALUE_TRUE
444 OMPI_F77_CHECK_LOGICAL_ARRAY
447 # There are 2 layers to the MPI f77 layer. The only extra thing that
448 # determine f77 bindings is that fortran can be disabled by user. In
449 # such cases, we need to not build the target at all. One layer
450 # generates MPI_f77* bindings. The other layer generates PMPI_f77*
451 # bindings. The following conditions determine whether each (or both)
452 # these layers are built.
454 # Superceeding clause:
455 # - fortran77 bindings should be enabled, else everything is
457 # 1. MPI_f77* bindings are needed if:
458 # - Profiling is not required
459 # - Profiling is required but weak symbols are not
461 # 2. PMPI_* bindings are needed if profiling is required. Hence we
462 # define 2 conditionals which tell us whether each of these layers
463 # need to be built or NOT
465 AM_CONDITIONAL(WANT_MPI_F77_BINDINGS_LAYER,
466 test \( "$WANT_MPI_PROFILING" = 0 -o "$OMPI_PROFILING_COMPILE_SEPARATELY" = 1 \) -a "$OMPI_WANT_F77_BINDINGS" = 1)
468 AM_CONDITIONAL(WANT_PMPI_F77_BINDINGS_LAYER,
469 test "$OMPI_WANT_F77_BINDINGS" = 1 -a "$WANT_MPI_PROFILING" = 1)
477 # Look for the fortran module compiler flag
478 OMPI_F90_FIND_MODULE_INCLUDE_FLAG
480 # Look for all the types
485 # LOGICAL and friends
486 OMPI_F90_CHECK([LOGICAL])
488 # INTEGER and friends
489 OMPI_F90_CHECK([INTEGER])
490 OMPI_F90_CHECK([INTEGER*1], [1])
491 OMPI_F90_CHECK([INTEGER*2], [2])
492 OMPI_F90_CHECK([INTEGER*4], [4])
493 OMPI_F90_CHECK([INTEGER*8], [8])
494 OMPI_F90_CHECK([INTEGER*16], [16])
496 # REAL, DOUBLE PRECISION, REAL*4, *8, *16
497 OMPI_F90_CHECK([REAL])
498 OMPI_F90_CHECK([REAL*4], [4], [1])
499 OMPI_F90_CHECK([REAL*8], [8], [1])
500 OMPI_F90_CHECK([REAL*16], [16], [1])
501 OMPI_F90_CHECK([DOUBLE PRECISION])
503 # COMPLEX, DOUBLE COMPLEX, COMPLEX*8, *16, *32
504 OMPI_F90_CHECK([COMPLEX])
505 OMPI_F90_CHECK([COMPLEX*8], [8])
506 OMPI_F90_CHECK([COMPLEX*16], [16])
507 OMPI_F90_CHECK([COMPLEX*32], [32])
508 OMPI_F90_CHECK([DOUBLE COMPLEX])
510 AC_SUBST(OMPI_F90_IKINDS)
511 AC_SUBST(OMPI_F90_RKINDS)
512 AC_SUBST(OMPI_F90_CKINDS)
514 # get kind value for Fortran MPI_INTEGER_KIND (corresponding to
515 # whatever is the same size as a F77 INTEGER -- for the
516 # most-likely-will-never-occur case where F77 INTEGER is smaller than
517 # an F90 INTEGER; see MPI-2 4.12.6.5
518 if test "$OMPI_SIZEOF_FORTRAN_INTEGER" = "2"; then
519 OMPI_F90_GET_INT_KIND(MPI_INTEGER_KIND, 4, OMPI_MPI_INTEGER_KIND)
520 elif test "$OMPI_SIZEOF_FORTRAN_INTEGER" = "4"; then
521 OMPI_F90_GET_INT_KIND(MPI_INTEGER_KIND, 9, OMPI_MPI_INTEGER_KIND)
522 elif test "$OMPI_SIZEOF_FORTRAN_INTEGER" = "8"; then
523 OMPI_F90_GET_INT_KIND(MPI_INTEGER_KIND, 18, OMPI_MPI_INTEGER_KIND)
524 elif test "$OMPI_SIZEOF_FORTRAN_INTEGER" = "16"; then
525 OMPI_F90_GET_INT_KIND(MPI_INTEGER_KIND, 19, OMPI_MPI_INTEGER_KIND)
526 AC_MSG_ERROR([Cannot support Fortran MPI_INTEGER_KIND!])
528 AC_SUBST(OMPI_MPI_INTEGER_KIND)
530 # get kind value for Fortran MPI_ADDRESS_KIND (corresponding to
531 # whatever is big enough to hold (void*))
532 if test "$ac_cv_sizeof_void_p" = "2"; then
533 OMPI_F90_GET_INT_KIND(MPI_ADDRESS_KIND, 4, OMPI_MPI_ADDRESS_KIND)
534 elif test "$ac_cv_sizeof_void_p" = "4"; then
535 OMPI_F90_GET_INT_KIND(MPI_ADDRESS_KIND, 9, OMPI_MPI_ADDRESS_KIND)
536 elif test "$ac_cv_sizeof_void_p" = "8"; then
537 OMPI_F90_GET_INT_KIND(MPI_ADDRESS_KIND, 18, OMPI_MPI_ADDRESS_KIND)
538 elif test "$ac_cv_sizeof_void_p" = "16"; then
539 OMPI_F90_GET_INT_KIND(MPI_ADDRESS_KIND, 19, OMPI_MPI_ADDRESS_KIND)
541 AC_MSG_ERROR([Cannot support Fortran MPI_ADDRESS_KIND!])
543 AC_SUBST(OMPI_MPI_ADDRESS_KIND)
545 # get kind value for Fortran MPI_OFFSET_KIND (corresponding to INTEGER*8)
546 OMPI_F90_GET_INT_KIND(MPI_OFFSET_KIND, 18, OMPI_MPI_OFFSET_KIND)
547 AC_SUBST(OMPI_MPI_OFFSET_KIND)
552 ##################################
554 ##################################
556 ompi_show_title "Header file tests"
558 AC_CHECK_HEADERS([alloca.h aio.h arpa/inet.h dirent.h \
559 dlfcn.h execinfo.h err.h fcntl.h grp.h inttypes.h libgen.h \
560 libutil.h netdb.h netinet/in.h netinet/tcp.h \
561 poll.h pthread.h pty.h pwd.h sched.h stdint.h \
562 string.h strings.h stropts.h sys/fcntl.h sys/ipc.h \
563 sys/ioctl.h sys/mman.h sys/param.h sys/queue.h \
564 sys/resource.h sys/select.h sys/socket.h sys/sockio.h \
565 sys/stat.h sys/statvfs.h sys/time.h sys/tree.h \
566 sys/types.h sys/uio.h sys/utsname.h sys/wait.h syslog.h \
567 time.h termios.h ulimit.h unistd.h util.h utmp.h malloc.h])
569 # Needed to work around Darwin requiring sys/socket.h for
571 AC_CHECK_HEADERS([net/if.h], [], [],
581 #if HAVE_SYS_SOCKET_H
582 # include <sys/socket.h>
586 # Note that sometimes we have <stdbool.h>, but it doesn't work (e.g.,
587 # have both Portland and GNU installed; using pgcc will find GNU's
588 # <stdbool.h>, which all it does -- by standard -- is define "bool" to
590 # http://www.opengroup.org/onlinepubs/009695399/basedefs/stdbool.h.html],
591 # and Portland has no idea what to do with _Bool).
593 # So first figure out if we have <stdbool.h> (i.e., check the value of
594 # the macro HAVE_STDBOOL_H from the result of AC_CHECK_HEADERS,
595 # above). If we do have it, then check to see if it actually works.
596 # Define OMPI_USE_STDBOOL_H as approrpaite.
597 AC_CHECK_HEADERS([stdbool.h], [have_stdbool_h=1], [have_stdbool_h=0])
598 AC_MSG_CHECKING([if <stdbool.h> works])
599 if test "$have_stdbool_h" = "1"; then
600 AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[
605 [[bool bar, foo = true; bar = foo;]]),
606 [OMPI_USE_STDBOOL_H=1 MSG=yes],[OMPI_USE_STDBOOL_H=0 MSG=no])
609 MSG="no (don't have <stdbool.h>)"
611 AC_DEFINE_UNQUOTED(OMPI_USE_STDBOOL_H, $OMPI_USE_STDBOOL_H,
612 [Whether to use <stdbool.h> or not])
613 AC_MSG_RESULT([$MSG])
619 ##################################
621 ##################################
623 ompi_show_title "Type tests"
626 AC_CHECK_SIZEOF(pid_t)
628 AC_CHECK_TYPES([socklen_t], [AC_DEFINE([HAVE_SOCKLEN_T], [1],
629 [Whether we have socklen_t or not])],
630 [], [AC_INCLUDES_DEFAULT
631 #include <sys/socket.h>])
633 AC_CHECK_TYPES([struct sockaddr_in], [], [], [AC_INCLUDES_DEFAULT
634 #ifdef HAVE_NETINET_IN_H
635 #include <netinet/in.h>
638 # SA_RESTART in signal.h
639 AC_MSG_CHECKING([if SA_RESTART defined in signal.h])
644 #endif ], [MSG=yes VALUE=1], [MSG=no VALUE=0])
645 AC_DEFINE_UNQUOTED(OMPI_HAVE_SA_RESTART, $VALUE,
646 [Whether we have SA_RESTART in <signal.h> or not])
647 AC_MSG_RESULT([$MSG])
649 # sa_len in struct sockaddr
650 AC_MSG_CHECKING([for sa_len in struct sockaddr])
651 AC_TRY_COMPILE([#include <sys/types.h>
652 #include <sys/socket.h>], [struct sockaddr s; s.sa_len;],
653 [MSG=yes VALUE=1], [MSG=no VALUE=0])
654 AC_DEFINE_UNQUOTED(OMPI_HAVE_SA_LEN, $VALUE,
655 [Whether we have the sa_len struct in <sys/socket.h> or not])
656 AC_MSG_RESULT([$MSG])
658 AC_CHECK_MEMBERS([struct dirent.d_type], [], [], [
659 #include <sys/types.h>
660 #include <dirent.h>])
662 AC_CHECK_MEMBERS([siginfo_t.si_fd],,,[#include <signal.h>])
663 AC_CHECK_MEMBERS([siginfo_t.si_band],,,[#include <signal.h>])
670 ##################################
672 ##################################
674 ompi_show_title "Library and Function tests"
676 AC_CHECK_LIB([util], [openpty])
678 AC_CHECK_LIB([nsl], [gethostbyname])
680 AC_CHECK_LIB([socket], [socket])
682 # Solaris has sched_yeild in -lrt, usually in libc
683 OMPI_CHECK_FUNC_LIB([sched_yield], [rt])
685 # FreeBSD has backtrace in -lexecinfo, usually in libc
686 OMPI_CHECK_FUNC_LIB([backtrace], [execinfo])
688 # IRIX has dirname in -lgen, usually in libc
689 OMPI_CHECK_FUNC_LIB([dirname], [gen])
691 # Darwin doesn't need -lm, as it's a symlink to libSystem.dylib
692 OMPI_CHECK_FUNC_LIB([ceil], [m])
694 AC_CHECK_FUNCS([asprintf snprintf vasprintf vsnprintf openpty isatty htonl ntohl htons ntohs getpwuid fork waitpid execve pipe ptsname setsid mmap mallopt tcgetpgrp])
697 # Make sure we can copy va_lists (need check declared, not linkable)
700 AC_CHECK_DECL(va_copy, OMPI_HAVE_VA_COPY=1, OMPI_HAVE_VA_COPY=0,
701 [#include <stdarg.h>])
702 AC_DEFINE_UNQUOTED(OMPI_HAVE_VA_COPY, $OMPI_HAVE_VA_COPY,
703 [Whether we have va_copy or not])
705 AC_CHECK_DECL(__va_copy, OMPI_HAVE_UNDERSCORE_VA_COPY=1,
706 OMPI_HAVE_UNDERSCORE_VA_COPY=0, [#include <stdarg.h>])
707 AC_DEFINE_UNQUOTED(OMPI_HAVE_UNDERSCORE_VA_COPY, $OMPI_HAVE_UNDERSCORE_VA_COPY,
708 [Whether we have __va_copy or not])
710 AC_CHECK_DECLS(__func__)
716 ##################################
717 # System-specific tests
718 ##################################
720 ompi_show_title "System-specific tests"
723 # Test to determine type of MPI_Offset. This is searched in the following order
724 # int64_t, long long, long, int. If none of these are 8 bytes, then we should
725 # search for int32_t, long long, long, int.
727 MPI_OFFSET_TYPE="not found"
728 MPI_OFFSET_DATATYPE="not found"
729 AC_MSG_CHECKING([checking for type of MPI_Offset])
730 if test "$ac_cv_type_long_long" = "yes" -a "$ac_cv_sizeof_long_long" = 8; then
731 MPI_OFFSET_TYPE="long long"
732 MPI_OFFSET_DATATYPE=MPI_LONG_LONG
734 elif test "$ac_cv_type_long" = "yes" -a "$ac_cv_sizeof_long" = 8; then
735 MPI_OFFSET_TYPE="long"
736 MPI_OFFSET_DATATYPE=MPI_LONG
738 elif test "ac_cv_sizeof_int" = 8; then
740 MPI_OFFSET_DATATYPE=MPI_INT
742 elif test "$ac_cv_type_long_long" = "yes" -a "$ac_cv_sizeof_long_long" = 4; then
743 MPI_OFFSET_TYPE="long long"
744 MPI_OFFSET_DATATYPE=MPI_LONG_LONG
746 elif test "$ac_cv_type_long" = "yes" -a "$ac_cv_sizeof_long" = 4; then
747 MPI_OFFSET_TYPE="long"
748 MPI_OFFSET_DATATYPE=MPI_LONG
750 elif test "ac_cv_sizeof_int" = 4; then
752 MPI_OFFSET_DATATYPE=MPI_INT
755 AC_MSG_RESULT([$MPI_OFFSET_TYPE])
756 if test "$MPI_OFFSET_TYPE" = "not found"; then
757 AC_MSG_WARN([*** Unable to find the right definition for MPI_Offset])
758 AC_MSG_ERROR([Cannot continue])
760 AC_DEFINE_UNQUOTED(OMPI_MPI_OFFSET_TYPE, $MPI_OFFSET_TYPE, [Type of MPI_Offset -- has to be defined here and typedef'ed later because mpi.h does not get AC SUBST's])
763 # If we haven't already, figure out an MPI datatype that corresponds
764 # to the back-end C type of MPI_Offset.
766 AC_MSG_CHECKING([checking for an MPI datatype for MPI_Offset])
767 AC_MSG_RESULT([$MPI_OFFSET_DATATYPE])
768 if test "$MPI_OFFSET_DATATYPE" = "not found"; then
769 AC_MSG_WARN([*** Unable to find an MPI datatype corresponding to MPI_Offset])
770 AC_MSG_ERROR([Cannot continue])
772 AC_DEFINE_UNQUOTED(OMPI_OFFSET_DATATYPE, $MPI_OFFSET_DATATYPE, [MPI datatype corresponding to MPI_Offset])
778 OMPI_CHECK_BROKEN_QSORT
780 # all: SYSV semaphores
781 # all: SYSV shared memory
782 # all: size of FD_SET
783 # all: sizeof struct stat members
784 # all: type of getsockopt optlen
785 # all: type of recvfrom optlen
788 # Check out what thread support we have
792 CFLAGS="$CFLAGS $THREAD_CFLAGS"
793 CXXFLAGS="$CXXFLAGS $THREAD_CXXFLAGS"
794 CPPFLAGS="$CPPFLAGS $THREAD_CPPFLAGS"
795 CXXCPPFLAGS="$CXXCPPFLAGS $THREAD_CXXCPPFLAGS"
796 LDFLAGS="$LDFLAGS $THREAD_LDFLAGS"
797 LIBS="$LIBS $THREAD_LIBS"
800 WRAPPER_EXTRA_CPPFLAGS="$WRAPPER_EXTRA_CPPFLAGS $THREAD_CPPFLAGS"
801 WRAPPER_EXTRA_CFLAGS="$WRAPPER_EXTRA_CFLAGS $THREAD_CFLAGS"
802 WRAPPER_EXTRA_CXXFLAGS="$WRAPPER_EXTRA_CXXFLAGS $THREAD_CXXFLAGS"
803 WRAPPER_EXTRA_FFLAGS="$WRAPPER_EXTRA_FFLAGS $THREAD_FFLAGS"
804 WRAPPER_EXTRA_FCFLAGS="$WRAPPER_EXTRA_FCFLAGS $THREAD_FFLAGS"
805 WRAPPER_EXTRA_LDFLAGS="$WRAPPER_EXTRA_LDFLAGS $THREAD_LDFLAGS"
806 # no need to update WRAPPER_EXTRA_LIBS - we'll get it from LT later
809 # What is the local equivalent of "ln -s"
820 # If we don't have GNU Flex and we don't have a generated .c file
821 # (distribution tarballs will have the .c file included, but SVN
822 # checkouts will not), then error. Must have GNU Flex -- other
823 # versions of Lex are not workable (all things being equal, since this
824 # is *only* required for developers, we decided that it really was not
825 # worth it to be portable between different versions of lex ;-).
827 if test -z "$LEX" -o -n "`echo $LEX | grep missing`" -o \
828 "`basename $LEX`" != "flex"; then
829 if test ! -f "$srcdir/opal/util/show_help_lex.c"; then
830 AC_MSG_WARN([*** Could not find GNU Flex on your system.])
831 AC_MSG_WARN([*** GNU Flex required for developer builds of Open MPI.])
832 AC_MSG_WARN([*** Other versions of Lex are not supported.])
833 AC_MSG_WARN([*** YOU DO NOT NEED FLEX FOR DISTRIBUTION TARBALLS!])
834 AC_MSG_WARN([*** If you absolutely cannot install GNU Flex on this system])
835 AC_MSG_WARN([*** consider using a distribution tarball, or generate the])
836 AC_MSG_WARN([*** following files on another system (using Flex) and])
837 AC_MSG_WARN([*** copy them here:])
838 for lfile in `find . -name \*.l -print`; do
839 cfile="`echo $lfile | cut -d. -f-2`"
840 AC_MSG_WARN([*** $cfile.c])
842 AC_MSG_ERROR([Cannot continue])
847 # File system case sensitivity
850 OMPI_CASE_SENSITIVE_FS_SETUP
852 # AIX: FIONBIO in sys/ioctl.h
859 ##################################
861 ##################################
863 ompi_show_title "Modular Component Architecture (MCA) setup"
865 AC_MSG_CHECKING([for subdir args])
866 OMPI_CONFIG_SUBDIR_ARGS([ompi_subdir_args])
867 AC_MSG_RESULT([$ompi_subdir_args])
875 ############################################################################
876 # Final top-level OMPI configuration
877 ############################################################################
879 ompi_show_title "Final top-level OMPI configuration"
881 ############################################################################
883 ############################################################################
885 ompi_show_subtitle "Libevent 3rd party event handler"
886 CFLAGS_save="$CFLAGS"
887 CFLAGS="$OMPI_CFLAGS_BEFORE_PICKY"
889 CFLAGS="$CFLAGS_save"
892 ############################################################################
894 # (after C compiler setup)
895 ############################################################################
897 ompi_show_subtitle "Libtool configuration"
899 # Use convenience libltdl for the moment, because we need to force the
900 # use of the newest libltdl (i.e., the one that ships with libtool
901 # 1.5) because it has support for a lot more things than older
902 # versions of libtool (which are generally installed by default).
903 AS_IF([test "$OMPI_ENABLE_DLOPEN_SUPPORT" = "1"],
904 [AC_LIBLTDL_CONVENIENCE(opal/libltdl)
910 # AC_CONFIG_SUBDIRS appears to be broken for non-gcc compilers (i.e.,
911 # passing precious variables down to the sub-configure).
913 # Note that we also did some magic scripty-foo in autogen.sh to rename
914 # the output libtool library "libompi_ltdl", so add -lompi_ltdl here.
915 # This is because so many systems have older versions of libltdl
916 # installed very early in ld.so's search path; if we installed our own
917 # libltdl in some non-standard path (e.g., $HOME/local or even
918 # /usr/local), the libltdl in /usr/lib might get found first. And if
919 # it's older -- or just not matching the version that we need, Bad
920 # Things happen. [sigh]
922 # Finally, make libompi_ltdl follow the same shared/static convention
923 # that was user for the main OMPI libraries. So manually examine
924 # $enable_shared and $enable_static and pass down the corresponding
927 ompi_show_subtitle "GNU libltdl setup"
929 if test "$OMPI_ENABLE_DLOPEN_SUPPORT" = "1" ; then
930 ompi_subdir_args="$ompi_subdir_args --enable-ltdl-convenience --disable-ltdl-install"
931 if test "$enable_shared" = "yes"; then
932 ompi_subdir_args="$ompi_subdir_args --enable-shared"
934 ompi_subdir_args="$ompi_subdir_args --disable-shared"
936 if test "$enable_static" = "yes"; then
937 ompi_subdir_args="$ompi_subdir_args --enable-static"
939 ompi_subdir_args="$ompi_subdir_args --disable-static"
942 CFLAGS_save="$CFLAGS"
943 CFLAGS="$OMPI_CFLAGS_BEFORE_PICKY"
944 OMPI_CONFIG_SUBDIR(opal/libltdl, [$ompi_subdir_args], [HAPPY=1], [HAPPY=0])
945 if test "$HAPPY" = "1"; then
946 LIBLTDL_SUBDIR=libltdl
947 LIBLTDL_LTLIB=libltdl/libltdlc.la
950 # Arrgh. This is gross. But I can't think of any other way to do
953 flags="`egrep ^LIBADD_DL opal/libltdl/Makefile | cut -d= -f2-`"
954 OMPI_CHECK_LINKER_FLAGS([opal/libltdl/libtool], [-export-dynamic $flags])
955 WRAPPER_EXTRA_LIBS="$WRAPPER_EXTRA_LIBS $extra_ldflags"
956 LDFLAGS="-export-dynamic $LDFLAGS"
958 AC_MSG_ERROR([Failed to build GNU libltdl. This usually means that something
959 is incorrectly setup with your environment. There may be useful information in
960 opal/libltdl/config.log. You can also disable GNU libltdl (which will disable
961 dynamic shared object loading) by configuring with --disable-dlopen.])
963 CFLAGS="$CFLAGS_save"
964 OPAL_LTDL_CPPFLAGS='-I$(top_srcdir)/opal/libltdl'
966 AC_MSG_WARN([libltdl support disabled (by --disable-dlopen)])
973 # append instead of prepend, since LIBS are going to be system
974 # type things needed by everyone. Normally, libltdl will push
975 # these into LIBS, but since we've disabled libltdl, we need
977 WRAPPER_EXTRA_LIBS="$WRAPPER_EXTRA_LIBS $LIBS"
980 AC_SUBST(LIBLTDL_SUBDIR)
981 AC_SUBST(LIBLTDL_LTLIB)
982 # Have a variable that can be used to indicate where ltdl.h lives. Do
983 # this specifically so that we get the included ltdl.h (which we know
984 # will work properly with the compiled code, including libltdl), not
985 # the system one (which is likely to be far too old and buggy).
986 AC_SUBST(OPAL_LTDL_CPPFLAGS)
988 AM_CONDITIONAL(WANT_LIBLTDL, test "$WANT_LIBLTDL" = "1")
989 AC_DEFINE_UNQUOTED(OMPI_WANT_LIBLTDL, $WANT_LIBLTDL,
990 [Whether to include support for libltdl or not])
993 ############################################################################
994 # final compiler config
995 ############################################################################
997 ompi_show_subtitle "Compiler flags"
1000 # This is needed for VPATH builds, so that it will -I the appropriate
1001 # include directory. We delayed doing it until now just so that
1002 # '-I$(top_srcdir)' doesn't show up in any of the configure output --
1005 # Because opal_config.h, orte_config.h, and ompi_config.h are all
1006 # created by AC_CONFIG_HEADERS, we don't need to -I the builddir for
1007 # <project>/include. If we VPATH building, we do need to include the
1008 # source directories, however.
1010 if test "$OMPI_TOP_BUILDDIR" != "$OMPI_TOP_SRCDIR"; then
1011 CPPFLAGS='-I$(top_srcdir) -I$(top_builddir) -I$(top_srcdir)/opal/include -I$(top_srcdir)/orte/include -I$(top_srcdir)/ompi/include'" $CPPFLAGS"
1012 CXXCPPFLAGS='-I$(top_srcdir) -I$(top_builddir) -I$(top_srcdir)/opal/include -I$(top_srcdir)/orte/include -I$(top_srcdir)/ompi/include'" $CXXCPPFLAGS"
1014 CPPFLAGS='-I$(top_srcdir)'" $CPPFLAGS"
1015 CXXCPPFLAGS='-I$(top_srcdir)'" $CXXCPPFLAGS"
1019 # Do a final process of the CFLAGS to make a WITHOUT_OPTFLAGS version.
1020 # We need this so that we can guarantee to build the TotalView stuff
1021 # with -g and nothing else.
1024 OMPI_MAKE_STRIPPED_FLAGS($CFLAGS)
1025 CFLAGS_WITHOUT_OPTFLAGS="$s_result"
1026 if test "$with_tv_debug_flags" != ""; then
1027 TOTALVIEW_DEBUG_FLAGS="$with_tv_debug_flags"
1029 TOTALVIEW_DEBUG_FLAGS="-g"
1031 AC_MSG_CHECKING([which of CFLAGS are ok for TotalView modules])
1032 AC_MSG_RESULT([$CFLAGS_WITHOUT_OPTFLAGS])
1033 AC_MSG_CHECKING([extra CFLAGS for TotalView modules])
1034 AC_MSG_RESULT([$TOTALVIEW_DEBUG_FLAGS])
1036 AC_SUBST(CFLAGS_WITHOUT_OPTFLAGS)
1037 AC_SUBST(TOTALVIEW_DEBUG_FLAGS)
1041 # Delayed the substitution of CFLAGS and CXXFLAGS until now because
1042 # they may have been modified throughout the course of this script.
1048 AC_SUBST(CXXCPPFLAGS)
1052 ############################################################################
1053 # final wrapper compiler config
1054 ############################################################################
1056 ompi_show_subtitle "Wrapper compiler flags"
1057 OMPI_SETUP_WRAPPER_FINAL
1059 ############################################################################
1061 ############################################################################
1063 ompi_show_subtitle "Final output"
1065 OMPI_INSTALL_DIRS(opal/include/opal/install_dirs.h)
1067 AM_CONFIG_HEADER([opal/include/opal_config.h orte/include/orte_config.h ompi/include/ompi_config.h ompi/include/mpi.h])
1077 opal/include/Makefile
1080 opal/event/compat/Makefile
1081 opal/event/compat/sys/Makefile
1083 opal/util/keyval/Makefile
1084 opal/mca/base/Makefile
1085 opal/tools/wrappers/Makefile
1086 opal/tools/wrappers/opalcc-wrapper-data.txt
1087 opal/tools/wrappers/opalc++-wrapper-data.txt
1090 orte/include/Makefile
1093 orte/tools/orted/Makefile
1094 orte/tools/orterun/Makefile
1095 orte/tools/wrappers/Makefile
1096 orte/tools/wrappers/ortecc-wrapper-data.txt
1097 orte/tools/wrappers/ortec++-wrapper-data.txt
1101 ompi/include/Makefile
1103 ompi/include/mpif-config.h
1105 ompi/datatype/Makefile
1106 ompi/debuggers/Makefile
1110 ompi/mpi/c/profile/Makefile
1111 ompi/mpi/cxx/Makefile
1112 ompi/mpi/f77/Makefile
1113 ompi/mpi/f77/profile/Makefile
1114 ompi/mpi/f90/Makefile
1115 ompi/mpi/f90/fortran_kinds.sh
1116 ompi/mpi/f90/fortran_sizes.h
1117 ompi/mpi/f90/scripts/Makefile
1119 ompi/tools/ompi_info/Makefile
1120 ompi/tools/wrappers/Makefile
1121 ompi/tools/wrappers/mpicc-wrapper-data.txt
1122 ompi/tools/wrappers/mpic++-wrapper-data.txt
1123 ompi/tools/wrappers/mpif77-wrapper-data.txt
1124 ompi/tools/wrappers/mpif90-wrapper-data.txt
1131 test/mca/gpr/Makefile
1132 test/mca/gpr/remote/Makefile
1133 test/mca/ns/Makefile
1134 test/mca/oob/Makefile
1135 test/mca/ras/Makefile
1136 test/mca/rds/Makefile
1137 test/mca/rmaps/Makefile
1138 test/mca/rmgr/Makefile
1139 test/mca/schema/Makefile
1140 test/mca/soh/Makefile
1141 test/memory/Makefile
1142 test/runtime/Makefile
1143 test/support/Makefile
1144 test/threads/Makefile
1146 test/peruse/Makefile