Blame autogen.sh

Packit Service c5cf8c
#! /bin/sh
Packit Service c5cf8c
# 
Packit Service c5cf8c
# (C) 2006 by Argonne National Laboratory.
Packit Service c5cf8c
#     See COPYRIGHT in top-level directory.
Packit Service c5cf8c
#
Packit Service c5cf8c
# Update all of the derived files
Packit Service c5cf8c
# For best performance, execute this in the top-level directory.
Packit Service c5cf8c
# There are some experimental features to allow it to be executed in
Packit Service c5cf8c
# subdirectories
Packit Service c5cf8c
#
Packit Service c5cf8c
# Eventually, we want to allow this script to be executed anywhere in the
Packit Service c5cf8c
# mpich tree.  This is not yet implemented.
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Utility functions
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
recreate_tmp() {
Packit Service c5cf8c
    rm -rf .tmp
Packit Service c5cf8c
    mkdir .tmp 2>&1 >/dev/null
Packit Service c5cf8c
}
Packit Service c5cf8c
Packit Service c5cf8c
warn() {
Packit Service c5cf8c
    echo "===> WARNING: $@"
Packit Service c5cf8c
}
Packit Service c5cf8c
Packit Service c5cf8c
error() {
Packit Service c5cf8c
    echo "===> ERROR:   $@"
Packit Service c5cf8c
}
Packit Service c5cf8c
Packit Service c5cf8c
echo_n() {
Packit Service c5cf8c
    # "echo -n" isn't portable, must portably implement with printf
Packit Service c5cf8c
    printf "%s" "$*"
Packit Service c5cf8c
}
Packit Service c5cf8c
Packit Service c5cf8c
# Assume Program's install-dir is <install-dir>/bin/<prog>.
Packit Service c5cf8c
# Given program name as the 1st argument,
Packit Service c5cf8c
# the install-dir is returned is returned in 2nd argument.
Packit Service c5cf8c
# e.g., ProgHomeDir libtoolize libtooldir.
Packit Service c5cf8c
ProgHomeDir() {
Packit Service c5cf8c
    prog=$1
Packit Service c5cf8c
    progpath="`which $prog`"
Packit Service c5cf8c
    progbindir="`dirname $progpath`"
Packit Service c5cf8c
    proghome=`(cd $progbindir/.. && pwd)`
Packit Service c5cf8c
    eval $2=$proghome
Packit Service c5cf8c
}
Packit Service c5cf8c
Packit Service c5cf8c
# checking and patching submodules
Packit Service c5cf8c
check_submodule_presence() {
Packit Service c5cf8c
    if test ! -f "$SRCROOTDIR/$1/configure.ac"; then
Packit Service c5cf8c
        error "Submodule $1 is not checked out"
Packit Service c5cf8c
        exit 1
Packit Service c5cf8c
    fi
Packit Service c5cf8c
}
Packit Service c5cf8c
Packit Service c5cf8c
sync_external () {
Packit Service c5cf8c
    srcdir=$1
Packit Service c5cf8c
    destdir=$2
Packit Service c5cf8c
Packit Service c5cf8c
    echo "syncing '$srcdir' --> '$destdir'"
Packit Service c5cf8c
Packit Service c5cf8c
    # deletion prevents creating 'confdb/confdb' situation, also cleans
Packit Service c5cf8c
    # stray files that may have crept in somehow
Packit Service c5cf8c
    rm -rf "$destdir"
Packit Service c5cf8c
    cp -pPR "$srcdir" "$destdir"
Packit Service c5cf8c
}
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
echo
Packit Service c5cf8c
echo "####################################"
Packit Service c5cf8c
echo "## Checking user environment"
Packit Service c5cf8c
echo "####################################"
Packit Service c5cf8c
echo
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Checks to make sure we are running from the correct location
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
echo_n "Verifying the location of autogen.sh... "
Packit Service c5cf8c
if [ ! -d maint -o ! -s maint/version.m4 ] ; then
Packit Service c5cf8c
    echo "must execute at top level directory for now"
Packit Service c5cf8c
    exit 1
Packit Service c5cf8c
fi
Packit Service c5cf8c
# Set the SRCROOTDIR to be used later and avoid "cd ../../"-like usage.
Packit Service c5cf8c
SRCROOTDIR=$PWD
Packit Service c5cf8c
echo "done"
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Initialize variables to default values (possibly from the environment)
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
# Default choices
Packit Service c5cf8c
do_bindings=yes
Packit Service c5cf8c
do_geterrmsgs=yes
Packit Service c5cf8c
do_getcvars=yes
Packit Service c5cf8c
do_f77=yes
Packit Service c5cf8c
do_build_configure=yes
Packit Service c5cf8c
do_genstates=yes
Packit Service c5cf8c
do_atdir_check=no
Packit Service c5cf8c
do_atver_check=yes
Packit Service c5cf8c
do_subcfg_m4=yes
Packit Service c5cf8c
do_izem=yes
Packit Service c5cf8c
do_ofi=yes
Packit Service c5cf8c
do_ucx=yes
Packit Service c5cf8c
Packit Service c5cf8c
export do_build_configure
Packit Service c5cf8c
Packit Service c5cf8c
# Allow MAKE to be set from the environment
Packit Service c5cf8c
MAKE=${MAKE-make}
Packit Service c5cf8c
Packit Service c5cf8c
# amdirs are the directories that make use of autoreconf
Packit Service c5cf8c
amdirs=". src/mpl src/util/logging/rlog"
Packit Service c5cf8c
Packit Service c5cf8c
autoreconf_args="-if"
Packit Service c5cf8c
export autoreconf_args
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Read the command-line arguments
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
# List of steps that we will consider (We do not include depend
Packit Service c5cf8c
# because the values for depend are not just yes/no)
Packit Service c5cf8c
AllSteps="geterrmsgs bindings f77 build_configure genstates getparms"
Packit Service c5cf8c
stepsCleared=no
Packit Service c5cf8c
Packit Service c5cf8c
for arg in "$@" ; do
Packit Service c5cf8c
    case $arg in 
Packit Service c5cf8c
	-echo)
Packit Service c5cf8c
	    set -x
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
	
Packit Service c5cf8c
	-atdircheck=*)
Packit Service c5cf8c
	    val=`echo X$arg | sed -e 's/^X-atdircheck=//'`
Packit Service c5cf8c
            case $val in
Packit Service c5cf8c
		yes|YES|true|TRUE|1) do_atdir_check=yes ;;
Packit Service c5cf8c
		no|NO|false|FALSE|0) do_atdir_check=no ;;
Packit Service c5cf8c
		*) warn "unknown option: $arg."
Packit Service c5cf8c
            esac
Packit Service c5cf8c
            ;;
Packit Service c5cf8c
Packit Service c5cf8c
	-atvercheck=*)
Packit Service c5cf8c
            val=`echo X$arg | sed -e 's/^X-atvercheck=//'`
Packit Service c5cf8c
            case $val in
Packit Service c5cf8c
		yes|YES|true|TRUE|1) do_atver_check=yes ;;
Packit Service c5cf8c
		no|NO|false|FALSE|0) do_atver_check=no ;;
Packit Service c5cf8c
		*) warn "unknown option: $arg."
Packit Service c5cf8c
            esac
Packit Service c5cf8c
            ;;
Packit Service c5cf8c
Packit Service c5cf8c
	-do=*|--do=*)
Packit Service c5cf8c
	    opt=`echo A$arg | sed -e 's/^A--*do=//'`
