summaryrefslogtreecommitdiff
path: root/dev-db/mysql-connector-c++
diff options
context:
space:
mode:
authorAlfred Wingate <parona@protonmail.com>2025-03-09 02:59:29 +0200
committerSam James <sam@gentoo.org>2025-03-10 00:21:36 +0000
commitb3e4cd1362c31f19f49de4397448682245179585 (patch)
tree9693cbae60043188be3e7e6eec82f39d59789e17 /dev-db/mysql-connector-c++
parent4b6338b1658868b774411ac11f2bb23e5a3240c8 (diff)
downloadgentoo-b3e4cd1362c31f19f49de4397448682245179585.tar.gz
gentoo-b3e4cd1362c31f19f49de4397448682245179585.tar.bz2
gentoo-b3e4cd1362c31f19f49de4397448682245179585.zip
dev-db/mysql-connector-c++: add 9.2.0
* Add tests. Bug: https://bugs.gentoo.org/863188 Signed-off-by: Alfred Wingate <parona@protonmail.com> Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'dev-db/mysql-connector-c++')
-rw-r--r--dev-db/mysql-connector-c++/Manifest1
-rw-r--r--dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-gcc-15-cstdint.patch16
-rw-r--r--dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-hookup-tests.patch64
-rw-r--r--dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-test-iomanip.patch15
-rw-r--r--dev-db/mysql-connector-c++/mysql-connector-c++-9.2.0.ebuild184
5 files changed, 280 insertions, 0 deletions
diff --git a/dev-db/mysql-connector-c++/Manifest b/dev-db/mysql-connector-c++/Manifest
index 1f03e10738cc..46b67b25689b 100644
--- a/dev-db/mysql-connector-c++/Manifest
+++ b/dev-db/mysql-connector-c++/Manifest
@@ -1 +1,2 @@
DIST mysql-connector-c++-8.0.33-src.tar.gz 4531693 BLAKE2B b8f426742fa343ebc1f1da5ba1fbf7dfc0db39493bafd0f5d16e355d43277d78ff27b183edad31792a7591ac59bbfb4033f3498dc646883988cba189535a8ddf SHA512 a625a28f63161c97d727d90e7b1211273fe931ae1325c2fbeca16e770761e3159abdcaba1fb6eb1a557674fd817bf266875a089c8c2ea4d2dd1553e6fa887ef1
+DIST mysql-connector-c++-9.2.0-src.tar.gz 4784018 BLAKE2B 74ddf9d4d7bf6b679d8cbacae1de848c0957cb5ab196dfc1ed42927bff9924b12f73f6e58ceeb07b586fd60a79bd0313c395e21393c303ddaa0f525d7d8c5375 SHA512 bbd829ba426772702c8109e8706e5e542bc2a102dae6cddc0ba4f9f6d26952b4652210930d9a983cfadd3a72cf95ba430a401eeb100d766de69ddc2ec6eefa71
diff --git a/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-gcc-15-cstdint.patch b/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-gcc-15-cstdint.patch
new file mode 100644
index 000000000000..8e4bd1811f75
--- /dev/null
+++ b/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-gcc-15-cstdint.patch
@@ -0,0 +1,16 @@
+https://bugs.gentoo.org/863188
+
+diff --git a/include/mysqlx/common/value.h b/include/mysqlx/common/value.h
+index 4f1b7a38..c30bbd0a 100644
+--- a/include/mysqlx/common/value.h
++++ b/include/mysqlx/common/value.h
+@@ -39,7 +39,7 @@
+ PUSH_SYS_WARNINGS
+ #include <string>
+ POP_SYS_WARNINGS
+-
++#include <cstdint>
+
+ namespace mysqlx {
+ MYSQLX_ABI_BEGIN(2,0)
+
diff --git a/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-hookup-tests.patch b/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-hookup-tests.patch
new file mode 100644
index 000000000000..ba3cb5aaf7c8
--- /dev/null
+++ b/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-hookup-tests.patch
@@ -0,0 +1,64 @@
+From 8d344b6c4ebb1f0029aecaee9cb0b5522e7db27e Mon Sep 17 00:00:00 2001
+From: Alfred Wingate <parona@protonmail.com>
+Date: Sat, 8 Mar 2025 00:05:15 +0200
+Subject: [PATCH] Build correctly against shared library gtest
+
+Not upstreamable as is.
+--- a/cdk/cmake/gtest.cmake
++++ b/cdk/cmake/gtest.cmake
+@@ -132,19 +132,8 @@ MESSAGE("gtest location: ${gtest_location}")
+ MESSAGE("gtest_main location: ${gtest_main_location}")
+
+
+-add_library(gtest STATIC IMPORTED)
+-add_library(gtest_main STATIC IMPORTED)
+-
+-set_target_properties(gtest PROPERTIES
+- IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+- IMPORTED_LOCATION "${gtest_location}"
+-)
+-
+-set_target_properties(gtest_main PROPERTIES
+- IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+- IMPORTED_LINK_INTERFACE_LIBRARIES "gtest"
+- IMPORTED_LOCATION "${gtest_main_location}"
+-)
++add_library(gtest ALIAS GTest::gtest)
++add_library(gtest_main ALIAS GTest::gtest_main)
+
+ #
+ # Setup configuration-specific locations for Win
+@@ -193,11 +182,5 @@ IF(WIN32)
+
+ ENDFOREACH(Config)
+
+-ELSE(WIN32)
+-
+- # On unix gtest depends on pthread library
+- set_property(TARGET gtest APPEND PROPERTY INTERFACE_LINK_LIBRARIES pthread)
+- set_property(TARGET gtest APPEND PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES pthread)
+-
+ ENDIF(WIN32)
+
+--
+2.48.1
+
+From 1d0f1fbb800517583029b6bc88d285bcb1245111 Mon Sep 17 00:00:00 2001
+From: Alfred Wingate <parona@protonmail.com>
+Date: Sat, 8 Mar 2025 00:06:41 +0200
+Subject: [PATCH] Hook cdk unittests to ctest
+
+--- a/cdk/cmake/testing.cmake
++++ b/cdk/cmake/testing.cmake
+@@ -370,6 +370,8 @@ IF(WITH_TESTS)
+ COMMENT "# Generating test group definitons."
+ )
+
++ gtest_discover_tests(${target_run_unit_tests})
++
+ ENDIF()
+ ENDMACRO(ADD_TEST_TARGET)
+
+--
+2.48.1
+
diff --git a/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-test-iomanip.patch b/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-test-iomanip.patch
new file mode 100644
index 000000000000..ae9b58f519ea
--- /dev/null
+++ b/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.2.0-test-iomanip.patch
@@ -0,0 +1,15 @@
+Implicit requirement due to use of std::setw
+
+diff --git a/devapi/tests/session-t.cc b/devapi/tests/session-t.cc
+index 758a0b8f..138cdcac 100644
+--- a/devapi/tests/session-t.cc
++++ b/devapi/tests/session-t.cc
+@@ -35,6 +35,7 @@
+ #include <thread>
+ #include <map>
+ #include <sstream>
++#include <iomanip>
+
+ using std::cout;
+ using std::endl;
+
diff --git a/dev-db/mysql-connector-c++/mysql-connector-c++-9.2.0.ebuild b/dev-db/mysql-connector-c++/mysql-connector-c++-9.2.0.ebuild
new file mode 100644
index 000000000000..64517a13b8e8
--- /dev/null
+++ b/dev-db/mysql-connector-c++/mysql-connector-c++-9.2.0.ebuild
@@ -0,0 +1,184 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+URI_DIR="Connector-C++"
+DESCRIPTION="MySQL database connector for C++ (mimics JDBC 4.0 API)"
+HOMEPAGE="https://dev.mysql.com/downloads/connector/cpp/"
+SRC_URI="
+ https://dev.mysql.com/get/Downloads/${URI_DIR}/${P}-src.tar.gz
+"
+S="${WORKDIR}/${P}-src"
+
+LICENSE="Artistic GPL-2"
+# See ABI_VERSION(s) is version.cmake
+SLOT="0/2.10" # ABI_VERSION_MAJOR/JDBC_ABI_VERSION_MAJOR
+# -ppc, -sparc for bug #711940
+KEYWORDS="~amd64 ~arm ~arm64 -ppc ~ppc64 -sparc ~x86"
+IUSE="+legacy test"
+
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ app-arch/lz4:=
+ app-arch/zstd:=
+ dev-libs/openssl:=
+ sys-libs/zlib
+ legacy? (
+ >=dev-db/mysql-connector-c-8.0.27:=
+ )
+"
+DEPEND="
+ ${RDEPEND}
+ test? (
+ dev-cpp/gtest
+ )
+"
+BDEPEND="
+ test? (
+ >=dev-db/mysql-8[server]
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-8.0.27-mysqlclient_r.patch
+ "${FILESDIR}"/${PN}-8.0.33-jdbc.patch
+ "${FILESDIR}"/${PN}-9.2.0-gcc-15-cstdint.patch
+ "${FILESDIR}"/${PN}-9.2.0-test-iomanip.patch
+ "${FILESDIR}"/${PN}-9.2.0-hookup-tests.patch
+)
+
+src_prepare() {
+ cmake_src_prepare
+
+ # ignores MAKEOPTS and runs recursive make -j$(nproc). Clobbers jobs badly
+ # enough that your system immediately freezes.
+ #
+ # https://bugs.gentoo.org/921309
+ # https://bugs.mysql.com/bug.php?id=115734
+ sed -i 's/prc_cnt AND NOT/FALSE AND NOT/' cdk/cmake/dependency.cmake || die
+}
+
+src_configure() {
+ # sanity check subslot to kick would be drive by bumpers
+ local detected_abi
+ detected_abi="$(awk '$1 ~ "set.*ABI_VERSION_MAJOR" {printf("%s.",$2)}' version.cmake)"
+ detected_abi="${detected_abi%.}"
+ if [[ "${SLOT#0/}" != "${detected_abi}" ]]; then
+ die "Sub slot ${SLOT#0/} doesn't match upstream specified ABI ${detected_abi}."
+ fi
+
+ local mycmakeargs=(
+ -DBUNDLE_DEPENDENCIES=OFF
+ # Cannot handle protobuf >23, bug #912797
+ #-DWITH_PROTOBUF=system
+ -DWITH_LZ4=system
+ -DWITH_SSL=system
+ -DWITH_ZLIB=system
+ -DWITH_ZSTD=system
+ -DWITH_JDBC=$(usex legacy)
+ -DWITH_TESTS=$(usex test)
+ )
+
+ if use legacy ; then
+ mycmakeargs+=(
+ -DMYSQLCLIENT_STATIC_BINDING=0
+ -DMYSQLCLIENT_STATIC_LINKING=0
+ )
+ fi
+
+ cmake_src_configure
+}
+
+# NOTE: Test failures in jdbc may be a sign of issues in mysql-connector-c.
+src_test() {
+ local CMAKE_SKIP_TESTS=(
+ # Test that configures, builds and install a test project again. It gets caught on the install phase.
+ Link_test
+ # Only ipv4 will work as only the ipv4 local address is specified. A future task for someone...
+ # https://dev.mysql.com/doc/refman/8.4/en/x-plugin-options-system-variables.html#sysvar_mysqlx_bind_address
+ Sess.ipv6
+ # FIXME:
+ # not ok 15 - preparedstatement::queryAttributes # assertEquals(int) failed in
+ # /var/tmp/portage/dev-db/mysql-connector-c++-9.2.0/work/mysql-connector-c++-9.2.0-src/jdbc/test/unit/classes/preparedstatement.cpp,
+ # line #1582 expecting '200' got '0'
+ jdbc_test_preparedstatement
+ )
+
+ local -x MYSQL_HOST="127.0.0.1"
+ local -x MYSQL_PORT="5555"
+ local -x MYSQL_USER="$(whoami)"
+ local -x MYSQL_PASSWORD="insecure"
+ local -x XPLUGIN_PORT="5556"
+
+ einfo "Creating mysql test instance"
+ mkdir -p "${T}"/mysql || die
+ mysqld \
+ --no-defaults \
+ --initialize-insecure \
+ --user root \
+ --basedir="${EPREFIX}/usr" \
+ --datadir="${T}"/mysql 1>"${T}"/mysqld_install.log || die
+
+ einfo "Starting mysql test instance ..."
+ mysqld \
+ --no-defaults \
+ --character-set-server=utf8 \
+ --bind-address=${MYSQL_HOST} \
+ --port=${MYSQL_PORT} \
+ --socket="${T}"/mysqld.sock \
+ --mysqlx-bind-address=${MYSQL_HOST} \
+ --mysqlx-port=${XPLUGIN_PORT} \
+ --mysqlx-socket="${T}"/mysqlx.sock \
+ --pid-file="${T}"/mysqld.pid \
+ --datadir="${T}"/mysql 1>"${T}"/mysqld.log 2>&1 &
+
+ # wait for it to start
+ local i
+ for (( i = 0; i < 10; i++ )); do
+ [[ -S ${T}/mysqld.sock ]] && break
+ sleep 1
+ done
+ [[ ! -S ${T}/mysqld.sock ]] && die "mysqld failed to start"
+
+ einfo "Configure mysql test instance ..."
+ # https://github.com/mysql/mysql-connector-cpp/blob/trunk/jdbc/test/CJUnitTestsPort/README
+ mysql -u root \
+ -e "CREATE USER ${MYSQL_USER} IDENTIFIED BY '${MYSQL_PASSWORD}'; GRANT ALL PRIVILEGES ON *.* TO ${MYSQL_USER} WITH GRANT OPTION;" \
+ -S "${T}/mysqld.sock" \
+ -h ${MYSQL_HOST} \
+ -P ${MYSQL_PORT} || die
+ mysql -u root \
+ -S "${T}/mysqld.sock" \
+ -h ${MYSQL_HOST} \
+ -P ${MYSQL_PORT} < "${S}"/jdbc/test/CJUnitTestsPort/cts.sql || die
+
+ # Do tests with one job for proper clean up in database tests.
+ nonfatal cmake_src_test -j1
+ local ret=${?}
+
+ einfo "Stopping mysql test instance ..."
+ pkill -F "${T}"/mysqld.pid || die
+ # wait for it to stop
+ local i
+ for (( i = 0; i < 10; i++ )); do
+ [[ -S ${T}/mysqld.sock ]] || break
+ sleep 1
+ done
+
+ rm -rf "${T}"/mysql || die
+
+ [[ ${ret} -ne 0 ]] && die
+}
+
+src_install() {
+ cmake_src_install
+ einstalldocs
+
+ # cmake package config file appears to be broken in multiple ways
+ rm "${ED}/usr/mysql-concpp-config.cmake" || die
+ rm "${ED}/usr/mysql-concpp-config-version.cmake" || die
+}