##*****************************************************************************
#  AUTHOR:
#    Yiannis Georgiou<yiannis.georgiou@bull.net>
#
#  SYNOPSIS:
#    X_AC_OFED
#
#  DESCRIPTION:
#    Determine if the OFED related libraries exist
##*****************************************************************************

AC_DEFUN([X_AC_OFED], [

  _x_ac_ofed_dirs="/usr /usr/local"
  _x_ac_ofed_libs="lib64 lib"

  AC_ARG_WITH(
    [ofed],
    AS_HELP_STRING(--with-ofed=PATH,Specify path to ofed installation),
    [AS_IF([test "x$with_ofed" != xno && test "x$with_ofed" != xyes],
	   [_x_ac_ofed_dirs="$with_ofed"])])

  if [test "x$with_ofed" = xno]; then
     AC_MSG_NOTICE([support for ofed disabled])
  else
    AC_CACHE_CHECK(
      [for ofed installation],
      [x_ac_cv_ofed_dir],
      [
        for d in $_x_ac_ofed_dirs; do
          test -d "$d" || continue
          test -d "$d/include/infiniband" || continue
          test -f "$d/include/infiniband/mad.h" || continue
          for bit in $_x_ac_ofed_libs; do
            test -d "$d/$bit" || continue
            _x_ac_ofed_cppflags_save="$CPPFLAGS"
            CPPFLAGS="-I$d/include $CPPFLAGS"
            _x_ac_ofed_libs_save="$LIBS"
            LIBS="-L$d/$bit -libmad -libumad $LIBS"
            AC_LINK_IFELSE(
              [AC_LANG_CALL([], mad_rpc_open_port)],
              AS_VAR_SET(x_ac_cv_ofed_dir, $d), [])
            AC_LINK_IFELSE(
              [AC_LANG_CALL([], pma_query_via)],
              [have_pma_query_via=yes],
              [AC_MSG_RESULT(Using old libmad)])
            CPPFLAGS="$_x_ac_ofed_cppflags_save"
            LIBS="$_x_ac_ofed_libs_save"
            test -n "$x_ac_cv_ofed_dir" && break
          done
          test -n "$x_ac_cv_ofed_dir" && break
        done
    ])

    if test -z "$x_ac_cv_ofed_dir"; then
      if test -z "$with_ofed"; then
        AC_MSG_WARN([unable to locate ofed installation])
      else
        AC_MSG_ERROR([unable to locate ofed installation])
      fi
    else
      OFED_CPPFLAGS="-I$x_ac_cv_ofed_dir/include/infiniband"
      if test "$ac_with_rpath" = "yes"; then
        OFED_LDFLAGS="-Wl,-rpath -Wl,$x_ac_cv_ofed_dir/$bit -L$x_ac_cv_ofed_dir/$bit"
      else
        OFED_LDFLAGS="-L$x_ac_cv_ofed_dir/$bit"
      fi
      OFED_LIBS="-libmad -libumad"
      AC_DEFINE(HAVE_OFED, 1, [Define to 1 if ofed library found])
      if test ! -z "$have_pma_query_via" ; then
        AC_DEFINE(HAVE_OFED_PMA_QUERY_VIA, 1, [Define to 1 if using code with pma_query_via])
      fi
    fi
    AC_SUBST(OFED_LIBS)
    AC_SUBST(OFED_CPPFLAGS)
    AC_SUBST(OFED_LDFLAGS)
  fi

  AM_CONDITIONAL(BUILD_OFED, test -n "$x_ac_cv_ofed_dir")
])

