summarylogtreecommitdiffstats
path: root/0001-Fix-mingw-w64-build.patch
blob: 9c0e32cb702566f38b13afc2ca764ac922cd8d25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
From 16d52c5ed320dcd7912d4e23c538608a42f32d04 Mon Sep 17 00:00:00 2001
From: Tilmann Meyer <allescrafterx@gmail.com>
Date: Fri, 17 Apr 2020 02:12:23 +0200
Subject: [PATCH 1/2] Fix mingw-w64 build

---
 CMakeLists.txt                | 35 +++++++++++++++++++---------------
 cmake/install.cmake           |  4 ++--
 cmake/symlink.cmake           |  2 +-
 include/ma_global.h           |  4 ++--
 include/mysql.h               |  6 +-----
 include/mysql/client_plugin.h |  2 +-
 libmariadb/CMakeLists.txt     | 36 +++++++++++++++++------------------
 plugins/auth/CMakeLists.txt   |  2 +-
 plugins/io/CMakeLists.txt     |  2 +-
 9 files changed, 46 insertions(+), 47 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2584e93..6c67324 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,6 +3,9 @@
 # This is the LGPL libmariadb project.
 
 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12 FATAL_ERROR)
+
+add_definitions(-D_WIN32_WINNT=0x0601)
+
 INCLUDE(CheckFunctionExists)
 IF(COMMAND CMAKE_POLICY)
   SET(NEW_POLICIES CMP0003 CMP0022 CMP0023 CMP0077 CMP0069 CMP0075)
@@ -51,20 +54,16 @@ MACRO(ADD_OPTION _name _text _default)
 ENDMACRO()
 
 ### Options ###
-IF(NOT WIN32)
-  ADD_OPTION(WITH_MYSQLCOMPAT "creates libmysql* symbolic links" OFF)
-ELSE()
-  ADD_OPTION(WITH_MSI "Build MSI installation package" OFF)
-  ADD_OPTION(WITH_SIGNCODE "digitally sign files" OFF)
-  ADD_OPTION(WITH_RTC "enables run time checks for debug builds" OFF)
-  ADD_OPTION(WITH_ICONV "enables character set conversion" OFF)
-ENDIF()
-
+ADD_OPTION(WITH_MYSQLCOMPAT "creates libmysql* symbolic links" OFF)
+ADD_OPTION(WITH_MSI "Build MSI installation package" OFF)
+ADD_OPTION(WITH_SIGNCODE "digitally sign files" OFF)
+ADD_OPTION(WITH_RTC "enables run time checks for debug builds" OFF)
 ADD_OPTION(WITH_UNIT_TESTS "build test suite" ON)
 ADD_OPTION(WITH_DYNCOL "Enables support of dynamic columns" ON)
 ADD_OPTION(WITH_EXTERNAL_ZLIB "Enables use of external zlib" OFF)
 ADD_OPTION(WITH_CURL "Enables use of curl" ON)
 ADD_OPTION(WITH_SSL "Enables use of TLS/SSL library" ON)
+ADD_OPTION(WITH_ICONV "enables character set conversion" OFF)
 ###############
 
 INCLUDE(${CC_SOURCE_DIR}/cmake/misc.cmake)
@@ -251,14 +250,20 @@ IF(UNIX)
   SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LIBNSL} ${LIBBIND} ${LIBICONV} ${ZLIB_LIBRARY} 
       ${LIBSOCKET} ${CMAKE_DL_LIBS} ${LIBM} ${LIBPTHREAD})
   SET(SYSTEM_LIBS ${SYSTEM_LIBS} ${LIBNSL} ${LIBBIND} ${LIBICONV} 
-    ${LIBSOCKET} ${CMAKE_DL_LIBS} ${LIBM} ${LIBPTHREAD})
-  #remove possible dups from required libraries
-  LIST(LENGTH CMAKE_REQUIRED_LIBRARIES rllength)
-  IF(${rllength} GREATER 0)
-    LIST(REMOVE_DUPLICATES CMAKE_REQUIRED_LIBRARIES)
-  ENDIF()
+    ${LIBSOCKET} ${CMAKE_DL_LIBS} ${LIBDL} ${LIBM} ${LIBPTHREAD})
 ENDIF()
 
+IF(MINGW)
+  FIND_PACKAGE(Threads)
+  LIST(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBPTHREAD})
+  LIST(APPEND SYSTEM_LIBS ${LIBPTHREAD})
+ENDIF()
+
+#remove possible dups from required libraries
+LIST(LENGTH CMAKE_REQUIRED_LIBRARIES rllength)
+IF(${rllength} GREATER 0)
+  LIST(REMOVE_DUPLICATES CMAKE_REQUIRED_LIBRARIES)
+ENDIF()
 
 IF(CMAKE_HAVE_PTHREAD_H)
   SET(CMAKE_REQUIRED_INCLUDES pthread.h)