Packit Service c5cf8c
	    case $opt in 
Packit Service c5cf8c
		build-configure|configure) opt=build_configure ;;
Packit Service c5cf8c
	    esac
Packit Service c5cf8c
	    var=do_$opt
Packit Service c5cf8c
Packit Service c5cf8c
	    # Check that this opt is known
Packit Service c5cf8c
	    eval oldval=\$"$var"
Packit Service c5cf8c
	    if [ -z "$oldval" ] ; then
Packit Service c5cf8c
		echo "-do=$opt is unrecognized"
Packit Service c5cf8c
		exit 1
Packit Service c5cf8c
	    else
Packit Service c5cf8c
		if [ $stepsCleared = no ] ; then
Packit Service c5cf8c
		    for step in $AllSteps ; do
Packit Service c5cf8c
			var=do_$step
Packit Service c5cf8c
			eval $var=no
Packit Service c5cf8c
		    done
Packit Service c5cf8c
		    stepsCleared=yes
Packit Service c5cf8c
		fi
Packit Service c5cf8c
		var=do_$opt
Packit Service c5cf8c
		eval $var=yes
Packit Service c5cf8c
	    fi
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
Packit Service c5cf8c
        -verbose-autoreconf|--verbose-autoreconf)
Packit Service c5cf8c
            autoreconf_args="-vif"
Packit Service c5cf8c
            export autoreconf_args
Packit Service c5cf8c
            ;;
Packit Service c5cf8c
Packit Service c5cf8c
	-with-genstates|--with-genstates)
Packit Service c5cf8c
	    do_genstates=yes
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
Packit Service c5cf8c
	-without-genstates|--without-genstates)
Packit Service c5cf8c
	    do_genstates=no
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
 
Packit Service c5cf8c
	-with-errmsgs|--with-errmsgs)
Packit Service c5cf8c
	    do_geterrmsgs=yes
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
Packit Service c5cf8c
	-without-errmsgs|--without-errmsgs)
Packit Service c5cf8c
	    do_geterrmsgs=no
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
Packit Service c5cf8c
	-with-bindings|--with-bindings)
Packit Service c5cf8c
	    do_bindings=yes
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
Packit Service c5cf8c
	-without-bindings|--without-bindings)
Packit Service c5cf8c
	    do_bindings=no
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
Packit Service c5cf8c
	-with-f77|--with-f77)
Packit Service c5cf8c
	    do_f77=yes
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
Packit Service c5cf8c
	-without-f77|--without-f77)
Packit Service c5cf8c
	    do_f77=no
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
Packit Service c5cf8c
	-with-autotools=*|--with-autotools=*)
Packit Service c5cf8c
	    autotoolsdir=`echo "A$arg" | sed -e 's/.*=//'`
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
Packit Service c5cf8c
    -without-izem|--without-izem)
Packit Service c5cf8c
        do_izem=no
Packit Service c5cf8c
        ;;
Packit Service c5cf8c
Packit Service c5cf8c
    -without-ofi|--without-ofi|-without-libfabric|--without-libfabric)
Packit Service c5cf8c
        do_ofi=no
Packit Service c5cf8c
        ;;
Packit Service c5cf8c
Packit Service c5cf8c
    -without-ucx|--without-ucx)
Packit Service c5cf8c
        do_ucx=no
Packit Service c5cf8c
        ;;
Packit Service c5cf8c
Packit Service c5cf8c
	-help|--help|-usage|--usage)
Packit Service c5cf8c
	    cat <
Packit Service c5cf8c
   ./autogen.sh [ --with-autotools=dir ] \\
Packit Service c5cf8c
                [ -atdircheck=[yes|no] ] \\
Packit Service c5cf8c
                [ -atvercheck=[yes|no] ] \\
Packit Service c5cf8c
                [ --verbose-autoreconf ] \\
Packit Service c5cf8c
                [ --do=stepname ] [ -distrib ]
Packit Service c5cf8c
    Update the files in the MPICH build tree.  This file builds the 
Packit Service c5cf8c
    configure files, creates the Makefile.in files, extracts the error
Packit Service c5cf8c
    messages.
Packit Service c5cf8c
Packit Service c5cf8c
    You can use --with-autotools=dir to specify a directory that
Packit Service c5cf8c
    contains alternate autotools.
Packit Service c5cf8c
Packit Service c5cf8c
    -atdircheck=[yes|no] specifies the enforcement of all autotools
Packit Service c5cf8c
    should be installed in the same directory.
Packit Service c5cf8c
Packit Service c5cf8c
    -atvercheck=[yes|no] specifies if the check for the version of 
Packit Service c5cf8c
    autotools should be carried out.
Packit Service c5cf8c
Packit Service c5cf8c
    -distrib creates a distribution version of the Makefile.in files (no
Packit Service c5cf8c
    targets for updating the Makefile.in from Makefile.sm or rebuilding the
Packit Service c5cf8c
    autotools targets).  This does not create the configure files because
Packit Service c5cf8c
    some of those depend on rules in the Makefile.in in that directory.  
Packit Service c5cf8c
    Thus, to build all of the files for a distribution, run autogen.sh
Packit Service c5cf8c
    twice, as in 
Packit Service c5cf8c
         autogen.sh && autogen.sh -distrib
Packit Service c5cf8c
Packit Service c5cf8c
    Use --do=stepname to update only a single step.  For example, 
Packit Service c5cf8c
    --do=build_configure only updates the configure scripts.  The available
Packit Service c5cf8c
    steps are:
Packit Service c5cf8c
EOF
Packit Service c5cf8c
	    for step in $AllSteps ; do
Packit Service c5cf8c
		echo "        $step"
Packit Service c5cf8c
	    done
Packit Service c5cf8c
	    exit 1
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
Packit Service c5cf8c
	*)
Packit Service c5cf8c
	    echo "unknown argument $arg"
Packit Service c5cf8c
	    exit 1
Packit Service c5cf8c
	    ;;
Packit Service c5cf8c
Packit Service c5cf8c
    esac
Packit Service c5cf8c
done
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Check for the location of autotools
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
if [ -n "$autotoolsdir" ] ; then
Packit Service c5cf8c
    if [ -x $autotoolsdir/autoconf -a -x $autotoolsdir/autoheader ] ; then
Packit Service c5cf8c
        autoconf=$autotoolsdir/autoconf
Packit Service c5cf8c
        autoheader=$autotoolsdir/autoheader
Packit Service c5cf8c
        autoreconf=$autotoolsdir/autoreconf
Packit Service c5cf8c
        automake=$autotoolsdir/automake
Packit Service c5cf8c
        autom4te=$autotoolsdir/autom4te
Packit Service c5cf8c
        aclocal=$autotoolsdir/aclocal
Packit Service c5cf8c
        if [ -x "$autotoolsdir/glibtoolize" ] ; then
Packit Service c5cf8c
            libtoolize=$autotoolsdir/glibtoolize
Packit Service c5cf8c
        else
Packit Service c5cf8c
            libtoolize=$autotoolsdir/libtoolize
Packit Service c5cf8c
        fi
Packit Service c5cf8c
Packit Service c5cf8c
	AUTOCONF=$autoconf
Packit Service c5cf8c
	AUTOHEADER=$autoheader
Packit Service c5cf8c
        AUTORECONF=$autoreconf
Packit Service c5cf8c
        AUTOMAKE=$automake
Packit Service c5cf8c
	AUTOM4TE=$autom4te
