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)
openSUSE Build Service is sponsored by