1
1

Refactor the PMI configure check logic to be a lot cleaner and simpler.

Этот коммит содержится в:
Ralph Castain 2014-10-23 18:35:18 -07:00
родитель 96c655ec67
Коммит 75d8a7f25b

Просмотреть файл

@ -21,127 +21,164 @@
# $HEADER$
#
# define an internal function for checking the existence
# and validity of a PMI library
#
# OPAL_CHECK_PMI_LIB(installdir, pmi, function, [action-if-valid], [action-if-not-valid])
# --------------------------------------------------------
AC_DEFUN([OPAL_CHECK_PMI_LIB],
[
OPAL_VAR_SCOPE_PUSH([save_LDFLAGS save_CPPFLAGS save_LIBS hdr_happy lib_happy files mycppflags])
# save flags
save_CPPFLAGS="$CPPFLAGS"
save_LDFLAGS="$LDFLAGS"
save_LIBS="$LIBS"
hdr_happy=
mycppflags=
# check for the header
AC_MSG_CHECKING([for $2.h in $1/include])
AS_IF([test -f $1/include/$2.h],
[AC_MSG_RESULT([found])
mycppflags="-I$1/include"],
[AC_MSG_RESULT([not found])
AC_MSG_CHECKING([for $2.h in $1/include/slurm])
AS_IF([test -f $1/include/slurm/$2.h],
[AC_MSG_RESULT([found])
mycppflags="-I$1/include/slurm"],
[AC_MSG_RESULT([not found])
hdr_happy=no])])
AS_IF([test "$hdr_happy" != "no"],
[CPPFLAGS="$CPPFLAGS $mycppflags"
AC_CHECK_HEADER([$2.h],
[hdr_happy=yes
$2_CPPFLAGS="$mycppflags"],
[hdr_happy=no])])
# check for presence of lib64 directory - if found, see if the
# desired library is present and matches our build requirements
lib_happy=
LIBS="$LIBS -l$2"
AC_MSG_CHECKING([for lib$2 in $1/lib64])
files=`ls $1/lib64/lib$2.* 2> /dev/null | wc -l`
AS_IF([test "$files" -gt "0"],
[AC_MSG_RESULT([found])
LDFLAGS="$LDFLAGS -L$1/lib64"
AC_CHECK_LIB([$2], [$3],
[lib_happy=yes.
$2_LDFLAGS="-L$1/lib64"
$2_rpath="$1/lib64"],
[lib_happy=no])],
[AC_MSG_RESULT([not found])])
# if we didn't find lib64, or the library wasn't present or correct,
# then try a lib directory if present
files=`ls $1/lib/lib$2.* 2> /dev/null | wc -l`
AS_IF([test "$lib_happy" != "yes"],
[AC_MSG_CHECKING([for lib$2 in $1/lib])
AS_IF([test "$files" -gt "0"],
[AC_MSG_RESULT([found])
LDFLAGS="$LDFLAGS -L$1/lib"
AC_CHECK_LIB([$2], [$3],
[lib_happy=yes
$2_LDFLAGS="-L$1/lib"
$2_rpath="$1/lib"],
[lib_happy=no])],
[lib_happy=no
AC_MSG_RESULT([not found])])])
# restore flags
CPPFLAGS="$save_CPPFLAGS"
LDFLAGS="$save_LDFLAGS"
LIBS="$save_LIBS"
AS_IF([test "$hdr_happy" = "yes" && test "$lib_happy" = "yes"],
[$4], [$5])
OPAL_VAR_SCOPE_POP
])
# OPAL_CHECK_PMI(prefix, [action-if-found], [action-if-not-found])
# --------------------------------------------------------
AC_DEFUN([OPAL_CHECK_PMI],[
OPAL_VAR_SCOPE_PUSH([check_install_dir have_pmi1 have_pmi2 added_flags default_loc have_rpath local_libs])
AC_ARG_WITH([pmi],
[AC_HELP_STRING([--with-pmi(=DIR)],
[Build PMI support, optionally adding DIR to the search path (default: no)])],
[], with_pmi=no)
[], with_pmi=no)
opal_enable_pmi=0
opal_pmi_rpath=
opal_have_pmi2=0
opal_have_pmi1=0
opal_check_pmi_install_dir=
opal_default_loc=0
opal_pmi_added_cppflag=no
opal_pmi_added_ldflag=no
# save flags
opal_check_pmi_$1_save_CPPFLAGS="$CPPFLAGS"
opal_check_pmi_$1_save_LDFLAGS="$LDFLAGS"
opal_check_pmi_$1_save_LIBS="$LIBS"
# set defaults
opal_check_pmi_$1_LDFLAGS=
opal_check_pmi_$1_CPPFLAGS=
opal_check_pmi_$1_LIBS=
have_pmi2=no
have_pmi1=no
check_install_dir=
added_flags=no
$1_LIBS=
have_rpath=
local_libs=
AC_MSG_CHECKING([if user requested PMI support])
AS_IF([test "$with_pmi" = "no"],
[AC_MSG_RESULT([no])
$3],
[AC_MSG_RESULT([yes])
AC_MSG_CHECKING([if PMI installed])
# cannot use OPAL_CHECK_PACKAGE as its backend header
# support appends "include" to the path, which won't
# work with slurm :-(
AS_IF([test ! -z "$with_pmi" && test "$with_pmi" != "yes"],
[opal_check_pmi_install_dir=$with_pmi
opal_default_loc="no"],
[opal_check_pmi_install_dir="/usr"
opal_default_loc="yes"])
[check_install_dir=$with_pmi
default_loc="no"],
[check_install_dir="/usr"
default_loc="yes"])
# check for pmi-1 lib */
files=`ls -U $opal_check_pmi_install_dir/lib64/libpmi.* 2> /dev/null | wc -l`
AS_IF([test "$files" -gt "0"],
[opal_have_pmi1=1
AS_IF([test "$opal_default_loc" = "no"],
[opal_check_pmi_$1_LDFLAGS="-L$opal_check_pmi_install_dir/lib64"
opal_pmi_rpath="$opal_check_pmi_install_dir/lib64"
opal_pmi_added_ldflag=yes])
opal_check_pmi_$1_LIBS="-lpmi"],
[files=`ls -U $opal_check_pmi_install_dir/lib/libpmi.* 2> /dev/null | wc -l`
AS_IF([test "$files" -gt "0"],
[opal_have_pmi1=1
AS_IF([test "$opal_default_loc" = "no"],
[opal_check_pmi_$1_LDFLAGS="-L$opal_check_pmi_install_dir/lib"
opal_pmi_rpath="$opal_check_pmi_install_dir/lib"
opal_pmi_added_ldflag=yes])
opal_check_pmi_$1_LIBS="-lpmi"])])
# check for pmi.h
AS_IF([test -f "$opal_check_pmi_install_dir/include/pmi.h"],
[AS_IF([test "$opal_default_loc" = "no"],
[opal_check_pmi_$1_CPPFLAGS="-I$opal_check_pmi_install_dir/include"
opal_pmi_added_cppflag=yes])],
# this could be SLURM, which puts things in a different location
[AS_IF([test -f "$opal_check_pmi_install_dir/include/slurm/pmi.h"],
# even if this was the default loc, we still need to add it in
# because of the slurm path addition
[opal_check_pmi_$1_CPPFLAGS="-I$opal_check_pmi_install_dir/include/slurm"
opal_pmi_added_cppflag=yes])])
OPAL_CHECK_PMI_LIB([$check_install_dir],
[pmi], [PMI_Init],
[have_pmi1=yes
AS_IF([test "$default_loc" = "no"],
[$1_CPPFLAGS="$pmi_CPPFLAGS"
$1_LDFLAGS="$pmi_LDFLAGS"
have_rpath="$pmi_rpath"
added_flags=yes])
local_libs="$pmi_LIBS"],
[have_pmi1=no])
# check for pmi2 lib */
files=`ls -U $opal_check_pmi_install_dir/lib64/libpmi2.* 2> /dev/null | wc -l`
AS_IF([test "$files" -gt "0"],
[opal_have_pmi2=1
AS_IF([test "$opal_pmi_added_ldflag" != "yes" && test "$opal_default_loc" = "no"],
[opal_check_pmi_$1_LDFLAGS="-L$opal_check_pmi_install_dir/lib64"
opal_pmi_rpath="$opal_check_pmi_install_dir/lib64"])
opal_check_pmi_$1_LIBS="$opal_check_pmi_$1_LIBS -lpmi2"],
[files=`ls -U $opal_check_pmi_install_dir/lib/libpmi2.* 2> /dev/null | wc -l`
AS_IF([test "$files" -gt "0"],
[opal_have_pmi2=1
AS_IF([test "$opal_pmi_added_ldflag" != "yes" && test "$opal_default_loc" = "no"],
[opal_check_pmi_$1_LDFLAGS="-L$opal_check_pmi_install_dir/lib"
opal_pmi_rpath="$opal_check_pmi_install_dir/lib"])
opal_check_pmi_$1_LIBS="$opal_check_pmi_$1_LIBS -lpmi2"])])
# check for pmi2.h
AS_IF([test "$opal_pmi_added_cppflag" = "no"],
[AS_IF([test -f "$opal_check_pmi_install_dir/include/pmi2.h"],
[AS_IF([test "$opal_default_loc" = "no"],
[opal_check_pmi_$1_CPPFLAGS="-I$opal_check_pmi_install_dir/include"])],
# this could be SLURM, which puts things in a different location
[AS_IF([test -f "$opal_check_pmi_install_dir/include/slurm/pmi2.h"],
# even if this was the default loc, we still need to add it in
# because of the slurm path addition
[opal_check_pmi_$1_CPPFLAGS="-I$opal_check_pmi_install_dir/include/slurm"])])])
OPAL_CHECK_PMI_LIB([$check_install_dir],
[pmi2], [PMI2_Init],
[have_pmi2=yes
opal_have_pmi2=1
AS_IF([test "$default_loc" = "no" && test "$added_flags" = "no"],
[$1_CPPFLAGS="$pmi2_CPPFLAGS"
$1_LDFLAGS="$pmi2_LDFLAGS"
have_rpath="$pmi2_rpath"])
local_libs="local_libs $pmi2_LIBS"],
[have_pmi2=no])
# since support was explicitly requested, then we should error out
# if we didn't find the required support
AS_IF([test "$opal_have_pmi1" != "1" && test "$opal_have_pmi2" != "1"],
AS_IF([test "$have_pmi1" != "yes" && test "$have_pmi2" != "yes"],
[AC_MSG_RESULT([not found])
AC_MSG_WARN([PMI support requested (via --with-pmi) but neither libpmi])
AC_MSG_WARN([nor libpmi2 were found under locations:])
AC_MSG_WARN([ $opal_check_pmi_install_dir/lib])
AC_MSG_WARN([ $opal_check_pmi_install_dir/lib64])
AC_MSG_WARN([ $check_install_dir/lib])
AC_MSG_WARN([ $check_install_dir/lib64])
AC_MSG_WARN([Specified path: $with_pmi])
AC_MSG_ERROR([Aborting])
$3],
[AC_MSG_RESULT([yes])
opal_enable_pmi=1
$1_LDFLAGS="$opal_check_pmi_$1_LDFLAGS"
$1_CPPFLAGS="$opal_check_pmi_$1_CPPFLAGS"
$1_LIBS="$opal_check_pmi_$1_LIBS -Wl,-rpath=$opal_pmi_rpath"
$1_LIBS="$local_libs -Wl,-rpath=$have_rpath"
AC_MSG_CHECKING([final added libraries])
AC_MSG_RESULT([$opal_check_pmi_$1_LIBS])
AC_MSG_RESULT([$local_libs])
$2])
])
# restore flags
CPPFLAGS="$opal_check_pmi_$1_save_CPPFLAGS"
LDFLAGS="$opal_check_pmi_$1_save_LDFLAGS"
LIBS="$opal_check_pmi_$1_save_LIBS"
OPAL_VAR_SCOPE_POP
])
#