Packit Service c5cf8c
        ACLOCAL=$aclocal
Packit Service c5cf8c
        LIBTOOLIZE=$libtoolize
Packit Service c5cf8c
Packit Service c5cf8c
	export AUTOCONF
Packit Service c5cf8c
	export AUTOHEADER
Packit Service c5cf8c
        export AUTORECONF
Packit Service c5cf8c
        export AUTOM4TE
Packit Service c5cf8c
        export AUTOMAKE
Packit Service c5cf8c
        export ACLOCAL
Packit Service c5cf8c
        export LIBTOOLIZE
Packit Service c5cf8c
    else
Packit Service c5cf8c
        echo "could not find executable autoconf and autoheader in $autotoolsdir"
Packit Service c5cf8c
	exit 1
Packit Service c5cf8c
    fi
Packit Service c5cf8c
else
Packit Service c5cf8c
    autoconf=${AUTOCONF:-autoconf}
Packit Service c5cf8c
    autoheader=${AUTOHEADER:-autoheader}
Packit Service c5cf8c
    autoreconf=${AUTORECONF:-autoreconf}
Packit Service c5cf8c
    autom4te=${AUTOM4TE:-autom4te}
Packit Service c5cf8c
    automake=${AUTOMAKE:-automake}
Packit Service c5cf8c
    aclocal=${ACLOCAL:-aclocal}
Packit Service c5cf8c
    if test -z "${LIBTOOLIZE+set}" && ( glibtoolize --version ) >/dev/null 2>&1 ; then
Packit Service c5cf8c
        libtoolize=glibtoolize
Packit Service c5cf8c
    else
Packit Service c5cf8c
        libtoolize=${LIBTOOLIZE:-libtoolize}
Packit Service c5cf8c
    fi
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
ProgHomeDir $autoconf   autoconfdir
Packit Service c5cf8c
ProgHomeDir $automake   automakedir
Packit Service c5cf8c
ProgHomeDir $libtoolize libtooldir
Packit Service c5cf8c
Packit Service c5cf8c
echo_n "Checking if autotools are in the same location... "
Packit Service c5cf8c
if [ "$autoconfdir" = "$automakedir" -a "$autoconfdir" = "$libtooldir" ] ; then
Packit Service c5cf8c
    same_atdir=yes
Packit Service c5cf8c
    echo "yes, all in $autoconfdir"
Packit Service c5cf8c
else
Packit Service c5cf8c
    same_atdir=no
Packit Service c5cf8c
    echo "no"
Packit Service c5cf8c
    echo "	autoconf is in $autoconfdir"
Packit Service c5cf8c
    echo "	automake is in $automakedir"
Packit Service c5cf8c
    echo "	libtool  is in $libtooldir"
Packit Service c5cf8c
    # Emit a big warning message if $same_atdir = no.
Packit Service c5cf8c
    warn "Autotools are in different locations. In rare occasion,"
Packit Service c5cf8c
    warn "resulting configure or makefile may fail in some unexpected ways."
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Check if autoreconf can be patched to work
Packit Service c5cf8c
## when autotools are not in the same location.
Packit Service c5cf8c
## This test needs to be done before individual tests of autotools
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
# If autotools are not in the same location, override autoreconf appropriately.
Packit Service c5cf8c
if [ "$same_atdir" != "yes" ] ; then
Packit Service c5cf8c
    if [ -z "$libtooldir" ] ; then
Packit Service c5cf8c
        ProgHomeDir $libtoolize libtooldir
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    libtoolm4dir="$libtooldir/share/aclocal"
Packit Service c5cf8c
    echo_n "Checking if $autoreconf accepts -I $libtoolm4dir... "
Packit Service c5cf8c
    new_autoreconf_works=no
Packit Service c5cf8c
    if [ -d "$libtoolm4dir" -a -f "$libtoolm4dir/libtool.m4" ] ; then
Packit Service c5cf8c
        recreate_tmp
Packit Service c5cf8c
        cat >.tmp/configure.ac <<_EOF
Packit Service c5cf8c
AC_INIT(foo,1.0)
Packit Service c5cf8c
AC_PROG_LIBTOOL
Packit Service c5cf8c
AC_OUTPUT
Packit Service c5cf8c
_EOF
Packit Service c5cf8c
        AUTORECONF="$autoreconf -I $libtoolm4dir"
Packit Service c5cf8c
        if (cd .tmp && $AUTORECONF -ivf >/dev/null 2>&1) ; then
Packit Service c5cf8c
            new_autoreconf_works=yes
Packit Service c5cf8c
        fi
Packit Service c5cf8c
        rm -rf .tmp
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    echo "$new_autoreconf_works"
Packit Service c5cf8c
    # If autoreconf accepts -I <libtool's m4 dir> correctly, use -I.
Packit Service c5cf8c
    # If not, run libtoolize before autoreconf (i.e. for autoconf <= 2.63)
Packit Service c5cf8c
    # This test is more general than checking the autoconf version.
Packit Service c5cf8c
    if [ "$new_autoreconf_works" != "yes" ] ; then
Packit Service c5cf8c
        echo_n "Checking if $autoreconf works after an additional $libtoolize step... "
Packit Service c5cf8c
        new_autoreconf_works=no
Packit Service c5cf8c
        recreate_tmp
Packit Service c5cf8c
        # Need AC_CONFIG_
Packit Service c5cf8c
        cat >.tmp/configure.ac <<_EOF
Packit Service c5cf8c
AC_INIT(foo,1.0)
Packit Service c5cf8c
AC_CONFIG_AUX_DIR([m4])
Packit Service c5cf8c
AC_CONFIG_MACRO_DIR([m4])
Packit Service c5cf8c
AC_PROG_LIBTOOL
Packit Service c5cf8c
AC_OUTPUT
Packit Service c5cf8c
_EOF
Packit Service c5cf8c
        cat >.tmp/Makefile.am <<_EOF
Packit Service c5cf8c
ACLOCAL_AMFLAGS = -I m4
Packit Service c5cf8c
_EOF
Packit Service c5cf8c
        AUTORECONF="eval $libtoolize && $autoreconf"
Packit Service c5cf8c
        if (cd .tmp && $AUTORECONF -ivf >u.txt 2>&1) ; then
Packit Service c5cf8c
            new_autoreconf_works=yes
Packit Service c5cf8c
        fi
Packit Service c5cf8c
        rm -rf .tmp
Packit Service c5cf8c
        echo "$new_autoreconf_works"
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    if [ "$new_autoreconf_works" = "yes" ] ; then
Packit Service c5cf8c
        export AUTORECONF
Packit Service c5cf8c
        autoreconf="$AUTORECONF"
Packit Service c5cf8c
    else
Packit Service c5cf8c
        # Since all autoreconf workarounds do not work, we need
Packit Service c5cf8c
        # to require all autotools to be in the same directory.
Packit Service c5cf8c
        do_atdir_check=yes
Packit Service c5cf8c
        error "Since none of the autoreconf workaround works"
Packit Service c5cf8c
        error "and autotools are not in the same directory, aborting..."
Packit Service c5cf8c
        error "Updating autotools or putting all autotools in the same location"
Packit Service c5cf8c
        error "may resolve the issue."
Packit Service c5cf8c
        exit 1
