Skip to content

Commit 9d3d99d

Browse files
author
Tor Didriksen
committed
Bug#16200717 WRONG OUTPUT FROM MYSQL_CONFIG --LIBS
Output from 'mysql_config --libs' included: -lpthread -lprobes_mysql -lm -lrt -lssl -lcrypto -ldl For some build configurations, we merge ssl libraries into the client libs. For these builds, -lssl and -lcrypto should not be mentioned. The 'probes_mysql' should also go away (there is no such library)
1 parent 06c5863 commit 9d3d99d

File tree

5 files changed

+70
-42
lines changed

5 files changed

+70
-42
lines changed

cmake/create_initial_db.cmake.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ SET(CMAKE_CFG_INTDIR "@CMAKE_CFG_INTDIR@")
2121

2222
SET(WITH_SSL_PATH "@WITH_SSL_PATH@")
2323
SET(CRYPTO_LIBRARY "@CRYPTO_LIBRARY@")
24-
SET(OPENSSL_LIBRARY "@OPENSSL_LIBRARIES@")
24+
SET(OPENSSL_LIBRARY "@OPENSSL_LIBRARY@")
2525

2626
SET(WIN32 "@WIN32@")
2727

cmake/dtrace.cmake

+26-30
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,6 @@ IF(ENABLE_DTRACE)
7474
${CMAKE_BINARY_DIR}/include/probes_mysql_dtrace.h
7575
${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h
7676
)
77-
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
78-
# Systemtap object
79-
EXECUTE_PROCESS(
80-
COMMAND ${DTRACE} -G -s ${CMAKE_SOURCE_DIR}/include/probes_mysql.d.base
81-
-o ${CMAKE_BINARY_DIR}/probes_mysql.o
82-
)
83-
ENDIF()
8477
ADD_CUSTOM_TARGET(gen_dtrace_header
8578
DEPENDS
8679
${CMAKE_BINARY_DIR}/include/probes_mysql.d
@@ -99,12 +92,7 @@ FUNCTION(DTRACE_INSTRUMENT target)
9992
IF(ENABLE_DTRACE)
10093
ADD_DEPENDENCIES(${target} gen_dtrace_header)
10194

102-
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
103-
TARGET_LINK_LIBRARIES(${target} ${CMAKE_BINARY_DIR}/probes_mysql.o)
104-
ENDIF()
105-
106-
# On Solaris, invoke dtrace -G to generate object file and
107-
# link it together with target.
95+
# Invoke dtrace to generate object file and link it together with target.
10896
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
10997
SET(objdir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.dir)
11098
SET(outfile ${objdir}/${target}_dtrace.o)
@@ -121,24 +109,32 @@ FUNCTION(DTRACE_INSTRUMENT target)
121109
-P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake
122110
WORKING_DIRECTORY ${objdir}
123111
)
124-
# Add full object path to linker flags
125-
GET_TARGET_PROPERTY(target_type ${target} TYPE)
126-
IF(NOT target_type MATCHES "STATIC")
127-
SET_TARGET_PROPERTIES(${target} PROPERTIES LINK_FLAGS "${outfile}")
128-
ELSE()
129-
# For static library flags, add the object to the library.
130-
# Note: DTrace probes in static libraries are unusable currently
131-
# (see explanation for DTRACE_INSTRUMENT_STATIC_LIBS below)
132-
# but maybe one day this will be fixed.
133-
GET_TARGET_PROPERTY(target_location ${target} LOCATION)
134-
ADD_CUSTOM_COMMAND(
135-
TARGET ${target} POST_BUILD
136-
COMMAND ${CMAKE_AR} r ${target_location} ${outfile}
137-
COMMAND ${CMAKE_RANLIB} ${target_location}
112+
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
113+
SET(outfile "${CMAKE_BINARY_DIR}/probes_mysql.o")
114+
# Systemtap object
115+
EXECUTE_PROCESS(
116+
COMMAND ${DTRACE} -G -s ${CMAKE_SOURCE_DIR}/include/probes_mysql.d.base
117+
-o ${outfile}
118+
)
119+
ENDIF()
120+
121+
# Add full object path to linker flags
122+
GET_TARGET_PROPERTY(target_type ${target} TYPE)
123+
IF(NOT target_type MATCHES "STATIC")
124+
SET_TARGET_PROPERTIES(${target} PROPERTIES LINK_FLAGS "${outfile}")
125+
ELSE()
126+
# For static library flags, add the object to the library.
127+
# Note: DTrace probes in static libraries are unusable currently
128+
# (see explanation for DTRACE_INSTRUMENT_STATIC_LIBS below)
129+
# but maybe one day this will be fixed.
130+
GET_TARGET_PROPERTY(target_location ${target} LOCATION)
131+
ADD_CUSTOM_COMMAND(
132+
TARGET ${target} POST_BUILD
133+
COMMAND ${CMAKE_AR} r ${target_location} ${outfile}
134+
COMMAND ${CMAKE_RANLIB} ${target_location}
138135
)
139-
# Used in DTRACE_INSTRUMENT_WITH_STATIC_LIBS
140-
SET(TARGET_OBJECT_DIRECTORY_${target} ${objdir} CACHE INTERNAL "")
141-
ENDIF()
136+
# Used in DTRACE_INSTRUMENT_WITH_STATIC_LIBS
137+
SET(TARGET_OBJECT_DIRECTORY_${target} ${objdir} CACHE INTERNAL "")
142138
ENDIF()
143139
ENDIF()
144140
ENDFUNCTION()

cmake/libutils.cmake

+2-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ ENDMACRO()
126126

127127
MACRO(MERGE_STATIC_LIBS TARGET OUTPUT_NAME LIBS_TO_MERGE)
128128
# To produce a library we need at least one source file.
129-
# It is created by ADD_CUSTOM_COMMAND below and will helps
129+
# It is created by ADD_CUSTOM_COMMAND below and will
130130
# also help to track dependencies.
131131
SET(SOURCE_FILE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_depends.c)
132132
ADD_LIBRARY(${TARGET} STATIC ${SOURCE_FILE})
@@ -158,6 +158,7 @@ MACRO(MERGE_STATIC_LIBS TARGET OUTPUT_NAME LIBS_TO_MERGE)
158158
IF(OSLIBS)
159159
LIST(REMOVE_DUPLICATES OSLIBS)
160160
TARGET_LINK_LIBRARIES(${TARGET} ${OSLIBS})
161+
MESSAGE(STATUS "Library ${TARGET} depends on OSLIBS ${OSLIBS}")
161162
ENDIF()
162163

163164
# Make the generated dummy source file depended on all static input

cmake/ssl.cmake

+36-8
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,13 @@ MACRO (MYSQL_CHECK_SSL)
105105
UNSET(OPENSSL_APPLINK_C)
106106
UNSET(OPENSSL_APPLINK_C CACHE)
107107
ENDIF()
108-
IF (OPENSSL_LIBRARIES)
109-
UNSET(OPENSSL_LIBRARIES)
110-
UNSET(OPENSSL_LIBRARIES CACHE)
108+
IF (OPENSSL_LIBRARY)
109+
UNSET(OPENSSL_LIBRARY)
110+
UNSET(OPENSSL_LIBRARY CACHE)
111+
ENDIF()
112+
IF (CRYPTO_LIBRARY)
113+
UNSET(CRYPTO_LIBRARY)
114+
UNSET(CRYPTO_LIBRARY CACHE)
111115
ENDIF()
112116
ELSEIF(WITH_SSL STREQUAL "system" OR
113117
WITH_SSL STREQUAL "yes" OR
@@ -142,7 +146,7 @@ MACRO (MYSQL_CHECK_SSL)
142146
# We prefer static libraries, so we revert it here.
143147
LIST(REVERSE CMAKE_FIND_LIBRARY_SUFFIXES)
144148
MESSAGE(STATUS "suffixes <${CMAKE_FIND_LIBRARY_SUFFIXES}>")
145-
FIND_LIBRARY(OPENSSL_LIBRARIES
149+
FIND_LIBRARY(OPENSSL_LIBRARY
146150
NAMES ssl ssleay32 ssleay32MD
147151
HINTS ${OPENSSL_ROOT_DIR}/lib)
148152
FIND_LIBRARY(CRYPTO_LIBRARY
@@ -163,7 +167,7 @@ MACRO (MYSQL_CHECK_SSL)
163167
)
164168

165169
IF(OPENSSL_INCLUDE_DIR AND
166-
OPENSSL_LIBRARIES AND
170+
OPENSSL_LIBRARY AND
167171
CRYPTO_LIBRARY AND
168172
OPENSSL_MAJOR_VERSION STREQUAL "1"
169173
)
@@ -172,8 +176,32 @@ MACRO (MYSQL_CHECK_SSL)
172176
SET(OPENSSL_FOUND FALSE)
173177
ENDIF()
174178

179+
# If we are invoked with -DWITH_SSL=/path/to/custom/openssl
180+
# and we have found static libraries, then link them statically
181+
# into our executables and libraries.
182+
# Adding IMPORTED_LOCATION allows MERGE_STATIC_LIBS
183+
# to get LOCATION and do correct dependency analysis.
184+
SET(MY_CRYPTO_LIBRARY "${CRYPTO_LIBRARY}")
185+
SET(MY_OPENSSL_LIBRARY "${OPENSSL_LIBRARY}")
186+
IF (WITH_SSL_PATH)
187+
GET_FILENAME_COMPONENT(CRYPTO_EXT "${CRYPTO_LIBRARY}" EXT)
188+
GET_FILENAME_COMPONENT(OPENSSL_EXT "${OPENSSL_LIBRARY}" EXT)
189+
IF (CRYPTO_EXT STREQUAL ".a")
190+
SET(MY_CRYPTO_LIBRARY imported_crypto)
191+
ADD_LIBRARY(imported_crypto STATIC IMPORTED)
192+
SET_TARGET_PROPERTIES(imported_crypto
193+
PROPERTIES IMPORTED_LOCATION "${CRYPTO_LIBRARY}")
194+
ENDIF()
195+
IF (OPENSSL_EXT STREQUAL ".a")
196+
SET(MY_OPENSSL_LIBRARY imported_openssl)
197+
ADD_LIBRARY(imported_openssl STATIC IMPORTED)
198+
SET_TARGET_PROPERTIES(imported_openssl
199+
PROPERTIES IMPORTED_LOCATION "${OPENSSL_LIBRARY}")
200+
ENDIF()
201+
ENDIF()
202+
175203
MESSAGE(STATUS "OPENSSL_INCLUDE_DIR = ${OPENSSL_INCLUDE_DIR}")
176-
MESSAGE(STATUS "OPENSSL_LIBRARIES = ${OPENSSL_LIBRARIES}")
204+
MESSAGE(STATUS "OPENSSL_LIBRARY = ${OPENSSL_LIBRARY}")
177205
MESSAGE(STATUS "CRYPTO_LIBRARY = ${CRYPTO_LIBRARY}")
178206
MESSAGE(STATUS "OPENSSL_MAJOR_VERSION = ${OPENSSL_MAJOR_VERSION}")
179207

@@ -183,7 +211,7 @@ MACRO (MYSQL_CHECK_SSL)
183211
HAVE_SHA512_DIGEST_LENGTH)
184212
IF(OPENSSL_FOUND AND HAVE_SHA512_DIGEST_LENGTH)
185213
SET(SSL_SOURCES "")
186-
SET(SSL_LIBRARIES ${OPENSSL_LIBRARIES} ${CRYPTO_LIBRARY})
214+
SET(SSL_LIBRARIES ${MY_OPENSSL_LIBRARY} ${MY_CRYPTO_LIBRARY})
187215
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
188216
SET(SSL_LIBRARIES ${SSL_LIBRARIES} ${LIBSOCKET})
189217
ENDIF()
@@ -216,7 +244,7 @@ ENDMACRO()
216244
MACRO (COPY_OPENSSL_DLLS target_name)
217245
IF (WIN32 AND WITH_SSL_PATH)
218246
GET_FILENAME_COMPONENT(CRYPTO_NAME "${CRYPTO_LIBRARY}" NAME_WE)
219-
GET_FILENAME_COMPONENT(OPENSSL_NAME "${OPENSSL_LIBRARIES}" NAME_WE)
247+
GET_FILENAME_COMPONENT(OPENSSL_NAME "${OPENSSL_LIBRARY}" NAME_WE)
220248
FILE(GLOB HAVE_CRYPTO_DLL "${WITH_SSL_PATH}/bin/${CRYPTO_NAME}.dll")
221249
FILE(GLOB HAVE_OPENSSL_DLL "${WITH_SSL_PATH}/bin/${OPENSSL_NAME}.dll")
222250
IF (HAVE_CRYPTO_DLL AND HAVE_OPENSSL_DLL)

libmysql/CMakeLists.txt

+5-2
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ IF(WIN32)
173173
ENDIF()
174174

175175
# Merge several convenience libraries into one big mysqlclient
176-
# and link them together into shared library.
177176
MERGE_LIBRARIES(mysqlclient STATIC ${LIBS} COMPONENT Development)
178177

179178
# Visual Studio users need debug static library for debug projects
@@ -197,7 +196,11 @@ IF(UNIX)
197196
ENDIF()
198197

199198
IF(NOT DISABLE_SHARED)
200-
MERGE_LIBRARIES(libmysql SHARED ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS} COMPONENT SharedLibraries)
199+
# Merge several convenience libraries into one big mysqlclient
200+
# and link them together into shared library.
201+
MERGE_LIBRARIES(libmysql SHARED ${LIBS}
202+
EXPORTS ${CLIENT_API_FUNCTIONS}
203+
COMPONENT SharedLibraries)
201204
IF(UNIX)
202205
# libtool compatability
203206
IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR APPLE)

0 commit comments

Comments
 (0)