--- /dev/null
+--- generic/mysqltcl.c.orig 2008-04-02 16:46:38.000000000 +0200
++++ generic/mysqltcl.c 2008-04-02 16:52:11.000000000 +0200
+@@ -42,11 +42,6 @@
+ #include <tcl.h>
+ #include <mysql.h>
+
+-#if (MYSQL_VERSION_ID<40100)
+- #error You need Mysql version 4.1 or higher to compile mysqltcl
+-#endif
+-
+-
+ #include <errno.h>
+ #include <string.h>
+ #include <ctype.h>
+@@ -97,6 +92,8 @@
+ #define MYSQL_STATUS_MSG "message"
+ #define MYSQL_STATUS_NULLV "nullvalue"
+
++#define FUNCTION_NOT_AVAILABLE "function not available"
++
+ /* C variable corresponding to mysqlstatus(nullvalue) */
+ #define MYSQL_NULLV_INIT ""
+
+@@ -714,7 +711,10 @@
+ static CONST char* MysqlConnectOpt[] =
+ {
+ "-host", "-user", "-password", "-db", "-port", "-socket","-encoding",
+- "-ssl", "-compress", "-noschema","-odbc","-multistatement","-multiresult",
++ "-ssl", "-compress", "-noschema","-odbc",
++#if (MYSQL_VERSION_ID >= 40107)
++ "-multistatement","-multiresult",
++#endif
+ "-localfiles","-ignorespace","-foundrows","-interactive","-sslkey","-sslcert",
+ "-sslca","-sslcapath","-sslciphers",NULL
+ };
+@@ -731,7 +731,9 @@
+ char *socket = NULL;
+ char *encodingname = NULL;
+
++#if (MYSQL_VERSION_ID >= 40107)
+ int isSSL = 0;
++#endif
+ char *sslkey = NULL;
+ char *sslcert = NULL;
+ char *sslca = NULL;
+@@ -746,7 +748,10 @@
+ MYSQL_CONNHOST_OPT, MYSQL_CONNUSER_OPT, MYSQL_CONNPASSWORD_OPT,
+ MYSQL_CONNDB_OPT, MYSQL_CONNPORT_OPT, MYSQL_CONNSOCKET_OPT, MYSQL_CONNENCODING_OPT,
+ MYSQL_CONNSSL_OPT, MYSQL_CONNCOMPRESS_OPT, MYSQL_CONNNOSCHEMA_OPT, MYSQL_CONNODBC_OPT,
+- MYSQL_MULTISTATEMENT_OPT,MYSQL_MULTIRESULT_OPT,MYSQL_LOCALFILES_OPT,MYSQL_IGNORESPACE_OPT,
++#if (MYSQL_VERSION_ID >= 40107)
++ MYSQL_MULTISTATEMENT_OPT,MYSQL_MULTIRESULT_OPT,
++#endif
++ MYSQL_LOCALFILES_OPT,MYSQL_IGNORESPACE_OPT,
+ MYSQL_FOUNDROWS_OPT,MYSQL_INTERACTIVE_OPT,MYSQL_SSLKEY_OPT,MYSQL_SSLCERT_OPT,
+ MYSQL_SSLCA_OPT,MYSQL_SSLCAPATH_OPT,MYSQL_SSLCIPHERS_OPT
+ };
+@@ -787,8 +792,15 @@
+ encodingname = Tcl_GetStringFromObj(objv[++i],NULL);
+ break;
+ case MYSQL_CONNSSL_OPT:
++#if (MYSQL_VERSION_ID >= 40107)
+ if (Tcl_GetBooleanFromObj(interp,objv[++i],&isSSL) != TCL_OK )
+ return TCL_ERROR;
++#else
++ if (Tcl_GetBooleanFromObj(interp,objv[++i],&booleanflag) != TCL_OK )
++ return TCL_ERROR;
++ if (booleanflag)
++ flags |= CLIENT_SSL;
++#endif
+ break;
+ case MYSQL_CONNCOMPRESS_OPT:
+ if (Tcl_GetBooleanFromObj(interp,objv[++i],&booleanflag) != TCL_OK )
+@@ -808,6 +820,7 @@
+ if (booleanflag)
+ flags |= CLIENT_ODBC;
+ break;
++#if (MYSQL_VERSION_ID >= 40107)
+ case MYSQL_MULTISTATEMENT_OPT:
+ if (Tcl_GetBooleanFromObj(interp,objv[++i],&booleanflag) != TCL_OK )
+ return TCL_ERROR;
+@@ -822,7 +835,7 @@
+ if (booleanflag)
+ flags |= CLIENT_MULTI_RESULTS;
+ break;
+-
++#endif
+ case MYSQL_LOCALFILES_OPT:
+ if (Tcl_GetBooleanFromObj(interp,objv[++i],&booleanflag) != TCL_OK )
+ return TCL_ERROR;
+@@ -881,9 +894,11 @@
+ #if (MYSQL_VERSION_ID>=32350)
+ mysql_options(handle->connection,MYSQL_READ_DEFAULT_GROUP,groupname);
+ #endif
++#if (MYSQL_VERSION_ID >= 40107)
+ if (isSSL) {
+ mysql_ssl_set(handle->connection,sslkey,sslcert, sslca, sslcapath, sslcipher);
+ }
++#endif
+
+ if (!mysql_real_connect(handle->connection, hostname, user,
+ password, db, port, socket, flags)) {
+@@ -1514,7 +1529,11 @@
+ static CONST char* MysqlDbOpt[] =
+ {
+ "dbname", "dbname?", "tables", "host", "host?", "databases",
+- "info","serverversion","serverversionid","sqlstate","state",NULL
++ "info","serverversion",
++#if (MYSQL_VERSION_ID >= 40107)
++ "serverversionid","sqlstate",
++#endif
++ "state",NULL
+ };
+ enum dboption {
+ MYSQL_INFNAME_OPT, MYSQL_INFNAMEQ_OPT, MYSQL_INFTABLES_OPT,
+@@ -1548,8 +1567,10 @@
+ break;
+ case MYSQL_INFO:
+ case MYSQL_INF_SERVERVERSION:
++#if (MYSQL_VERSION_ID >= 40107)
+ case MYSQL_INFO_SERVERVERSION_ID:
+ case MYSQL_INFO_SQLSTATE:
++#endif
+ case MYSQL_INFO_STATE:
+ break;
+
+@@ -1606,12 +1627,14 @@
+ case MYSQL_INF_SERVERVERSION:
+ Tcl_SetObjResult(interp, Tcl_NewStringObj(mysql_get_server_info(handle->connection),-1));
+ break;
++#if (MYSQL_VERSION_ID >= 40107)
+ case MYSQL_INFO_SERVERVERSION_ID:
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(mysql_get_server_version(handle->connection)));
+ break;
+ case MYSQL_INFO_SQLSTATE:
+ Tcl_SetObjResult(interp, Tcl_NewStringObj(mysql_sqlstate(handle->connection),-1));
+ break;
++#endif
+ case MYSQL_INFO_STATE:
+ Tcl_SetObjResult(interp, Tcl_NewStringObj(mysql_stat(handle->connection),-1));
+ break;
+@@ -1638,7 +1661,11 @@
+ char **option;
+ static CONST char* MysqlInfoOpt[] =
+ {
+- "connectparameters", "clientversion","clientversionid", NULL
++ "connectparameters", "clientversion",
++#if (MYSQL_VERSION_ID >= 40107)
++ "clientversionid",
++#endif
++ NULL
+ };
+ enum baseoption {
+ MYSQL_BINFO_CONNECT, MYSQL_BINFO_CLIENTVERSION,MYSQL_BINFO_CLIENTVERSIONID
+@@ -1668,9 +1695,11 @@
+ case MYSQL_BINFO_CLIENTVERSION:
+ Tcl_SetObjResult(interp, Tcl_NewStringObj(mysql_get_client_info(),-1));
+ break;
++#if (MYSQL_VERSION_ID >= 40107)
+ case MYSQL_BINFO_CLIENTVERSIONID:
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(mysql_get_client_version()));
+ break;
++#endif
+ }
+ return TCL_OK ;
+ }
+@@ -1987,6 +2016,10 @@
+
+ static int Mysqltcl_AutoCommit(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+ {
++#if (MYSQL_VERSION_ID < 40107)
++ Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
++ return TCL_ERROR;
++#else
+ MysqlTclHandle *handle;
+ int isAutocommit = 0;
+
+@@ -1999,6 +2032,7 @@
+ mysql_server_confl(interp,objc,objv,handle->connection);
+ }
+ return TCL_OK;
++#endif
+ }
+ /*
+ *----------------------------------------------------------------------
+@@ -2010,6 +2044,10 @@
+
+ static int Mysqltcl_Commit(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+ {
++#if (MYSQL_VERSION_ID < 40107)
++ Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
++ return TCL_ERROR;
++#else
+ MysqlTclHandle *handle;
+
+ if ((handle = mysql_prologue(interp, objc, objv, 2, 2, CL_CONN,
+@@ -2019,6 +2057,7 @@
+ mysql_server_confl(interp,objc,objv,handle->connection);
+ }
+ return TCL_OK;
++#endif
+ }
+ /*
+ *----------------------------------------------------------------------
+@@ -2030,6 +2069,10 @@
+
+ static int Mysqltcl_Rollback(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+ {
++#if (MYSQL_VERSION_ID < 40107)
++ Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
++ return TCL_ERROR;
++#else
+ MysqlTclHandle *handle;
+
+ if ((handle = mysql_prologue(interp, objc, objv, 2, 2, CL_CONN,
+@@ -2039,6 +2082,7 @@
+ mysql_server_confl(interp,objc,objv,handle->connection);
+ }
+ return TCL_OK;
++#endif
+ }
+ /*
+ *----------------------------------------------------------------------
+@@ -2050,6 +2094,10 @@
+
+ static int Mysqltcl_MoreResult(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+ {
++#if (MYSQL_VERSION_ID < 40107)
++ Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
++ return TCL_ERROR;
++#else
+ MysqlTclHandle *handle;
+ int boolResult = 0;
+
+@@ -2059,6 +2107,7 @@
+ boolResult = mysql_more_results(handle->connection);
+ Tcl_SetObjResult(interp,Tcl_NewBooleanObj(boolResult));
+ return TCL_OK;
++#endif
+ }
+ /*
+
+@@ -2072,6 +2121,10 @@
+
+ static int Mysqltcl_NextResult(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+ {
++#if (MYSQL_VERSION_ID < 40107)
++ Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
++ return TCL_ERROR;
++#else
+ MysqlTclHandle *handle;
+ int result = 0;
+
+@@ -2098,6 +2151,7 @@
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(handle->res_count));
+ }
+ return TCL_OK;
++#endif
+ }
+ /*
+ *----------------------------------------------------------------------
+@@ -2109,6 +2163,10 @@
+
+ static int Mysqltcl_WarningCount(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+ {
++#if (MYSQL_VERSION_ID < 40107)
++ Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
++ return TCL_ERROR;
++#else
+ MysqlTclHandle *handle;
+ int count = 0;
+
+@@ -2118,6 +2176,7 @@
+ count = mysql_warning_count(handle->connection);
+ Tcl_SetObjResult(interp,Tcl_NewIntObj(count));
+ return TCL_OK;
++#endif
+ }
+ /*
+ *----------------------------------------------------------------------
+@@ -2176,13 +2235,19 @@
+ * usage: mysql::setserveroption (-
+ *
+ */
++#if (MYSQL_VERSION_ID >= 40107)
+ static CONST char* MysqlServerOpt[] =
+ {
+ "-multi_statment_on", "-multi_statment_off",NULL
+ };
++#endif
+
+ static int Mysqltcl_SetServerOption(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+ {
++#if (MYSQL_VERSION_ID < 40107)
++ Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
++ return TCL_ERROR;
++#else
+ MysqlTclHandle *handle;
+ int idx;
+ enum enum_mysql_set_option mysqlServerOption;
+@@ -2213,6 +2278,7 @@
+ mysql_server_confl(interp,objc,objv,handle->connection);
+ }
+ return TCL_OK;
++#endif
+ }
+ /*
+ *----------------------------------------------------------------------
+@@ -2228,7 +2294,11 @@
+ if ((handle = mysql_prologue(interp, objc, objv, 2, 2, CL_CONN,
+ "handle")) == 0)
+ return TCL_ERROR;
++#if (MYSQL_VERSION_ID >= 40107)
+ if (mysql_shutdown(handle->connection,SHUTDOWN_DEFAULT)!=0) {
++#else
++ if (mysql_shutdown(handle->connection)!=0) {
++#endif
+ mysql_server_confl(interp,objc,objv,handle->connection);
+ }
+ return TCL_OK;
\ No newline at end of file