aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-01-17 16:41:33 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-01-17 16:41:33 +0200
commit5e0128fc306acc2a2626b645214460d5bf214b39 (patch)
treecb3f0644955f788be025cfda74a2994e0ad1e5a0
parent31a0507dfe9cb5a87e2a860bac25a8405788489c (diff)
Autotools and VC++ build support for SQL Server
-rw-r--r--INSTALL3
-rw-r--r--configure.ac4
-rw-r--r--m4/database.m47
-rw-r--r--m4/libodb-mssql.m484
-rw-r--r--m4/mssql.m4226
-rw-r--r--makefile3
-rw-r--r--mssql-driver.bat63
-rw-r--r--mssql.options10
-rw-r--r--template/Makefile.am4
9 files changed, 401 insertions, 3 deletions
diff --git a/INSTALL b/INSTALL
index fb30ea1..3286e13 100644
--- a/INSTALL
+++ b/INSTALL
@@ -5,7 +5,8 @@ system you would like to use. Valid values for <database> are:
'sqlite' - The SQLite database system
'pgsql' - The PostgreSQL database system
'oracle' - The Oracle database system
-
+ 'mssql' - The Microsoft SQL Server database system
+
Prerequisites
=============
diff --git a/configure.ac b/configure.ac
index 9d8fd2e..20fa6e1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -89,6 +89,10 @@ case $database in
LIBODB_ORACLE([], [AC_MSG_ERROR([libodb-oracle is not found; consider using --with-libodb-oracle=DIR])])
ORACLE
;;
+ mssql)
+ LIBODB_MSSQL([], [AC_MSG_ERROR([libodb-mssql is not found; consider using --with-libodb-mssql=DIR])])
+ MSSQL
+ ;;
esac
# Output.
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 <boris@codesynthesis.com>
+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 <odb/mssql/exceptions.hxx>
+
+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 <boris@codesynthesis.com>
+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
diff --git a/makefile b/makefile
index c963990..b06a824 100644
--- a/makefile
+++ b/makefile
@@ -36,7 +36,8 @@ $(dist): export boost_dirs := $(boost_dirs)
$(dist): export qt_dirs := $(qt_dirs)
$(dist): data_dist := GPLv2 LICENSE README NEWS INSTALL version tester.bat \
mysql-driver.bat mysql.options sqlite-driver.bat sqlite.options \
-pgsql-driver.bat pgsql.options oracle-driver.bat oracle.options
+pgsql-driver.bat pgsql.options oracle-driver.bat oracle.options \
+mssql-driver.bat mssql.options
$(dist): exec_dist := bootstrap tester
$(dist): export extra_dist := $(data_dist) $(exec_dist) test.bat \
$(call vc9slns,$(name)) $(call vc10slns,$(name))
diff --git a/mssql-driver.bat b/mssql-driver.bat
new file mode 100644
index 0000000..55ed487
--- /dev/null
+++ b/mssql-driver.bat
@@ -0,0 +1,63 @@
+@echo off
+rem file : mssql-driver.bat
+rem author : Boris Kolpackov <boris@codesynthesis.com>
+rem copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+rem license : GNU GPL v2; see accompanying LICENSE file
+
+rem
+rem mssql-driver.bat sql-file
+rem
+rem Run the mssql client on the SQL file specified. Adjust the
+rem options below to match your SQL Server setup.
+rem
+
+setlocal
+
+set "options=%MSSQL_OPTIONS%"
+
+rem User.
+rem
+set "options=%options% -U odb_test"
+
+rem Password.
+rem
+set "options=%options% -P odb_test"
+
+rem Database name.
+rem
+set "options=%options% -d odb_test"
+
+rem SQL Server instance address.
+rem
+rem set "options=%options% -S host\instance"
+rem set "options=%options% -S tcp:host,port"
+
+rem Standard options.
+rem
+set "options=%options% -x -r -b"
+
+set "mssql=%MSSQL_CLIENT%"
+
+if "_%mssql%_" == "__" set "mssql=sqlcmd"
+
+if "_%1_" == "__" (
+ echo no sql file specified
+ goto usage
+)
+
+%mssql% %options% -i %1
+
+if errorlevel 1 goto error
+goto end
+
+:usage
+echo.
+echo usage: mssql-driver.bat sql-file
+echo.
+
+:error
+endlocal
+exit /b 1
+
+:end
+endlocal
diff --git a/mssql.options b/mssql.options
new file mode 100644
index 0000000..6e201e2
--- /dev/null
+++ b/mssql.options
@@ -0,0 +1,10 @@
+# Sample Microsoft SQL Server options file used to run the tests. Adjust to
+# match your SQL Server setup.
+#
+
+--user odb_test
+--password odb_test
+--database odb_test
+# --server host\instance
+# --server tcp:host,port
+# --driver
diff --git a/template/Makefile.am b/template/Makefile.am
index 154dedf..f96beca 100644
--- a/template/Makefile.am
+++ b/template/Makefile.am
@@ -25,6 +25,10 @@ if DATABASE_ORACLE
AM_CPPFLAGS += -DDATABASE_ORACLE
endif
+if DATABASE_MSSQL
+AM_CPPFLAGS += -DDATABASE_MSSQL
+endif
+
TESTS=$(top_builddir)/tester
TESTS_ENVIRONMENT=top_builddir=$(top_builddir); export top_builddir;