Author: Adam Majer Date: Thu Mar 23 11:54:11 CET 2017 Summary: Build private symbols library Some of the private symbols have very generic names and are required by other connectors, like the ODBC connector. Instead of using static linking, create a private shared library that simply exports all symbols. With the exception of exported symbols, it is identical to the regular library. Index: mariadb-connector-c-3.0.2-src/libmariadb/CMakeLists.txt =================================================================== --- mariadb-connector-c-3.0.2-src.orig/libmariadb/CMakeLists.txt +++ mariadb-connector-c-3.0.2-src/libmariadb/CMakeLists.txt @@ -400,16 +400,24 @@ IF(CMAKE_SIZEOF_VOID_P EQUAL 8 AND MSVC) SET_TARGET_PROPERTIES(mariadbclient PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64") ENDIF() +ADD_LIBRARY(libmariadbprivate SHARED ${libmariadb_RC} $ ${EMPTY_FILE} ${EXPORT_LINK}) +TARGET_LINK_LIBRARIES(libmariadbprivate ${SYSTEM_LIBS}) +IF(UNIX) + SET_TARGET_PROPERTIES(libmariadbprivate PROPERTIES COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}") +ENDIF() + 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 (libmariadbprivate "-Wl,--no-undefined") ENDIF() SET_TARGET_PROPERTIES(mariadbclient PROPERTIES IMPORTED_INTERFACE_LINK_LIBRARIES "${SYSTEM_LIBS}") SET_TARGET_PROPERTIES(libmariadb PROPERTIES IMPORTED_INTERFACE_LINK_LIBRARIES "${SYSTEM_LIBS}") +SET_TARGET_PROPERTIES(libmariadbprivate PROPERTIES PREFIX "") SET_TARGET_PROPERTIES(libmariadb PROPERTIES PREFIX "") # @@ -439,6 +447,9 @@ INSTALL(TARGETS mariadbclient INSTALL(TARGETS libmariadb COMPONENT SharedLibraries DESTINATION ${INSTALL_LIBDIR}) +INSTALL(TARGETS libmariadbprivate + COMPONENT SharedLibraries + DESTINATION ${INSTALL_LIBDIR}) IF(WIN32) # On Windows, install PDB Index: mariadb-connector-c-3.0.2-src/mariadb_config/mariadb_config.c.in =================================================================== --- mariadb-connector-c-3.0.2-src.orig/mariadb_config/mariadb_config.c.in +++ mariadb-connector-c-3.0.2-src/mariadb_config/mariadb_config.c.in @@ -8,6 +8,8 @@ static char *mariadb_progname; #define INCLUDE "-I@INSTALL_INCLUDEDIR@ -I@INSTALL_INCLUDEDIR@/mariadb" #define LIBS "-L@INSTALL_LIBDIR@ -lmariadb "\ "@extra_dynamic_LDFLAGS@" +#define PRIVATE_LIBS "-L@INSTALL_LIBDIR@ -lmariadbprivate " \ + "@extra_dynamic_LDFLAGS@" #define LIBS_SYS "@extra_dynamic_LDFLAGS@" #define CFLAGS INCLUDE #define VERSION "@MARIADB_CLIENT_VERSION@" @@ -27,6 +29,7 @@ static struct option long_options[]= {"version", no_argument, 0, 'f'}, {"socket", no_argument, 0, 'g'}, {"port", no_argument, 0, 'h'}, + {"privatelibs", no_argument, 0, 'i'}, {"plugindir", no_argument, 0, 'p'}, {"tlsinfo", no_argument, 0, 't'}, {NULL, 0, 0, 0} @@ -43,6 +46,7 @@ static const char *values[]= VERSION, SOCKET, PORT, + PRIVATE_LIBS, PLUGIN_DIR, TLS_LIBRARY_VERSION }; @@ -101,6 +105,9 @@ int main(int argc, char **argv) case 'h': puts(PORT); break; + case 'i': + puts(PRIVATE_LIBS); + break; case 'p': puts(PLUGIN_DIR); break;