mysql: Add Windows support
authorMartin Willi <martin@revosec.ch>
Fri, 22 Nov 2013 08:08:09 +0000 (09:08 +0100)
committerMartin Willi <martin@revosec.ch>
Wed, 4 Jun 2014 13:53:04 +0000 (15:53 +0200)
As the mysql_config script is not available for Windows, we use a hardcoded
library name and no additional CFLAGS. This builds fine against the binary
MySQL Connector/C distribution.

configure.ac
src/libstrongswan/plugins/mysql/mysql_database.c
src/libstrongswan/plugins/mysql/mysql_database.h

index 4eda8ee..633e611 100644 (file)
@@ -895,12 +895,18 @@ if test x$fast = xtrue; then
 fi
 
 if test x$mysql = xtrue; then
-       AC_PATH_PROG([MYSQLCONFIG], [mysql_config], [], [$PATH:/bin:/usr/bin:/usr/local/bin])
-       if test x$MYSQLCONFIG = x; then
-               AC_MSG_ERROR([mysql_config not found!])
+       if test "x$windows" = xtrue; then
+               AC_CHECK_HEADER([mysql.h],,[AC_MSG_ERROR([MySQL header file mysql.h not found!])])
+               AC_CHECK_LIB([mysql],[main],[LIBS="$LIBS"],[AC_MSG_ERROR([MySQL library not found!])],[])
+               AC_SUBST(MYSQLLIB, -lmysql)
+       else
+               AC_PATH_PROG([MYSQLCONFIG], [mysql_config], [], [$PATH:/bin:/usr/bin:/usr/local/bin])
+               if test x$MYSQLCONFIG = x; then
+                       AC_MSG_ERROR([mysql_config not found!])
+               fi
+               AC_SUBST(MYSQLLIB, `$MYSQLCONFIG --libs_r`)
+               AC_SUBST(MYSQLCFLAG, `$MYSQLCONFIG --cflags`)
        fi
-       AC_SUBST(MYSQLLIB, `$MYSQLCONFIG --libs_r`)
-       AC_SUBST(MYSQLCFLAG, `$MYSQLCONFIG --cflags`)
 fi
 
 if test x$sqlite = xtrue; then
index 373e9dc..871cc59 100644 (file)
  * for more details.
  */
 
+#include "mysql_database.h"
+
 #define _GNU_SOURCE
 #include <string.h>
 #include <mysql.h>
 
-#include "mysql_database.h"
-
 #include <utils/debug.h>
 #include <utils/chunk.h>
 #include <threading/thread_value.h>
@@ -730,7 +730,7 @@ static bool finalize_transaction(private_mysql_database_t *this,
        return TRUE;
 }
 
-METHOD(database_t, commit, bool,
+METHOD(database_t, commit_, bool,
        private_mysql_database_t *this)
 {
        return finalize_transaction(this, FALSE);
@@ -768,7 +768,7 @@ static bool parse_uri(private_mysql_database_t *this, char *uri)
        /**
         * parse mysql://username:pass@host:port/database uri
         */
-       username = strdupa(uri + 8);
+       username = strdup(uri + 8);
        pos = strchr(username, ':');
        if (pos)
        {
@@ -800,10 +800,12 @@ static bool parse_uri(private_mysql_database_t *this, char *uri)
                                this->password = strdup(password);
                                this->database = strdup(database);
                                this->port = atoi(port);
+                               free(username);
                                return TRUE;
                        }
                }
        }
+       free(username);
        DBG1(DBG_LIB, "parsing MySQL database uri '%s' failed", uri);
        return FALSE;
 }
@@ -828,7 +830,7 @@ mysql_database_t *mysql_database_create(char *uri)
                                .query = _query,
                                .execute = _execute,
                                .transaction = _transaction,
-                               .commit = _commit,
+                               .commit = _commit_,
                                .rollback = _rollback,
                                .get_driver = _get_driver,
                                .destroy = _destroy,
index 98ddcad..bbf6a33 100644 (file)
@@ -21,6 +21,7 @@
 #ifndef MYSQL_DATABASE_H_
 #define MYSQL_DATABASE_H_
 
+#include <library.h>
 #include <database/database.h>
 
 typedef struct mysql_database_t mysql_database_t;