dnl run autogen.sh to generate the configure script.

AC_PREREQ(2.59)

AC_INIT(savanc-src, 1.0)
AC_CANONICAL_SYSTEM
AM_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE([tar-ustar])
AC_PREFIX_DEFAULT(/usr/local/savanc)

dnl Checks for programs.
AC_PROG_CC
AC_PROG_CXX
AC_PROG_CPP
AC_PROG_LIBTOOL
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET

dnl Checks for libraries.
AC_CHECK_LIB(dl, dlopen)

if test -d $srcdir/samples; then
    AC_CONFIG_SUBDIRS(samples)
fi

CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE"
if test "$GCC" = "yes"; then
    CFLAGS="$CFLAGS -ansi -Wall -Wno-implicit-function-declaration"
    #CFLAGS="$CFLAGS -ansi -Wall -Wno-implicit-function-declaration"
fi
LDFLAGS="-lpthread"

dnl Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdio.h stdlib.h string.h])

dnl Checks for typedefs, structures, and compiler characteristics.
dnl AC_C_CONST

dnl Checks for library functions.
dnl AC_FUNC_MALLOC
dnl AC_FUNC_REALLOC
#AC_CHECK_FUNCS([memmove])
abs_top_builddir=`pwd`
AC_SUBST(abs_top_builddir)

AC_MSG_CHECKING(path to use Axis2C . This is a compulsory to build Savan/C)
AC_ARG_WITH(axis2,
[  --with-axis2[=PATH]      use axis2c.],
[ case "$withval" in
  no)
    AC_MSG_RESULT(no)
    ;;
  *)
    AC_MSG_RESULT($withval)
    dnl Find axis2 include dir in the path
    if test -d $withval; then
        AXIS2INC="-I$withval"
    dnl else find the axis2inc include dir in $(AXIS2C_HOME)/include
    elif [ -d "$abs_top_builddir" ]; then
            AXIS2INC="-I$abs_top_builddir/../axis2c/include"
    else
        AC_MSG_ERROR(could not find axis2inc. stop)
    fi
    ;;
  esac ],
  AXIS2INC="-I$abs_top_builddir/../axis2c/include"
  AC_MSG_RESULT(no)
)

AC_MSG_CHECKING(whether to build sqlite based subscription manager)
AC_ARG_ENABLE(sqlite, [  --enable-sqlite
                          build Sqlite based subscription manager (default=yes)],
[ case "${enableval}" in
  no)
    AC_MSG_RESULT(no)
    ;;
  *)
    AC_MSG_RESULT(yes)
    SAVAN_STORAGE="sqlite"

    ;;
  esac ],
  AC_MSG_RESULT(yes)
  SAVAN_STORAGE="sqlite"
)


AC_MSG_CHECKING(whether to build service based subscription manager)
AC_ARG_ENABLE(service, [  --enable-service    
                          build service based subscription manager (default=no)],
[ case "${enableval}" in
  no)
    AC_MSG_RESULT(no)
    SAVAN_STORAGE=""
    SVC_DIR=""
    ;;
  *)
    AC_MSG_RESULT(yes)
    SAVAN_STORAGE="service"
    SVC_DIR="subs_mgr_svc"
    ;;
  esac ],
  AC_MSG_RESULT(no)
)

AC_MSG_CHECKING(To Use Registry based subscription manager. This is an optional module to build Savan C)
AC_ARG_WITH(registry,
[  --with-registry[=PATH]     Find the REGISTRY header files in 'PATH'.
    'PATH' should point to REGISTRY include files location.
    If you omit the '=PATH' part completely, the configure script will search
    '$(AXIS2C_HOME)/include/registry-0.1.0' for REGISTRY headers.],
[ case "$withval" in
  no)
    AC_MSG_RESULT(no)
    SAVAN_STORAGE=""
    ;;
  *)
    AC_MSG_RESULT(yes)
    SAVAN_STORAGE="registry"
    dnl Find registry include dir in the path
    if test -d $withval; then
        registryinc="-I$withval"
    dnl else find the registry include dir in $(AXIS2C_HOME)/include
    elif test -d '$(AXIS2C_HOME)/include'; then
        registryinc="-I$(AXIS2C_HOME)/include/registry-0.1.0"
    else
        AC_MSG_ERROR(could not find registry. stop)
    fi
    ;;
  esac ],
  AC_MSG_RESULT(no)
)

