From 9c027e6def000db1fcc910a2f59c41d8989fac42 Mon Sep 17 00:00:00 2001 From: Ralph Castain <rhc@open-mpi.org> Date: Tue, 7 Oct 2014 10:18:59 -0700 Subject: [PATCH] Update the PMI configure logic to handle the oddball case where both lib and lib64 may exist, and the required files may be in one or the other of them. --- config/opal_check_pmi.m4 | 139 ++++++++++++++++++++------------------- 1 file changed, 72 insertions(+), 67 deletions(-) diff --git a/config/opal_check_pmi.m4 b/config/opal_check_pmi.m4 index e71202c8d5..af60dbebf8 100644 --- a/config/opal_check_pmi.m4 +++ b/config/opal_check_pmi.m4 @@ -50,6 +50,11 @@ AC_DEFUN([OPAL_CHECK_PMI],[ opal_pmi_rpath= opal_have_pmi2=0 opal_have_pmi1=0 + opal_check_pmi_incdir= + opal_check_pmi_libdir= + opal_default_loc=0 + opal_pmi_added_cppflag=no + opal_pmi_added_ldflag=no # save flags opal_check_pmi_$1_save_CPPFLAGS="$CPPFLAGS" @@ -66,73 +71,78 @@ AC_DEFUN([OPAL_CHECK_PMI],[ [AC_MSG_RESULT([no]) $3], [AC_MSG_RESULT([yes]) - AC_MSG_CHECKING([if PMI or PMI2 headers installed]) + 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" -a "$with_pmi" != "yes"], - [AS_IF([test -d "$with_pmi/lib64"], - [opal_check_pmi_$1_LDFLAGS="-L$with_pmi/lib64" - opal_pmi_rpath="$with_pmi/lib64"], - [opal_check_pmi_$1_LDFLAGS="-L$with_pmi/lib" - opal_pmi_rpath="$with_pmi/lib"]) - # look for required headers - both pmi.h AND/OR pmi2.h - # may be present - AS_IF([test -f "$with_pmi/include/pmi2.h" -o -f "$with_pmi/include/pmi.h"], - [opal_check_pmi_$1_CPPFLAGS="-I$with_pmi/include" - AS_IF([test -f "$with_pmi/include/pmi2.h"], - [AC_MSG_RESULT([PMI2 header found])], - [AC_MSG_RESULT([PMI header found])])], - [AS_IF([test -f "$with_pmi/include/slurm/pmi2.h" -o -f "$with_pmi/include/slurm/pmi.h"], - [opal_check_pmi_$1_CPPFLAGS="-I$with_pmi/include/slurm" - AS_IF([test -f "$with_pmi/include/slurm/pmi2.h"], - [AC_MSG_RESULT([Slurm PMI2 headers found])], - [AC_MSG_RESULT([Slurm PMI headers found])])], - [AC_MSG_RESULT([not found]) - AC_MSG_WARN([PMI support requested (via --with-pmi) but neither pmi.h]) - AC_MSG_WARN([nor pmi2.h were found under locations:]) - AC_MSG_WARN([ $with_pmi/include]) - AC_MSG_WARN([ $with_pmi/include/slurm]) - AC_MSG_WARN([Specified path: $with_pmi]) - AC_MSG_ERROR([Aborting]) - $3])])], - [AS_IF([test -f "/usr/include/slurm/pmi2.h" -o -f "/usr/include/slurm/pmi.h"], - [opal_check_pmi_$1_CPPFLAGS="-I/usr/include/slurm"]) - AC_MSG_RESULT([in default locations])]) + [opal_check_pmi_incdir=$with_pmi + opal_check_pmi_libdir=$with_pmi + opal_default_loc="no"], + [opal_check_pmi_incdir="/usr/include" + opal_check_pmi_libdir="/usr" + opal_default_loc="yes"]) + # check for pmi-1 lib */ + AS_IF([test -f "$opal_check_pmi_libdir/lib64/libpmi.so"], + [opal_have_pmi1=1 + AS_IF([test "$opal_default_loc" == "no"], + [opal_check_pmi_$1_LDFLAGS="-L$opal_check_pmi_libdir/lib64" + opal_pmi_rpath="$opal_check_pmi_libdir/lib64" + opal_pmi_added_ldflag=yes]) + opal_check_pmi_$1_LIBS="-lpmi"], + [AS_IF([test -f "$opal_check_pmi_libdir/lib/libpmi.so"], + [opal_have_pmi1=1 + AS_IF([test "$opal_default_loc" == "no"], + [opal_check_pmi_$1_LDFLAGS="-L$opal_check_pmi_libdir/lib" + opal_pmi_rpath="$opal_check_pmi_libdir/lib" + opal_pmi_added_ldflag=yes]) + opal_check_pmi_$1_LIBS="-lpmi"])]) + # check for pmi.h + AS_IF([test -f "$opal_check_pmi_incdir/include/pmi.h"], + [AS_IF([test "$opal_default_loc" == "no"], + [opal_check_pmi_$1_CPPFLAGS="-I$opal_check_pmi_incdir/include" + opal_pmi_added_cppflag=yes])], + # this could be SLURM, which puts things in a different location + [AS_IF([test -f "$opal_check_pmi_incdir/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_incdir/include/slurm" + opal_pmi_added_cppflag=yes])]) - # setup to check libraries - LDFLAGS="$LDFLAGS $opal_check_pmi_$1_LDFLAGS" - CPPFLAGS="$CPPFLAGS $opal_check_pmi_$1_CPPFLAGS" - # reset the included libs so we only link in the - # ones we successfully check - opal_check_pmi_$1_LIBS= - # check the PMI libs - both -lpmi and -lpmi2 may - # be present. If both are present, then we need - # to link against both - LIBS="$opal_check_pmi_$1_save_LIBS -lpmi2" - AC_CHECK_LIB([pmi2], [PMI2_Init], - [opal_have_pmi_support=yes - opal_have_pmi2=1 - opal_check_pmi_$1_LIBS="$opal_check_pmi_$1_LIBS -lpmi2"]) - # if the pmi2 functions aren't in -lpmi2, they might - # be in -lpmi. Nobody follows a convention here, so - # all we can do is check both - AS_IF([test "$opal_have_pmi2" = "0"], - [LIBS="$opal_check_pmi_$1_save_LIBS -lpmi" - AC_CHECK_LIB([pmi], [PMI2_Init], - [opal_have_pmi_support=yes - opal_have_pmi2=1 - opal_have_pmi1=1 - opal_check_pmi_$1_LIBS="$opal_check_pmi_$1_LIBS -lpmi"])]) - # if we haven't already added -lpmi, look for the pmi1 functions - AS_IF([test "$opal_have_pmi1" = "0"], - [LIBS="$opal_check_pmi_$1_save_LIBS -lpmi" - AC_CHECK_LIB([pmi], [PMI_Init], - [opal_have_pmi_support=yes - opal_check_pmi_$1_LIBS="$opal_check_pmi_$1_LIBS -lpmi"])]) + # check for pmi2 lib */ + AS_IF([test -f "$opal_check_pmi_libdir/lib64/libpmi2.so"], + [opal_have_pmi2=1 + AS_IF([test "$opal_pmi_added_ldflag" != "yes" && "$opal_default_loc" == "no"], + [opal_check_pmi_$1_LDFLAGS="$-L$opal_check_pmi_libdir/lib64" + opal_pmi_rpath="$opal_check_pmi_libdir/lib64"]) + opal_check_pmi_$1_LIBS="$opal_check_pmi_$1_LIBS -lpmi2"], + [AS_IF([test -f "$opal_check_pmi_libdir/lib/libpmi2.so"], + [opal_have_pmi2=1 + AS_IF([test "$opal_pmi_added_ldflag" != "yes" && "$opal_default_loc" == "no"], + [opal_check_pmi_$1_LDFLAGS="$-L$opal_check_pmi_libdir/lib" + opal_pmi_rpath="$opal_check_pmi_libdir/lib"]) + opal_check_pmi_$1_LIBS="$opal_check_pmi_$1_LIBS -lpmi2"])]) + # check for pmi2.h + AS_IF([test -f "$opal_check_pmi_incdir/include/pmi2.h"], + [AS_IF([test "$opal_pmi_added_cppflag" != "yes" && "$opal_default_loc" == "no"], + [opal_check_pmi_$1_CPPFLAGS="-I$opal_check_pmi_incdir/include"])], + # this could be SLURM, which puts things in a different location + [AS_IF([test -f "$opal_check_pmi_incdir/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_incdir/include/slurm"])]) - AC_MSG_CHECKING([PMI2 and/or PMI support enabled]) - AS_IF([test "$opal_have_pmi_support" = "yes"], + # 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 && $opal_have_pmi2 != 1], + [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_libdir/lib]) + AC_MSG_WARN([ $opal_check_pmi_libdir/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" @@ -140,12 +150,7 @@ AC_DEFUN([OPAL_CHECK_PMI],[ $1_LIBS="$opal_check_pmi_$1_LIBS -Wl,-rpath=$opal_pmi_rpath" AC_MSG_CHECKING([final added libraries]) AC_MSG_RESULT([$opal_check_pmi_$1_LIBS]) - - $2], - [AC_MSG_RESULT([no]) - AC_MSG_WARN([PMI support requested (via --with-pmi) but not found.]) - AC_MSG_ERROR([Aborting.]) - $3]) + $2]) ]) # restore flags