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