Packit Service c5cf8c
    fi
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Verify autoconf version
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
echo_n "Checking for autoconf version... "
Packit Service c5cf8c
recreate_tmp
Packit Service c5cf8c
ver=2.67
Packit Service c5cf8c
# petsc.mcs.anl.gov's /usr/bin/autoreconf is version 2.65 which returns OK
Packit Service c5cf8c
# if configure.ac has AC_PREREQ() withOUT AC_INIT.
Packit Service c5cf8c
#
Packit Service c5cf8c
# ~/> hostname
Packit Service c5cf8c
# petsc
Packit Service c5cf8c
# ~> /usr/bin/autoconf --version
Packit Service c5cf8c
# autoconf (GNU Autoconf) 2.65
Packit Service c5cf8c
# ....
Packit Service c5cf8c
# ~/> cat configure.ac
Packit Service c5cf8c
# AC_PREREQ(2.68)
Packit Service c5cf8c
# ~/> /usr/bin/autoconf ; echo "rc=$?"
Packit Service c5cf8c
# configure.ac:1: error: Autoconf version 2.68 or higher is required
Packit Service c5cf8c
# configure.ac:1: the top level
Packit Service c5cf8c
# autom4te: /usr/bin/m4 failed with exit status: 63
Packit Service c5cf8c
# rc=63
Packit Service c5cf8c
# ~/> /usr/bin/autoreconf ; echo "rc=$?"
Packit Service c5cf8c
# rc=0
Packit Service c5cf8c
cat > .tmp/configure.ac<
Packit Service c5cf8c
AC_INIT
Packit Service c5cf8c
AC_PREREQ($ver)
Packit Service c5cf8c
AC_OUTPUT
Packit Service c5cf8c
EOF
Packit Service c5cf8c
if (cd .tmp && $autoreconf $autoreconf_args >/dev/null 2>&1 ) ; then
Packit Service c5cf8c
    echo ">= $ver"
Packit Service c5cf8c
else
Packit Service c5cf8c
    echo "bad autoconf installation"
Packit Service c5cf8c
    cat <
Packit Service c5cf8c
You either do not have autoconf in your path or it is too old (version
Packit Service c5cf8c
$ver or higher required). You may be able to use
Packit Service c5cf8c
Packit Service c5cf8c
     autoconf --version
Packit Service c5cf8c
Packit Service c5cf8c
Unfortunately, there is no standard format for the version output and
Packit Service c5cf8c
it changes between autotools versions.  In addition, some versions of
Packit Service c5cf8c
autoconf choose among many versions and provide incorrect output).
Packit Service c5cf8c
EOF
Packit Service c5cf8c
    exit 1
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Verify automake version
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
echo_n "Checking for automake version... "
Packit Service c5cf8c
recreate_tmp
Packit Service c5cf8c
ver=1.15
Packit Service c5cf8c
cat > .tmp/configure.ac<
Packit Service c5cf8c
AC_INIT(testver,1.0)
Packit Service c5cf8c
AC_CONFIG_AUX_DIR([m4])
Packit Service c5cf8c
AC_CONFIG_MACRO_DIR([m4])
Packit Service c5cf8c
m4_ifdef([AM_INIT_AUTOMAKE],,[m4_fatal([AM_INIT_AUTOMAKE not defined])])
Packit Service c5cf8c
AM_INIT_AUTOMAKE([$ver foreign])
Packit Service c5cf8c
AC_MSG_RESULT([A message])
Packit Service c5cf8c
AC_OUTPUT([Makefile])
Packit Service c5cf8c
EOF
Packit Service c5cf8c
cat <<EOF >.tmp/Makefile.am
Packit Service c5cf8c
ACLOCAL_AMFLAGS = -I m4
Packit Service c5cf8c
EOF
Packit Service c5cf8c
if [ ! -d .tmp/m4 ] ; then mkdir .tmp/m4 >/dev/null 2>&1 ; fi
Packit Service c5cf8c
if (cd .tmp && $autoreconf $autoreconf_args >/dev/null 2>&1 ) ; then
Packit Service c5cf8c
    echo ">= $ver"
Packit Service c5cf8c
else
Packit Service c5cf8c
    echo "bad automake installation"
Packit Service c5cf8c
    cat <
Packit Service c5cf8c
You either do not have automake in your path or it is too old (version
Packit Service c5cf8c
$ver or higher required). You may be able to use
Packit Service c5cf8c
Packit Service c5cf8c
     automake --version
Packit Service c5cf8c
Packit Service c5cf8c
Unfortunately, there is no standard format for the version output and
Packit Service c5cf8c
it changes between autotools versions.  In addition, some versions of
Packit Service c5cf8c
autoconf choose among many versions and provide incorrect output).
Packit Service c5cf8c
EOF
Packit Service c5cf8c
    exit 1
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Verify libtool version
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
echo_n "Checking for libtool version... "
Packit Service c5cf8c
recreate_tmp
Packit Service c5cf8c
ver=2.4.4
Packit Service c5cf8c
cat <<EOF >.tmp/configure.ac
Packit Service c5cf8c
AC_INIT(testver,1.0)
Packit Service c5cf8c
AC_CONFIG_AUX_DIR([m4])
Packit Service c5cf8c
AC_CONFIG_MACRO_DIR([m4])
Packit Service c5cf8c
m4_ifdef([LT_PREREQ],,[m4_fatal([LT_PREREQ not defined])])
Packit Service c5cf8c
LT_PREREQ($ver)
Packit Service c5cf8c
LT_INIT()
Packit Service c5cf8c
AC_MSG_RESULT([A message])
Packit Service c5cf8c
EOF
Packit Service c5cf8c
cat <<EOF >.tmp/Makefile.am
Packit Service c5cf8c
ACLOCAL_AMFLAGS = -I m4
Packit Service c5cf8c
EOF
Packit Service c5cf8c
if [ ! -d .tmp/m4 ] ; then mkdir .tmp/m4 >/dev/null 2>&1 ; fi
Packit Service c5cf8c
if (cd .tmp && $autoreconf $autoreconf_args >/dev/null 2>&1 ) ; then
Packit Service c5cf8c
    echo ">= $ver"
Packit Service c5cf8c
else
Packit Service c5cf8c
    echo "bad libtool installation"
Packit Service c5cf8c
    cat <
Packit Service c5cf8c
You either do not have libtool in your path or it is too old
Packit Service c5cf8c
(version $ver or higher required). You may be able to use
Packit Service c5cf8c
Packit Service c5cf8c
     libtool --version
Packit Service c5cf8c
Packit Service c5cf8c
Unfortunately, there is no standard format for the version output and
Packit Service c5cf8c
it changes between autotools versions.  In addition, some versions of
Packit Service c5cf8c
autoconf choose among many versions and provide incorrect output).
Packit Service c5cf8c
EOF
Packit Service c5cf8c
    exit 1
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Checking for UNIX find
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
echo_n "Checking for UNIX find... "
Packit Service c5cf8c
find ./maint -name 'configure.ac' > /dev/null 2>&1
Packit Service c5cf8c
if [ $? = 0 ] ; then
Packit Service c5cf8c
    echo "done"
Packit Service c5cf8c
else
Packit Service c5cf8c
    echo "not found (error)"
Packit Service c5cf8c
    exit 1
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Checking if xargs rm -rf works
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
echo_n "Checking if xargs rm -rf works... "
Packit Service c5cf8c
if [ -d "`find ./maint -name __random_dir__`" ] ; then
Packit Service c5cf8c
    error "found a directory named __random_dir__"
Packit Service c5cf8c
    exit 1
Packit Service c5cf8c
else
Packit Service c5cf8c
    mkdir ./maint/__random_dir__
