Skip to content

Commit dcaef0d

Browse files
author
Hemant Dangi
committed
Added MYSQLCLIENT_LIB_NAME for linking mysqlclient statically or dynamically. Also changed libmysqlclient as default library instead of libmysqlclient_r. MYSQL_LIB_DIR, MYSQL_INCLUDE_DIR, MYSQL_LINK_FLAGS and MYSQL_CXXFLAGS will be obtained from mysql_config only when they are not provided using cmake options.
1 parent 900e128 commit dcaef0d

File tree

1 file changed

+54
-62
lines changed

1 file changed

+54
-62
lines changed

FindMySQL.cmake

Lines changed: 54 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,21 @@ ENDMACRO(_MYSQL_CONFIG_REPLACE _regex1 _replace _regex2 _opt)
5252

5353
IF (MYSQLCLIENT_LIB_NAME)
5454
IF (${MYSQLCLIENT_LIB_NAME} MATCHES "libmysqlclient_r.a"
55-
OR ${MYSQLCLIENT_LIB_NAME} MATCHES "libmysqlclient_r.a"
55+
OR ${MYSQLCLIENT_LIB_NAME} MATCHES "libmysqlclient.a"
5656
OR ${MYSQLCLIENT_LIB_NAME} MATCHES "mysqlclient*")
5757
SET(MYSQLCLIENT_STATIC_LINKING 1)
5858
ELSEIF (${MYSQLCLIENT_LIB_NAME} MATCHES "libmysqlclient_r.so"
59-
OR ${MYSQLCLIENT_LIB_NAME} MATCHES "libmysqlclient_r.so"
60-
OR ${MYSQLCLIENT_LIB_NAME} MATCHES "libmysql.dll")
59+
OR ${MYSQLCLIENT_LIB_NAME} MATCHES "libmysqlclient.so"
60+
OR ${MYSQLCLIENT_LIB_NAME} MATCHES "libmysql.*")
6161
SET(MYSQLCLIENT_STATIC_LINKING 0)
6262
ENDIF (${MYSQLCLIENT_LIB_NAME} MATCHES "libmysqlclient_r.a"
63-
OR ${MYSQLCLIENT_LIB_NAME} MATCHES "libmysqlclient_r.a"
63+
OR ${MYSQLCLIENT_LIB_NAME} MATCHES "libmysqlclient.a"
6464
OR ${MYSQLCLIENT_LIB_NAME} MATCHES "mysqlclient*")
6565
ELSE (MYSQLCLIENT_LIB_NAME)
6666
IF (WIN32)
6767
SET(MYSQLCLIENT_LIB_NAME "mysqlclient.lib")
6868
ELSE (WIN32)
69-
SET(MYSQLCLIENT_LIB_NAME "libmysqlclient_r.a libmysqlclient.a")
69+
SET(MYSQLCLIENT_LIB_NAME "libmysqlclient.a libmysqlclient_r.a")
7070
ENDIF (WIN32)
7171
SET(MYSQLCLIENT_STATIC_LINKING 1)
7272
ENDIF (MYSQLCLIENT_LIB_NAME)
@@ -88,32 +88,47 @@ IF (NOT MYSQL_CONFIG_EXECUTABLE AND NOT WIN32)
8888
ENDIF (EXISTS "$ENV{MYSQL_DIR}/bin/mysql_config")
8989
ENDIF (NOT MYSQL_CONFIG_EXECUTABLE AND NOT WIN32)
9090

91-
SET(MYSQL_CXXFLAGS "")
91+
9292
IF(MYSQL_CONFIG_EXECUTABLE AND NOT WIN32)
9393
MESSAGE(STATUS "mysql_config was found ${MYSQL_CONFIG_EXECUTABLE}")
94-
_MYSQL_CONFIG(MYSQL_INCLUDE_DIR "(^| )-I" "--include")
9594

