dnl These are the Cyrus MySQL macros.

dnl They are here so that they can be shared between Cyrus IMAPd
dnl and Cyrus SASL with relative ease.

dnl When we're done, there will be a MYSQL_LIBADD and a MYSQL_INCADD which
dnl should dnl be used when necessary.
dnl We should probably be smarter about our RPATH dnl handling.

dnl Call these with CYRUS_MYSQL_CHK.

dnl We will also set $mysqllib to "yes" if we are successful, "no" otherwise.

AC_DEFUN([CYRUS_MYSQL_CHK_LIB],
[
        MYSQL_SAVE_LDFLAGS=$LDFLAGS

        if test -d $with_mysql_lib; then
            CMU_ADD_LIBPATH_TO($with_mysql_lib, LDFLAGS)
            CMU_ADD_LIBPATH_TO($with_mysql_lib, MYSQL_LIBADD)
        else
            MYSQL_LIBADD=""
        fi

        saved_LIBS=$LIBS
        for libname in ${with_mysql} mysqlclient
          do
            LIBS="$saved_LIBS -l$libname"
            AC_TRY_LINK([#include <stdio.h>
#include <mysql.h>],
            [mysql_select_db(NULL, NULL);],
            MYSQL_LIBADD="$MYSQL_LIBADD -l$libname"; mysqllib="yes",
            mysqllib="no")
            if test "$mysqllib" = "yes"; then break; fi
          done
        LIBS=$saved_LIBS

        LDFLAGS=$MYSQL_SAVE_LDFLAGS
])

AC_DEFUN([CYRUS_MYSQL_OPTS],
[
AC_ARG_WITH(mysql-libdir,
        [AS_HELP_STRING([--with-mysql-libdir=DIR], [MySQL lib files are in DIR])],
        with_mysql_lib=$withval,
        [ test "${with_mysql_lib+set}" = set || with_mysql_lib=none])
AC_ARG_WITH(mysql-incdir,
        [AS_HELP_STRING([--with-mysql-incdir=DIR], [MySQL include files are in DIR])],
        with_mysql_inc=$withval,
        [ test "${with_mysql_inc+set}" = set || with_mysql_inc=none ])
])

AC_DEFUN([CYRUS_MYSQL_CHK],
[
        AC_REQUIRE([CYRUS_MYSQL_OPTS])

        cmu_save_CPPFLAGS=$CPPFLAGS

        if test -d $with_mysql_inc; then
            CPPFLAGS="$CPPFLAGS -I$with_mysql_inc"
            MYSQL_INCADD="-I$with_mysql_inc"
        else
            MYSQL_INCADD=""
        fi

        AC_CHECK_HEADER(mysql.h,
                        [CYRUS_MYSQL_CHK_LIB()],
                        mysqllib="no")

        CPPFLAGS=$cmu_save_CPPFLAGS
])



dnl These are the Cyrus PgSQL macros.

dnl They are here so that they can be shared between Cyrus IMAPd
dnl and Cyrus SASL with relative ease.

dnl When we're done, there will be a PGSQL_LIBADD and a PGSQL_INCADD which
dnl should dnl be used when necessary.
dnl We should probably be smarter about our RPATH dnl handling.

dnl Call these with CYRUS_PGSQL_CHK.

dnl We will also set $pgsqllib to "yes" if we are successful, "no" otherwise.

AC_DEFUN([CYRUS_PGSQL_CHK_LIB],
[
        PGSQL_SAVE_LDFLAGS=$LDFLAGS

        if test -d $with_pgsql_lib; then
            CMU_ADD_LIBPATH_TO($with_pgsql_lib, LDFLAGS)
            CMU_ADD_LIBPATH_TO($with_pgsql_lib, PGSQL_LIBADD)
        else
            PGSQL_LIBADD=""
        fi

        saved_LIBS=$LIBS
        for libname in ${with_pgsql} pq
          do
            LIBS="$saved_LIBS -l$libname"
            AC_TRY_LINK([#include <stdio.h>
#include <libpq-fe.h>],
            [PQconnectdb(NULL);],
            PGSQL_LIBADD="$PGSQL_LIBADD -l$libname"; pgsqllib="yes",
            pgsqllib="no")
            if test "$pgsqllib" = "yes"; then break; fi
          done
        LIBS=$saved_LIBS

        LDFLAGS=$PGSQL_SAVE_LDFLAGS
])

AC_DEFUN([CYRUS_PGSQL_OPTS],
[
AC_ARG_WITH(pgsql-libdir,
        [AS_HELP_STRING([--with-pgsql-libdir=DIR], [Pgsql lib files are in DIR])],
        with_pgsql_lib=$withval,
        [ test "${with_pgsql_lib+set}" = set || with_pgsql_lib=none])
AC_ARG_WITH(pgsql-incdir,
        [AS_HELP_STRING([--with-pgsql-incdir=DIR], [Pgsql include files are in DIR])],
        with_pgsql_inc=$withval,
        [ test "${with_pgsql_inc+set}" = set || with_pgsql_inc=none ])
])

AC_DEFUN([CYRUS_PGSQL_CHK],
[
        AC_REQUIRE([CYRUS_PGSQL_OPTS])

        cmu_save_CPPFLAGS=$CPPFLAGS

        if test -d $with_pgsql_inc; then
            CPPFLAGS="$CPPFLAGS -I$with_pgsql_inc"
            PGSQL_INCADD="-I$with_pgsql_inc"
        else
            PGSQL_INCADD=""
        fi

        AC_CHECK_HEADER(libpq-fe.h,
                        [CYRUS_PGSQL_CHK_LIB()],
                        pgsqllib="no")

        CPPFLAGS=$cmu_save_CPPFLAGS
])



dnl These are the Cyrus SQLite macros.

dnl They are here so that they can be shared between Cyrus IMAPd
dnl and Cyrus SASL with relative ease.

dnl When we're done, there will be a SQLITE_LIBADD and a SQLITE_INCADD which
dnl should dnl be used when necessary.
dnl We should probably be smarter about our RPATH dnl handling.

dnl Call these with CYRUS_SQLITE_CHK.

dnl We will also set $sqlitelib to "yes" if we are successful, "no" otherwise.

AC_DEFUN([CYRUS_SQLITE_CHK_LIB],
[
        SQLITE_SAVE_LDFLAGS=$LDFLAGS

        if test -d $with_sqlite_lib; then
            CMU_ADD_LIBPATH_TO($with_sqlite_lib, LDFLAGS)
            CMU_ADD_LIBPATH_TO($with_sqlite_lib, SQLITE_LIBADD)
        else
            SQLITE_LIBADD=""
        fi

        saved_LIBS=$LIBS
        for libname in ${with_sqlite} sqlite3
          do
            LIBS="$saved_LIBS -l$libname"
            AC_TRY_LINK([#include <stdio.h>
#include <sqlite3.h>],
            [sqlite3_open(NULL, NULL);],
            SQLITE_LIBADD="$SQLITE_LIBADD -l$libname"; sqlitelib="yes",
            sqlitelib="no")
            if test "$sqlitelib" = "yes"; then break; fi
          done
        LIBS=$saved_LIBS

        LDFLAGS=$SQLITE_SAVE_LDFLAGS
])

AC_DEFUN([CYRUS_SQLITE_OPTS],
[
AC_ARG_WITH(sqlite-libdir,
        [AS_HELP_STRING([--with-sqlite-libdir=DIR], [SQLite lib files are in DIR])],
        with_sqlite_lib=$withval,
        [ test "${with_sqlite_lib+set}" = set || with_sqlite_lib=none])
AC_ARG_WITH(sqlite-incdir,
        [AS_HELP_STRING([--with-sqlite-incdir=DIR], [SQLite include files are in DIR])],
        with_sqlite_inc=$withval,
        [ test "${with_sqlite_inc+set}" = set || with_sqlite_inc=none ])
])

AC_DEFUN([CYRUS_SQLITE_CHK],
[
        AC_REQUIRE([CYRUS_SQLITE_OPTS])

        cmu_save_CPPFLAGS=$CPPFLAGS

        if test -d $with_sqlite_inc; then
            CPPFLAGS="$CPPFLAGS -I$with_sqlite_inc"
            SQLITE_INCADD="-I$with_sqlite_inc"
        else
            SQLITE_INCADD=""
        fi

        AC_CHECK_HEADER(sqlite3.h,
                        [CYRUS_SQLITE_CHK_LIB()],
                        sqlitelib="no")

        CPPFLAGS=$cmu_save_CPPFLAGS
])
