From 712f6f60953a0741563fe998f76c0d9968856e79 Mon Sep 17 00:00:00 2001
From: Pavel Parshin
Date: Sat, 19 Sep 2020 14:00:05 +0300
Subject: [PATCH] Updated MySQL submodule, fixed compilation and linker issues
---
.travis.yml | 2 +-
CMakeLists.txt | 72 ++++++++++++++++++++++-----------------------
collate.cpp | 27 ++++++++---------
field.cpp | 2 +-
mysql | 2 +-
nanomysql.h | 6 ++--
slave_log_event.cpp | 3 ++
slave_log_event.h | 23 +++++++++++++++
table.h | 2 +-
9 files changed, 81 insertions(+), 58 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 54a5074..fa93a2e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -41,7 +41,7 @@ before_install:
before_script:
- mkdir build
- cd build
- - cmake -DCMAKE_BUILD_TYPE=Release ..
+ - cmake -DCMAKE_BUILD_TYPE=Release ..
script:
- make
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e2fd6e5..1c67a45 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,6 +4,9 @@ PROJECT (libslave)
OPTION (BUILD_STATIC "Force building static library" ON)
OPTION (WITH_TESTING "Enable building the tests framework" OFF)
+SET (THREADS_PREFER_PTHREAD_FLAG ON)
+FIND_PACKAGE (Threads REQUIRED)
+
# Build flags
SET (CMAKE_CXX_STANDARD 14)
SET (CMAKE_CXX_STANDARD_REQUIRED TRUE)
@@ -21,66 +24,55 @@ IF (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
ADD_DEFINITIONS (-Wall)
ENDIF ()
-# Fixes a lot of annoying warnings about auto_ptr deprecation
-ADD_DEFINITIONS (-DBOOST_NO_AUTO_PTR)
-
-SET (BOOST_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+SET (BOOST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/boost)
SET (MYSQL_SRC ${CMAKE_CURRENT_SOURCE_DIR}/mysql)
SET (MYSQL_BIN ${CMAKE_BINARY_DIR}/mysql)
FILE (MAKE_DIRECTORY ${MYSQL_BIN})
-INCLUDE_DIRECTORIES (
- BEFORE SYSTEM
- ${MYSQL_BIN}/include
- ${MYSQL_SRC}/include
- ${MYSQL_SRC}/libbinlogevents/export
- ${BOOST_DIR}/boost_1_69_0/boost
-)
-ADD_CUSTOM_TARGET (
- fix_static_build
- WORKING_DIRECTORY ${MYSQL_BIN}
- COMMAND sed -i '/GET_TARGET_PROPERTY.*libmysql/s/libmysql/perconaserverclient/' ${MYSQL_SRC}/scripts/CMakeLists.txt
-)
ADD_CUSTOM_TARGET (
- mysql_configure
- WORKING_DIRECTORY ${MYSQL_BIN}
- DEPENDS fix_static_build
- COMMAND "${CMAKE_COMMAND}"
+ mysql_configure
+ WORKING_DIRECTORY ${MYSQL_BIN}
+ COMMAND "${CMAKE_COMMAND}"
-DCMAKE_BUILD_TYPE=Release
-DDISABLE_SHARED=1
-DENABLED_PROFILING=0
-DWITHOUT_SERVER=1
-DWITH_CLIENT_PROTOCOL_TRACING=0
-DWITH_DEFAULT_FEATURE_SET=0
- -DWITH_SSL=bundled
+ -DWITH_SSL=system
-DWITH_ZLIB=bundled
-DWITH_LIBEVENT=bundled
-DWITH_LZ4=bundled
-DWITH_PROTOBUF=bundled
-DWITH_EDITLINE=bundled
- -DDOWNLOAD_BOOST=1 -DWITH_BOOST=${BOOST_DIR}
+ -DDOWNLOAD_BOOST=1
+ -DDOWNLOAD_BOOST_TIMEOUT=1200
+ -DWITH_BOOST=${BOOST_DIR}
${MYSQL_SRC}
)
+
ADD_CUSTOM_TARGET (
- mysqlclient_build
- WORKING_DIRECTORY ${MYSQL_BIN}
- DEPENDS mysql_configure
- COMMAND ${CMAKE_COMMAND} --build . --target perconaserverclient
+ binlogevents_build
+ WORKING_DIRECTORY ${MYSQL_BIN}
+ DEPENDS mysql_configure
+ COMMAND ${CMAKE_COMMAND} --build . --target binlogevents_static
)
+
ADD_CUSTOM_TARGET (
- binlogevents_build
- WORKING_DIRECTORY ${MYSQL_BIN}
- DEPENDS mysql_configure
- COMMAND ${CMAKE_COMMAND} --build . --target binlogevents_static
+ mysql_client_build
+ WORKING_DIRECTORY ${MYSQL_BIN}
+ DEPENDS binlogevents_build
+ COMMAND ${CMAKE_COMMAND} --build . --target perconaserverclient
)
-ADD_LIBRARY (mysqlclient STATIC IMPORTED)
-ADD_DEPENDENCIES (mysqlclient mysqlclient_build)
-SET_PROPERTY (TARGET mysqlclient PROPERTY IMPORTED_LOCATION ${MYSQL_BIN}/archive_output_directory/libperconaserverclient.a)
-
ADD_LIBRARY (binlogevents STATIC IMPORTED)
ADD_DEPENDENCIES (binlogevents binlogevents_build)
-SET_PROPERTY (TARGET binlogevents PROPERTY IMPORTED_LOCATION ${MYSQL_BIN}/libbinlogevents/lib/libbinlogevents.a)
+SET_PROPERTY (TARGET binlogevents PROPERTY IMPORTED_LOCATION ${MYSQL_BIN}/libbinlogevents/lib/${CMAKE_STATIC_LIBRARY_PREFIX}binlogevents${CMAKE_STATIC_LIBRARY_SUFFIX})
+
+ADD_LIBRARY (libmysql STATIC IMPORTED)
+ADD_DEPENDENCIES (libmysql mysql_client_build)
+SET_TARGET_PROPERTIES (libmysql PROPERTIES IMPORTED_LOCATION ${MYSQL_BIN}/archive_output_directory/${CMAKE_STATIC_LIBRARY_PREFIX}perconaserverclient${CMAKE_STATIC_LIBRARY_SUFFIX})
+SET_TARGET_PROPERTIES (libmysql PROPERTIES INTERFACE_LINK_LIBRARIES binlogevents)
ADD_DEFINITIONS (-DDBUG_OFF)
SET (LINK_TYPE STATIC)
@@ -94,9 +86,15 @@ FILE (GLOB HDR "*.h")
INSTALL (FILES ${HDR} DESTINATION include)
AUX_SOURCE_DIRECTORY (${CMAKE_CURRENT_SOURCE_DIR} SRC)
-# Most probably static mysql is built without fPIC, so, we can't build dynamic library with it
ADD_LIBRARY (slave ${LINK_TYPE} ${SRC})
-TARGET_LINK_LIBRARIES (slave ${MYSQL_LIBS} -lpthread)
+TARGET_LINK_LIBRARIES (slave PUBLIC libmysql ssl crypto Threads::Threads m rt dl)
+TARGET_INCLUDE_DIRECTORIES (slave PUBLIC
+ ${MYSQL_BIN}/include
+ ${MYSQL_SRC}
+ ${MYSQL_SRC}/include
+ ${MYSQL_SRC}/libbinlogevents/export
+ ${BOOST_DIR}/boost_1_70_0
+ )
INSTALL (TARGETS slave DESTINATION lib64)
IF (WITH_TESTING)
diff --git a/collate.cpp b/collate.cpp
index 62ca6d8..cdebfbc 100644
--- a/collate.cpp
+++ b/collate.cpp
@@ -1,11 +1,10 @@
+#include "nanomysql.h"
+#include "collate.h"
+
#include