Skip to content

Commit 5497293

Browse files
committed
Enable shared linkind and binding with libmysqlclient
1 parent 1b397ce commit 5497293

File tree

3 files changed

+67
-8
lines changed

3 files changed

+67
-8
lines changed

CMakeLists.txt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,10 @@ if(jdbc_stand_alone)
8585
endif(jdbc_stand_alone)
8686

8787

88-
# TODO: support dynamic binding
89-
#add_config_option(MYSQLCLIENT_STATIC_BINDING BOOL ADVANCED DEFAULT ON "enable static binding")
90-
set(MYSQLCLIENT_STATIC_BINDING ON CACHE INTENRAL "only static biniding supported for now" FORCE)
88+
89+
add_config_option(MYSQLCLIENT_STATIC_LINKING BOOL ADVANCED DEFAULT ON "enable libmysqlclient static linking")
90+
add_config_option(MYSQLCLIENT_STATIC_BINDING BOOL ADVANCED DEFAULT ON "enable libmysqlclient static binding")
91+
9192

9293

9394
if(BUILD_STATIC)
@@ -134,11 +135,15 @@ include(./install_layout.cmake)
134135

135136
include(dependency)
136137

137-
if(MYSQLCLIENT_STATIC_BINDING)
138+
if(MYSQLCLIENT_STATIC_LINKING)
138139
# Arrange for MySQL::client to refer to the static library
139140
set(MYSQL_LIB_STATIC ON)
141+
else()
142+
# Arrange for MySQL::client to refer to the dynamic library
143+
set(MYSQL_LIB_STATIC OFF)
140144
endif()
141145

146+
142147
find_dependency(MySQL)
143148
find_dependency(Boost)
144149

cmake/DepFindMySQL.cmake

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,18 @@ function(main)
165165
NO_DEFAULT_PATH
166166
)
167167

168+
find_library(MYSQL_DLL
169+
NAMES ${CMAKE_DYNAMIC_LIBRARY_PREFIX}mysqlclient${CMAKE_DYNAMIC_LIBRARY_SUFFIX}
170+
PATHS ${MYSQL_LIB_DIR}
171+
NO_DEFAULT_PATH
172+
)
173+
174+
find_library(MYSQL_DLL_DEBUG
175+
NAMES ${CMAKE_DYNAMIC_LIBRARY_PREFIX}mysqlclient${CMAKE_DYNAMIC_LIBRARY_SUFFIX}
176+
PATHS "${MYSQL_LIB_DIR}/debug"
177+
NO_DEFAULT_PATH
178+
)
179+
168180
#message("-- static lib: ${MYSQL_LIB}")
169181
#message("-- debug lib: ${MYSQL_LIB_DEBUG}")
170182

@@ -186,6 +198,14 @@ function(main)
186198
set(MYSQL_LIB "${MYSQL_LIB_DEBUG}")
187199
endif()
188200

201+
if (NOT MYSQL_DLL_DEBUG)
202+
set(MYSQL_DLL_DEBUG "${MYSQL_DLL}")
203+
endif()
204+
205+
if (NOT MYSQL_DLL)
206+
set(MYSQL_DLL "${MYSQL_DLL_DEBUG}")
207+
endif()
208+
189209
endif()
190210

191211

@@ -201,6 +221,13 @@ function(main)
201221
IMPORTED_LOCATION_DEBUG "${MYSQL_LIB_DEBUG}"
202222
)
203223

224+
add_library(MySQL::client-shared SHARED IMPORTED GLOBAL)
225+
226+
set_target_properties(MySQL::client-shared PROPERTIES
227+
INTERFACE_INCLUDE_DIRECTORIES "${MYSQL_INCLUDE_DIR}"
228+
IMPORTED_LOCATION "${MYSQL_DLL}"
229+
IMPORTED_LOCATION_DEBUG "${MYSQL_DLL_DEBUG}"
230+
)
204231

