File mingw-w64.diff of Package mingw32-mysql-connector-c
From: Jan Engelhardt <jengelh@inai.de>
Date: 2014-05-09 01:10:24.857961950 +0200
Note: authoritative copy in build.opensuse.org:/windows/mingw/win32/mingw32-mysql-connector-c
MINGW is a platform that is both UNIX and WIN32. The Makefiles do not
distinguish this enough. Introduce the MINGW and POSIX_BUILD cmake
variables to control better which snippets are run.
A mingw-targeting compiler that is running on a POSIXish platform
(Cygwin, Linux) obeys case sensitivity. Fixup some filenames so it
can succeed.
Abolish the check for openssl 1.x - libressl uses 2.x but is
compatible.
Also fix one C++ error; inline class members shall not repeat the
class name qualifier again.
mingw-w64 does have a declaration for gmtime_s, but no library
contains it yet.
---
cmake/info_macros.cmake.in | 2 +-
cmake/install_macros.cmake | 4 ++--
cmake/libutils.cmake | 4 ++--
cmake/mysql_version.cmake | 2 +-
cmake/os/Windows.cmake | 2 +-
cmake/os/WindowsCache.cmake | 1 -
cmake/ssl.cmake | 2 +-
extra/yassl/src/yassl_int.cpp | 2 +-
include/m_string.h | 2 +-
include/my_dir.h | 2 +-
include/my_global.h | 11 ++++++-----
include/mysql/psi/mysql_socket.h | 2 +-
libmysql/CMakeLists.txt | 27 ++++++++++++++++++++++-----
libmysql/authentication_win/CMakeLists.txt | 2 +-
libmysql/authentication_win/handshake.h | 2 +-
libmysql/authentication_win/plugin_client.cc | 2 +-
16 files changed, 43 insertions(+), 26 deletions(-)
Index: mysql-connector-c-6.1.6-src/cmake/info_macros.cmake.in
===================================================================
--- mysql-connector-c-6.1.6-src.orig/cmake/info_macros.cmake.in
+++ mysql-connector-c-6.1.6-src/cmake/info_macros.cmake.in
@@ -91,7 +91,7 @@ MACRO(CREATE_INFO_BIN)
IF (WIN32)
EXECUTE_PROCESS(COMMAND cmd /c date /T
OUTPUT_VARIABLE TMP_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
- ELSEIF(UNIX)
+ ELSEIF(UNIX OR POSIX_BUILD)
EXECUTE_PROCESS(COMMAND date "+%Y-%m-%d %H:%M:%S"
OUTPUT_VARIABLE TMP_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
ELSE()
Index: mysql-connector-c-6.1.6-src/cmake/install_macros.cmake
===================================================================
--- mysql-connector-c-6.1.6-src.orig/cmake/install_macros.cmake
+++ mysql-connector-c-6.1.6-src/cmake/install_macros.cmake
@@ -123,7 +123,7 @@ ENDFUNCTION()
# We do 'cd path; ln -s target_name link_name'
# We also add an INSTALL target for "${path}/${link_name}"
MACRO(INSTALL_SYMLINK target target_name link_name destination component)
-IF(UNIX)
+IF(UNIX OR POSIX_BUILD)
GET_TARGET_PROPERTY(location ${target} LOCATION)
GET_FILENAME_COMPONENT(path ${location} PATH)
@@ -230,7 +230,7 @@ FUNCTION(MYSQL_INSTALL_TARGETS)
SIGN_TARGET(${target})
ENDIF()
# Install man pages on Unix
- IF(UNIX)
+ IF(UNIX OR POSIX_BUILD)
GET_TARGET_PROPERTY(target_location ${target} LOCATION)
INSTALL_MANPAGE(${target_location})
ENDIF()
Index: mysql-connector-c-6.1.6-src/cmake/libutils.cmake
===================================================================
--- mysql-connector-c-6.1.6-src.orig/cmake/libutils.cmake
+++ mysql-connector-c-6.1.6-src/cmake/libutils.cmake
@@ -65,7 +65,7 @@ INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_
# that references all exports and this prevents linker from creating an
# empty library(there are unportable alternatives, --whole-archive)
MACRO(CREATE_EXPORT_FILE VAR TARGET API_FUNCTIONS)
- IF(WIN32)
+ IF(WIN32 AND NOT MINGW)
SET(DUMMY ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_dummy.c)
SET(EXPORTS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_exports.def)
CONFIGURE_FILE_CONTENT("" ${DUMMY})
@@ -295,7 +295,7 @@ ENDFUNCTION()
# We try to hide the symbols in yassl/zlib to avoid name clashes with
# other libraries like openssl.
FUNCTION(RESTRICT_SYMBOL_EXPORTS target)
- IF(CMAKE_COMPILER_IS_GNUCXX AND UNIX)
+ IF(CMAKE_COMPILER_IS_GNUCXX AND (UNIX OR MINGW))
SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror")
CHECK_C_COMPILER_FLAG("-fvisibility=hidden" HAVE_VISIBILITY_HIDDEN)
IF(HAVE_VISIBILITY_HIDDEN)
Index: mysql-connector-c-6.1.6-src/cmake/mysql_version.cmake
===================================================================
--- mysql-connector-c-6.1.6-src.orig/cmake/mysql_version.cmake
+++ mysql-connector-c-6.1.6-src/cmake/mysql_version.cmake
@@ -140,7 +140,7 @@ SET(COMPANYNAME ${CPACK_PACKAGE_VENDOR})
#IF (WIN32)
# EXECUTE_PROCESS(COMMAND "date" "/T" OUTPUT_VARIABLE TMP_DATE)
# STRING(REGEX REPLACE "(..)/(..)/..(..).*" "\\3\\2\\1" MYSQL_COPYRIGHT_YEAR ${TMP_DATE})
-IF(UNIX)
+IF(UNIX OR POSIX_BUILD)
EXECUTE_PROCESS(COMMAND "date" "+%Y" OUTPUT_VARIABLE MYSQL_COPYRIGHT_YEAR OUTPUT_STRIP_TRAILING_WHITESPACE)
ENDIF()
Index: mysql-connector-c-6.1.6-src/cmake/os/WindowsCache.cmake
===================================================================
--- mysql-connector-c-6.1.6-src.orig/cmake/os/WindowsCache.cmake
+++ mysql-connector-c-6.1.6-src/cmake/os/WindowsCache.cmake
@@ -209,7 +209,6 @@ SET(HAVE_BSS_START CACHE INTERNAL "")
SET(HAVE_BUILTIN_UNREACHABLE CACHE INTERNAL "")
SET(HAVE_BUILTIN_EXPECT CACHE INTERNAL "")
SET(HAVE_BUILTIN_STPCPY CACHE INTERNAL "")
-SET(HAVE_GCC_ATOMIC_BUILTINS CACHE INTERNAL "")
# Derived result HAVE_VALGRIND
# IPV6
Index: mysql-connector-c-6.1.6-src/cmake/ssl.cmake
===================================================================
--- mysql-connector-c-6.1.6-src.orig/cmake/ssl.cmake
+++ mysql-connector-c-6.1.6-src/cmake/ssl.cmake
@@ -176,7 +176,7 @@ MACRO (MYSQL_CHECK_SSL)
IF(OPENSSL_INCLUDE_DIR AND
OPENSSL_LIBRARY AND
CRYPTO_LIBRARY AND
- OPENSSL_MAJOR_VERSION STREQUAL "1"
+ 1
)
SET(OPENSSL_FOUND TRUE)
ELSE()
Index: mysql-connector-c-6.1.6-src/extra/yassl/src/yassl_int.cpp
===================================================================
--- mysql-connector-c-6.1.6-src.orig/extra/yassl/src/yassl_int.cpp
+++ mysql-connector-c-6.1.6-src/extra/yassl/src/yassl_int.cpp
@@ -20,7 +20,7 @@
// First include (the generated) my_config.h, to get correct platform defines.
#include "my_config.h"
#ifdef _WIN32
-#include<Windows.h>
+#include <windows.h>
#else
#include <pthread.h>
#endif
Index: mysql-connector-c-6.1.6-src/include/m_string.h
===================================================================
--- mysql-connector-c-6.1.6-src.orig/include/m_string.h
+++ mysql-connector-c-6.1.6-src/include/m_string.h
@@ -75,7 +75,7 @@ extern char *strxnmov(char *dst, size_t
*/
static inline char *my_stpcpy(char *dst, const char *src)
{
-#if defined(HAVE_BUILTIN_STPCPY)
+#if defined(HAVE_BUILTIN_STPCPY) && !defined(_WIN32)
return __builtin_stpcpy(dst, src);
#elif defined(HAVE_STPCPY)
return stpcpy(dst, src);
Index: mysql-connector-c-6.1.6-src/include/my_dir.h
===================================================================
--- mysql-connector-c-6.1.6-src.orig/include/my_dir.h
+++ mysql-connector-c-6.1.6-src/include/my_dir.h
@@ -26,7 +26,7 @@ extern "C" {
/* Defines for my_dir and my_stat */
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(__MINGW32__)
#define S_IROTH _S_IREAD
#define S_IFIFO _S_IFIFO
#endif
Index: mysql-connector-c-6.1.6-src/include/my_global.h
===================================================================
--- mysql-connector-c-6.1.6-src.orig/include/my_global.h
+++ mysql-connector-c-6.1.6-src/include/my_global.h
@@ -205,7 +205,7 @@ C_MODE_START
typedef int (*qsort_cmp)(const void *,const void *);
typedef int (*qsort_cmp2)(const void*, const void *,const void *);
C_MODE_END
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(__MINGW32__)
typedef int socket_len_t;
typedef int sigset_t;
typedef int mode_t;
@@ -340,7 +340,7 @@ typedef socket_len_t SOCKET_SIZE_TYPE; /
#if (_WIN32)
#if !defined(_WIN64)
-inline double my_ulonglong2double(unsigned long long value)
+static inline double my_ulonglong2double(unsigned long long value)
{
long long nr=(long long) value;
if (nr >= 0)
@@ -350,7 +350,7 @@ inline double my_ulonglong2double(unsign
#define ulonglong2double my_ulonglong2double
#define my_off_t2double my_ulonglong2double
#endif /* _WIN64 */
-inline unsigned long long my_double2ulonglong(double d)
+static inline unsigned long long my_double2ulonglong(double d)
{
double t= d - (double) 0x8000000000000000ULL;
@@ -629,7 +629,7 @@ enum loglevel {
};
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(__MINGW32__)
/****************************************************************************
** Replacements for localtime_r and gmtime_r
****************************************************************************/
@@ -645,8 +645,9 @@ static inline struct tm *gmtime_r(const
gmtime_s(res, clock);
return res;
}
+#endif
-
+#ifdef _WIN32
/*
Declare a union to make sure FILETIME is properly aligned
so it can be used directly as a 64 bit value. The value
Index: mysql-connector-c-6.1.6-src/include/mysql/psi/mysql_socket.h
===================================================================
--- mysql-connector-c-6.1.6-src.orig/include/mysql/psi/mysql_socket.h
+++ mysql-connector-c-6.1.6-src/include/mysql/psi/mysql_socket.h
@@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin St, Fifth
#ifdef _WIN32
#include <ws2def.h>
#include <winsock2.h>
- #include <MSWSock.h>
+ #include <mswsock.h>
#define SOCKBUF_T char
#else
#include <netinet/in.h>
Index: mysql-connector-c-6.1.6-src/libmysql/CMakeLists.txt
===================================================================
--- mysql-connector-c-6.1.6-src.orig/libmysql/CMakeLists.txt
+++ mysql-connector-c-6.1.6-src/libmysql/CMakeLists.txt
@@ -216,13 +216,20 @@ MACRO(GET_TARGET_NAME target out_name)
SET(${out_name} ${name})
ENDMACRO()
-IF(UNIX)
+IF(UNIX OR MINGW)
MACRO(GET_VERSIONED_LIBNAME LIBNAME EXTENSION VERSION OUTNAME)
+ IF(MINGW)
+ SET(DOT_VERSION "-${VERSION}")
+ IF(DOT_VERSION STREQUAL "-")
+ SET(DOT_VERSION "")
+ ENDIF()
+ ELSE()
SET(DOT_VERSION ".${VERSION}")
IF(DOT_VERSION STREQUAL ".")
SET(DOT_VERSION "")
ENDIF()
- IF(APPLE)
+ ENDIF()
+ IF(APPLE OR MINGW)
SET(${OUTNAME} ${LIBNAME}${DOT_VERSION}${EXTENSION})
ELSE()
SET(${OUTNAME} ${LIBNAME}${EXTENSION}${DOT_VERSION})
@@ -230,7 +237,7 @@ IF(UNIX)
ENDMACRO()
ENDIF()
-IF(UNIX)
+IF(UNIX OR POSIX_BUILD)
GET_TARGET_NAME(mysqlclient lib_name)
INSTALL_SYMLINK(mysqlclient
${lib_name} ${CMAKE_STATIC_LIBRARY_PREFIX}mysqlclient_r.a
@@ -252,9 +259,9 @@ IF(NOT DISABLE_SHARED)
MERGE_LIBRARIES(libmysql SHARED ${LIBS}
EXPORTS ${CLIENT_API_FUNCTIONS}
COMPONENT SharedLibraries)
- IF(UNIX)
+ IF(UNIX OR MINGW)
# libtool compatability
- IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR APPLE)
+ IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR APPLE OR MINGW)
SET(OS_SHARED_LIB_VERSION "${SHARED_LIB_MAJOR_VERSION}")
ELSE()
SET(OS_SHARED_LIB_VERSION
@@ -265,6 +272,12 @@ IF(NOT DISABLE_SHARED)
OUTPUT_NAME mysqlclient
VERSION "${OS_SHARED_LIB_VERSION}"
SOVERSION "${SHARED_LIB_MAJOR_VERSION}")
+ IF(MINGW)
+ # cmake is too dumb to handle mingw. Do the basics (append -MAJOR)
+ # and then do the rest in .spec
+ SET_TARGET_PROPERTIES(libmysql PROPERTIES
+ OUTPUT_NAME "mysqlclient-${OS_SHARED_LIB_VERSION}")
+ ENDIF()
CONFIGURE_FILE(libmysql.ver.in ${CMAKE_CURRENT_BINARY_DIR}/libmysql.ver)
IF(APPLE)
@@ -295,6 +308,9 @@ IF(NOT DISABLE_SHARED)
SET_TARGET_PROPERTIES(mysqlclient PROPERTIES CLEAN_DIRECT_OUTPUT 1)
SET_TARGET_PROPERTIES(libmysql PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+IF(NOT MINGW)
+# do in .spec instead;
+
# Install links to libmysqlclient.so (client_r)
GET_VERSIONED_LIBNAME(
"${CMAKE_SHARED_LIBRARY_PREFIX}mysqlclient_r"
@@ -321,6 +337,7 @@ IF(NOT DISABLE_SHARED)
${lib_name_ver} ${linkname}
${INSTALL_LIBDIR} SharedLibraries)
ENDFOREACH()
+ENDIF()
ENDIF()
ENDIF()
Index: mysql-connector-c-6.1.6-src/libmysql/authentication_win/CMakeLists.txt
===================================================================
--- mysql-connector-c-6.1.6-src.orig/libmysql/authentication_win/CMakeLists.txt
+++ mysql-connector-c-6.1.6-src/libmysql/authentication_win/CMakeLists.txt
@@ -26,7 +26,7 @@ SET(HEADERS common.h handshake.h)
SET(PLUGIN_SOURCES plugin_client.cc handshake_client.cc log_client.cc common.cc handshake.cc)
ADD_CONVENIENCE_LIBRARY(auth_win_client ${PLUGIN_SOURCES} ${HEADERS})
-TARGET_LINK_LIBRARIES(auth_win_client Secur32)
+TARGET_LINK_LIBRARIES(auth_win_client secur32)
# In IDE, group headers in a separate folder.
Index: mysql-connector-c-6.1.6-src/libmysql/authentication_win/handshake.h
===================================================================
--- mysql-connector-c-6.1.6-src.orig/libmysql/authentication_win/handshake.h
+++ mysql-connector-c-6.1.6-src/libmysql/authentication_win/handshake.h
@@ -100,7 +100,7 @@ public:
Handshake(const char *ssp, side_t side);
virtual ~Handshake();
- int Handshake::packet_processing_loop();
+ int packet_processing_loop();
bool virtual is_complete() const
{
Index: mysql-connector-c-6.1.6-src/libmysql/authentication_win/plugin_client.cc
===================================================================
--- mysql-connector-c-6.1.6-src.orig/libmysql/authentication_win/plugin_client.cc
+++ mysql-connector-c-6.1.6-src/libmysql/authentication_win/plugin_client.cc
@@ -26,7 +26,7 @@
*/
#ifdef _MSC_VER
-#pragma comment(lib, "Secur32")
+#pragma comment(lib, "secur32")
#endif
static int win_auth_client_plugin_init(char*, size_t, int, va_list)