Packit Service c5cf8c
    find ./maint -name __random_dir__ | xargs rm -rf > /dev/null 2>&1
Packit Service c5cf8c
    if [ $? = 0 ] ; then
Packit Service c5cf8c
	echo "yes"
Packit Service c5cf8c
    else
Packit Service c5cf8c
	echo "no (error)"
Packit Service c5cf8c
	rm -rf ./maint/__random_dir__
Packit Service c5cf8c
	exit 1
Packit Service c5cf8c
    fi
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Setup external packages
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
echo
Packit Service c5cf8c
echo "###########################################################"
Packit Service c5cf8c
echo "## Checking submodules"
Packit Service c5cf8c
echo "###########################################################"
Packit Service c5cf8c
echo
Packit Service c5cf8c
Packit Service c5cf8c
# hwloc is always required
Packit Service c5cf8c
check_submodule_presence src/hwloc
Packit Service c5cf8c
Packit Service c5cf8c
# external packages that require autogen.sh to be run for each of them
Packit Service c5cf8c
externals="src/pm/hydra src/pm/hydra2 src/mpi/romio src/openpa src/hwloc test/mpi"
Packit Service c5cf8c
Packit Service c5cf8c
if [ "yes" = "$do_izem" ] ; then
Packit Service c5cf8c
    check_submodule_presence src/izem
Packit Service c5cf8c
    externals="${externals} src/izem"
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
if [ "yes" = "$do_ucx" ] ; then
Packit Service c5cf8c
    check_submodule_presence src/mpid/ch4/netmod/ucx/ucx
Packit Service c5cf8c
    externals="${externals} src/mpid/ch4/netmod/ucx/ucx"
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
if [ "yes" = "$do_ofi" ] ; then
Packit Service c5cf8c
    check_submodule_presence src/mpid/ch4/netmod/ofi/libfabric
Packit Service c5cf8c
    externals="${externals} src/mpid/ch4/netmod/ofi/libfabric"
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
# This used to be an optionally installed hook to help with git-svn
Packit Service c5cf8c
# versions of the old SVN repo.  Now that we are using git, this is our
Packit Service c5cf8c
# mechanism that replaces relative svn:externals paths, such as for
Packit Service c5cf8c
# "confdb" and "mpl". The basic plan is to delete the destdir and then
Packit Service c5cf8c
# copy all of the files, warts and all, from the source directory to the
Packit Service c5cf8c
# destination directory.
Packit Service c5cf8c
echo
Packit Service c5cf8c
echo "####################################"
Packit Service c5cf8c
echo "## Replicating confdb (and similar)"
Packit Service c5cf8c
echo "####################################"
Packit Service c5cf8c
echo
Packit Service c5cf8c
Packit Service c5cf8c
confdb_dirs=
Packit Service c5cf8c
confdb_dirs="${confdb_dirs} src/mpi/romio/confdb"
Packit Service c5cf8c
confdb_dirs="${confdb_dirs} src/mpi/romio/mpl/confdb"
Packit Service c5cf8c
confdb_dirs="${confdb_dirs} src/mpl/confdb"
Packit Service c5cf8c
confdb_dirs="${confdb_dirs} src/openpa/confdb"
Packit Service c5cf8c
confdb_dirs="${confdb_dirs} src/pm/hydra/confdb"
Packit Service c5cf8c
confdb_dirs="${confdb_dirs} src/pm/hydra2/confdb"
Packit Service c5cf8c
confdb_dirs="${confdb_dirs} src/pm/hydra/mpl/confdb"
Packit Service c5cf8c
confdb_dirs="${confdb_dirs} src/pm/hydra2/mpl/confdb"
Packit Service c5cf8c
confdb_dirs="${confdb_dirs} test/mpi/confdb"
Packit Service c5cf8c
Packit Service c5cf8c
# hydra's copies of mpl and hwloc
Packit Service c5cf8c
sync_external src/mpl src/pm/hydra/mpl
Packit Service c5cf8c
sync_external src/mpl src/pm/hydra2/mpl
Packit Service c5cf8c
Packit Service c5cf8c
# ROMIO's copy of mpl
Packit Service c5cf8c
sync_external src/mpl src/mpi/romio/mpl
Packit Service c5cf8c
Packit Service c5cf8c
# all the confdb directories, by various names
Packit Service c5cf8c
for destdir in $confdb_dirs ; do
Packit Service c5cf8c
    sync_external confdb "$destdir"
Packit Service c5cf8c
done
Packit Service c5cf8c
Packit Service c5cf8c
# Copying hwloc to hydra
Packit Service c5cf8c
sync_external src/hwloc src/pm/hydra/tools/topo/hwloc/hwloc
Packit Service c5cf8c
sync_external src/hwloc src/pm/hydra2/libhydra/topo/hwloc/hwloc
Packit Service c5cf8c
# remove .git directories to avoid confusing git clean
Packit Service c5cf8c
rm -rf src/pm/hydra/tools/topo/hwloc/hwloc/.git
Packit Service c5cf8c
rm -rf src/pm/hydra2/libhydra/topo/hwloc/hwloc/.git
Packit Service c5cf8c
Packit Service c5cf8c
# a couple of other random files
Packit Service c5cf8c
if [ -f maint/version.m4 ] ; then
Packit Service c5cf8c
    cp -pPR maint/version.m4 src/pm/hydra/version.m4
Packit Service c5cf8c
    cp -pPR maint/version.m4 src/pm/hydra2/version.m4
Packit Service c5cf8c
    cp -pPR maint/version.m4 src/mpi/romio/version.m4
Packit Service c5cf8c
    cp -pPR maint/version.m4 test/mpi/version.m4
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
# Now sanity check that some of the above sync was successful
Packit Service c5cf8c
f="aclocal_cc.m4"
Packit Service c5cf8c
for d in $confdb_dirs ; do
Packit Service c5cf8c
    if [ -f "$d/$f" ] ; then :
Packit Service c5cf8c
    else
Packit Service c5cf8c
        error "expected to find '$f' in '$d'"
Packit Service c5cf8c
        exit 1
Packit Service c5cf8c
    fi
Packit Service c5cf8c
done
Packit Service c5cf8c
Packit Service c5cf8c
echo
Packit Service c5cf8c
echo
Packit Service c5cf8c
echo "###########################################################"
Packit Service c5cf8c
echo "## Autogenerating required files"
Packit Service c5cf8c
echo "###########################################################"
Packit Service c5cf8c
echo
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Building maint/Version
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
# build a substitute maint/Version script now that we store the single copy of
Packit Service c5cf8c
# this information in an m4 file for autoconf's benefit
Packit Service c5cf8c
echo_n "Generating a helper maint/Version... "
Packit Service c5cf8c
if $autom4te -l M4sugar maint/Version.base.m4 > maint/Version ; then
Packit Service c5cf8c
    echo "done"
Packit Service c5cf8c
else
Packit Service c5cf8c
    echo "error"
Packit Service c5cf8c
    error "unable to correctly generate maint/Version shell helper"
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Building the README
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
echo_n "Updating the README... "
Packit Service c5cf8c
. ./maint/Version
Packit Service c5cf8c
if [ -f README.vin ] ; then
Packit Service c5cf8c
    sed -e "s/%VERSION%/${MPICH_VERSION}/g" README.vin > README
Packit Service c5cf8c
    echo "done"
Packit Service c5cf8c
else
Packit Service c5cf8c
    echo "error"
