dnl file      : m4/mysql.m4
dnl author    : Boris Kolpackov <boris@codesynthesis.com>
dnl copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
dnl license   : GNU GPL v2; see accompanying LICENSE file
dnl
dnl MYSQL
dnl
AC_DEFUN([MYSQL], [

# Client.
#
AC_MSG_CHECKING([for mysql client program])
AC_ARG_WITH(
  [mysql-client],
  [AC_HELP_STRING([--with-mysql-client=path], [MySQL client program path (mysql by default)])],
  [case $withval in
     yes)
       mysql_client=mysql
       ;;
     no)
       AC_MSG_RESULT([])
       AC_MSG_ERROR([need mysql client to run the tests])
       ;;
     *)
       mysql_client=$withval
       ;;
   esac],
  [mysql_client=mysql])

$mysql_client --version 2>/dev/null 1>&2

if test x"$?" = x0; then
  AC_MSG_RESULT([$mysql_client])
else
  AC_MSG_RESULT([no])
  AC_MSG_ERROR([mysql client is not found; consider using --with-mysql-client=PATH])
fi

# User.
#
AC_MSG_CHECKING([for mysql database user])
AC_ARG_WITH(
  [mysql-user],
  [AC_HELP_STRING([--with-mysql-user=login], [MySQL database user (odb_test by default)])],
  [case $withval in
     yes)
       mysql_user=odb_test
       mysql_user_set=yes
       ;;
     no)
       mysql_user_set=no
       ;;
     *)
       mysql_user=$withval
       mysql_user_set=yes
       ;;
   esac],
  [mysql_user=odb_test
   mysql_user_set=yes])

if test x$mysql_user_set = xyes; then
  AC_MSG_RESULT(['$mysql_user'])
else
  AC_MSG_RESULT([none])
fi

# Password.
#
AC_MSG_CHECKING([for mysql database password])
AC_ARG_WITH(
  [mysql-password],
  [AC_HELP_STRING([--with-mysql-password=login], [MySQL database password (no password by default)])],
  [case $withval in
     yes)
       mysql_password=
       mysql_password_set=yes
       ;;
     no)
       mysql_password_set=no
       ;;
     *)
       mysql_password=$withval
       mysql_password_set=yes
       ;;
   esac],
  [mysql_password_set=no])

if test x$mysql_password_set = xyes; then
  AC_MSG_RESULT(['$mysql_password'])
else
  AC_MSG_RESULT([none])
fi

# Database name.
#
AC_MSG_CHECKING([for mysql database name])
AC_ARG_WITH(
  [mysql-db],
  [AC_HELP_STRING([--with-mysql-db=name], [MySQL database name (odb_test by default). Note that all data in this database WILL BE LOST!])],
  [case $withval in
     yes)
       mysql_db=odb_test
       mysql_db_set=yes
       ;;
     no)
       mysql_db_set=no
       ;;
     *)
       mysql_db=$withval
       mysql_db_set=yes
       ;;
   esac],
  [mysql_db=odb_test
   mysql_db_set=yes])

if test x$mysql_db_set = xyes; then
  AC_MSG_RESULT(['$mysql_db'])
else
  AC_MSG_RESULT([none])
fi

# Host.
#
AC_MSG_CHECKING([for mysql database host])
AC_ARG_WITH(
  [mysql-host],
  [AC_HELP_STRING([--with-mysql-host=host], [MySQL database host (localhost by default)])],
  [case $withval in
     yes)
       mysql_host=localhost
       mysql_host_set=yes
       ;;
     no)
       mysql_host_set=no
       ;;
     *)
       mysql_host=$withval
       mysql_host_set=yes
       ;;
   esac],
  [mysql_host_set=no])

if test x$mysql_host_set = xyes; then
  AC_MSG_RESULT(['$mysql_host'])
else
  AC_MSG_RESULT([localhost])
fi

# Port.
#
AC_MSG_CHECKING([for mysql database port])
AC_ARG_WITH(
  [mysql-port],
  [AC_HELP_STRING([--with-mysql-port=port], [MySQL database port (standard MySQL port by default)])],
  [case $withval in
     yes)
       mysql_port=0
       mysql_port_set=yes
       ;;
     no)
       mysql_port_set=no
       ;;
     *)
       mysql_port=$withval
       mysql_port_set=yes
       ;;
   esac],
  [mysql_port_set=no])

if test x$mysql_port_set = xyes; then
  AC_MSG_RESULT(['$mysql_port'])
else
  AC_MSG_RESULT([default])
fi

# Socket.
#
AC_MSG_CHECKING([for mysql database socket])
AC_ARG_WITH(
  [mysql-socket],
  [AC_HELP_STRING([--with-mysql-socket=socket], [MySQL database socket (standard MySQL socket by default)])],
  [case $withval in
     yes)
       mysql_socket=
       mysql_socket_set=yes
       ;;
     no)
       mysql_socket_set=no
       ;;
     *)
       mysql_socket=$withval
       mysql_socket_set=yes
       ;;
   esac],
  [mysql_socket_set=no])

if test x$mysql_socket_set = xyes; then
  AC_MSG_RESULT(['$mysql_socket'])
else
  AC_MSG_RESULT([default])
fi

# Create options file.
#
AC_CONFIG_COMMANDS([mysql.options],
 [
   rm -f db.options
   echo '#! /bin/sh' >db-driver

   if test x$mysql_user_set = xyes; then
     echo "--user '$mysql_user'" >>db.options
     echo 'opt="$opt --user='"$mysql_user"'"' >>db-driver
   fi

   if test x$mysql_password_set = xyes; then
     echo "--password '$mysql_password'" >>db.options
     echo 'opt="$opt --password='"$mysql_password"'"' >>db-driver
   fi

   if test x$mysql_db_set = xyes; then
     echo "--database '$mysql_db'" >>db.options
     echo 'opt="$opt --database='"$mysql_db"'"' >>db-driver
   fi

   if test x$mysql_host_set = xyes; then
     echo "--host '$mysql_host'" >>db.options
     echo 'opt="$opt --host='"$mysql_host"'"' >>db-driver
   fi

   if test x$mysql_port_set = xyes; then
     echo "--port '$mysql_port'" >>db.options
     echo 'opt="$opt --port='"$mysql_port"'"' >>db-driver
   fi

   if test x$mysql_socket_set = xyes; then
     echo "--socket '$mysql_socket'" >>db.options
     echo 'opt="$opt --socket='"$mysql_socket"'"' >>db-driver
   fi

   echo 'if test x$[]1 != x; then' >>db-driver
   echo "  exec $mysql_client "'$opt <$[]1' >>db-driver
   echo "else" >>db-driver
   echo "  exec $mysql_client "'$opt' >>db-driver
   echo "fi" >>db-driver

   chmod +x db-driver
 ],
 [
  mysql_client="$mysql_client"

  mysql_user="$mysql_user"
  mysql_user_set="$mysql_user_set"

  mysql_password="$mysql_password"
  mysql_password_set="$mysql_password_set"

  mysql_db="$mysql_db"
  mysql_db_set="$mysql_db_set"

  mysql_host="$mysql_host"
  mysql_host_set="$mysql_host_set"

  mysql_port="$mysql_port"
  mysql_port_set="$mysql_port_set"

  mysql_socket="$mysql_socket"
  mysql_socket_set="$mysql_socket_set"
 ])

])dnl