9695
EXECUTE_PROCESS(COMMAND ${MYSQL_CONFIG_EXECUTABLE} "--version"
9796
OUTPUT_VARIABLE __MYSQL_VERSION
9897
)
99-
STRING(REGEX REPLACE "[\r\n]$" "" __MYSQL_VERSION "${__MYSQL_VERSION}")
100-
STRING(REGEX MATCHALL "(4.1.[0-9]+|[5-9].[0-9]+.[0-9]+)" MYSQL_VERSION "${__MYSQL_VERSION}")
101-
STRING(REGEX REPLACE "[.]" "0" MYSQL_NUM_VERSION "${MYSQL_VERSION}")
10298

103-
IF(MYSQL_CXX_LINKAGE OR MYSQL_NUM_VERSION LESS 50604)
104-
EXECUTE_PROCESS(COMMAND ${MYSQL_CONFIG_EXECUTABLE} "--cflags"
99+
# Clean up so only numeric, in case of "-alpha" or similar
100+
STRING(REGEX MATCHALL "([0-9]+.[0-9]+.[0-9]+)" MYSQL_VERSION "${__MYSQL_VERSION}")
101+
# To create a fully numeric version, first normalize so N.NN.NN
102+
STRING(REGEX REPLACE "[.]([0-9])[.]" ".0\\1." MYSQL_NUM_VERSION "${MYSQL_VERSION}")
103+
STRING(REGEX REPLACE "[.]([0-9])$" ".0\\1" MYSQL_NUM_VERSION "${MYSQL_NUM_VERSION}")
104+
# Finally remove the dot
105+
STRING(REGEX REPLACE "[.]" "" MYSQL_NUM_VERSION "${MYSQL_NUM_VERSION}")
106+
107+
IF(MYSQL_CXX_LINKAGE OR MYSQL_NUM_VERSION GREATER 50603)
108+
EXECUTE_PROCESS(COMMAND ${MYSQL_CONFIG_EXECUTABLE} "--cxxflags"
105109
OUTPUT_VARIABLE _mysql_config_output
106110
)
107-
ELSE (MYSQL_CXX_LINKAGE OR MYSQL_NUM_VERSION LESS 50604)
108-
EXECUTE_PROCESS(COMMAND ${MYSQL_CONFIG_EXECUTABLE} "--cxxflags"
111+
SET(MYSQL_CXX_LINKAGE 1)
112+
ELSE (MYSQL_CXX_LINKAGE OR MYSQL_NUM_VERSION GREATER 50603)
113+
EXECUTE_PROCESS(COMMAND ${MYSQL_CONFIG_EXECUTABLE} "--cflags"
109114
OUTPUT_VARIABLE _mysql_config_output
110115
)
111-
ENDIF(MYSQL_CXX_LINKAGE OR MYSQL_NUM_VERSION LESS 50604)
116+
ENDIF(MYSQL_CXX_LINKAGE OR MYSQL_NUM_VERSION GREATER 50603)
112117

113-
STRING(REGEX MATCHALL "-m([^\r\n]+)" MYSQL_LINK_FLAGS "${_mysql_config_output}")
114-
STRING(REGEX REPLACE "[\r\n]$" "" MYSQL_CXXFLAGS "${_mysql_config_output}")
118+
IF (NOT MYSQL_LINK_FLAGS)
119+
STRING(REGEX MATCHALL "-m([^\r\n]+)" MYSQL_LINK_FLAGS "${_mysql_config_output}")
120+
ENDIF (NOT MYSQL_LINK_FLAGS)
121+
IF (NOT MYSQL_CXXFLAGS)
122+
STRING(REGEX REPLACE "[\r\n]$" "" MYSQL_CXXFLAGS "${_mysql_config_output}")
123+
ENDIF (NOT MYSQL_CXXFLAGS)
115124
# ADD_DEFINITIONS("${MYSQL_CXXFLAGS}")
116-
ELSE (MYSQL_CONFIG_EXECUTABLE AND NOT WIN32)
125+
ENDIF (MYSQL_CONFIG_EXECUTABLE AND NOT WIN32)
126+
127+
128+
#----------------- FIND MYSQL_INCLUDE_DIR -------------------
129+
IF(NOT MYSQL_INCLUDE_DIR AND MYSQL_CONFIG_EXECUTABLE AND NOT WIN32)
130+
_MYSQL_CONFIG(MYSQL_INCLUDE_DIR "(^| )-I" "--include")
131+
ELSE(NOT MYSQL_INCLUDE_DIR AND MYSQL_CONFIG_EXECUTABLE AND NOT WIN32)
117132
MESSAGE(STATUS "ENV{MYSQL_DIR} = $ENV{MYSQL_DIR}")
118133
FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
119134
${MYSQL_INCLUDE_DIR}
@@ -127,7 +142,8 @@ ELSE (MYSQL_CONFIG_EXECUTABLE AND NOT WIN32)
127142
/usr/local/mysql/include/mysql
128143
$ENV{ProgramFiles}/MySQL/*/include
129144
$ENV{SystemDrive}/MySQL/*/include)
130-
ENDIF (MYSQL_CONFIG_EXECUTABLE AND NOT WIN32)
145+
ENDIF(NOT MYSQL_INCLUDE_DIR AND MYSQL_CONFIG_EXECUTABLE AND NOT WIN32)
146+
131147

132148
#----------------- FIND MYSQL_LIB_DIR -------------------
133149
IF (WIN32)
@@ -143,12 +159,6 @@ IF (WIN32)
143159
ADD_DEFINITIONS(-DDBUG_OFF)
144160
ENDIF (CMAKE_BUILD_TYPE STREQUAL Debug)
145161

146-
IF (MYSQLCLIENT_STATIC_LINKING)
147-
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib")
148-
ELSE (MYSQLCLIENT_STATIC_LINKING)
149-
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dll")
150-
ENDIF (MYSQLCLIENT_STATIC_LINKING)
151-
152162
FIND_LIBRARY(MYSQL_LIB
153163
NAMES
154164
${MYSQLCLIENT_LIB_NAME}
@@ -173,19 +183,11 @@ IF (WIN32)
173183
$ENV{SystemDrive}/MySQL/*/lib)
174184

175185
SET(MYSQL_LIBRARIES ${MYSQL_LIB})
176-
177-
# Optionally add more libraries from the command line
178-
# using -DEXTRA_MYSQL_DEP=...
179-
IF (EXTRA_MYSQL_DEP)
180-
LIST(APPEND MYSQL_LIBRARIES ${EXTRA_MYSQL_DEP})
181-
ENDIF (EXTRA_MYSQL_DEP)
182-
183-
SET(MYSQL_CLIENT_LIBS ${MYSQL_LIBRARIES})
184186
IF(MYSQL_LIB)
185187
GET_FILENAME_COMPONENT(MYSQL_LIB_DIR ${MYSQL_LIB} PATH)
186188
ENDIF(MYSQL_LIB)
187189
ELSE (WIN32)
188-
IF (MYSQL_CONFIG_EXECUTABLE)
190+
IF (NOT MYSQL_LIB_DIR AND MYSQL_CONFIG_EXECUTABLE)
189191
# In MySQL Server 5.6.10 "mysql_config" outputs -lssl
190192
# -lcrypto dependencies even if (as it is with the
191193
# Oracle built binaries) OpenSSL is linked statically
@@ -224,27 +226,17 @@ ELSE (WIN32)
224226

225227
IF (MYSQLCLIENT_STATIC_LINKING)
226228
_MYSQL_CONFIG_REPLACE(MYSQL_LIBRARIES
227-
"mysqlclient(_r| |$)" "${MYSQL_LIB}" "(^| )-l" "--libs_r")
228-
IF (NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
229-
LIST(APPEND MYSQL_LIBRARIES "rt")
230-
ENDIF ()
229+
"(mysqlclient|mysqlclient_r)" "${MYSQL_LIB}" "(^| )-l" "--libs")
231230
ELSE (MYSQLCLIENT_STATIC_LINKING)
232-
_MYSQL_CONFIG(MYSQL_LIBRARIES "(^| )-l" "--libs_r")
231+
_MYSQL_CONFIG(MYSQL_LIBRARIES "(^| )-l" "--libs")
233232
ENDIF (MYSQLCLIENT_STATIC_LINKING)
234233

235-
_MYSQL_CONFIG(MYSQL_CLIB_DIR "(^| )-L" "--libs_r")
236-
237-
# Optionally add more libraries from the command line
238-
# using -DEXTRA_MYSQL_DEP=...
239-
IF (EXTRA_MYSQL_DEP)
240-
LIST(APPEND MYSQL_LIBRARIES ${EXTRA_MYSQL_DEP})
241-
ENDIF (EXTRA_MYSQL_DEP)
234+
_MYSQL_CONFIG(MYSQL_CLIB_DIR "(^| )-L" "--libs")
242235

243236
IF (NOT MYSQL_LIB_DIR)
244237
SET(MYSQL_LIB_DIR ${MYSQL_CLIB_DIR})
245238
ENDIF (NOT MYSQL_LIB_DIR)
246-
SET(MYSQL_CLIENT_LIBS ${MYSQL_LIBRARIES})
247-
ELSE (MYSQL_CONFIG_EXECUTABLE)
239+
ELSE (NOT MYSQL_LIB_DIR AND MYSQL_CONFIG_EXECUTABLE)
248240
FIND_LIBRARY(MYSQL_LIB
249241
NAMES
250242
${MYSQLCLIENT_LIB_NAME}
@@ -267,26 +259,26 @@ ELSE (WIN32)
267259
/opt/mysql/mysql/lib
268260
/opt/mysql/mysql/lib/mysql)
269261

270-
271262
SET(MYSQL_LIBRARIES ${MYSQL_LIB})
272-
273-
IF (MYSQLCLIENT_STATIC_LINKING)
274-
LIST(APPEND MYSQL_LIBRARIES "rt")
275-
ENDIF (MYSQLCLIENT_STATIC_LINKING)
276-
277-
# Optionally add more libraries from the command line
278-
# using -DEXTRA_MYSQL_DEP=...
279-
IF (EXTRA_MYSQL_DEP)
280-
LIST(APPEND MYSQL_LIBRARIES ${EXTRA_MYSQL_DEP})
281-
ENDIF (EXTRA_MYSQL_DEP)
282-
283-
SET(MYSQL_CLIENT_LIBS ${MYSQL_LIBRARIES})
284263
IF(MYSQL_LIB)
285264
GET_FILENAME_COMPONENT(MYSQL_LIB_DIR ${MYSQL_LIB} PATH)
286265
ENDIF(MYSQL_LIB)
287-
ENDIF (MYSQL_CONFIG_EXECUTABLE)
266+
ENDIF (NOT MYSQL_LIB_DIR AND MYSQL_CONFIG_EXECUTABLE)
267+
268+
IF (MYSQLCLIENT_STATIC_LINKING AND
269+
NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
270+
LIST(APPEND MYSQL_LIBRARIES "rt")
271+
ENDIF ()
288272
ENDIF (WIN32)
289273

274+
SET(MYSQL_CLIENT_LIBS ${MYSQL_LIBRARIES})
275+
276+
# Optionally add more libraries from the command line
277+
# using -DEXTRA_MYSQL_DEP=...
278+
IF (EXTRA_MYSQL_DEP)
279+
LIST(APPEND MYSQL_LIBRARIES ${EXTRA_MYSQL_DEP})
280+
ENDIF (EXTRA_MYSQL_DEP)
281+
290282

291283
SET(VERBOSE 1)
292284
IF (MYSQL_INCLUDE_DIR AND MYSQL_LIB_DIR)

0 commit comments

Comments
 (0)