Skip to content

Commit

Permalink
MDEV-13588 /usr/lib/x86_64-linux-gnu/libmariadbclient.so.18: version …
Browse files Browse the repository at this point in the history
…`libmariadbclient_18' not found

MDEV-13593 dlopen failure loading after upgrade from 10.2.6 to 10.2.8
MDEV-13619 libmariadb missing version info for libmariadbclient_18
MDEV-13615 MariaDB 10.2 client library (Debian 9/Stretch) not compatible with Perl MySQL DBI module

Debian 9, just for the fun of it, I presume, renamed
version nodes in the libmysqlclient.so, introducing
new incompatible with anything, version
"libmariadbclient_18". This version will supposedly
disappear in Debian 10 (breaking compatibility again).

But libmariadb.so.3 needs to be compatible with
Debian 8 (libmysqlclient_18),
Debian 9 (libmariadbclient_18), and, in the future,
Debian 10 (libmariadb_3?). At the same time!

To achieve this remarkable feat we version old symbols
with libmysqlclient_18, and (!) alias them into
libmariadbclient_18. New symbols are versioned under
libmariadb_3.
  • Loading branch information
vuvova committed Sep 16, 2017
1 parent 6604a4b commit f91561b
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 23 deletions.
21 changes: 12 additions & 9 deletions cmake/export.cmake
Expand Up @@ -5,23 +5,26 @@
# BSD license.
# For details see the COPYING-CMAKE-SCRIPTS file.
#
MACRO(CREATE_EXPORT_FILE targetname directory version symbols append include_version)
SET(EXPORT_FILE "${directory}/${targetname}.def")
MACRO(CREATE_EXPORT_FILE op outfile version symbols alias_version)
IF(WIN32)
SET(EXPORT_CONTENT "EXPORTS\n")
FOREACH(exp_symbol ${symbols})
SET(EXPORT_CONTENT ${EXPORT_CONTENT} "${exp_symbol}\n")
ENDFOREACH()
ELSE()
SET(EXPORT_CONTENT "${version} {\nglobal:\n")
SET(EXPORT_CONTENT "VERSION {\n${version} {\nglobal:\n")
FOREACH(exp_symbol ${symbols})
SET(EXPORT_CONTENT "${EXPORT_CONTENT} ${exp_symbol}\\;\n")
ENDFOREACH()
SET(EXPORT_CONTENT "${EXPORT_CONTENT}local:\n *\\;\n}${include_version}\\;\n")
ENDIF()
IF(${append} STREQUAL "1")
FILE(APPEND ${EXPORT_FILE} ${EXPORT_CONTENT})
ELSE()
FILE(WRITE ${EXPORT_FILE} ${EXPORT_CONTENT})
SET(EXPORT_CONTENT "${EXPORT_CONTENT}local:\n *\\;\n}\\;\n")
IF ("${alias_version}" STRGREATER "")
SET(EXPORT_CONTENT "${EXPORT_CONTENT}${alias_version} {\n}\\;\n}\\;\n")
FOREACH(exp_symbol ${symbols})
SET(EXPORT_CONTENT "${EXPORT_CONTENT}\"${exp_symbol}@${alias_version}\" = ${exp_symbol}\\;\n")
ENDFOREACH()
ELSE()
SET(EXPORT_CONTENT "${EXPORT_CONTENT}}\\;\n")
ENDIF()
ENDIF()
FILE(${op} ${CMAKE_CURRENT_BINARY_DIR}/${outfile} ${EXPORT_CONTENT})
ENDMACRO()
21 changes: 7 additions & 14 deletions libmariadb/CMakeLists.txt
Expand Up @@ -331,25 +331,18 @@ SET(MARIADB_LIB_SYMBOLS ${MARIADB_LIB_SYMBOLS} ${MARIADB_NONBLOCK_SYMBOLS})

INCLUDE(${CC_SOURCE_DIR}/cmake/export.cmake)
IF(NOT WIN32)
CREATE_EXPORT_FILE(mariadbclient
${CMAKE_CURRENT_BINARY_DIR}
CREATE_EXPORT_FILE(WRITE mariadbclient.def
"libmysqlclient_18"
"${MYSQL_LIB_SYMBOLS}"
0
"")
CREATE_EXPORT_FILE(mariadbclient
${CMAKE_CURRENT_BINARY_DIR}
"libmariadbclient_18")
CREATE_EXPORT_FILE(APPEND mariadbclient.def
"libmariadb_3"
"${MARIADB_LIB_SYMBOLS}"
1
" libmysqlclient_18")
"")
ELSE()
SET(MARIADB_LIB_SYMBOLS ${MARIADB_LIB_SYMBOLS} ${MYSQL_LIB_SYMBOLS})
CREATE_EXPORT_FILE(mariadbclient
${CMAKE_CURRENT_BINARY_DIR}
CREATE_EXPORT_FILE(WRITE mariadbclient.def
"libmariadb_3"
"${MARIADB_LIB_SYMBOLS}"
0
"${MARIADB_LIB_SYMBOLS};${MYSQL_LIB_SYMBOLS}"
"")
ENDIF()

Expand Down Expand Up @@ -404,7 +397,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
IF (NOT WITH_ASAN)
TARGET_LINK_LIBRARIES (libmariadb "-Wl,--no-undefined")
ENDIF()
TARGET_LINK_LIBRARIES (libmariadb "-Wl,--version-script=${CC_BINARY_DIR}/libmariadb/mariadbclient.def")
TARGET_LINK_LIBRARIES (libmariadb "${CC_BINARY_DIR}/libmariadb/mariadbclient.def")
ENDIF()

SET_TARGET_PROPERTIES(mariadbclient PROPERTIES IMPORTED_INTERFACE_LINK_LIBRARIES "${SYSTEM_LIBS}")
Expand Down

0 comments on commit f91561b

Please sign in to comment.