From c104d31404c68b5622dc676d53308d02349755d1 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Tue, 8 Nov 2011 02:14:57 +0100 Subject: [PATCH] For libmysqld.so, apply patch to the MySQL Bug#39288 found here http://lists.mysql.com/commits/102373 It is better than previous attempts to build the libmysqld, as it also takes care of 1) -Wl,--no-undefined for shared libraries and 2) CLEAN_DIRECT_OUTPUT since there are now 2 libraries with the same base output name --- cmake/libutils.cmake | 9 +++++++++ libmysqld/CMakeLists.txt | 15 +++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/cmake/libutils.cmake b/cmake/libutils.cmake index 6dbaaef57aa..93e8994b021 100644 --- a/cmake/libutils.cmake +++ b/cmake/libutils.cmake @@ -277,6 +277,15 @@ MACRO(MERGE_LIBRARIES) MYSQL_INSTALL_TARGETS(${TARGET} DESTINATION "${INSTALL_LIBDIR}" ${COMP}) ENDIF() SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_INTERFACE_LIBRARIES "") + IF(ARG_SHARED AND LINK_FLAG_NO_UNDEFINED) + # Do not allow undefined symbols in shared libraries + GET_TARGET_PROPERTY(TARGET_LINK_FLAGS ${TARGET} LINK_FLAGS) + IF(NOT TARGET_LINK_FLAGS) + SET(TARGET_LINK_FLAGS) + ENDIF() + SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_FLAGS + "${TARGET_LINK_FLAGS} ${LINK_FLAG_NO_UNDEFINED}") + ENDIF() ENDMACRO() FUNCTION(GET_DEPENDEND_OS_LIBS target result) diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index b23b4fdab5f..9bafd7bad49 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -147,6 +147,17 @@ ENDIF() IF(NOT DISABLE_SHARED) MERGE_LIBRARIES(libmysqld SHARED mysqlserver EXPORTS ${CLIENT_API_FUNCTIONS} - COMPONENT Embedded VERSION ${SHARED_LIB_MAJOR_VERSION}) - SET_TARGET_PROPERTIES(libmysqld PROPERTIES PREFIX "") + COMPONENT Embedded) + IF(UNIX) + # Name the shared library, handle versioning (provides same api as client + # library hence the same version) + SET_TARGET_PROPERTIES(libmysqld PROPERTIES + OUTPUT_NAME mysqld + SOVERSION "${SHARED_LIB_MAJOR_VERSION}") + # Clean direct output flags, as 2 targets have the same base name + # libmysqld + SET_TARGET_PROPERTIES(libmysqld PROPERTIES CLEAN_DIRECT_OUTPUT 1) + SET_TARGET_PROPERTIES(mysqlserver PROPERTIES CLEAN_DIRECT_OUTPUT 1) + ENDIF() ENDIF() +