Packit Service c5cf8c
    error "README.vin file not present, unable to update README version number (perhaps we are running in a release tarball source tree?)"
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Building subsys_include.m4
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
if [ "X$do_subcfg_m4" = Xyes ] ; then
Packit Service c5cf8c
    echo_n "Creating subsys_include.m4... "
Packit Service c5cf8c
    ./maint/gen_subcfg_m4
Packit Service c5cf8c
    echo "done"
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Building ROMIO glue code
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
echo_n "Building ROMIO glue code... "
Packit Service c5cf8c
( cd src/glue/romio && chmod a+x ./all_romio_symbols && ./all_romio_symbols ../../mpi/romio/include/mpio.h.in )
Packit Service c5cf8c
echo "done"
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Building non-C interfaces
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
# Create the bindings if necessary 
Packit Service c5cf8c
if [ $do_bindings = "yes" ] ; then
Packit Service c5cf8c
    build_f77=no
Packit Service c5cf8c
    build_f90=no
Packit Service c5cf8c
    build_cxx=no
Packit Service c5cf8c
    if [ $do_f77 = "yes" ] ; then
Packit Service c5cf8c
        if [ ! -s src/binding/fortran/mpif_h/abortf.c ] ; then
Packit Service c5cf8c
	    build_f77=yes
Packit Service c5cf8c
        elif find src/binding/fortran/mpif_h -name 'buildiface' -newer 'src/binding/fortran/mpif_h/abortf.c' >/dev/null 2>&1 ; then
Packit Service c5cf8c
	    build_f77=yes
Packit Service c5cf8c
        fi
Packit Service c5cf8c
        if [ ! -s src/binding/fortran/use_mpi/mpi_base.f90 ] ; then
Packit Service c5cf8c
 	    build_f90=yes
Packit Service c5cf8c
        elif find src/binding/fortran/use_mpi -name 'buildiface' -newer 'src/binding/fortran/use_mpi/mpi_base.f90' >/dev/null 2>&1 ; then
Packit Service c5cf8c
	    build_f90=yes
Packit Service c5cf8c
        fi
Packit Service c5cf8c
        if [ ! -s src/binding/fortran/use_mpi_f08/wrappers_c/cdesc.c ] ; then
Packit Service c5cf8c
	    build_f08=yes
Packit Service c5cf8c
        elif find src/binding/fortran/use_mpi_f08 -name 'buildiface' -newer 'src/binding/fortran/use_mpi_f08/wrappers_c/cdesc.c' >/dev/null 2>&1 ; then
Packit Service c5cf8c
	    build_f08=yes
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    fi
Packit Service c5cf8c
Packit Service c5cf8c
    if [ $build_f77 = "yes" ] ; then
Packit Service c5cf8c
	echo_n "Building Fortran 77 interface... "
Packit Service c5cf8c
	( cd src/binding/fortran/mpif_h && chmod a+x ./buildiface && ./buildiface )
Packit Service c5cf8c
	echo "done"
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    if [ $build_f90 = "yes" ] ; then
Packit Service c5cf8c
	echo_n "Building Fortran 90 interface... "
Packit Service c5cf8c
	# Remove any copy of mpi_base.f90 (this is used to handle the
Packit Service c5cf8c
	# Double precision vs. Real*8 option
Packit Service c5cf8c
	rm -f src/binding/fortran/use_mpi/mpi_base.f90.orig
Packit Service c5cf8c
	( cd src/binding/fortran/use_mpi && chmod a+x ./buildiface && ./buildiface )
Packit Service c5cf8c
	( cd src/binding/fortran/use_mpi && ../mpif_h/buildiface -infile=cf90t.h -deffile=./cf90tdefs)
Packit Service c5cf8c
	echo "done"
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    if [ $build_f08 = "yes" ] ; then
Packit Service c5cf8c
	echo_n "Building Fortran 08 interface... "
Packit Service c5cf8c
	# Top-level files
Packit Service c5cf8c
	( cd src/binding/fortran/use_mpi_f08 && chmod a+x ./buildiface && ./buildiface )
Packit Service c5cf8c
        # Delete the old Makefile.mk
Packit Service c5cf8c
        ( rm -f src/binding/fortran/use_mpi_f08/wrappers_c/Makefile.mk )
Packit Service c5cf8c
        # Execute once for mpi.h.in ...
Packit Service c5cf8c
	( cd src/binding/fortran/use_mpi_f08/wrappers_c && chmod a+x ./buildiface && ./buildiface ../../../../include/mpi.h.in )
Packit Service c5cf8c
        # ... and once for mpio.h.in
Packit Service c5cf8c
	( cd src/binding/fortran/use_mpi_f08/wrappers_c && chmod a+x ./buildiface && ./buildiface ../../../../mpi/romio/include/mpio.h.in )
Packit Service c5cf8c
	echo "done"
Packit Service c5cf8c
    fi
Packit Service c5cf8c
Packit Service c5cf8c
    if [ ! -s src/binding/cxx/mpicxx.h ] ; then 
Packit Service c5cf8c
	build_cxx=yes
Packit Service c5cf8c
    elif find src/binding/cxx -name 'buildiface' -newer 'src/binding/cxx/mpicxx.h' >/dev/null 2>&1 ; then
Packit Service c5cf8c
	build_cxx=yes
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    if [ $build_cxx = "yes" ] ; then
Packit Service c5cf8c
	echo_n "Building C++ interface... "
Packit Service c5cf8c
	( cd src/binding/cxx && chmod a+x ./buildiface &&
Packit Service c5cf8c
	  ./buildiface -nosep -initfile=./cxx.vlist )
Packit Service c5cf8c
	echo "done"
Packit Service c5cf8c
    fi
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Extract error messages
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
# Capture the error messages
Packit Service c5cf8c
if [ $do_geterrmsgs = "yes" ] ; then
Packit Service c5cf8c
    if [ -x maint/extracterrmsgs ] ; then
Packit Service c5cf8c
        echo_n "Extracting error messages... "
Packit Service c5cf8c
        rm -rf .tmp
Packit Service c5cf8c
        rm -f .err
Packit Service c5cf8c
	rm -f unusederr.txt
Packit Service c5cf8c
        maint/extracterrmsgs -careful=unusederr.txt \
Packit Service c5cf8c
	    -skip=src/util/multichannel/mpi.c `cat maint/errmsgdirs` > \
Packit Service c5cf8c
	    .tmp 2>.err
Packit Service c5cf8c
        # (error here is ok)
Packit Service c5cf8c
	echo "done"
Packit Service c5cf8c
Packit Service c5cf8c
        update_errdefs=yes
Packit Service c5cf8c
        if [ -s .err ] ; then 
Packit Service c5cf8c
            cat .err
Packit Service c5cf8c
            rm -f .err2
Packit Service c5cf8c
            grep -v "Warning:" .err > .err2
Packit Service c5cf8c
            if [ -s .err2 ] ; then
Packit Service c5cf8c
                warn "Because of errors in extracting error messages, the file"
Packit Service c5cf8c
                warn "src/mpi/errhan/defmsg.h was not updated."
Packit Service c5cf8c
		error "Error message files in src/mpi/errhan were not updated."
Packit Service c5cf8c
   	        rm -f .tmp .err .err2
Packit Service c5cf8c
		exit 1
Packit Service c5cf8c
            fi
Packit Service c5cf8c
            rm -f .err .err2
Packit Service c5cf8c
        else
Packit Service c5cf8c
            # Incase it exists but has zero size
Packit Service c5cf8c
            rm -f .err