AC_MSG_CHECKING(To Use XPath based filter . This is an optional module to build Savan C)
AC_ARG_WITH(xpath,
[  --with-xpath[=PATH]     Find the libxml2 header files in 'PATH'.
    'PATH' should point to libxml2 include files location.
    If you omit the '=PATH' part completely, the configure script will assume
    libxml2 is installed in default paths.],
[ case "$withval" in
  no)
    AC_MSG_RESULT(no)
    SAVAN_FILTER=""
    SAVAN_FILTER_LIB=""
    ;;
  *)
    AC_MSG_RESULT(yes)
    SAVAN_FILTER="xpath"
    SAVAN_FILTER_LIB=xpath/libsavan_filter_mod.la
    dnl Find libxml2 include dir in the path
    if test -d $withval; then
        xpathinc="-I$withval"
    dnl else find the libxml2 include dir in /usr/local/include
    elif test -d '/usr/local/include'; then
        xpathinc="-I/usr/local/include"
    else
        AC_MSG_ERROR(could not find libxml2. stop)
    fi
    PKG_CHECK_MODULES(XSLT, libxslt)
    CFLAGS="$CFLAGS -DSAVAN_FILTERING $XSLT_CFLAGS"
    LDFLAGS="$LDFLAGS -lxslt"
    ;;
  esac ],
  AC_MSG_RESULT(no)
)

#Default for savan publisher
SAVAN_PUBLISHER="default"
SAVAN_PUBLISHER_LIB="default/libsavan_publisher_mod.la"

AC_MSG_CHECKING(To Use esb based publisher . This is an optional module to build Savan C)
AC_ARG_WITH(esbpub,
[  --with-esbpub[=PATH]     Find the esbc header files in 'PATH'.
    'PATH' should point to esbc include files location.
    If you omit the '=PATH' part completely, the configure script will assume
    esbc is installed in default paths.],
[ case "$withval" in
  no)
    AC_MSG_RESULT(no)
    SAVAN_PUBLISHER=""
    SAVAN_PUBLISHER_LIB=""
    ;;
  *)
    AC_MSG_RESULT(yes)
    SAVAN_PUBLISHER="esb"
    SAVAN_PUBLISHER_LIB=esb/libsavan_publisher_mod.la
    dnl Find esbc include dir in the path
    if test -d $withval; then
        esbpubinc="-I$withval"
    dnl else find the esbc include dir in /usr/local/include
    elif test -d '/usr/local/include'; then
        esbpubinc="-I/usr/local/include"
    else
        AC_MSG_ERROR(could not find esbc. stop)
    fi
    CFLAGS="$CFLAGS"
    LDFLAGS="$LDFLAGS"
    ;;
  esac ],
  AC_MSG_RESULT(no)
)

AC_MSG_CHECKING(To Use Xml Schema.)
AXIOMINC="-I$abs_top_builddir/../axis2c/axiom/include"
UTILINC="-I$abs_top_builddir/../axis2c/util/include"
NEETHIINC="-I$abs_top_builddir/../axis2c/neethi/include"
CFLAGS="$CFLAGS $LIBXML2_CFLAGS"

REGISTRYINC=$registryinc
XPATHINC=$xpathinc
ESBPUBINC=$esbpubinc

AC_SUBST(REGISTRYINC)
AC_SUBST(XPATHINC)
AC_SUBST(ESBPUBINC)
AC_SUBST(AXIS2INC)
AC_SUBST(AXIOMINC)
AC_SUBST(UTILINC)
AC_SUBST(NEETHIINC)
AC_SUBST(XMLSCHEMAINC)
AC_SUBST(SAVAN_STORAGE)
AC_SUBST(SAVAN_FILTER)
AC_SUBST(SAVAN_FILTER_LIB)
AC_SUBST(SAVAN_PUBLISHER)
AC_SUBST(SAVAN_PUBLISHER_LIB)
AC_SUBST(SVC_DIR)

export SAVAN_STORAGE
export SAVAN_FILTER
export SAVAN_FILTER_LIB
export SAVAN_PUBLISHER
export SAVAN_PUBLISHER_LIB
export SVC_DIR

AC_CONFIG_FILES([Makefile \
    src/Makefile \
    src/client/Makefile\
    src/core/Makefile\
    src/handlers/Makefile \
    src/msgreceivers/Makefile\
    src/subscribers/Makefile\
    src/subs_mgrs/Makefile\
    src/subs_mgrs/common/Makefile\
    src/subs_mgrs/sqlite/Makefile\
    src/subs_mgrs/registry/Makefile\
    src/subs_mgrs/registry/test/Makefile\
    src/subs_mgrs/service/Makefile\
    src/subs_mgrs/service/subs_mgr_svc/Makefile\
    src/filters/Makefile\
    src/filters/common/Makefile\
    src/filters/xpath/Makefile\
    src/publisher/Makefile\
    src/publisher/common/Makefile\
    src/publisher/esb/Makefile\
    src/publisher/default/Makefile\
    src/data/Makefile\
    src/util/Makefile
    ])
    
AC_OUTPUT