diff --git a/cmake/install.cmake b/cmake/install.cmake
index 90bae8b..0fdde87 100644
--- a/cmake/install.cmake
+++ b/cmake/install.cmake
@@ -62,13 +62,13 @@ ENDIF()
 #
 
 SET(INSTALL_BINDIR_DEFAULT "bin")
-SET(INSTALL_LIBDIR_DEFAULT "lib/mariadb")
+SET(INSTALL_LIBDIR_DEFAULT "lib")
 SET(INSTALL_PCDIR_DEFAULT "lib/pkgconfig")
 SET(INSTALL_INCLUDEDIR_DEFAULT "include/mariadb")
 SET(INSTALL_DOCDIR_DEFAULT "docs")
 SET(INSTALL_MANDIR_DEFAULT "man")
 IF(NOT IS_SUBPROJECT)
-  SET(INSTALL_PLUGINDIR_DEFAULT "lib/mariadb/plugin")
+  SET(INSTALL_PLUGINDIR_DEFAULT "lib/plugin")
 ELSE()
 ENDIF()
 SET(LIBMARIADB_STATIC_DEFAULT "mariadbclient")
diff --git a/cmake/symlink.cmake b/cmake/symlink.cmake
index c1c883d..cdca6dc 100644
--- a/cmake/symlink.cmake
+++ b/cmake/symlink.cmake
@@ -7,7 +7,7 @@
 #
 MACRO(create_symlink symlink_name target install_path)
 # According to cmake documentation symlinks work on unix systems only