Packit Service c5cf8c
        fi
Packit Service c5cf8c
	if [ -s unusederr.txt ] ; then
Packit Service c5cf8c
	    warn "There are unused error message texts in src/mpi/errhan/errnames.txt"
Packit Service c5cf8c
	    warn "See the file unusederr.txt for the complete list"
Packit Service c5cf8c
        fi
Packit Service c5cf8c
        if [ -s .tmp -a "$update_errdefs" = "yes" ] ; then
Packit Service c5cf8c
            mv .tmp src/mpi/errhan/defmsg.h
Packit Service c5cf8c
        fi
Packit Service c5cf8c
        if [ ! -s src/mpi/errhan/defmsg.h ] ; then
Packit Service c5cf8c
            echo_n "Creating a dummy defmsg.h file... "
Packit Service c5cf8c
	    cat > src/mpi/errhan/defmsg.h <
Packit Service c5cf8c
typedef struct { const unsigned int sentinal1; const char *short_name, *long_name; const unsigned int sentinal2; } msgpair;
Packit Service c5cf8c
static const int generic_msgs_len = 0;
Packit Service c5cf8c
static msgpair generic_err_msgs[] = { {0xacebad03, 0, "no error catalog", 0xcb0bfa11}, };
Packit Service c5cf8c
static const int specific_msgs_len = 0;
Packit Service c5cf8c
static msgpair specific_err_msgs[] = {  {0xacebad03,0,0,0xcb0bfa11}, };
Packit Service c5cf8c
#if MPICH_ERROR_MSG_LEVEL > MPICH_ERROR_MSG__NONE
Packit Service c5cf8c
#define MPIR_MAX_ERROR_CLASS_INDEX 54
Packit Service c5cf8c
static int class_to_index[] = {
Packit Service c5cf8c
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Packit Service c5cf8c
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Packit Service c5cf8c
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Packit Service c5cf8c
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Packit Service c5cf8c
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Packit Service c5cf8c
0, 0, 0, 0 };
Packit Service c5cf8c
#endif
Packit Service c5cf8c
EOF
Packit Service c5cf8c
	    echo "done"
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    fi
Packit Service c5cf8c
fi  # do_geterrmsgs
Packit Service c5cf8c
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Build required scripts
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
echo
Packit Service c5cf8c
echo "------------------------------------"
Packit Service c5cf8c
echo "Initiating building required scripts"
Packit Service c5cf8c
# Build scripts such as genstates if necessary
Packit Service c5cf8c
ran_maint_configure=no
Packit Service c5cf8c
run_configure=no
Packit Service c5cf8c
# The information that autoconf uses is saved in the autom4te*.cache
Packit Service c5cf8c
# file; since this cache is not accurate, we delete it.
Packit Service c5cf8c
if [ ! -x maint/configure ] ; then
Packit Service c5cf8c
    (cd maint && $autoconf && rm -rf autom4te*.cache )
Packit Service c5cf8c
elif find maint -name 'configure.ac' -newer 'maint/configure' >/dev/null 2>&1 ; then
Packit Service c5cf8c
    # The above relies on the Unix find command
Packit Service c5cf8c
    (cd maint && $autoconf && rm -rf autom4te*.cache)
Packit Service c5cf8c
fi
Packit Service c5cf8c
if [ ! -x maint/genstates ] ; then
Packit Service c5cf8c
    run_configure=yes
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
# The following relies on the Unix find command
Packit Service c5cf8c
if [ -s maint/genstates ] ; then 
Packit Service c5cf8c
    if find maint -name 'genstates.in' -newer 'maint/genstates' >/dev/null 2>&1 ; then
Packit Service c5cf8c
        run_configure=yes
Packit Service c5cf8c
    fi
Packit Service c5cf8c
else
Packit Service c5cf8c
    run_configure=yes
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
if [ "$run_configure" = "yes" ] ; then
Packit Service c5cf8c
    (cd maint && ./configure)
Packit Service c5cf8c
    ran_maint_configure=yes
Packit Service c5cf8c
fi
Packit Service c5cf8c
echo "Done building required scripts"
Packit Service c5cf8c
echo "------------------------------------"
Packit Service c5cf8c
echo
Packit Service c5cf8c
Packit Service c5cf8c
# Run some of the simple codes
Packit Service c5cf8c
echo_n "Creating the enumeration of logging states into src/include/mpiallstates.h... "
Packit Service c5cf8c
if [ -x maint/extractstates -a $do_genstates = "yes" ] ; then
Packit Service c5cf8c
    ./maint/extractstates
Packit Service c5cf8c
fi
Packit Service c5cf8c
echo "done"
Packit Service c5cf8c
Packit Service c5cf8c
# new parameter code
Packit Service c5cf8c
echo_n "Extracting control variables (cvar) ... "
Packit Service c5cf8c
if test -x maint/extractcvars -a "$do_getcvars" = "yes" ; then
Packit Service c5cf8c
    if ./maint/extractcvars --dirs="`cat maint/cvardirs`"; then
Packit Service c5cf8c
        echo "done"
Packit Service c5cf8c
    else
Packit Service c5cf8c
        echo "failed"
Packit Service c5cf8c
        error "unable to extract control variables"
Packit Service c5cf8c
        exit 1
Packit Service c5cf8c
    fi
Packit Service c5cf8c
else
Packit Service c5cf8c
    echo "skipped"
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
echo
Packit Service c5cf8c
echo
Packit Service c5cf8c
echo "###########################################################"
Packit Service c5cf8c
echo "## Generating configure files"
Packit Service c5cf8c
echo "###########################################################"
Packit Service c5cf8c
echo
Packit Service c5cf8c
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
## Running autotools on non-simplemake directories
Packit Service c5cf8c
########################################################################
Packit Service c5cf8c
Packit Service c5cf8c
if [ "$do_build_configure" = "yes" ] ; then
Packit Service c5cf8c
    for external in $externals ; do
Packit Service c5cf8c
       if [ -d "$external" -o -L "$external" ] ; then
Packit Service c5cf8c
           echo "------------------------------------------------------------------------"
Packit Service c5cf8c
           echo "running third-party initialization in $external"
Packit Service c5cf8c
           (cd $external && ./autogen.sh) || exit 1
Packit Service c5cf8c
       fi
Packit Service c5cf8c
    done
Packit Service c5cf8c
Packit Service c5cf8c
    for amdir in $amdirs ; do
Packit Service c5cf8c
	if [ -d "$amdir" -o -L "$amdir" ] ; then
Packit Service c5cf8c
	    echo "------------------------------------------------------------------------"
Packit Service c5cf8c
	    echo "running $autoreconf in $amdir"
Packit Service c5cf8c
            (cd $amdir && $autoreconf $autoreconf_args) || exit 1
Packit Service c5cf8c
            # Patching ltmain.sh
Packit Service c5cf8c
            if [ -f $amdir/confdb/ltmain.sh ] ; then
Packit Service c5cf8c
                echo_n "Patching ltmain.sh for compatibility with Intel compiler options... "
Packit Service c5cf8c
                patch -N -s -l $amdir/confdb/ltmain.sh maint/patches/optional/confdb/intel-compiler.patch
Packit Service c5cf8c
                if [ $? -eq 0 ] ; then
Packit Service c5cf8c
                    # Remove possible leftovers, which don't imply a failure
Packit Service c5cf8c
                    rm -f $amdir/confdb/ltmain.sh.orig
Packit Service c5cf8c
                    echo "done"
