359 строки
9.8 KiB
Plaintext
359 строки
9.8 KiB
Plaintext
|
dnl -*- shell-script -*-
|
||
|
dnl
|
||
|
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||
|
dnl University Research and Technology
|
||
|
dnl Corporation. All rights reserved.
|
||
|
dnl Copyright (c) 2004-2005 The University of Tennessee and The University
|
||
|
dnl of Tennessee Research Foundation. All rights
|
||
|
dnl reserved.
|
||
|
dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||
|
dnl University of Stuttgart. All rights reserved.
|
||
|
dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
||
|
dnl All rights reserved.
|
||
|
dnl Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
|
||
|
dnl $COPYRIGHT$
|
||
|
dnl
|
||
|
dnl Additional copyrights may follow
|
||
|
dnl
|
||
|
dnl $HEADER$
|
||
|
dnl
|
||
|
|
||
|
AC_DEFUN([OMPI_CONFIGURE_SETUP],[
|
||
|
|
||
|
# Some helper script functions. Unfortunately, we cannot use $1 kinds
|
||
|
# of arugments here because of the m4 substitution. So we have to set
|
||
|
# special variable names before invoking the function. :-\
|
||
|
|
||
|
ompi_show_title() {
|
||
|
cat <<EOF
|
||
|
|
||
|
============================================================================
|
||
|
== ${1}
|
||
|
============================================================================
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
|
||
|
ompi_show_subtitle() {
|
||
|
cat <<EOF
|
||
|
|
||
|
*** ${1}
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
|
||
|
ompi_show_subsubtitle() {
|
||
|
cat <<EOF
|
||
|
|
||
|
+++ ${1}
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
ompi_show_subsubsubtitle() {
|
||
|
cat <<EOF
|
||
|
|
||
|
--- ${1}
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# Save some stats about this build
|
||
|
#
|
||
|
|
||
|
OMPI_CONFIGURE_USER="`whoami`"
|
||
|
OMPI_CONFIGURE_HOST="`hostname | head -n 1`"
|
||
|
OMPI_CONFIGURE_DATE="`date`"
|
||
|
|
||
|
#
|
||
|
# Save these details so that they can be used in ompi_info later
|
||
|
#
|
||
|
AC_SUBST(OMPI_CONFIGURE_USER)
|
||
|
AC_SUBST(OMPI_CONFIGURE_HOST)
|
||
|
AC_SUBST(OMPI_CONFIGURE_DATE)])dnl
|
||
|
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
|
||
|
AC_DEFUN([OMPI_BASIC_SETUP],[
|
||
|
#
|
||
|
# Save some stats about this build
|
||
|
#
|
||
|
|
||
|
OMPI_CONFIGURE_USER="`whoami`"
|
||
|
OMPI_CONFIGURE_HOST="`hostname | head -n 1`"
|
||
|
OMPI_CONFIGURE_DATE="`date`"
|
||
|
|
||
|
#
|
||
|
# Make automake clean emacs ~ files for "make clean"
|
||
|
#
|
||
|
|
||
|
CLEANFILES="*~ .\#*"
|
||
|
AC_SUBST(CLEANFILES)
|
||
|
|
||
|
#
|
||
|
# This is useful later (ompi_info, and therefore mpiexec)
|
||
|
#
|
||
|
|
||
|
AC_CANONICAL_HOST
|
||
|
AC_DEFINE_UNQUOTED(OMPI_ARCH, "$host", [OMPI architecture string])
|
||
|
|
||
|
#
|
||
|
# See if we can find an old installation of OMPI to overwrite
|
||
|
#
|
||
|
|
||
|
# Stupid autoconf 2.54 has a bug in AC_PREFIX_PROGRAM -- if ompi_clean
|
||
|
# is not found in the path and the user did not specify --prefix,
|
||
|
# we'll get a $prefix of "."
|
||
|
|
||
|
ompi_prefix_save="$prefix"
|
||
|
AC_PREFIX_PROGRAM(ompi_clean)
|
||
|
if test "$prefix" = "."; then
|
||
|
prefix="$ompi_prefix_save"
|
||
|
fi
|
||
|
unset ompi_prefix_save
|
||
|
|
||
|
#
|
||
|
# Basic sanity checking; we can't install to a relative path
|
||
|
#
|
||
|
|
||
|
case "$prefix" in
|
||
|
/*/bin)
|
||
|
prefix="`dirname $prefix`"
|
||
|
echo installing to directory \"$prefix\"
|
||
|
;;
|
||
|
/*)
|
||
|
echo installing to directory \"$prefix\"
|
||
|
;;
|
||
|
NONE)
|
||
|
echo installing to directory \"$ac_default_prefix\"
|
||
|
;;
|
||
|
@<:@a-zA-Z@:>@:*)
|
||
|
echo installing to directory \"$prefix\"
|
||
|
;;
|
||
|
*)
|
||
|
AC_MSG_ERROR(prefix "$prefix" must be an absolute directory path)
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
# Allow the --enable-dist flag to be passed in
|
||
|
|
||
|
AC_ARG_ENABLE(dist,
|
||
|
AC_HELP_STRING([--enable-dist],
|
||
|
[guarantee that that the "dist" make target will be functional, although may not guarantee that any other make target will be functional.]),
|
||
|
OMPI_WANT_DIST=yes, OMPI_WANT_DIST=no)
|
||
|
|
||
|
if test "$OMPI_WANT_DIST" = "yes"; then
|
||
|
AC_MSG_WARN([Configuring in 'make dist' mode])
|
||
|
AC_MSG_WARN([Most make targets may be non-functional!])
|
||
|
fi])dnl
|
||
|
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
|
||
|
AC_DEFUN([OMPI_LOG_MSG],[
|
||
|
# 1 is the message
|
||
|
# 2 is whether to put a prefix or not
|
||
|
if test -n "$2"; then
|
||
|
echo "configure:__oline__: $1" >&5
|
||
|
else
|
||
|
echo $1 >&5
|
||
|
fi])dnl
|
||
|
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
|
||
|
AC_DEFUN([OMPI_LOG_FILE],[
|
||
|
# 1 is the filename
|
||
|
if test -n "$1" -a -f "$1"; then
|
||
|
cat $1 >&5
|
||
|
fi])dnl
|
||
|
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
|
||
|
AC_DEFUN([OMPI_LOG_COMMAND],[
|
||
|
# 1 is the command
|
||
|
# 2 is actions to do if success
|
||
|
# 3 is actions to do if fail
|
||
|
echo "configure:__oline__: $1" >&5
|
||
|
$1 1>&5 2>&1
|
||
|
ompi_status=$?
|
||
|
OMPI_LOG_MSG([\$? = $ompi_status], 1)
|
||
|
if test "$ompi_status" = "0"; then
|
||
|
unset ompi_status
|
||
|
$2
|
||
|
else
|
||
|
unset ompi_status
|
||
|
$3
|
||
|
fi])dnl
|
||
|
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
|
||
|
AC_DEFUN([OMPI_UNIQ],[
|
||
|
# 1 is the variable name to be uniq-ized
|
||
|
ompi_name=$1
|
||
|
|
||
|
# Go through each item in the variable and only keep the unique ones
|
||
|
|
||
|
ompi_count=0
|
||
|
for val in ${$1}; do
|
||
|
ompi_done=0
|
||
|
ompi_i=1
|
||
|
ompi_found=0
|
||
|
|
||
|
# Loop over every token we've seen so far
|
||
|
|
||
|
ompi_done="`expr $ompi_i \> $ompi_count`"
|
||
|
while test "$ompi_found" = "0" -a "$ompi_done" = "0"; do
|
||
|
|
||
|
# Have we seen this token already? Prefix the comparison with
|
||
|
# "x" so that "-Lfoo" values won't be cause an error.
|
||
|
|
||
|
ompi_eval="expr x$val = x\$ompi_array_$ompi_i"
|
||
|
ompi_found=`eval $ompi_eval`
|
||
|
|
||
|
# Check the ending condition
|
||
|
|
||
|
ompi_done="`expr $ompi_i \>= $ompi_count`"
|
||
|
|
||
|
# Increment the counter
|
||
|
|
||
|
ompi_i="`expr $ompi_i + 1`"
|
||
|
done
|
||
|
|
||
|
# If we didn't find the token, add it to the "array"
|
||
|
|
||
|
if test "$ompi_found" = "0"; then
|
||
|
ompi_eval="ompi_array_$ompi_i=$val"
|
||
|
eval $ompi_eval
|
||
|
ompi_count="`expr $ompi_count + 1`"
|
||
|
else
|
||
|
ompi_i="`expr $ompi_i - 1`"
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# Take all the items in the "array" and assemble them back into a
|
||
|
# single variable
|
||
|
|
||
|
ompi_i=1
|
||
|
ompi_done="`expr $ompi_i \> $ompi_count`"
|
||
|
ompi_newval=
|
||
|
while test "$ompi_done" = "0"; do
|
||
|
ompi_eval="ompi_newval=\"$ompi_newval \$ompi_array_$ompi_i\""
|
||
|
eval $ompi_eval
|
||
|
|
||
|
ompi_eval="unset ompi_array_$ompi_i"
|
||
|
eval $ompi_eval
|
||
|
|
||
|
ompi_done="`expr $ompi_i \>= $ompi_count`"
|
||
|
ompi_i="`expr $ompi_i + 1`"
|
||
|
done
|
||
|
|
||
|
# Done; do the assignment
|
||
|
|
||
|
ompi_newval="`echo $ompi_newval`"
|
||
|
ompi_eval="$ompi_name=\"$ompi_newval\""
|
||
|
eval $ompi_eval
|
||
|
|
||
|
# Clean up
|
||
|
|
||
|
unset ompi_name ompi_i ompi_done ompi_newval ompi_eval ompi_count])dnl
|
||
|
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
|
||
|
# Macro that serves as an alternative to using `which <prog>`. It is
|
||
|
# preferable to simply using `which <prog>` because backticks (`) (aka
|
||
|
# backquotes) invoke a sub-shell which may source a "noisy"
|
||
|
# ~/.whatever file (and we do not want the error messages to be part
|
||
|
# of the assignment in foo=`which <prog>`). This macro ensures that we
|
||
|
# get a sane executable value.
|
||
|
AC_DEFUN([OMPI_WHICH],[
|
||
|
# 1 is the variable name to do "which" on
|
||
|
# 2 is the variable name to assign the return value to
|
||
|
|
||
|
OMPI_VAR_SCOPE_PUSH([ompi_prog ompi_file ompi_dir ompi_sentinel])
|
||
|
|
||
|
ompi_prog=$1
|
||
|
|
||
|
IFS_SAVE=$IFS
|
||
|
IFS="$PATH_SEPARATOR"
|
||
|
for ompi_dir in $PATH; do
|
||
|
if test -x "$ompi_dir/$ompi_prog"; then
|
||
|
$2="$ompi_dir/$ompi_prog"
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
IFS=$IFS_SAVE
|
||
|
|
||
|
OMPI_VAR_SCOPE_POP
|
||
|
])dnl
|
||
|
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
dnl #######################################################################
|
||
|
|
||
|
# Declare some variables; use OMPI_VAR_SCOPE_END to ensure that they
|
||
|
# are cleaned up / undefined.
|
||
|
AC_DEFUN([OMPI_VAR_SCOPE_PUSH],[
|
||
|
|
||
|
# Is the private index set? If not, set it.
|
||
|
if test "x$ompi_scope_index" = "x"; then
|
||
|
ompi_scope_index=1
|
||
|
fi
|
||
|
|
||
|
# First, check to see if any of these variables are already set.
|
||
|
# This is a simple sanity check to ensure we're not already
|
||
|
# overwriting pre-existing variables (that have a non-empty
|
||
|
# value). It's not a perfect check, but at least it's something.
|
||
|
for ompi_var in $1; do
|
||
|
ompi_str="ompi_str=\"\$$ompi_var\""
|
||
|
eval $ompi_str
|
||
|
|
||
|
if test "x$ompi_str" != "x"; then
|
||
|
AC_MSG_WARN([Found configure shell variable clash!])
|
||
|
AC_MSG_WARN([[OMPI_VAR_SCOPE_PUSH] called on "$ompi_var",])
|
||
|
AC_MSG_WARN([but it is already defined with value "$ompi_str"])
|
||
|
AC_MSG_WARN([This usually indicates an error in configure.])
|
||
|
AC_MSG_ERROR([Cannot continue])
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# Ok, we passed the simple sanity check. Save all these names so
|
||
|
# that we can unset them at the end of the scope.
|
||
|
ompi_str="ompi_scope_$ompi_scope_index=\"$1\""
|
||
|
eval $ompi_str
|
||
|
unset ompi_str
|
||
|
|
||
|
env | grep ompi_scope
|
||
|
ompi_scope_index=`expr $ompi_scope_index + 1`
|
||
|
])dnl
|
||
|
|
||
|
# Unset a bunch of variables that were previously set
|
||
|
AC_DEFUN([OMPI_VAR_SCOPE_POP],[
|
||
|
# Unwind the index
|
||
|
ompi_scope_index=`expr $ompi_scope_index - 1`
|
||
|
ompi_scope_test=`expr $ompi_scope_index \> 0`
|
||
|
if test "$ompi_scope_test" = "0"; then
|
||
|
AC_MSG_WARN([[OMPI_VAR_SCOPE_POP] popped too many OMPI configure scopes.])
|
||
|
AC_MSG_WARN([This usually indicates an error in configure.])
|
||
|
AC_MSG_ERROR([Cannot continue])
|
||
|
fi
|
||
|
|
||
|
# Get the variable names from that index
|
||
|
ompi_str="ompi_str=\"\$ompi_scope_$ompi_scope_index\""
|
||
|
eval $ompi_str
|
||
|
|
||
|
# Iterate over all the variables and unset them all
|
||
|
for ompi_var in $ompi_str; do
|
||
|
unset $ompi_var
|
||
|
done
|
||
|
])dnl
|