dnl PAC_RESET_ALL_FLAGS - Reset precious flags to those set by the user
AC_DEFUN([PAC_RESET_ALL_FLAGS],[
if test "$FROM_MPICH" = "yes" ; then
CFLAGS="$USER_CFLAGS"
CPPFLAGS="$USER_CPPFLAGS"
CXXFLAGS="$USER_CXXFLAGS"
FFLAGS="$USER_FFLAGS"
FCFLAGS="$USER_FCFLAGS"
LDFLAGS="$USER_LDFLAGS"
LIBS="$USER_LIBS"
fi
])
dnl PAC_RESET_LINK_FLAGS - Reset precious link flags to those set by the user
AC_DEFUN([PAC_RESET_LINK_FLAGS],[
if test "$FROM_MPICH" = "yes" ; then
LDFLAGS="$USER_LDFLAGS"
LIBS="$USER_LIBS"
fi
])
dnl Sandbox configure with additional arguments
dnl Usage: PAC_CONFIG_SUBDIR_ARGS(subdir,configure-args,action-if-success,action-if-failure)
dnl
dnl The subconfigure argument list is created based on "ac_precious_vars"
dnl instead of explicitly use of well-known Makefile variables, like
dnl CC/CFLAGS/CPPFLAGS..., this generalization is effective as long as
dnl calling configure.ac declares the needed variables to be passed down
dnl to subconfigure as "precious" appropriately. The precious variable
dnl can be created in the following ways:
dnl 1) implicit declaration through use of autoconf macros, like
dnl AC_PROG_CC (declares CC/CFLAGS/CPPFLAGS/LIBS/LDFLAGS), or
dnl AC_PROG_F77 (declares F77/FFLAGS/FLIBS) ...
dnl which are in turns invoked by other subconfigure.
dnl When in doubt, check "ac_precious_var" in the calling configure.
dnl 2) explicit "precious" declaration through AC_ARG_VAR.
dnl Without correct "precious" declaration in the calling configure.ac,
dnl there would be variables not being included in the subconfigure
dnl argument list.
dnl
dnl Note: I suspect this DEFUN body is underquoted in places, but it does not
dnl seem to cause problems in practice yet. [goodell@ 2010-05-18]
AC_DEFUN([PAC_CONFIG_SUBDIR_ARGS],[
pac_dir="$1"
AC_MSG_NOTICE([===== configuring $1 =====])
pac_abs_srcdir=`(cd $srcdir && pwd)`
if test -f $pac_abs_srcdir/$1/setup ; then
AC_MSG_NOTICE([sourcing $pac_abs_srcdir/$1/setup])
. $pac_abs_srcdir/$1/setup
fi
# Adapted for MPICH from the autoconf-2.67 implementation of
# AC_CONFIG_SUBDIRS. Search for "MPICH note:" for relevant commentary and
# local modifications.
# Remove --cache-file, --srcdir, and --disable-option-checking arguments
# so they do not pile up. Otherwise relative paths (like --srcdir=.. from
# make distcheck) will be incorrect.
pac_sub_configure_args="$2"
pac_prev=
eval "set x $ac_configure_args"
shift
for pac_arg
do
if test -n "$pac_prev"; then
pac_prev=
continue
fi
case $pac_arg in
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
pac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
| --c=*)
;;
--config-cache | -C)
;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
pac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
pac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
;;
--disable-option-checking)
;;
*)
# MPICH note: this is a more robust version of the "precious
# variable" propagation code that was present in the previous
# incarnation of this macro
for pac_pvar in $ac_precious_vars ; do
# check if configure argument token contains the
# precious variable, i.e. "name_of_prec_var=".
if ( echo $pac_arg | grep "^$pac_pvar=" >/dev/null 2>&1 ) ; then
# check if current precious variable is set in env
eval pvar_set=\${$pac_pvar+set}
if test "$pvar_set" = "set" ; then
# Append 'name_of_prec_var=value_of_prec_var'
# to the subconfigure arguments list, where
# value_of_prec_var is fetched from the env.
# this also overrides any value set on the command line
eval pac_pval=\${$pac_pvar}
pac_arg="$pac_pvar=$pac_pval"
break
fi
fi
done
case $pac_arg in
*\'*) pac_arg=`AS_ECHO(["$pac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
esac
AS_VAR_APPEND([pac_sub_configure_args], [" '$pac_arg'"]) ;;
esac
done
# Always prepend --prefix to ensure using the same prefix
# in subdir configurations.
# MPICH note: see tt#983 for an example of why this is necessary
pac_arg="--prefix=$prefix"
case $pac_arg in
*\'*) pac_arg=`AS_ECHO(["$pac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
esac
pac_sub_configure_args="'$pac_arg' $pac_sub_configure_args"
# Pass --silent
if test "$silent" = yes; then
pac_sub_configure_args="--silent $pac_sub_configure_args"
fi
# Always prepend --disable-option-checking to silence warnings, since
# different subdirs can have different --enable and --with options.
pac_sub_configure_args="--disable-option-checking $pac_sub_configure_args"
pac_popdir=`pwd`
# Do not complain, so a configure script can configure whichever
# parts of a large source tree are present.
test -d "$srcdir/$pac_dir" || continue
# MPICH note: modified to remove the internal "_AS_*" macro usage, also
# msg is already printed at top
dnl _AS_ECHO_LOG([$pac_msg])
dnl _AS_ECHO([$pac_msg])
AS_MKDIR_P(["$pac_dir"])
# MPICH note: we leave this internal macro reference for now. We can clone
# the macro locally if this turns out to be non-portable across several autoconf
# versions. It sets the following variables: ac_builddir,
# ac_top_builddir_sub, ac_top_build_prefix, ac_srcdir, ac_top_srcdir,
# ac_abs_top_builddir, ac_abs_builddir, ac_abs_top_srcdir, ac_abs_srcdir
_AC_SRCDIRS(["$pac_dir"])
cd "$pac_dir"
# Check for guested configure; otherwise get Cygnus style configure.
if test -f "$ac_srcdir/configure.gnu"; then
pac_sub_configure=$ac_srcdir/configure.gnu
elif test -f "$ac_srcdir/configure"; then
pac_sub_configure=$ac_srcdir/configure
elif test -f "$ac_srcdir/configure.ac"; then
# This should be Cygnus configure.
pac_sub_configure=$ac_aux_dir/configure
else
AC_MSG_WARN([no configuration information is in $pac_dir])
pac_sub_configure=
fi
# The recursion is here.
if test -n "$pac_sub_configure"; then
# MPICH note: overriding the cache file on purpose to prevent strange
# issues resulting from inter-dir caching
dnl # Make the cache file name correct relative to the subdirectory.
dnl case $cache_file in
dnl [[\\/]]* | ?:[[\\/]]* ) pac_sub_cache_file=$cache_file ;;
dnl *) # Relative name.
dnl pac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
dnl esac
pac_sub_cache_file="/dev/null"
AC_MSG_NOTICE([running $SHELL $pac_sub_configure $pac_sub_configure_args --cache-file=$pac_sub_cache_file --srcdir=$ac_srcdir])
# The eval makes quoting arguments work.
# MPICH note: we want to execute the provided actions, not be silent
# or error out if the subconfigure succeeded/failed
dnl eval "\$SHELL \"\$pac_sub_configure\" $pac_sub_configure_args \
dnl --cache-file=\"\$pac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
dnl AC_MSG_ERROR([$pac_sub_configure failed for $pac_dir])
if eval "\$SHELL \"\$pac_sub_configure\" $pac_sub_configure_args \
--cache-file=\"\$pac_sub_cache_file\" --srcdir=\"\$ac_srcdir\""
then
# restore the current dir for the provided actions
cd "$pac_popdir"
$3
else
# restore the current dir for the provided actions
cd "$pac_popdir"
$4
fi
fi
cd "$pac_popdir"
AC_MSG_NOTICE([===== done with $1 configure =====])
# Check for any localdefs files. These may be created, so we
# look in the local directory first.
if test -f $1/localdefs ; then
AC_MSG_NOTICE([sourcing $1/localdefs])
. $1/localdefs
elif test -f $pac_abs_srcdir/$1/localdefs ; then
AC_MSG_NOTICE([sourcing $pac_abs_srcdir/$1/localdefs])
. $pac_abs_srcdir/$1/localdefs
fi
])
dnl Sandbox configure
dnl Usage: PAC_CONFIG_SUBDIR(subdir,action-if-success,action-if-failure)
AC_DEFUN([PAC_CONFIG_SUBDIR],[PAC_CONFIG_SUBDIR_ARGS([$1],[],[$2],[$3])])
dnl PAC_SUBCFG_EXPAND_SUFFIX_MACRO(MACRO_PREFIX,MACRO_PATH_SUFFIX)
dnl converts the path given by MACRO_PATH_SUFFIX (with '/' chars in it) to one
dnl with '_' chars in it and then appends that to MACRO_PREFIX with '_' in
dnl between. The resulting macro name is then expanded, but with informative
dnl "##" comments before and after the expansion.
dnl
dnl This is intended to be an internal helper macro for the PAC_SUBCFG
dnl implementation.
dnl
dnl XXX DJG FIXME: need to be able to deal with PREREQ macros that potentially
dnl aren't present while having safety for BODY macros when there are
dnl misspellings
AC_DEFUN([PAC_SUBCFG_EXPAND_PATH_SUFFIX_MACRO],[
dnl convert path separators into '_', the m4_translit is intentionally unquoted
m4_pushdef([subsys_uscore_name],[$1_]m4_translit([$2],[\/],[__]))dnl
m4_ifdef(m4_defn([subsys_uscore_name]),[],[m4_fatal([macro ]m4_defn([subsys_uscore_name])[ is undefined])])dnl
[##] begin expansion of m4_defn([subsys_uscore_name])
dnl call the computed routine name with the remaining args
m4_indir(m4_defn([subsys_uscore_name]),m4_shift($@))
dnl there is intentionally no "dnl" on the previous line to reduce the chance of
dnl a "fi## end expansion" bug when the BODY macro doesn't end in a newline
[##] end expansion of m4_defn([subsys_uscore_name])
])
dnl invokes the PAC_SUBCFG_BODY_foo macro for the "foo" subsys, when "foo" is
dnl passed as the only argument to this macro. The first arg may be the '/'
dnl path version instead of having underscores.
AC_DEFUN([PAC_SUBCFG_CONFIGURE_SUBSYS],[PAC_SUBCFG_EXPAND_PATH_SUFFIX_MACRO([PAC_SUBCFG_BODY],[$1])])
dnl invokes the PAC_SUBCFG_PREREQ_foo macro for the "foo" subsys, when "foo" is
dnl passed as the only argument to this macro. The first arg may be the '/'
dnl path version instead of having underscores.
AC_DEFUN([PAC_SUBCFG_DO_PREREQ],[PAC_SUBCFG_EXPAND_PATH_SUFFIX_MACRO([PAC_SUBCFG_PREREQ],[$1])])
dnl takes no arguments, expands to "foo_bar_baz" when invoked in a file named
dnl "foo/bar/baz/subconfigure.m4"
dnl
dnl This is useful for reducing copy-paste errors when defining PREREQ and BODY
dnl macros. If you tinker with this macro, watch the quoting carefully.
AC_DEFUN([PAC_SUBCFG_AUTO_SUFFIX],[m4_translit(m4_bpatsubst(m4_dquote(__file__),[/[^/]+.m4],[]),[/],[_])])