# ===========================================================================
#       Derived from http://www.gnu.org/software/autoconf-archive/ax_lib_xerces.html
# ===========================================================================
#
# SYNOPSIS
#
#   AX_LIB_ICUC([MINIMUM-VERSION])
#
# DESCRIPTION
#
#   This macro provides tests of availability of ICU
#   particular version or newer. This macros checks for ICU
#   Parser headers and libraries and defines compilation flags
#
#   Macro supports following options and their values:
#
#     --with-activemq - path to ACTIVEMQ installation prefix 
#
#
#   This macro calls:
#
#     AC_SUBST(ACTIVEMQ_CXXFLAGS)
#     AC_SUBST(ACTIVEMQ_LDFLAGS)
#     AC_SUBST(ACTIVEMQ_VERSION) - only if version requirement is used
#
#   And sets:
#
#     icu_found
#

AC_DEFUN([AMQ_FIND_AMQ],
[
  amq_found="no"

  AC_MSG_CHECKING(for ActiveMQ 3.2 or later)
  AC_ARG_WITH(activemq,
     [ --with-activemq=PATH prefix for install ACTIVEMQ or leave out to use standard path ],
   [
      if test -d "$withval"; then
        activemq_prefix="$withval"
	activemq_install="$withval"
	AC_SUBST(activemq_install) 
      else
        AC_MSG_ERROR([Invalid ACTIVEMQ path $withval])
      fi
   ],
   [
      dnl Default behavior is implicit yes
      if test -x /usr/local/bin/activemqcpp-config ; then
        activemq_prefix=/usr/local
      elif test -x /usr/bin/activemqcpp-config ; then
        activemq_prefix=/usr
      else
        AC_MSG_ERROR([ACTIVEMQ not found. Please use --with-activemq= to the path])
      fi
   ])

  if test -x "$activemq_prefix/bin/activemqcpp-config"; then
    ACTIVEMQ_VERSION=`$activemq_prefix/bin/activemqcpp-config --version`
    VERSION_CHECK=`expr $ACTIVEMQ_VERSION \>\= $1`
    if test "$VERSION_CHECK" = "1"; then
      amq_found="yes"
      ACTIVEMQ_VER=`echo $activemq_prefix/include/activemq-cpp-* | sed -e 's/.*activemq-cpp-//'`
      ACTIVEMQ_CXXFLAGS="-I$activemq_prefix/include/activemq-cpp-$ACTIVEMQ_VER"
#     ACTIVEMQ_CXXFLAGS=`$activemq_prefix/bin/activemqcpp-config --exec-prefix=$activemq_prefix --include`
      ACTIVEMQ_LDFLAGS=`$activemq_prefix/bin/activemqcpp-config --exec-prefix=$activemq_prefix --libs`
      AC_SUBST(ACTIVEMQ_VERSION) 
      AC_SUBST(ACTIVEMQ_CXXFLAGS)   
      AC_SUBST(ACTIVEMQ_LDFLAGS)
    else 
      AC_MSG_ERROR([Invalid activemq version $ACTIVEMQ_VERSION found. activemq version $1 or higher is required]) 
    fi  
  else
    AC_MSG_ERROR([activemqcpp-config script not found in $activemq_prefix/bin])
  fi
 
  AC_MSG_RESULT($amq_found)

])
