721fda8ecb
the Open MPI tree. This fixes bug 1015. - Eliminate some confusion/inconsistencies through the tree; we only use MCA_<type>_<name>_VERSION now, not ..._FULL_VERSION - coll demo component is ready - ROMIO io component had a VERSION file but wasn't using it, so now it's using it properly - Updated autogen.sh and mca_make_configure.pl to generate version header templates upon demand This commit was SVN r3267.
455 строки
14 KiB
Bash
455 строки
14 KiB
Bash
# -*- shell-script -*-
|
|
#
|
|
# $HEADER$
|
|
#
|
|
|
|
|
|
############################################################################
|
|
# Initialization, version number, and other random setup/init stuff
|
|
############################################################################
|
|
|
|
# Init autoconf
|
|
|
|
AC_INIT(@PARAM_INIT_FILE@)
|
|
AC_PREREQ(2.57)
|
|
AC_CONFIG_AUX_DIR(@PARAM_CONFIG_AUX_DIR@)
|
|
|
|
# Get the version of @MCA_TYPE@ @MCA_COMPONENT_NAME@ that we are installing.
|
|
|
|
if test -n "@PARAM_VERSION_FILE@" -a -f "@PARAM_VERSION_FILE@"; then
|
|
OMPI_GET_VERSION(@PARAM_VERSION_FILE@, @PARAM_VAR_PREFIX@)
|
|
|
|
AC_SUBST(@PARAM_VAR_PREFIX@_MAJOR_VERSION)
|
|
AC_SUBST(@PARAM_VAR_PREFIX@_MINOR_VERSION)
|
|
AC_SUBST(@PARAM_VAR_PREFIX@_RELEASE_VERSION)
|
|
AC_SUBST(@PARAM_VAR_PREFIX@_ALPHA_VERSION)
|
|
AC_SUBST(@PARAM_VAR_PREFIX@_BETA_VERSION)
|
|
AC_SUBST(@PARAM_VAR_PREFIX@_SVN_VERSION)
|
|
AC_SUBST(@PARAM_VAR_PREFIX@_VERSION)
|
|
version_string="version $@PARAM_VAR_PREFIX@_VERSION"
|
|
else
|
|
version_string=""
|
|
fi
|
|
|
|
#
|
|
# Start it up
|
|
#
|
|
|
|
OMPI_CONFIGURE_SETUP
|
|
ompi_show_title "Configuring MCA @MCA_TYPE@ @MCA_COMPONENT_NAME@ component $version_string"
|
|
ompi_show_subtitle "Initialization, setup"
|
|
|
|
#
|
|
# Init automake
|
|
# The third argument to AM_INIT_AUTOMAKE surpresses the PACKAGE and
|
|
# VERSION macors
|
|
#
|
|
|
|
AM_INIT_AUTOMAKE(@PARAM_AM_NAME@, $@PARAM_VAR_PREFIX@_VERSION, 'no')
|
|
|
|
#
|
|
# GNU C and autotools are inconsistent about whether this is defined
|
|
# so let's make it true everywhere for now...
|
|
#
|
|
AC_GNU_SOURCE
|
|
|
|
# Setup the top-level MCA component config.h file
|
|
|
|
AH_TOP([/* -*- c -*-
|
|
*
|
|
* $HEADER$
|
|
*
|
|
* Open MPI configuation header file.
|
|
* MCA @MCA_TYPE@: @MCA_COMPONENT_NAME@ component
|
|
*/
|
|
|
|
#ifndef @PARAM_VAR_PREFIX@_CONFIG_H
|
|
#define @PARAM_VAR_PREFIX@_CONFIG_H
|
|
])
|
|
AH_BOTTOM([#endif /* _@PARAM_VAR_PREFIX@_CONFIG_H */])
|
|
|
|
|
|
#
|
|
# Generate the version header template -- only if we have a version
|
|
#
|
|
|
|
if test -n "$version_string"; then
|
|
|
|
# Add the version header template to AC _ CONFIG _ FILES, but only
|
|
# if mca_make_configure.pl found that it was listed in
|
|
# configure.params and the file exists, or the default file
|
|
# exists. If not, then this will be blank (because
|
|
# "$version_string" will never be non-empty, so this block is
|
|
# meaningless).
|
|
|
|
# We do this weird Texas two step for two reasons:
|
|
|
|
# 1) if Autoconf see AC _ CONFIG _ FILES, it assumes that the
|
|
# template must exist (and will error during autoconf if it does
|
|
# not), even if the AC _ CONFIG _ FILES is in a conditional block
|
|
# (like this one)... which actually makes sense. :-) So we only
|
|
# put this AC _ CONFIG _ FILES here if we actually have the
|
|
# template file (i.e., mca_make_configure.pl puts it here... or
|
|
# not).
|
|
|
|
# 2) AC _ CONFIG _ COMMANDS, on the other hand, does not require
|
|
# any Autoconf-compile-time specialness. It can sit here in a
|
|
# conditional shell block and be executed or not at run time, so
|
|
# there's no need to mca_make_configure.pl to do anything special
|
|
# with it.
|
|
|
|
@WRITE_VERSION_HEADER_TEMPLATE@
|
|
|
|
# After config.status has run, compare the version header template
|
|
# to the version header. If the version header does not exist,
|
|
# create it # from the template. If it does already exist, diff
|
|
# it and see if # they're different. If they're different, copy
|
|
# the template over the # old version. If they're the same, leave
|
|
# the original alone so that # we don't distrub any dependencies.
|
|
|
|
AC_CONFIG_COMMANDS([@MCA_TYPE@-@MCA_COMPONENT_NAME@],
|
|
[if test -f "@MCA_TYPE@-@MCA_COMPONENT_NAME@-version.h"; then
|
|
diff "@MCA_TYPE@-@MCA_COMPONENT_NAME@-version.h" "@MCA_TYPE@-@MCA_COMPONENT_NAME@-version.h.template" > /dev/null 2>&1
|
|
if test "$?" != "0"; then
|
|
cp "@MCA_TYPE@-@MCA_COMPONENT_NAME@-version.h.template" "@MCA_TYPE@-@MCA_COMPONENT_NAME@-version.h"
|
|
echo "config.status: regenerating @MCA_TYPE@-@MCA_COMPONENT_NAME@-version.h"
|
|
else
|
|
echo "config.state: @MCA_TYPE@-@MCA_COMPONENT_NAME@-version.h unchanged"
|
|
fi
|
|
else
|
|
cp "@MCA_TYPE@-@MCA_COMPONENT_NAME@-version.h.template" "@MCA_TYPE@-@MCA_COMPONENT_NAME@-version.h"
|
|
echo "config.status: creating @MCA_TYPE@-@MCA_COMPONENT_NAME@-version.h"
|
|
fi
|
|
rm -f @MCA_TYPE@-@MCA_COMPONENT_NAME@-version.h.template])
|
|
fi
|
|
|
|
|
|
#
|
|
# Do the normal basics of setup:
|
|
# - set CLEANFILES
|
|
# - figure out the host type
|
|
# - set the default prefix
|
|
#
|
|
OMPI_BASIC_SETUP
|
|
|
|
|
|
#
|
|
# Check to see if the user wants this @MCA_TYPE@ to be the default
|
|
#
|
|
|
|
AC_MSG_CHECKING([if want the @MCA_COMPONENT_NAME@ @MCA_TYPE@ to be the default])
|
|
want_default=0
|
|
result=no
|
|
AC_ARG_WITH(@PROCESSED_MCA_TYPE@,
|
|
AC_HELP_STRING([--with-@PROCESSED_MCA_TYPE@=name],
|
|
[if name is "@MCA_COMPONENT_NAME@", the @MCA_COMPONENT_NAME@ @MCA_TYPE@ will be the default]))
|
|
if test "$with_@PROCESSED_MCA_TYPE@" = "@MCA_COMPONENT_NAME@"; then
|
|
want_default=1
|
|
result=yes
|
|
fi
|
|
AC_DEFINE_UNQUOTED(@PARAM_VAR_PREFIX@_DEFAULT, $want_default,
|
|
[Whether the @MCA_COMPONENT_NAME@ @MCA_TYPE@ is the default @PROCESSED_MCA_TYPE@ or not])
|
|
AC_MSG_RESULT([$result])
|
|
|
|
#
|
|
# Part one of libtool magic
|
|
#
|
|
|
|
AM_ENABLE_SHARED
|
|
AM_DISABLE_STATIC
|
|
|
|
|
|
#
|
|
# Find which components should be built as run-time loadable components
|
|
# Acceptable combinations:
|
|
#
|
|
# [default -- no option given]
|
|
# --enable-mca-dso
|
|
# --enable-mca-dso=[.+,]*COMPONENT_TYPE[.+,]*
|
|
# --enable-mca-dso=[.+,]*COMPONENT_TYPE-COMPONENT_NAME[.+,]*
|
|
# --disable-mca-dso
|
|
#
|
|
|
|
AC_MSG_CHECKING([if want component to be a DSO])
|
|
AC_ARG_ENABLE(mca-dso,
|
|
AC_HELP_STRING([--enable-mca-dso=LIST],
|
|
[comma-separated list of types and/or type-component pairs that will be built as run-time loadable components (as opposed to statically linked in), if supported on this platform. The default is to build all components as DSOs; the --disable-mca-dso(=LIST) form can be used to disable building all or some types/components as DSOs. If LIST is "@MCA_TYPE@-@MCA_COMPONENT_NAME@" or "@MCA_COMPONENT_NAME@", then @MCA_COMPONENT_NAME@ will be compiled as a DSO (if supported on this platform).]))
|
|
|
|
# Manual conversion of $kind to its generic name (e.g., crmpi->cr,
|
|
# crompi->cr).
|
|
|
|
case "@MCA_TYPE@" in
|
|
crmpi)
|
|
generic_type="cr"
|
|
;;
|
|
crompi)
|
|
generic_type="cr"
|
|
;;
|
|
*)
|
|
generic_type="@MCA_TYPE@"
|
|
;;
|
|
esac
|
|
|
|
BUILD_@MCA_TYPE@_@MCA_COMPONENT_NAME@_DSO=0
|
|
msg=no
|
|
|
|
if test "$enable_shared" = "no"; then
|
|
msg=no
|
|
elif test -z "$enable_mca_dso" -o "$enable_mca_dso" = "yes" -o \
|
|
"$enable_mca_dso" = "@MCA_TYPE@" -o "$enable_mca_dso" = "$generic_type"; then
|
|
BUILD_@MCA_TYPE@_@MCA_COMPONENT_NAME@_DSO=1
|
|
msg=yes
|
|
else
|
|
ifs_save="$IFS"
|
|
IFS="${IFS}$PATH_SEPARATOR,"
|
|
for item in $enable_mca_dso; do
|
|
if test "$item" = "@MCA_TYPE@-@MCA_COMPONENT_NAME@" -o \
|
|
"$item" = "@MCA_TYPE@" -o "$item" = "$generic_type"; then
|
|
BUILD_@MCA_TYPE@_@MCA_COMPONENT_NAME@_DSO=1
|
|
msg=yes
|
|
fi
|
|
done
|
|
IFS="$ifs_save"
|
|
fi
|
|
AC_MSG_RESULT([$msg])
|
|
unset msg
|
|
|
|
|
|
###########################################################################
|
|
# Check for compilers and preprocessors
|
|
############################################################################
|
|
|
|
##################################
|
|
# Compiler characteristics
|
|
##################################
|
|
|
|
@C_COMPILER_SETUP@
|
|
@CXX_COMPILER_SETUP@
|
|
|
|
##################################
|
|
# Find Open MPI header files
|
|
##################################
|
|
|
|
# Are we building as part of the Open MPI source tree, or outside of it?
|
|
|
|
AC_ARG_WITH(openmpi,
|
|
AC_HELP_STRING([--with-openmpi=DIR],
|
|
[specify the location of the Open MPI header files and library. The default is to build within a source tree or be able to find the headers/library without additional CPPFLAGS/LDFLAGS. This option is generally only necessary when components are being configured/built outside of an Open MPI source tree]))
|
|
|
|
# Establish the top-level OMPI directory. If --with-openmpi was not
|
|
# specified, then see if we're building a) within an Open MPI source
|
|
# tree, or b) can find the Open MPI headers and library file without
|
|
# any additional CPPFLAGS/LDFLAGS.
|
|
|
|
top_ompi_srcdir=
|
|
top_ompi_builddir=
|
|
found_ompi_headers=
|
|
|
|
# Split this into multiple tests because we may have multiple
|
|
# possibilities here:
|
|
#
|
|
# - build in the Open MPI source tree
|
|
# - build outside of the Open MPI source tree, and have valid
|
|
# --with-openmpi
|
|
# - build outside of the Open MPI source tree, and not have a valid
|
|
# --with-openmpi
|
|
|
|
AC_MSG_CHECKING([for Open MPI header files])
|
|
|
|
# First case: we do not have --with-openmpi, so check and see if we're
|
|
# building inside the Open MPI source tree
|
|
|
|
if test -z "$with_openmpi"; then
|
|
|
|
# Are we within an Open MPI source tree?
|
|
|
|
if test -f "$srcdir/../../../../config/mca_configure.ac"; then
|
|
|
|
# This is needed for VPATH builds, so that it will -I the
|
|
# appropriate include directory (don't know why automake
|
|
# doesn't do this # automatically).
|
|
|
|
top_ompi_srcdir='$(top_srcdir)/../../../..'
|
|
top_ompi_builddir='$(top_builddir)/../../../..'
|
|
INCFLAGS='-I$(top_ompi_srcdir)/src -I$(top_ompi_srcdir)/include -I$(top_ompi_builddir)/src'
|
|
found_ompi_headers=1
|
|
AC_MSG_RESULT([already in Open MPI source tree])
|
|
fi
|
|
fi
|
|
|
|
# If we haven't found the headers yet, then we know that we're *not*
|
|
# building within the Open MPI source tree.
|
|
|
|
if test -z "$found_ompi_headers"; then
|
|
top_ompi_srcdir=""
|
|
top_ompi_builddir="$top_ompi_srcdir"
|
|
fi
|
|
|
|
# Now see if a) we haven't found the headers yet, and b) we have
|
|
# --with-openmpi
|
|
|
|
if test -z "$found_ompi_headers"; then
|
|
|
|
# We're outside the Open MPI build tree, and we have been provided
|
|
# a top-level directory where the header files live.
|
|
|
|
if test -n "$with_openmpi"; then
|
|
if test -d $with_opemnpi ; then
|
|
if test -d "$with_openmpi/include/openmpi" -a \
|
|
-f "$with_openmpi/include/openmpi/include/ompi.h"; then
|
|
INCFLAGS="-I$with_openmpi/include/openmpi -I$with_openmpi/include"
|
|
found_ompi_headers=1
|
|
AC_MSG_RESULT([$with_openmpi/include/openmpi])
|
|
elif test -d "$with_openmpi/openmpi" -a \
|
|
-f "$with_openmpi/openmpi/include/ompi.h"; then
|
|
INCFLAGS="-I$with_openmpi/openmpi I$with_openmpi/openmpi"
|
|
found_ompi_headers=1
|
|
AC_MSG_RESULT([$with_openmpi/openmpi])
|
|
elif test -f "$with_openmpi/include/ompi.h"; then
|
|
INCFLAGS="-I$with_openmpi -I$with_openmpi/.."
|
|
found_ompi_headers=1
|
|
AC_MSG_RESULT([$with_openmpi])
|
|
else
|
|
AC_MSG_RESULT([got bogus --with-openmpi value])
|
|
AC_MSG_WARN([*** Directory $with_openmpi exists])
|
|
AC_MSG_WARN([*** But cannot seem to find Open MPI headers in it])
|
|
AC_MSG_WARN([*** Looking elsewhere...])
|
|
fi
|
|
else
|
|
AC_MSG_RESULT([got bogus --with-openmpi value])
|
|
AC_MSG_WARN([*** Directory $with_openmpi does not seem to exist])
|
|
AC_MSG_WARN([*** Trying to find Open MPI headers without it...])
|
|
fi
|
|
fi
|
|
|
|
# If we've gotten this far and haven't found the Open MPI headers
|
|
# yet, then just try compiling a C program with some of the Open
|
|
# MPI headers and see if they're found (i.e., if they're in the
|
|
# preprocessor's default search path)
|
|
|
|
if test -z "$found_ompi_headers"; then
|
|
AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[#include "include/ompi.h"]],
|
|
[[]]),
|
|
[found_ompi_headers=1])
|
|
if test -n "$found_ompi_headers"; then
|
|
AC_MSG_RESULT([default preprocessor path])
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# If we got this far and haven't found the Open MPI headers, stick a
|
|
# fork in us, 'cause we're done.
|
|
|
|
if test -z "$found_ompi_headers"; then
|
|
AC_MSG_WARN([*** Could not find the Open MPI headers])
|
|
AC_MSG_ERROR([*** Cannot continue])
|
|
fi
|
|
|
|
AC_SUBST(top_ompi_srcdir)
|
|
AC_SUBST(top_ompi_builddir)
|
|
|
|
##################################
|
|
# @MCA_TYPE@ @MCA_COMPONENT_NAME@ component specific setup
|
|
##################################
|
|
|
|
#
|
|
# Unset all *_EXTRA_* flags
|
|
#
|
|
|
|
unset ABORT
|
|
for scope in LIBMPI WRAPPER; do
|
|
for flags in CFLAGS CXXFLAGS FFLAGS LDFLAGS LIBS; do
|
|
str="unset ${scope}_EXTRA_${flags}"
|
|
eval $str
|
|
done
|
|
done
|
|
|
|
#
|
|
# Invoke configure.stub code stubs, if they exist. Have at least one
|
|
# statement (well, m4 macro) in each "if" block so that some older sh
|
|
# flavors don't complain.
|
|
#
|
|
|
|
if test "$OMPI_WANT_DIST" = "no"; then
|
|
OMPI_LOG_MSG([Running configure stub macro])
|
|
@CONFIGURE_STUB_MACRO@
|
|
else
|
|
OMPI_LOG_MSG([Running configure dist stub macro])
|
|
@CONFIGURE_DIST_STUB_MACRO@
|
|
fi
|
|
|
|
#
|
|
# If any *_EXTRA_* flags were set, save them in $srcdir/post_configure.sh.
|
|
# This will be examined by the top-level configure script.
|
|
#
|
|
|
|
create_post_configure_file() {
|
|
if test ! -f post_configure.sh; then
|
|
cat > post_configure.sh <<EOF
|
|
# This file is automatically generated by configure.
|
|
# Manual changes will be lost!
|
|
# Generated by: `whoami`
|
|
# On machine: `hostname`
|
|
# On: `date`
|
|
|
|
EOF
|
|
fi
|
|
}
|
|
|
|
rm -f post_configure.sh
|
|
if test -n "$ABORT"; then
|
|
create_post_configure_file
|
|
echo "ABORT=\"$ABORT\"" >> post_configure.sh
|
|
AC_MSG_ERROR([*** ABORT flag is set; aborting])
|
|
fi
|
|
for scope in LIBMPI WRAPPER; do
|
|
for flags in CFLAGS CXXFLAGS FFLAGS LDFLAGS LIBS; do
|
|
str="found=\$${scope}_EXTRA_${flags}"
|
|
eval $str
|
|
if test -n "$found"; then
|
|
create_post_configure_file
|
|
echo "${scope}_EXTRA_${flags}=\"$found\"" >> post_configure.sh
|
|
fi
|
|
done
|
|
done
|
|
|
|
|
|
#
|
|
# We delayed doing it until now just so that long include paths don't
|
|
# show up in any of the configure output -- purely aesthetic.
|
|
#
|
|
|
|
CPPFLAGS="$CPPFLAGS $INCFLAGS"
|
|
CXXCPPFLAGS="$CXXCPPFLAGS $INCFLAGS"
|
|
|
|
|
|
#
|
|
# Delayed the substitution of these until now because they may have
|
|
# been modified throughout the course of this script.
|
|
#
|
|
|
|
AC_SUBST(CPPFLAGS)
|
|
AC_SUBST(CXXCPPFLAGS)
|
|
|
|
|
|
############################################################################
|
|
# libtool magic
|
|
############################################################################
|
|
|
|
ompi_show_subtitle "GNU libtool setup"
|
|
|
|
AM_PROG_LIBTOOL
|
|
AM_CONDITIONAL(OMPI_BUILD_@MCA_TYPE@_@MCA_COMPONENT_NAME@_DSO,
|
|
test "$BUILD_@MCA_TYPE@_@MCA_COMPONENT_NAME@_DSO" = "1")
|
|
|
|
|
|
############################################################################
|
|
# Party on
|
|
############################################################################
|
|
|
|
ompi_show_subtitle "Final output"
|
|
|
|
AM_CONFIG_HEADER([@PARAM_CONFIG_HEADER_FILE@])
|
|
AC_CONFIG_FILES([@PARAM_CONFIG_FILES@])
|
|
AC_OUTPUT
|