From 5e0128fc306acc2a2626b645214460d5bf214b39 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 17 Jan 2012 16:41:33 +0200 Subject: Autotools and VC++ build support for SQL Server --- m4/database.m4 | 7 +- m4/libodb-mssql.m4 | 84 ++++++++++++++++++++ m4/mssql.m4 | 226 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 316 insertions(+), 1 deletion(-) create mode 100644 m4/libodb-mssql.m4 create mode 100644 m4/mssql.m4 (limited to 'm4') diff --git a/m4/database.m4 b/m4/database.m4 index a2d72eb..b1f65e2 100644 --- a/m4/database.m4 +++ b/m4/database.m4 @@ -13,7 +13,7 @@ AC_MSG_CHECKING([for database to use]) AC_ARG_WITH( [database], [AC_HELP_STRING([--with-database=DB], - [database to use for tests; valid values are: 'mysql', 'sqlite', 'pgsql', and 'oracle'])], + [database to use for tests; valid values are: 'mysql', 'sqlite', 'pgsql', 'oracle', and 'mssql'])], [case $withval in no | yes) AC_MSG_RESULT([]) @@ -35,6 +35,10 @@ AC_ARG_WITH( database=oracle AC_DEFINE([DATABASE_ORACLE], [1], [Using Oracle.]) ;; + mssql) + database=mssql + AC_DEFINE([DATABASE_MSSQL], [1], [Using SQL Server.]) + ;; *) AC_MSG_RESULT([]) AC_MSG_ERROR([unknown database $withval]) @@ -52,5 +56,6 @@ AM_CONDITIONAL([DATABASE_MYSQL], [test x$database = xmysql]) AM_CONDITIONAL([DATABASE_SQLITE], [test x$database = xsqlite]) AM_CONDITIONAL([DATABASE_PGSQL], [test x$database = xpgsql]) AM_CONDITIONAL([DATABASE_ORACLE], [test x$database = xoracle]) +AM_CONDITIONAL([DATABASE_MSSQL], [test x$database = xmssql]) ])dnl diff --git a/m4/libodb-mssql.m4 b/m4/libodb-mssql.m4 new file mode 100644 index 0000000..acddfd4 --- /dev/null +++ b/m4/libodb-mssql.m4 @@ -0,0 +1,84 @@ +dnl file : m4/libodb-mssql.m4 +dnl author : Boris Kolpackov +dnl copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +dnl license : GNU GPL v2; see accompanying LICENSE file +dnl +dnl LIBODB_MSSQL([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +dnl +dnl +AC_DEFUN([LIBODB_MSSQL], [ +libodb_mssql_found=no + +AC_ARG_WITH( + [libodb-mssql], + [AC_HELP_STRING([--with-libodb-mssql=DIR],[location of libodb-mssql build directory])], + [libodb_mssql_dir=${withval}], + [libodb_mssql_dir=]) + +AC_MSG_CHECKING([for libodb-mssql]) + +# If libodb_mssql_dir was given, add the necessary preprocessor and +# linker flags. +# +if test x"$libodb_mssql_dir" != x; then + save_CPPFLAGS="$CPPFLAGS" + save_LDFLAGS="$LDFLAGS" + + AS_SET_CATFILE([abs_libodb_mssql_dir], [$ac_pwd], [$libodb_mssql_dir]) + + CPPFLAGS="$CPPFLAGS -I$abs_libodb_mssql_dir" + LDFLAGS="$LDFLAGS -L$abs_libodb_mssql_dir/odb/mssql" +fi + +save_LIBS="$LIBS" +LIBS="-lodb-mssql $LIBS" + +CXX_LIBTOOL_LINK_IFELSE( +AC_LANG_SOURCE([[ +#include + +void +f () +{ +} + +const char* +g () +{ + try + { + f (); + } + catch (const odb::mssql::database_exception& e) + { + return e.what (); + } + return 0; +} + +int +main () +{ + const char* m (g ()); + return m != 0; +} +]]), +[libodb_mssql_found=yes]) + +if test x"$libodb_mssql_found" = xno; then + LIBS="$save_LIBS" + + if test x"$libodb_mssql_dir" != x; then + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + fi +fi + +if test x"$libodb_mssql_found" = xyes; then + AC_MSG_RESULT([yes]) + $1 +else + AC_MSG_RESULT([no]) + $2 +fi +])dnl diff --git a/m4/mssql.m4 b/m4/mssql.m4 new file mode 100644 index 0000000..c446f31 --- /dev/null +++ b/m4/mssql.m4 @@ -0,0 +1,226 @@ +dnl file : m4/mssql.m4 +dnl author : Boris Kolpackov +dnl copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +dnl license : GNU GPL v2; see accompanying LICENSE file +dnl +dnl MSSQL +dnl +AC_DEFUN([MSSQL], [ + +# Client. +# +AC_MSG_CHECKING([for mssql client program]) +AC_ARG_WITH( + [mssql-client], + [AC_HELP_STRING([--with-mssql-client=PATH], [SQL Server client program path (sqlcmd by default)])], + [case $withval in + yes) + mssql_client=sqlcmd + ;; + no) + AC_MSG_RESULT([]) + AC_MSG_ERROR([need mssql client to run the tests]) + ;; + *) + mssql_client=$withval + ;; + esac], + [mssql_client=sqlcmd]) + +$mssql_client -? 2>/dev/null 1>&2 + +if test x"$?" = x0; then + AC_MSG_RESULT([$mssql_client]) +else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([mssql client is not found; consider using --with-mssql-client=PATH]) +fi + +# User. If 'no' is specified, then use Windows authentication. +# +AC_MSG_CHECKING([for mssql database user]) +AC_ARG_WITH( + [mssql-user], + [AC_HELP_STRING([--with-mssql-user=NAME], [SQL Server database user (odb_test by default)])], + [case $withval in + yes) + mssql_user=odb_test + mssql_user_set=yes + ;; + no) + mssql_user_set=no + ;; + *) + mssql_user=$withval + mssql_user_set=yes + ;; + esac], + [mssql_user=odb_test + mssql_user_set=yes]) + +if test x$mssql_user_set = xyes; then + AC_MSG_RESULT(['$mssql_user']) +else + AC_MSG_RESULT([none]) +fi + +# Password. Can be left unspecified if using Windows authentication. +# +AC_MSG_CHECKING([for mssql database password]) +AC_ARG_WITH( + [mssql-password], + [AC_HELP_STRING([--with-mssql-password=PASS], [SQL Server database password (odb_test by default)])], + [case $withval in + yes) + mssql_password=odb_test + mssql_password_set=yes + ;; + no) + mssql_password_set=no + ;; + *) + mssql_password=$withval + mssql_password_set=yes + ;; + esac], + [mssql_password_set=no]) + +if test x$mssql_password_set = xyes; then + AC_MSG_RESULT(['$mssql_password']) +elif test x$mssql_user = xodb_test; then + mssql_password=odb_test + mssql_password_set=yes + AC_MSG_RESULT(['$mssql_password']) +else + AC_MSG_RESULT([none]) + if test x$mssql_user_set = xyes; then + AC_MSG_ERROR([password not specified; SQL Server requires a password (--with-mssql-password=PASS)]) + fi +fi + +# Database. If not specified, use the user's default. +# +AC_MSG_CHECKING([for mssql database name]) +AC_ARG_WITH( + [mssql-db], + [AC_HELP_STRING([--with-mssql-db=NAME], [SQL Server database name (odb_test by default). Note that all data in this database WILL BE LOST!])], + [case $withval in + yes) + mssql_db=odb_test + mssql_db_set=yes + ;; + no) + mssql_db_set=no + ;; + *) + mssql_db=$withval + mssql_db_set=yes + ;; + esac], + [mssql_db=odb_test + mssql_db_set=yes]) + +if test x$mssql_db_set = xyes; then + AC_MSG_RESULT(['$mssql_db']) +else + AC_MSG_RESULT([default]) +fi + +# Server. +# +AC_MSG_CHECKING([for mssql instance address]) +AC_ARG_WITH( + [mssql-server], + [AC_HELP_STRING([--with-mssql-server=ADDR], [SQL Server instance address])], + [case $withval in + yes | no) + mssql_server_set=no + ;; + *) + mssql_server=$withval + mssql_server_set=yes + ;; + esac], + [mssql_server_set=no]) + +if test x$mssql_server_set = xyes; then + AC_MSG_RESULT(['$mssql_server']) +else + AC_MSG_RESULT([none]) + AC_MSG_ERROR([instance address not specified; SQL Server instance address is required (--with-mssql-server=ADDR)]) +fi + +# Driver. +# +AC_MSG_CHECKING([for mssql native client odbc driver]) +AC_ARG_WITH( + [mssql-driver], + [AC_HELP_STRING([--with-mssql-driver=NAME], [SQL Server Native Client ODBC driver (latest available by default)])], + [case $withval in + yes | no) + mssql_driver_set=no + ;; + *) + mssql_driver=$withval + mssql_driver_set=yes + ;; + esac], + [mssql_driver_set=no]) + +if test x$mssql_driver_set = xyes; then + AC_MSG_RESULT(['$mssql_driver']) +else + AC_MSG_RESULT([latest]) +fi + +# Create options file. +# +AC_CONFIG_COMMANDS([mssql.options], + [ + rm -f db.options + echo '#! /bin/sh' >db-driver + + echo 'opt=' >>db-driver + + if test x$mssql_user_set = xyes; then + echo "--user '$mssql_user'" >>db.options + echo 'opt="$opt -U '"$mssql_user"'"' >>db-driver + + echo "--password '$mssql_password'" >>db.options + echo 'opt="$opt -P '"$mssql_password"'"' >>db-driver + fi + + if test x$mssql_db_set = xyes; then + echo "--database '$mssql_db'" >>db.options + echo 'opt="$opt -d '"$mssql_db"'"' >>db-driver + fi + + echo "--server '$mssql_server'" >>db.options + echo 'opt="$opt -S '"$mssql_server"'"' >>db-driver + + if test x$mssql_driver_set = xyes; then + echo "--driver '$mssql_driver'" >>db.options + fi + + echo 'opt="$opt -x -r -b"' >>db-driver + echo 'if test x$[]1 != x; then' >>db-driver + echo " exec $mssql_client "'$opt -i $[]1' >>db-driver + echo "else" >>db-driver + echo " exec $mssql_client "'$opt' >>db-driver + echo "fi" >>db-driver + + chmod +x db-driver + ], + [ + mssql_client="$mssql_client" + mssql_user="$mssql_user" + mssql_user_set="$mssql_user_set" + mssql_password="$mssql_password" + mssql_db="$mssql_db" + mssql_db_set="$mssql_db_set" + mssql_server="$mssql_server" + mssql_driver="$mssql_driver" + mssql_driver_set="$mssql_driver_set" + ]) + +])dnl -- cgit v1.1