AC_PREREQ([2.59])
AC_INIT(sql_mysql.c)
AC_REVISION($Revision$)
AC_DEFUN(modname,[rlm_sql_mysql])
AC_CONFIG_HEADER(config.h)

fail=
SMART_LIBS=
SMART_CLFAGS=
if test x$with_[]modname != xno; then

    dnl ############################################################
    dnl # Check for command line options
    dnl ############################################################

    dnl extra argument: --with-mysql-include-dir=DIR
    mysql_include_dir=
    AC_ARG_WITH(mysql-include-dir,
	[AS_HELP_STRING([--with-mysql-include-dir=DIR],
		[Directory where the mysql includes may be found])],
	[case "$withval" in
	    no)
		AC_MSG_ERROR(Need mysql-include-dir)
		;;
	    yes)
		;;
	    *)
		mysql_include_dir="$withval"
		;;
	esac])

    dnl extra argument: --with-mysql-lib-dir=DIR
    mysql_lib_dir=
    AC_ARG_WITH(mysql-lib-dir,
	[AS_HELP_STRING([--with-mysql-lib-dir=DIR],
		[Directory where the mysql libraries may be found])],
	[case "$withval" in
	    no)
		AC_MSG_ERROR(Need mysql-lib-dir)
		;;
	    yes)
		;;
	    *)
		mysql_lib_dir="$withval"
		;;
	esac])

    dnl extra argument: --with-mysql-dir=DIR
    AC_ARG_WITH(mysql-dir,
	[AS_HELP_STRING([--with-mysql-dir=DIR],
		[Base directory where mysql is installed])],
	[case "$withval" in
	    no)
		AC_MSG_ERROR(Need mysql-dir)
		;;
	    yes)
		;;
	    *)
		mysql_lib_dir="$withval/lib"
		mysql_include_dir="$withval/include"
		;;
	esac])

    dnl extra argument: --with-threads
    mysql_with_threads=yes
    AC_ARG_WITH(threads,
	[AS_HELP_STRING([--with-threads],
		[use threads, if available. (default=yes)])],
	[case "$withval" in
	    no)
		mysql_with_threads=no
		;;
	    *)
		;;
	esac])

    dnl ############################################################
    dnl # Check for programs
    dnl ############################################################

    AC_PROG_CC
    AC_CHECK_PROG(MYSQL_CONFIG, mysql_config, yes, no)

    dnl ############################################################
    dnl # Check for libraries
    dnl ############################################################

    dnl pthread stuff is usually in -lpthread
    dnl or in -lc_r, on *BSD
    if test "x$mysql_with_threads" = "xyes"; then
	AC_CHECK_LIB(pthread, pthread_create,
		     [ LIBS="-lpthread $LIBS" ],
		     AC_CHECK_LIB(c_r, pthread_create,
				  [ LIBS="-lc_r $LIBS" ],
				  [ mysql_with_threads=no ]
				  )
		     )
    fi

    if test "x$mysql_with_threads" = "xyes"; then
	dnl try to link to libmysqlclient_r
	if test "x$MYSQL_CONFIG" = "xyes"; then
	    mysql_libs="$(mysql_config --libs_r)"
	    old_LIBS="$LIBS"
	    LIBS="$mysql_libs $LIBS"
	    AC_MSG_CHECKING([for mysql_init in -lmysqlclient_r (using mysql_config)])
	    AC_TRY_LINK_FUNC(mysql_init, have_libmysqlclient_r=yes)
	    LIBS="$old_LIBS"
	    if test "x$have_libmysqlclient_r" = "xyes"; then
		AC_MSG_RESULT(yes)
		SMART_LIBS="$mysql_libs $SMART_LIBS"
	    else
		AC_MSG_RESULT(no)
	    fi
	fi
	if test "x$have_libmysqlclient_r" != "xyes"; then
	    dnl mysql_config didn't work :(
	    smart_try_dir="$mysql_lib_dir /usr/lib /usr/lib/mysql \
		/usr/local/lib/mysql /usr/local/mysql/lib/mysql"
	    FR_SMART_CHECK_LIB(mysqlclient_r, mysql_init)
	    if test "x$ac_cv_lib_mysqlclient_r_mysql_init" != "xyes"
		then
		dnl nothing worked :(
		AC_MSG_WARN([MySQL libraries not found. Use --with-mysql-lib-dir=<path>.])
		fail="$fail libmysqlclient_r"
	    fi
	fi
    else
	dnl try to link to libmysqlclient (without threads support)
	if test "x$MYSQL_CONFIG" = "xyes"; then
	    mysql_libs="$(mysql_config --libs)"
	    old_LIBS="$LIBS"
	    LIBS="$mysql_libs $LIBS"
	    AC_MSG_CHECKING([for mysql_init in -lmysqlclient (using mysql_config)])
	    AC_TRY_LINK_FUNC(mysql_init, have_libmysqlclient=yes)
	    LIBS="$old_LIBS"
	    if test "x$have_libmysqlclient" = "xyes"; then
		AC_MSG_RESULT(yes)
		SMART_LIBS="$mysql_libs $SMART_LIBS"
	    else
		AC_MSG_RESULT(no)
	    fi
	fi
	if test "x$have_libmysqlclient" != "xyes"; then
	    dnl mysql_config didn't work :(
	    smart_try_dir="$mysql_lib_dir /usr/lib /usr/lib/mysql \
		/usr/local/lib/mysql /usr/local/mysql/lib/mysql"
	    FR_SMART_CHECK_LIB(mysqlclient, mysql_init)
	    if test "x$ac_cv_lib_mysqlclient_mysql_init" != "xyes"
		then
		dnl nothing worked :(
		AC_MSG_WARN([MySQL libraries not found. Use --with-mysql-lib-dir=<path>.])
		fail="$fail libmysqlclient"
	    fi
	fi
    fi

    dnl ############################################################
    dnl # Check for header files
    dnl ############################################################

    if test "x$MYSQL_CONFIG" = "xyes"; then
	mysql_cflags="$(mysql_config --cflags)"
	old_CFLAGS="$CFLAGS"
	CFLAGS="$CFLAGS $mysql_cflags"
	AC_MSG_CHECKING([for mysql.h (using mysql_config --cflags)])
	AC_TRY_COMPILE([#include <mysql.h>], [int a = 1;],
		       have_mysql_h=yes)
	if test "x$have_mysql_h" = "xyes"; then
	    AC_MSG_RESULT(yes)
	    AC_DEFINE(HAVE_MYSQL_H, [], [Define if you have <mysql.h>])
	    SMART_CFLAGS="$SMART_CFLAGS $mysql_cflags"
	else
	    AC_MSG_RESULT(no)

	    mysql_cflags="$(mysql_config --include)"
	    CFLAGS="$old_CFLAGS $mysql_cflags"
	    AC_MSG_CHECKING([for mysql.h (using mysql_config --include)])
	    AC_TRY_COMPILE([#include <mysql.h>], [int a = 1;],
		           have_mysql_h=yes)
	    if test "x$have_mysql_h" = "xyes"; then
	        AC_MSG_RESULT(yes)
	        AC_DEFINE(HAVE_MYSQL_H, [], [Define if you have <mysql.h>])
	        SMART_CFLAGS="$SMART_CFLAGS $mysql_cflags"
	    else
	        AC_MSG_RESULT(no)
	    fi
        fi

	CFLAGS="$old_CFLAGS"
    fi
    if test "x$have_mysql_h" != "xyes"; then
	dnl mysql_config didn't work :(
	smart_try_dir="$mysql_include_dir /usr/local/include \
		/usr/local/mysql/include"
	FR_SMART_CHECK_INCLUDE(mysql/mysql.h)
	if test "x$ac_cv_header_mysql_mysql_h" = "xyes"; then
	    AC_DEFINE(HAVE_MYSQL_MYSQL_H, [],
		      [Define if you have <mysql/mysql.h>])
	else
	    dnl nothing worked :(
	    AC_MSG_WARN([MySQL headers not found. Use --with-mysql-include-dir=<path>.])
	    fail="$fail mysql.h"
	fi
    fi

    targetname=modname
else
    targetname=
    echo \*\*\* module modname is disabled.
fi

dnl Don't change this section.
if test "x$fail" != x; then
	if test "x${enable_strict_dependencies}" = xyes; then
		AC_MSG_ERROR([set --without-]modname[ to disable it explicitly.])
	else
		AC_MSG_WARN([silently not building ]modname[.])
		AC_MSG_WARN([FAILURE: ]modname[ requires:$fail.]);
		targetname=
	fi
fi

sql_mysql_ldflags="$SMART_LIBS"
sql_mysql_cflags="$SMART_CFLAGS"
AC_SUBST(sql_mysql_ldflags)
AC_SUBST(sql_mysql_cflags)
AC_SUBST(targetname)
AC_OUTPUT(Makefile)
