diff --git a/CMakeLists.txt b/CMakeLists.txt index b8e45c18..051e2bbb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ IF(CMAKE_VERSION VERSION_GREATER "2.9.9") CMAKE_POLICY(SET CMP0045 OLD) ENDIF() -SET(MARIADB_CONNECTOR_C_COPYRIGHT "2013-2015 MariaDB Corporation Ab") +SET(MARIADB_CONNECTOR_C_COPYRIGHT "2013-2016 MariaDB Corporation Ab") ### Options ### IF(NOT WIN32) @@ -37,7 +37,6 @@ ELSE() OPTION(WITH_SIGNCODE "digitally sign files" OFF) OPTION(WITH_RTC "enables run time checks for debug builds" OFF) ENDIF() -OPTION(WITH_REMOTEIO "enables remote io support (requires libcurl)" OFF) OPTION(WITH_EXTERNAL_ZLIB "Enables use of external zlib" OFF) ############### @@ -53,6 +52,11 @@ IF(WITH_RTC) SET(RTC_OPTIONS "/RTC1 /RTCc") ENDIF() +INCLUDE(FindCURL) +IF(CURL_FOUND) + ADD_DEFINITIONS(-DHAVE_CURL=1) +ENDIF() + INCLUDE(${CMAKE_SOURCE_DIR}/cmake/plugins.cmake) IF(WIN32) @@ -101,9 +105,9 @@ ENDIF() # various defines for generating include/mysql_version.h SET(PROTOCOL_VERSION 10) # we adapted new password option from PHP's mysqlnd ! -SET(MYSQL_CLIENT_VERSION_MAJOR "5") -SET(MYSQL_CLIENT_VERSION_MINOR "5") -SET(MYSQL_CLIENT_VERSION_PATCH "2") +SET(MYSQL_CLIENT_VERSION_MAJOR "10") +SET(MYSQL_CLIENT_VERSION_MINOR "1") +SET(MYSQL_CLIENT_VERSION_PATCH "7") SET(MYSQL_CLIENT_VERSION "${MYSQL_CLIENT_VERSION_MAJOR}.${MYSQL_CLIENT_VERSION_MINOR}.${MYSQL_CLIENT_VERSION_PATCH}") MATH(EXPR MYSQL_VERSION_ID "${MYSQL_CLIENT_VERSION_MAJOR} * 10000 + ${MYSQL_CLIENT_VERSION_MINOR} * 100 + @@ -133,17 +137,15 @@ ENDIF() IF(UNIX) - SEARCH_LIBRARY(LIBNSL inet_ntoa "nsl_r;nsl") - SEARCH_LIBRARY(LIBBIND bind "bind;socket") - SEARCH_LIBRARY(LIBSOCKET setsockopt "socket") SEARCH_LIBRARY(LIBDL dlopen "dl") SEARCH_LIBRARY(LIBM floor m) - # SEARCH_LIBRARY(LIBICONV iconv iconv) SEARCH_LIBRARY(LIBPTHREAD pthread_getspecific "pthread;pthreads") - SET(EXTRA_LIBS "${LIBNSL}" "${LIBBIND}" "${LIBSOCKET}") FIND_PACKAGE(Threads) SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LIBNSL} ${LIBBIND} ${LIBICONV} ${LIBSOCKET} ${LIBDL} ${LIBM} ${LIBPTHREAD}) + SET(SYSTEM_LIBS ${LIBNSL} ${LIBBIND} ${LIBICONV} + ${LIBSOCKET} ${LIBDL} ${LIBM} ${LIBPTHREAD}) + MESSAGE(STATUS "SYSTEM_LIBS ${SYSTEM_LIBS}") #remove possible dups from required libraries LIST(LENGTH CMAKE_REQUIRED_LIBRARIES rllength) IF(${rllength} GREATER 0) @@ -178,7 +180,7 @@ INCLUDE(${CMAKE_SOURCE_DIR}/cmake/CheckFunctions.cmake) # check for various types INCLUDE(${CMAKE_SOURCE_DIR}/cmake/CheckTypes.cmake) -IF(NOT WITH_SSL) +IF(NOT WITH_SSL AND NOT WITH_SSL STREQUAL "OFF") IF(WIN32) SET(WITH_SSL "SCHANNEL") ELSE() @@ -245,7 +247,15 @@ ENDIF() IF(WITH_SSL) SET(SYSTEM_LIBS ${SYSTEM_LIBS} ${SSL_LIBRARIES}) ENDIF() +MARK_AS_ADVANCED(SYSTEM_LIBS) +IF(NOT REMOTEIO_PLUGIN_TYPE MATCHES "OFF") + INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS}) + IF(REMOTEIO_PLUGIN_TYPE MATCHES "STATIC") + SET(SYSTEM_LIBS ${SYSTEM_LIBS} ${CURL_LIBRARIES}) + ENDIF() + ADD_DEFINITIONS("-DHAVE_REMOTEIO=1") +ENDIF() ADD_SUBDIRECTORY(include) ADD_SUBDIRECTORY(libmariadb) ADD_SUBDIRECTORY(plugins) diff --git a/cmake/FindIconv.cmake b/cmake/FindIconv.cmake index f0768f71..e99a3b2f 100644 --- a/cmake/FindIconv.cmake +++ b/cmake/FindIconv.cmake @@ -15,7 +15,7 @@ ELSE() ENDIF() IF(APPLE) - find_library(ICONV_LIBRARIES NAMES iconv libiconv c PATHS + find_library(ICONV_LIBRARIES NAMES iconv libiconv PATHS /opt/local/lib/ /usr/lib/ NO_CMAKE_SYSTEM_PATH) diff --git a/cmake/plugins.cmake b/cmake/plugins.cmake index a68bd509..2ccac127 100644 --- a/cmake/plugins.cmake +++ b/cmake/plugins.cmake @@ -2,7 +2,7 @@ MACRO(REGISTER_PLUGIN name source struct type target allow) SET(PLUGIN_TYPE ${${name}}) - IF(NOT PLUGIN_TYPE STREQUAL "OFF") + IF(NOT PLUGIN_TYPE STREQUAL "OFF" AND NOT PLUGIN_TYPE) SET(PLUGIN_TYPE ${type}) ENDIF() IF(PLUGINS) @@ -18,6 +18,7 @@ MACRO(REGISTER_PLUGIN name source struct type target allow) SET(${name}_PLUGIN_SOURCE ${source}) SET(${name}_PLUGIN_CHG ${allow}) SET(PLUGINS ${PLUGINS} "${name}") + ADD_DEFINITIONS(-DHAVE_${name}=1) ENDMACRO() MARK_AS_ADVANCED(PLUGINS) diff --git a/include/errmsg.h b/include/errmsg.h index 6306ab96..0af17b20 100644 --- a/include/errmsg.h +++ b/include/errmsg.h @@ -85,6 +85,7 @@ extern const char *mariadb_client_errors[]; /* Error messages */ #define CR_EVENT_CREATE_FAILED 5000 #define CR_BIND_ADDR_FAILED 5001 #define CR_ASYNC_NOT_SUPPORTED 5002 +#define CR_FUNCTION_NOT_SUPPORTED 5003 #define SQLSTATE_UNKNOWN "HY000" diff --git a/include/mysql/client_plugin.h b/include/mysql/client_plugin.h index 616de69e..977ef2c4 100644 --- a/include/mysql/client_plugin.h +++ b/include/mysql/client_plugin.h @@ -151,11 +151,11 @@ typedef char *(*mysql_authentication_dialog_ask_t)(struct st_mysql *mysql, #include /* Remote IO plugin */ -struct st_mysql_client_plugin_REMOTEIO +typedef struct st_mysql_client_plugin_REMOTEIO { MYSQL_CLIENT_PLUGIN_HEADER struct st_rio_methods *methods; -}; +} MARIADB_REMOTEIO_PLUGIN; #endif /******** using plugins ************/ diff --git a/libmariadb/CMakeLists.txt b/libmariadb/CMakeLists.txt index 51b683f7..93dadff3 100644 --- a/libmariadb/CMakeLists.txt +++ b/libmariadb/CMakeLists.txt @@ -402,7 +402,7 @@ ENDIF() ADD_LIBRARY(mariadbclient STATIC ${ariadbclient_RC} $ ${EMPTY_FILE} ${EXPORT_LINK}) TARGET_LINK_LIBRARIES(mariadbclient ${SYSTEM_LIBS}) - +MESSAGE(STATUS "SYSLIBS: ${SYSTEM_LIBS}") ADD_LIBRARY(libmariadb SHARED ${libmariadb_RC} $ ${EMPTY_FILE} ${EXPORT_LINK}) TARGET_LINK_LIBRARIES(libmariadb ${SYSTEM_LIBS}) IF(UNIX) diff --git a/libmariadb/errmsg.c b/libmariadb/errmsg.c index a2d6fbb3..936db98e 100644 --- a/libmariadb/errmsg.c +++ b/libmariadb/errmsg.c @@ -150,6 +150,7 @@ const char *mariadb_client_errors[] = /* 5000 */ "Creating an event failed (Errorcode: %d)", /* 5001 */ "Bind to local interface '-.%64s' failed (Errorcode: %d)", /* 5002 */ "Connection type doesn't support asynchronous IO operations", + /* 5003 */ "Server doesn't support function '%s'", "" }; diff --git a/libmariadb/libmariadb.c b/libmariadb/libmariadb.c index 7086831b..d5dae214 100644 --- a/libmariadb/libmariadb.c +++ b/libmariadb/libmariadb.c @@ -3691,7 +3691,7 @@ my_bool STDCALL mariadb_get_infov(MYSQL *mysql, enum mariadb_value value, void * goto error; break; case MARIADB_CONNECTION_PVIO_TYPE: - if (mysql && !mysql->net.pvio) + if (mysql && mysql->net.pvio) *((unsigned int *)arg)= (unsigned int)mysql->net.pvio->type; else goto error; diff --git a/mariadb_config/CMakeLists.txt b/mariadb_config/CMakeLists.txt index 69d7c3ac..4c8d973d 100644 --- a/mariadb_config/CMakeLists.txt +++ b/mariadb_config/CMakeLists.txt @@ -1,27 +1,33 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) -# Figure out additional libraries for use with +# Figure out additional libraries for use with -FOREACH (dep ${libmariadb_LIB_DEPENDS}) - STRING(REGEX MATCH "^-l.*$" out "${dep}") - IF(out) - SET(extra_dynamic_LDFLAGS "${extra_dynamic_LDFLAGS} ${dep}") - ENDIF(out) -ENDFOREACH(dep) +FUNCTION(GET_LIB_NAME LIB_NAME LIB_OUT) + STRING(FIND ${LIB_NAME} ".so" IS_SO) + IF(NOT ${IS_SO} STREQUAL "-1") + GET_FILENAME_COMPONENT(LIB_FILE ${LIB_NAME} NAME_WE) + ELSE() + SET(LIB_FILE ${LIB_NAME}) + ENDIF() + SET(LIB_FILE "-l${LIB_FILE}") + STRING(REPLACE "-llib" "-l" LIB_FILE ${LIB_FILE}) + SET(${LIB_OUT} ${LIB_FILE} PARENT_SCOPE) +ENDFUNCTION() + +LIST(LENGTH SYSTEM_LIBS rllength) +IF(${rllength} GREATER 0) + LIST(REMOVE_DUPLICATES SYSTEM_LIBS) +ENDIF() + +FOREACH (LIB_NAME ${SYSTEM_LIBS}) + GET_LIB_NAME(${LIB_NAME} LIB_OUT) + SET(extra_dynamic_LDFLAGS "${extra_dynamic_LDFLAGS} ${LIB_OUT}") +ENDFOREACH() IF(UNIX) - IF(OPENSSL_LIBRARIES) - SET(extra_dynamic_LDFLAGS "${extra_dynamic_LDFLAGS} -lssl") - ENDIF() IF(ICONV_EXTERNAL) SET(extra_dynamic_LDFLAGS "${extra_dynamic_LDFLAGS} ${ICONV_LIBRARIES}") ENDIF() - FOREACH(lib ${EXTRA_LIBS}) - SET(extra_dynamic_LDFLAGS "${extra_dynamic_LDFLAGS} -l${lib}") - ENDFOREACH() - IF(WITH_SQLITE) - SET(extra_dynamic_LDFLAGS "${extra_dynamic_LDFLAGS} -lsqlite") - ENDIF() ENDIF(UNIX) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mariadb_config.c.in diff --git a/plugins/io/CMakeLists.txt b/plugins/io/CMakeLists.txt index 2d3d61b8..44850b49 100644 --- a/plugins/io/CMakeLists.txt +++ b/plugins/io/CMakeLists.txt @@ -17,6 +17,7 @@ IF(REMOTEIO_PLUGIN_TYPE MATCHES "DYNAMIC") # remote file plugin INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR}) SET(REMOTE_IO_SOURCES ${remote_io_RC} remote_io.c) + ADD_DEFINITIONS(-DHAVE_REMOTEIO_DYNAMIC=1) ADD_LIBRARY(remote_io SHARED ${REMOTE_IO_SOURCES} ${CMAKE_SOURCE_DIR}/plugins/plugin.def) TARGET_LINK_LIBRARIES(remote_io ${CURL_LIBRARIES}) SET_TARGET_PROPERTIES(remote_io PROPERTIES PREFIX "") diff --git a/plugins/io/remote_io.c b/plugins/io/remote_io.c index dd9be58d..f3af31e8 100644 --- a/plugins/io/remote_io.c +++ b/plugins/io/remote_io.c @@ -43,7 +43,6 @@ smb:// */ -#ifdef HAVE_CURL #include #include #include @@ -58,6 +57,7 @@ #endif #include #include +#include /* Internal file structure */ @@ -89,11 +89,10 @@ typedef struct CURLM *multi_handle= NULL; -#ifndef HAVE_REMOTE_IO_DYNAMIC -struct st_mysql_client_plugin remote_io_plugin= -{ +#ifndef HAVE_REMOTEIO_DYNAMIC +MARIADB_REMOTEIO_PLUGIN remote_io_plugin= #else -struct st_mysql_client_plugin _mysql_client_plugin_declare_ = +MARIADB_REMOTEIO_PLUGIN _mysql_client_plugin_declare_ = #endif { MARIADB_CLIENT_REMOTEIO_PLUGIN, @@ -439,4 +438,3 @@ char *ma_rio_gets(char *ptr, size_t size, MA_FILE *file) return ptr;/*success */ } -#endif