Packit Service c5cf8c
                else
Packit Service c5cf8c
                    echo "failed"
Packit Service c5cf8c
                fi
Packit Service c5cf8c
                # Rebuild configure
Packit Service c5cf8c
                (cd $amdir && $autoconf -f) || exit 1
Packit Service c5cf8c
                # Reset ltmain.sh timestamps to avoid confusing make
Packit Service c5cf8c
                touch -r $amdir/confdb/ltversion.m4 $amdir/confdb/ltmain.sh
Packit Service c5cf8c
            fi
Packit Service c5cf8c
            # Patching libtool.m4
Packit Service c5cf8c
            # This works with libtool versions 2.4 - 2.4.2.
Packit Service c5cf8c
            # Older versions are not supported to build mpich.
Packit Service c5cf8c
            # Newer versions should have this patch already included.
Packit Service c5cf8c
            if [ -f $amdir/confdb/libtool.m4 ] ; then
Packit Service c5cf8c
                # There is no need to patch if we're not going to use Fortran.
Packit Service c5cf8c
                ifort_patch_requires_rebuild=no
Packit Service c5cf8c
                oracle_patch_requires_rebuild=no
Packit Service c5cf8c
                flang_patch_requires_rebuild=no
Packit Service c5cf8c
                arm_patch_requires_rebuild=no
Packit Service c5cf8c
                ibm_patch_requires_rebuild=no
Packit Service c5cf8c
                sys_lib_dlsearch_path_patch_requires_rebuild=no
Packit Service c5cf8c
                echo_n "Patching libtool.m4 for system dynamic library search path..."
Packit Service c5cf8c
                patch -N -s -l $amdir/confdb/libtool.m4 maint/patches/optional/confdb/sys_lib_dlsearch_path_spec.patch
Packit Service c5cf8c
                if [ $? -eq 0 ] ; then
Packit Service c5cf8c
                    sys_lib_dlsearch_path_patch_requires_rebuild=yes
Packit Service c5cf8c
                    # Remove possible leftovers, which don't imply a failure
Packit Service c5cf8c
                    rm -f $amdir/confdb/libtool.m4.orig
Packit Service c5cf8c
                    echo "done"
Packit Service c5cf8c
                else
Packit Service c5cf8c
                    echo "failed"
Packit Service c5cf8c
                fi
Packit Service c5cf8c
                if [ $do_bindings = "yes" ] ; then
Packit Service c5cf8c
                    echo_n "Patching libtool.m4 for compatibility with ifort on OSX... "
Packit Service c5cf8c
                    patch -N -s -l $amdir/confdb/libtool.m4 maint/patches/optional/confdb/darwin-ifort.patch
Packit Service c5cf8c
                    if [ $? -eq 0 ] ; then
Packit Service c5cf8c
                        ifort_patch_requires_rebuild=yes
Packit Service c5cf8c
                        # Remove possible leftovers, which don't imply a failure
Packit Service c5cf8c
                        rm -f $amdir/confdb/libtool.m4.orig
Packit Service c5cf8c
                        echo "done"
Packit Service c5cf8c
                    else
Packit Service c5cf8c
                        echo "failed"
Packit Service c5cf8c
                    fi
Packit Service c5cf8c
                    echo_n "Patching libtool.m4 for fort compatibility with Oracle Dev Studio 12.6..."
Packit Service c5cf8c
                    patch -N -s -l $amdir/confdb/libtool.m4 maint/patches/optional/confdb/oracle-fort.patch
Packit Service c5cf8c
                    if [ $? -eq 0 ] ; then
Packit Service c5cf8c
                        oracle_patch_requires_rebuild=yes
Packit Service c5cf8c
                        # Remove possible leftovers, which don't imply a failure
Packit Service c5cf8c
                        rm -f $amdir/confdb/libtool.m4.orig
Packit Service c5cf8c
                        echo "done"
Packit Service c5cf8c
                    else
Packit Service c5cf8c
                        echo "failed"
Packit Service c5cf8c
                    fi
Packit Service c5cf8c
                    echo_n "Patching libtool.m4 for compatibility with Flang..."
Packit Service c5cf8c
                    patch -N -s -l $amdir/confdb/libtool.m4 maint/patches/optional/confdb/flang.patch
Packit Service c5cf8c
                    if [ $? -eq 0 ] ; then
Packit Service c5cf8c
                        flang_patch_requires_rebuild=yes
Packit Service c5cf8c
                        # Remove possible leftovers, which don't imply a failure
Packit Service c5cf8c
                        rm -f $amdir/confdb/libtool.m4.orig
Packit Service c5cf8c
                        echo "done"
Packit Service c5cf8c
                    else
Packit Service c5cf8c
                        echo "failed"
Packit Service c5cf8c
                    fi
Packit Service c5cf8c
                    echo_n "Patching libtool.m4 for compatibility with Arm LLVM compilers..."
Packit Service c5cf8c
                    patch -N -s -l $amdir/confdb/libtool.m4 maint/patches/optional/confdb/arm-compiler.patch
Packit Service c5cf8c
                    if [ $? -eq 0 ] ; then
Packit Service c5cf8c
                        arm_patch_requires_rebuild=yes
Packit Service c5cf8c
                        # Remove possible leftovers, which don't imply a failure
Packit Service c5cf8c
                        rm -f $amdir/confdb/libtool.m4.orig
Packit Service c5cf8c
                        echo "done"
Packit Service c5cf8c
                    else
Packit Service c5cf8c
                        echo "failed"
Packit Service c5cf8c
                    fi
Packit Service c5cf8c
                    echo_n "Patching libtool.m4 for compatibility with IBM XL Fortran compilers..."
Packit Service c5cf8c
                    patch -N -s -l $amdir/confdb/libtool.m4 maint/patches/optional/confdb/ibm-xlf.patch
Packit Service c5cf8c
                    if [ $? -eq 0 ] ; then
Packit Service c5cf8c
                        ibm_patch_requires_rebuild=yes
Packit Service c5cf8c
                        # Remove possible leftovers, which don't imply a failure
Packit Service c5cf8c
                        rm -f $amdir/confdb/libtool.m4.orig
Packit Service c5cf8c
                        echo "done"
Packit Service c5cf8c
                    else
Packit Service c5cf8c
                        echo "failed"
Packit Service c5cf8c
                    fi
Packit Service c5cf8c
                fi
Packit Service c5cf8c
Packit Service c5cf8c
                if [ $ifort_patch_requires_rebuild = "yes" ] || [ $oracle_patch_requires_rebuild = "yes" ] \
Packit Service c5cf8c
                    || [ $arm_patch_requires_rebuild = "yes" ] || [ $ibm_patch_requires_rebuild = "yes" ] \
Packit Service c5cf8c
                    || [ $sys_lib_dlsearch_path_patch_requires_rebuild = "yes" ] || [ $flang_patch_requires_rebuild = "yes" ]; then
Packit Service c5cf8c
                    # Rebuild configure
Packit Service c5cf8c
                    (cd $amdir && $autoconf -f) || exit 1
Packit Service c5cf8c
                    # Reset libtool.m4 timestamps to avoid confusing make
Packit Service c5cf8c
                    touch -r $amdir/confdb/ltversion.m4 $amdir/confdb/libtool.m4
Packit Service c5cf8c
                fi
Packit Service c5cf8c
            fi
Packit Service c5cf8c
	fi
Packit Service c5cf8c
    done
Packit Service c5cf8c
fi