Skip to content

Commit

Permalink
HPCC-29424 Bump libmysql to v8.0.32
Browse files Browse the repository at this point in the history
Signed-off-by: Gordon Smith <GordonJSmith@gmail.com>
  • Loading branch information
GordonSmith committed Apr 25, 2023
1 parent d49b814 commit 7056148
Show file tree
Hide file tree
Showing 13 changed files with 489 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@
*.psd -text
*.doc -text
*.mk -text
*.patch -text
ecl/regress/crmultiline*.ecl eol=crlf
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ include(${HPCC_SOURCE_DIR}/version.cmake)
set(VCPKG_FILES_DIR "${CMAKE_BINARY_DIR}" CACHE STRING "Folder for vcpkg download, build and installed files")
set(CMAKE_TOOLCHAIN_FILE ${HPCC_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake)
set(VCPKG_ROOT ${HPCC_SOURCE_DIR}/vcpkg)
set(VCPKG_OVERLAY_PORTS ${HPCC_SOURCE_DIR}/vcpkg/overlays)
set(VCPKG_OVERLAY_PORTS ${HPCC_SOURCE_DIR}/vcpkg_overlays;${HPCC_SOURCE_DIR}/vcpkg/overlays)
set(VCPKG_INSTALLED_DIR "${VCPKG_FILES_DIR}/vcpkg_installed")
set(VCPKG_INSTALL_OPTIONS "--downloads-root=${VCPKG_FILES_DIR}/vcpkg_downloads;--x-buildtrees-root=${VCPKG_FILES_DIR}/vcpkg_buildtrees;--x-packages-root=${VCPKG_FILES_DIR}/vcpkg_packages")
set(VCPKG_VERBOSE OFF)
Expand Down
2 changes: 2 additions & 0 deletions dockerfiles/vcpkg/centos-7.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ RUN wget https://cran.r-project.org/src/contrib/Archive/RInside/${RInside_packag
RUN R CMD INSTALL ${Rcpp_package} ${RInside_package}
RUN rm -f ${Rcpp_package} ${RInside_package}

RUN yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils

WORKDIR /hpcc-dev

ENTRYPOINT ["/bin/bash", "--login", "-c"]
2 changes: 2 additions & 0 deletions dockerfiles/vcpkg/centos-8.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ RUN yum install -y \
R-Rcpp-devel \
R-RInside-devel

RUN dnf -y install gcc-toolset-11-gcc gcc-toolset-11-gcc-c++

WORKDIR /hpcc-dev

ENTRYPOINT ["/bin/bash", "--login", "-c"]
20 changes: 20 additions & 0 deletions vcpkg_overlays/libmysql/Add-target-include-directories.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
diff --git a/cmake/libutils.cmake b/cmake/libutils.cmake
index ae13a63dfdc..b450b3c2e4c 100644
--- a/cmake/libutils.cmake
+++ b/cmake/libutils.cmake
@@ -222,6 +222,7 @@ MACRO(MERGE_LIBRARIES_SHARED TARGET_ARG)
ADD_VERSION_INFO(${TARGET} SHARED SRC)
ENDIF()
ADD_LIBRARY(${TARGET} SHARED ${SRC})
+ TARGET_INCLUDE_DIRECTORIES(${TARGET} INTERFACE $<INSTALL_INTERFACE:include>)

IF(ARG_EXCLUDE_FROM_ALL)
IF(NOT ARG_SKIP_INSTALL)
@@ -361,6 +362,7 @@ MACRO(MERGE_CONVENIENCE_LIBRARIES TARGET_ARG)
CONFIGURE_FILE_CONTENT("${SOURCE_FILE_CONTENT}" "${SOURCE_FILE}")

ADD_LIBRARY(${TARGET} STATIC ${SOURCE_FILE})
+ TARGET_INCLUDE_DIRECTORIES(${TARGET} INTERFACE $<INSTALL_INTERFACE:include>)
MY_CHECK_CXX_COMPILER_WARNING("-Wmissing-profile" HAS_MISSING_PROFILE)
IF(FPROFILE_USE AND HAS_MISSING_PROFILE)
ADD_COMPILE_FLAGS(${SOURCE_FILE} COMPILE_FLAGS ${HAS_MISSING_PROFILE})
142 changes: 142 additions & 0 deletions vcpkg_overlays/libmysql/export-cmake-targets.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake
index 870c9f13732..98bc3ea15e4 100644
--- a/cmake/install_macros.cmake
+++ b/cmake/install_macros.cmake
@@ -97,7 +97,7 @@ ENDFUNCTION()
FUNCTION(MYSQL_INSTALL_TARGET target_arg)
CMAKE_PARSE_ARGUMENTS(ARG
"NAMELINK_SKIP"
- "DESTINATION;COMPONENT"
+ "DESTINATION;COMPONENT;EXPORT"
""
${ARGN}
)
@@ -113,10 +113,21 @@ FUNCTION(MYSQL_INSTALL_TARGET target_arg)
IF(ARG_NAMELINK_SKIP)
SET(LIBRARY_INSTALL_ARGS NAMELINK_SKIP)
ENDIF()
- INSTALL(TARGETS ${target}
- RUNTIME DESTINATION ${ARG_DESTINATION} ${COMP}
- ARCHIVE DESTINATION ${ARG_DESTINATION} ${COMP}
- LIBRARY DESTINATION ${ARG_DESTINATION} ${COMP} ${LIBRARY_INSTALL_ARGS})
+ IF (ARG_EXPORT)
+ FILE(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${ARG_EXPORT}-config.cmake"
+"include(CMakeFindDependencyMacro)
+find_dependency(ZLIB)
+find_dependency(OpenSSL)
+find_dependency(Threads)
+include(\"\${CMAKE_CURRENT_LIST_DIR}/${ARG_EXPORT}-targets.cmake\")
+")
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${ARG_EXPORT}-config.cmake DESTINATION share/${ARG_EXPORT})
+ set(EXPORT_ARGS EXPORT ${ARG_EXPORT}-targets)
+ ENDIF()
+ INSTALL(TARGETS ${target} ${EXPORT_ARGS} RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib ${COMP})
+ IF (ARG_EXPORT)
+ INSTALL(${EXPORT_ARGS} DESTINATION share/${ARG_EXPORT})
+ ENDIF()
SET(INSTALL_LOCATION ${ARG_DESTINATION} )
INSTALL_DEBUG_SYMBOLS(${target})
SET(INSTALL_LOCATION)
diff --git a/cmake/libutils.cmake b/cmake/libutils.cmake
index ae13a63dfdc..ee9462c4c90 100644
--- a/cmake/libutils.cmake
+++ b/cmake/libutils.cmake
@@ -297,8 +297,7 @@ MACRO(MERGE_LIBRARIES_SHARED TARGET_ARG)
IF(ARG_NAMELINK_SKIP)
SET(INSTALL_ARGS NAMELINK_SKIP)
ENDIF()
- MYSQL_INSTALL_TARGET(${TARGET} DESTINATION "${DESTINATION}" ${COMP}
- ${INSTALL_ARGS})
+ MYSQL_INSTALL_TARGET(${TARGET} EXPORT unofficial-libmysql DESTINATION "${INSTALL_LIBDIR}" ${COMP})
ENDIF()

IF(WIN32)
@@ -545,8 +544,7 @@ FUNCTION(ADD_SHARED_LIBRARY TARGET_ARG)
ELSE()
SET(COMP COMPONENT SharedLibraries)
ENDIF()
- MYSQL_INSTALL_TARGET(
- ${TARGET} DESTINATION "${DESTINATION}" ${COMP})
+ MYSQL_INSTALL_TARGET(${TARGET} EXPORT unofficial-libmysql DESTINATION "${INSTALL_LIBDIR}" ${COMP})
ENDIF()

IF(ARG_COMPILE_DEFINITIONS)
diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt
index 2ee26bfa284..46583f4f0a3 100644
--- a/libmysql/CMakeLists.txt
+++ b/libmysql/CMakeLists.txt
@@ -277,6 +277,14 @@ ENDIF()
# LDAP authentication SASL client plug-in
ADD_SUBDIRECTORY(authentication_ldap)

+IF (BUILD_SHARED_LIBS)
+ set(INSTALL_SHARED )
+ set(INSTALL_STATIC SKIP_INSTALL)
+ELSE()
+ set(INSTALL_SHARED SKIP_INSTALL)
+ set(INSTALL_STATIC )
+ENDIF()
+
# FIDO authentication client plugin
ADD_SUBDIRECTORY(authentication_fido)

@@ -287,7 +295,7 @@ ADD_SUBDIRECTORY(authentication_kerberos)
ADD_SUBDIRECTORY(authentication_oci_client)

# Merge several convenience libraries into one big mysqlclient
-MERGE_CONVENIENCE_LIBRARIES(mysqlclient ${LIBS_TO_MERGE}
+MERGE_CONVENIENCE_LIBRARIES(mysqlclient ${LIBS_TO_MERGE} ${INSTALL_STATIC}
COMPONENT Development
LINK_LIBRARIES ${LIBS_TO_LINK}
)
@@ -403,6 +403,7 @@ CONFIGURE_FILE(api_test.c.in ${CMAKE_CURRENT_BINARY_DIR}/api_test.c)
# from @CLIENT_API_FUNCTIONS@ are declared by <mysql.h>. It will fail
# to run if not all of these symbols are exported by the library.
#
+IF (ENABLE_TESTING)
MYSQL_ADD_EXECUTABLE(libmysql_api_test
${CMAKE_CURRENT_BINARY_DIR}/api_test.c
LINK_LIBRARIES libmysql ${LIBRT}
@@ -410,6 +411,7 @@ MYSQL_ADD_EXECUTABLE(libmysql_api_test
)
# Clang/UBSAN needs this on some platforms.
SET_TARGET_PROPERTIES(libmysql_api_test PROPERTIES LINKER_LANGUAGE CXX)
+ENDIF()

IF(MY_COMPILER_IS_GNU)
ADD_COMPILE_FLAGS(
@@ -426,9 +428,11 @@ IF(HAS_WARN_FLAG)
)
ENDIF()

+IF (ENABLE_TESTING)
# Verify that libmysql_api_test runs OK
MY_ADD_CUSTOM_TARGET(run_libmysql_api_test ALL
DEPENDS libmysql_api_test
COMMAND libmysql_api_test
> ${CMAKE_CURRENT_BINARY_DIR}/libmysql_api_test.out
)
+ENDIF()
\ No newline at end of file
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
index a5fa18e..0f2e15c 100644
--- a/scripts/CMakeLists.txt
+++ b/scripts/CMakeLists.txt
@@ -329,13 +329,13 @@ MACRO(EXTRACT_LINK_LIBRARIES target var)
STRING(REGEX REPLACE "^[ ]+" "" ${var} "${${var}}")
STRING(REGEX REPLACE "[ ]+$" "" ${var} "${${var}}")
ENDMACRO()
-
+IF (NOT BUILD_SHARED_LIBS)
EXTRACT_LINK_LIBRARIES(mysqlclient CLIENT_LIBS)
-
-IF(MSVC)
+ENDIF()
+IF(MSVC AND NOT BUILD_SHARED_LIBS)
GET_TARGET_PROPERTY(LIBMYSQL_OS_SHLIB_VERSION mysqlclient VERSION)
GET_TARGET_PROPERTY(LIBMYSQL_OS_OUTPUT_NAME mysqlclient OUTPUT_NAME)
-ELSE()
+ELSEIF(BUILD_SHARED_LIBS)
GET_TARGET_PROPERTY(LIBMYSQL_OS_SHLIB_VERSION libmysql VERSION)
GET_TARGET_PROPERTY(LIBMYSQL_OS_OUTPUT_NAME libmysql OUTPUT_NAME)
ENDIF()
13 changes: 13 additions & 0 deletions vcpkg_overlays/libmysql/homebrew.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 52d12a15190..6033494e4f0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1929,7 +1929,7 @@ IF(APPLE)
GET_FILENAME_COMPONENT(HOMEBREW_BASE ${HOMEBREW_HOME} DIRECTORY)
IF(EXISTS ${HOMEBREW_BASE}/include/boost)
FOREACH(SYSTEM_LIB ICU LIBEVENT LZ4 PROTOBUF ZSTD FIDO)
- IF(WITH_${SYSTEM_LIB} STREQUAL "system")
+ IF(FALSE)
MESSAGE(FATAL_ERROR
"WITH_${SYSTEM_LIB}=system is not compatible with Homebrew boost\n"
"MySQL depends on ${BOOST_PACKAGE_NAME} with a set of patches.\n"
13 changes: 13 additions & 0 deletions vcpkg_overlays/libmysql/ignore-boost-version.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/cmake/boost.cmake b/cmake/boost.cmake
index e879484a9d9..437b77ff49a 100644
--- a/cmake/boost.cmake
+++ b/cmake/boost.cmake
@@ -301,7 +301,7 @@ IF(NOT BOOST_MAJOR_VERSION EQUAL 10)
COULD_NOT_FIND_BOOST()
ENDIF()

-IF(NOT BOOST_MINOR_VERSION EQUAL 77)
+IF(NOT BOOST_MINOR_VERSION EQUAL 77 AND NOT IGNORE_BOOST_VERSION)
MESSAGE(WARNING "Boost minor version found is ${BOOST_MINOR_VERSION} "
"we need 77"
)
173 changes: 173 additions & 0 deletions vcpkg_overlays/libmysql/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
if (EXISTS "${CURRENT_INSTALLED_DIR}/include/mysql/mysql.h")
message(FATAL_ERROR "FATAL ERROR: ${PORT} and libmariadb are incompatible.")
endif()

if(NOT VCPKG_TARGET_IS_WINDOWS)
message(WARNING "'autoconf-archive' must be installed via your system package manager (brew, apt, etc.).")
endif()

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO mysql/mysql-server
REF 1bfe02bdad6604d54913c62614bde57a055c8332 # 8.0.32
SHA512 9a556b783ee978c919ccc0c1c99ab4a84ecc9fe0b75e2e100ad616f3b7c7bd280c8da63eb9e9c98291256ebbd130aef8c6e5c404e93b7cc8b8fe754b055b650f
HEAD_REF master
PATCHES
ignore-boost-version.patch
system-libs.patch
export-cmake-targets.patch
Add-target-include-directories.patch
homebrew.patch
)

file(REMOVE_RECURSE "${SOURCE_PATH}/include/boost_1_70_0")

set(STACK_DIRECTION "")
if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
set(STACK_DIRECTION -DSTACK_DIRECTION=-1)
endif()

#Skip the version check for Visual Studio
set(FORCE_UNSUPPORTED_COMPILER "")
if(VCPKG_TARGET_IS_WINDOWS)
set(FORCE_UNSUPPORTED_COMPILER 1)
endif()

string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" BUILD_STATIC_LIBS)
string(COMPARE EQUAL "${VCPKG_CRT_LINKAGE}" "static" STATIC_CRT_LINKAGE)

vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
-DWITHOUT_SERVER=ON
-DWITH_BUILD_ID=OFF
-DWITH_UNIT_TESTS=OFF
-DENABLED_PROFILING=OFF
-DENABLE_TESTING=OFF
-DWIX_DIR=OFF
${STACK_DIRECTION}
-DIGNORE_BOOST_VERSION=ON
-DWITH_SYSTEMD=OFF
-DWITH_TEST_TRACE_PLUGIN=OFF
-DMYSQL_MAINTAINER_MODE=OFF
-DBUNDLE_RUNTIME_LIBRARIES=OFF
-DDOWNLOAD_BOOST=OFF
-DWITH_SSL=system
-DWITH_ICU=system
-DWITH_LIBEVENT=system
-DWITH_LZ4=system
-DWITH_ZLIB=system
-DFORCE_UNSUPPORTED_COMPILER=${FORCE_UNSUPPORTED_COMPILER}
-DINSTALL_STATIC_LIBRARIES=${BUILD_STATIC_LIBS}
-DLINK_STATIC_RUNTIME_LIBRARIES=${STATIC_CRT_LINKAGE}
MAYBE_UNUSED_VARIABLES
BUNDLE_RUNTIME_LIBRARIES # only on windows
LINK_STATIC_RUNTIME_LIBRARIES # only on windows
WIX_DIR # only on windows
WITH_BUILD_ID # only on windows
)

vcpkg_cmake_install(ADD_BIN_TO_PATH)

list(APPEND MYSQL_TOOLS
comp_err
my_print_defaults
mysql
mysql_config_editor
mysql_migrate_keyring
mysql_secure_installation
mysql_ssl_rsa_setup
mysqladmin
mysqlbinlog
mysqlcheck
mysqldump
mysqlimport
mysqlpump
mysqlshow
mysqlslap
mysqltest
perror
zlib_decompress
)

if (VCPKG_TARGET_IS_WINDOWS)
list(APPEND MYSQL_TOOLS
echo
)
else()
list(APPEND MYSQL_TOOLS
mysql_config
)
endif()

vcpkg_copy_tools(TOOL_NAMES ${MYSQL_TOOLS} AUTO_CLEAN)

file(RENAME "${CURRENT_PACKAGES_DIR}/share" "${CURRENT_PACKAGES_DIR}/${PORT}")
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/share")
file(RENAME "${CURRENT_PACKAGES_DIR}/${PORT}" "${CURRENT_PACKAGES_DIR}/share/${PORT}")

if(NOT VCPKG_BUILD_TYPE)
file(RENAME "${CURRENT_PACKAGES_DIR}/debug/share" "${CURRENT_PACKAGES_DIR}/debug/${PORT}")
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/share")
file(RENAME "${CURRENT_PACKAGES_DIR}/debug/${PORT}" "${CURRENT_PACKAGES_DIR}/debug/share/${PORT}")
endif()

vcpkg_cmake_config_fixup(PACKAGE_NAME unofficial-libmysql CONFIG_PATH share/${PORT}/unofficial-libmysql)

# switch mysql into /mysql
file(RENAME "${CURRENT_PACKAGES_DIR}/include" "${CURRENT_PACKAGES_DIR}/include2")
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/include")
file(RENAME "${CURRENT_PACKAGES_DIR}/include2" "${CURRENT_PACKAGES_DIR}/include/mysql")

## delete useless vcruntime/scripts/bin/msg file
file(REMOVE_RECURSE
"${CURRENT_PACKAGES_DIR}/debug/include"
"${CURRENT_PACKAGES_DIR}/debug/share"
"${CURRENT_PACKAGES_DIR}/debug/man"
"${CURRENT_PACKAGES_DIR}/docs"
"${CURRENT_PACKAGES_DIR}/debug/docs"
"${CURRENT_PACKAGES_DIR}/lib/plugin"
"${CURRENT_PACKAGES_DIR}/debug/lib/plugin"
)

# delete dynamic dll on static build
if (BUILD_STATIC_LIBS)
# libmysql.dll
file(REMOVE_RECURSE
"${CURRENT_PACKAGES_DIR}/bin"
"${CURRENT_PACKAGES_DIR}/debug/bin"
)
file(REMOVE
"${CURRENT_PACKAGES_DIR}/lib/libmysql.lib"
"${CURRENT_PACKAGES_DIR}/debug/lib/libmysql.lib"
"${CURRENT_PACKAGES_DIR}/lib/libmysql.pdb"
"${CURRENT_PACKAGES_DIR}/debug/lib/libmysql.pdb"
"${CURRENT_PACKAGES_DIR}/debug/lib/libmysql.pdb"
)
endif()

## remove misc files
file(REMOVE
"${CURRENT_PACKAGES_DIR}/LICENSE"
"${CURRENT_PACKAGES_DIR}/README"
"${CURRENT_PACKAGES_DIR}/debug/LICENSE"
"${CURRENT_PACKAGES_DIR}/debug/README"
)

vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/mysql/mysql_com.h" "#include <mysql/udf_registration_types.h>" "#include \"mysql/udf_registration_types.h\"")
if (NOT VCPKG_TARGET_IS_WINDOWS)
set(MYSQL_CONFIG_FILE "${CURRENT_PACKAGES_DIR}/tools/libmysql/mysql_config")
vcpkg_replace_string(${MYSQL_CONFIG_FILE} "/bin/mysql_.*config" "/tools/libmysql/mysql_.*config") # try to get correct $basedir
vcpkg_replace_string(${MYSQL_CONFIG_FILE} "${CURRENT_PACKAGES_DIR}" "$basedir") # use $basedir to format paths
vcpkg_replace_string(${MYSQL_CONFIG_FILE} "-l\$\<\$\<CONFIG:DEBUG\>:${CURRENT_INSTALLED_DIR}/debug/lib/libz.a> " "") # remove debug version of libz
vcpkg_replace_string(${MYSQL_CONFIG_FILE}
"\$\<\$\<NOT:\$\<CONFIG:DEBUG\>\>:${CURRENT_INSTALLED_DIR}"
"`dirname $0`/../../../../installed/${TARGET_TRIPLET}") # correct path for release version of libz
vcpkg_replace_string(${MYSQL_CONFIG_FILE} "\> -l" " -l") # trailing > tag for previous item
endif()

file(INSTALL "${CURRENT_PORT_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
file(INSTALL "${CURRENT_PORT_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")

# copy license
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
Loading

0 comments on commit 7056148

Please sign in to comment.