205232
# Define alias MySQL::client pointing to -static or -shared library,
206233
# depending on MYSQL_LIB_STATIC setting.
@@ -211,6 +238,10 @@ function(main)
211238

212239
add_library(mysql-client-if INTERFACE)
213240

241+
set_target_properties(mysql-client-if PROPERTIES
242+
INTERFACE_INCLUDE_DIRECTORIES "${MYSQL_INCLUDE_DIR}"
243+
)
244+
214245
if(MYSQL_LIB_STATIC)
215246
target_link_libraries(mysql-client-if INTERFACE MySQL::client-static)
216247
else()
@@ -235,6 +266,10 @@ function(main)
235266
PROPERTY VERSION ${MYSQL_VERSION}
236267
)
237268

269+
set_property(TARGET MySQL::client-shared
270+
PROPERTY VERSION ${MYSQL_VERSION}
271+
)
272+
238273
#
239274
# Detect shared libraries on which MySQL client lib depends (if possible).
240275
# Stores result in MYSQL_EXTERNAL_DEPENDENCIES.
@@ -258,6 +293,9 @@ function(main)
258293
set_property(TARGET MySQL::client-static
259294
PROPERTY INTERFACE_LINK_LIBRARIES "-L${MYSQL_DIR}/lib"
260295
)
296+
set_property(TARGET MySQL::client-shared
297+
PROPERTY INTERFACE_LINK_LIBRARIES "-L${MYSQL_DIR}/lib"
298+
)
261299
endif()
262300

263301
if(MYSQL_EXTERNAL_DEPENDENCIES)

driver/CMakeLists.txt

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,17 @@ else(MYSQLCLIENT_STATIC_BINDING)
4747
message(STATUS "Using dynamic libmysql binding")
4848
endif(MYSQLCLIENT_STATIC_BINDING)
4949

50+
IF(NOT MYSQLCLIENT_STATIC_BINDING)
51+
IF(NOT WIN32)
52+
CHECK_INCLUDE_FILES(dlfcn.h HAVE_DLFCN_H)
53+
# We are not on windows and don't have dlfcn.h - so we need static binding
54+
IF(NOT HAVE_DLFCN_H)
55+
MESSAGE(FATAL_ERROR "Dynamic binding has been requested but we cannot find dlfcn.h!")
56+
SET(MYSQLCLIENT_STATIC_BINDING 1)
57+
ENDIF(NOT HAVE_DLFCN_H)
58+
ENDIF(NOT WIN32)
59+
ENDIF(NOT MYSQLCLIENT_STATIC_BINDING)
60+
5061
#-----------------
5162

5263
if(0)
@@ -76,9 +87,9 @@ endif()
7687

7788
#-----------------
7889

79-
#configure_file(nativeapi/binding_config.h.cm
80-
# nativeapi/binding_config.h)
81-
#include_directories(${CMAKE_CURRENT_BINARY_DIR}/nativeapi)
90+
configure_file(nativeapi/binding_config.h.cm
91+
nativeapi/binding_config.h)
92+
include_directories(${CMAKE_CURRENT_BINARY_DIR}/nativeapi)
8293

8394
SET(MYSQLCPPCONN_SOURCES
8495
mysql_art_resultset.cpp
@@ -177,7 +188,12 @@ ENDIF(WIN32)
177188
add_library(jdbc STATIC ${MYSQLCPPCONN_SOURCES})
178189

179190
target_link_libraries(jdbc PUBLIC Boost::boost)
180-
target_link_libraries(jdbc PRIVATE MySQL::client)
191+
192+
if (MYSQLCLIENT_STATIC_BINDING)
193+
target_link_libraries(jdbc PRIVATE MySQL::client)
194+
else()
195+
target_include_directories(jdbc PRIVATE ${MYSQL_INCLUDE_DIR})
196+
endif()
181197

182198
if(NOT BUILD_SHARED_LIBS)
183199
target_compile_definitions(jdbc PRIVATE -DCPPCONN_LIB_BUILD)

0 commit comments

Comments
 (0)