-IF(UNIX)
+IF(UNIX OR MINGW)
   # Get target components 
   ADD_CUSTOM_COMMAND(
     OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${symlink_name}
diff --git a/include/ma_global.h b/include/ma_global.h
index d6077f3..d68f921 100644
--- a/include/ma_global.h
+++ b/include/ma_global.h
@@ -34,7 +34,7 @@
 #define snprintf _snprintf
 #endif
 #endif
-#define STDCALL __stdcall 
+#define STDCALL
 #endif
 
 #include <ma_config.h>
@@ -440,7 +440,7 @@ typedef SOCKET_SIZE_TYPE size_socket;
 #define NO_PISAM		/* Not needed anymore */
 #define NO_MISAM		/* Not needed anymore */
 #define NO_HASH			/* Not needed anymore */
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(__MINGW32__)
 #define NO_DIR_LIBRARY		/* Not standard dir-library */
 #define USE_MY_STAT_STRUCT	/* For my_lib */
 #ifdef _MSC_VER
diff --git a/include/mysql.h b/include/mysql.h
index 8a3884c..a2bc3cd 100644
--- a/include/mysql.h
+++ b/include/mysql.h
@@ -39,11 +39,7 @@ extern "C" {
 typedef char my_bool;
 typedef unsigned long long my_ulonglong;
 
-#if !defined(_WIN32)
 #define STDCALL
-#else
-#define STDCALL __stdcall
-#endif
 
 #ifndef my_socket_defined
 #define my_socket_defined
@@ -471,7 +467,7 @@ struct st_mysql_client_plugin
   MYSQL_CLIENT_PLUGIN_HEADER
 };
 
-struct st_mysql_client_plugin *
+struct st_mysql_client_plugin * STDCALL
 mysql_load_plugin(struct st_mysql *mysql, const char *name, int type,
                   int argc, ...);
 struct st_mysql_client_plugin * STDCALL
diff --git a/include/mysql/client_plugin.h b/include/mysql/client_plugin.h
index 262fd4a..9a0e1e6 100644
--- a/include/mysql/client_plugin.h
+++ b/include/mysql/client_plugin.h
@@ -194,7 +194,7 @@ typedef struct st_mysql_client_plugin_REMOTEIO
   @retval
   a pointer to the loaded plugin, or NULL in case of a failure
 */
-struct st_mysql_client_plugin *
+struct st_mysql_client_plugin * STDCALL
 mysql_load_plugin(struct st_mysql *mysql, const char *name, int type,
                   int argc, ...);
 
diff --git a/libmariadb/CMakeLists.txt b/libmariadb/CMakeLists.txt
index 7faf827..43ab846 100644
--- a/libmariadb/CMakeLists.txt
+++ b/libmariadb/CMakeLists.txt
@@ -405,7 +405,7 @@ ENDIF()
 FILE(WRITE ${CC_BINARY_DIR}/manpages.list "${MARIADB_LIB_SYMBOLS};${MYSQL_LIB_SYMBOLS}")
 
 IF(WIN32)
-  SET_VERSION_INFO("TARGET:libmariadb"
+  SET_VERSION_INFO("TARGET:mariadb"
                    "FILE_TYPE:VFT_DLL"
                    "SOURCE_FILE:libmariadb/libmariadb.c"
                    "ORIGINAL_FILE_NAME:libmariadb.dll"
@@ -417,30 +417,28 @@ ADD_LIBRARY(mariadbclient STATIC  ${MARIADB_OBJECTS} ${EMPTY_FILE})
 TARGET_LINK_LIBRARIES(mariadbclient ${SYSTEM_LIBS})
 
 IF(UNIX)
-  ADD_LIBRARY(libmariadb SHARED ${libmariadb_RC} ${MARIADB_OBJECTS} ${EMPTY_FILE})
-  SET_TARGET_PROPERTIES(libmariadb PROPERTIES COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
+  ADD_LIBRARY(mariadb SHARED ${mariadb_RC} ${MARIADB_OBJECTS} ${EMPTY_FILE})
+  SET_TARGET_PROPERTIES(mariadb PROPERTIES COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
 ELSE()
-  ADD_LIBRARY(libmariadb SHARED ${libmariadb_RC} ${MARIADB_OBJECTS} mariadbclient.def)
-  SET_TARGET_PROPERTIES(libmariadb PROPERTIES LINKER_LANGUAGE C)
+  ADD_LIBRARY(mariadb SHARED ${libmariadb_RC} ${MARIADB_OBJECTS} mariadbclient.def)
+  SET_TARGET_PROPERTIES(mariadb PROPERTIES LINKER_LANGUAGE C)
 ENDIF()
 
-TARGET_LINK_LIBRARIES(libmariadb LINK_PRIVATE ${SYSTEM_LIBS})
+TARGET_LINK_LIBRARIES(mariadb LINK_PRIVATE ${SYSTEM_LIBS})
 
-SIGN_TARGET(libmariadb)
+SIGN_TARGET(mariadb)
 
 IF(CMAKE_SYSTEM_NAME MATCHES "Linux" OR
    CMAKE_SYSTEM_NAME MATCHES "kFreeBSD" OR
    CMAKE_SYSTEM_NAME MATCHES "GNU")
   IF (NOT WITH_ASAN AND NOT WITH_TSAN AND NOT WITH_UBSAN AND NOT WITH_MSAN)
-    TARGET_LINK_LIBRARIES (libmariadb LINK_PRIVATE "-Wl,--no-undefined")
+    TARGET_LINK_LIBRARIES (mariadb LINK_PRIVATE "-Wl,--no-undefined")
   ENDIF()
-  SET_TARGET_PROPERTIES(libmariadb PROPERTIES LINK_FLAGS "${CC_BINARY_DIR}/libmariadb/mariadbclient.def")
+  SET_TARGET_PROPERTIES(mariadb PROPERTIES LINK_FLAGS "${CC_BINARY_DIR}/libmariadb/mariadbclient.def")
 ENDIF()
 
 SET_TARGET_PROPERTIES(mariadbclient PROPERTIES IMPORTED_INTERFACE_LINK_LIBRARIES "${SYSTEM_LIBS}")
-SET_TARGET_PROPERTIES(libmariadb PROPERTIES IMPORTED_INTERFACE_LINK_LIBRARIES "${SYSTEM_LIBS}")
-
-SET_TARGET_PROPERTIES(libmariadb PROPERTIES PREFIX "")
+SET_TARGET_PROPERTIES(mariadb PROPERTIES IMPORTED_INTERFACE_LINK_LIBRARIES "${SYSTEM_LIBS}")
 
 #
 # Installation
@@ -452,8 +450,8 @@ INCLUDE(${CC_SOURCE_DIR}/cmake/symlink.cmake)
 # use mariadb client library we provide libmysql symlinks
 
 IF(WITH_MYSQLCOMPAT)
-  create_symlink(libmysqlclient${CMAKE_SHARED_LIBRARY_SUFFIX} libmariadb ${INSTALL_LIBDIR})
-  create_symlink(libmysqlclient_r${CMAKE_SHARED_LIBRARY_SUFFIX} libmariadb ${INSTALL_LIBDIR})
+  create_symlink(libmysqlclient${CMAKE_SHARED_LIBRARY_SUFFIX} mariadb ${INSTALL_BINDIR})
+  create_symlink(libmysqlclient_r${CMAKE_SHARED_LIBRARY_SUFFIX} mariadb ${INSTALL_BINDIR})
   IF(NOT CMAKE_SYSTEM_NAME MATCHES AIX)
     create_symlink(libmysqlclient${CMAKE_STATIC_LIBRARY_SUFFIX} mariadbclient ${INSTALL_LIBDIR})
     create_symlink(libmysqlclient_r${CMAKE_STATIC_LIBRARY_SUFFIX} mariadbclient ${INSTALL_LIBDIR})
@@ -462,7 +460,7 @@ ENDIF()
 
 create_symlink(libmariadb${CMAKE_STATIC_LIBRARY_SUFFIX} mariadbclient ${INSTALL_LIBDIR})
 
-SET_TARGET_PROPERTIES(libmariadb PROPERTIES VERSION
+SET_TARGET_PROPERTIES(mariadb PROPERTIES VERSION
  ${CPACK_PACKAGE_VERSION_MAJOR}
  SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR})
 
@@ -479,18 +477,18 @@ INSTALL(TARGETS libmariadb
         DESTINATION ${INSTALL_LIBDIR})
 ELSE()
 # in cmake 3.12+ we can use
-#INSTALL(TARGETS libmariadb LIBRARY DESTINATION ${INSTALL_LIBDIR}
+#INSTALL(TARGETS mariadb LIBRARY DESTINATION ${INSTALL_LIBDIR} RUNTIME DESTINATION ${INSTALL_BINDIR} ARCHIVE DESTINATION ${INSTALL_LIBDIR}
 #        COMPONENT SharedLibraries NAMELINK_COMPONENT Development)
 # but as long as we build on CentOS 7 with its cmake 2.8.12.2 we have to use
-INSTALL(TARGETS libmariadb LIBRARY DESTINATION ${INSTALL_LIBDIR}
+INSTALL(TARGETS mariadb LIBRARY DESTINATION ${INSTALL_LIBDIR} RUNTIME DESTINATION ${INSTALL_BINDIR} ARCHIVE DESTINATION ${INSTALL_LIBDIR}
         COMPONENT SharedLibraries NAMELINK_SKIP)
-INSTALL(TARGETS libmariadb LIBRARY DESTINATION ${INSTALL_LIBDIR}
+INSTALL(TARGETS mariadb LIBRARY DESTINATION ${INSTALL_LIBDIR} RUNTIME DESTINATION ${INSTALL_BINDIR} ARCHIVE DESTINATION ${INSTALL_LIBDIR}
         COMPONENT Development NAMELINK_ONLY)
 ENDIF()
 
 IF(MSVC)
    # On Windows, install PDB
-   INSTALL(FILES $<TARGET_PDB_FILE:libmariadb> DESTINATION "${INSTALL_LIBDIR}"
+   INSTALL(FILES $<TARGET_PDB_FILE:mariadb> DESTINATION "${INSTALL_LIBDIR}"
            CONFIGURATIONS Debug RelWithDebInfo
            COMPONENT Development)
 ENDIF()
diff --git a/plugins/auth/CMakeLists.txt b/plugins/auth/CMakeLists.txt
index e5448f8..ae2cf27 100644
--- a/plugins/auth/CMakeLists.txt
+++ b/plugins/auth/CMakeLists.txt
@@ -4,7 +4,7 @@ INCLUDE_DIRECTORIES(${AUTH_DIR})
 INCLUDE_DIRECTORIES(${CC_SOURCE_DIR}/include)
 
 SET(CRYPTO_PLUGIN 1)
-IF(WIN32)
+IF(WIN32 AND NOT MINGW)
   ADD_DEFINITIONS(-DHAVE_WINCRYPT)
   SET(CRYPT_SOURCE ${CC_SOURCE_DIR}/libmariadb/secure/win_crypt.c)
   SET(CRYPT_LIBS crypt32 bcrypt)
diff --git a/plugins/io/CMakeLists.txt b/plugins/io/CMakeLists.txt
index 8c304c9..e2e9c5a 100644
--- a/plugins/io/CMakeLists.txt
+++ b/plugins/io/CMakeLists.txt
@@ -10,6 +10,6 @@ IF (WITH_CURL)
                   DEFAULT DYNAMIC
                   SOURCES ${CC_SOURCE_DIR}/plugins/io/remote_io.c
                   INCLUDES ${CURL_INCLUDE_DIR}
-                  LIBRARIES ${CURL_LIBRARIES})
+                  LIBRARIES ${CURL_LIBRARIES} ws2_32)
   ENDIF()
 ENDIF()
-- 
2.37.1