commit:     156fe3949c6de570250bc13310d77ee6f5eaebcb
Author:     Brahmajit Das <listout <AT> listout <DOT> xyz>
AuthorDate: Sun Aug 24 06:17:17 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Sep  5 11:38:21 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=156fe394

dev-db/mysql-connector-c++: add 9.4.0

Also, fix build w/ >=cmake-4

Closes: https://bugs.gentoo.org/961903
Signed-off-by: Brahmajit Das <listout <AT> listout.xyz>
Part-of: https://github.com/gentoo/gentoo/pull/43544
Closes: https://github.com/gentoo/gentoo/pull/43544
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-db/mysql-connector-c++/Manifest                |   1 +
 .../files/mysql-connector-c++-9.4.0-cmake4.patch   | 179 ++++++++++++++++++++
 .../mysql-connector-c++-9.4.0-hookup-tests.patch   |  72 ++++++++
 .../mysql-connector-c++-9.4.0.ebuild               | 185 +++++++++++++++++++++
 4 files changed, 437 insertions(+)

diff --git a/dev-db/mysql-connector-c++/Manifest 
b/dev-db/mysql-connector-c++/Manifest
index 46b67b25689b..5c5f9cc46bfb 100644
--- a/dev-db/mysql-connector-c++/Manifest
+++ b/dev-db/mysql-connector-c++/Manifest
@@ -1,2 +1,3 @@
 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
+DIST mysql-connector-c++-9.4.0-src.tar.gz 4788987 BLAKE2B 
41a6cfbcfcca91b9a244fa30c6f1857ea4574e084bc9d2283bd0f34777acabb5dc30084c401ca7c12213f7d9a6e14d019182df48da86a59f48e32e2444626ea3
 SHA512 
80fc167c2ac0f6f1a368cb4778c67c3d95d713f8d350169d4a9e733a81bc60b4ed9847d1d6a29d1ca0e01002b0266c1391ef4b59604f5060ff81d62030c233c5

diff --git 
a/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.4.0-cmake4.patch 
b/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.4.0-cmake4.patch
new file mode 100644
index 000000000000..0de29e587fcd
--- /dev/null
+++ b/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.4.0-cmake4.patch
@@ -0,0 +1,179 @@
+# bug https://bugs.gentoo.org/961903
+--- a/cdk/cmake/bootstrap/CMakeLists.txt
++++ b/cdk/cmake/bootstrap/CMakeLists.txt
+@@ -31,7 +31,7 @@
+ # See bootstrap.cmake.
+ #
+ 
+-cmake_minimum_required(VERSION 3.8)
++cmake_minimum_required(VERSION 3.15)
+ project(Bootstrap C CXX)
+ include(TestBigEndian)
+ test_big_endian(big_endian)
+--- a/cdk/cmake/gtest.cmake
++++ b/cdk/cmake/gtest.cmake
+@@ -132,11 +132,11 @@ MESSAGE("gtest_main location: ${gtest_main_location}")
+ add_library(gtest ALIAS GTest::gtest)
+ add_library(gtest_main ALIAS GTest::gtest_main)
+ 
+-target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIRS})
++target_include_directories(GTest::gtest INTERFACE ${GTEST_INCLUDE_DIRS})
+ 
+ # See: 
https://stackoverflow.com/questions/42847103/stdtr1-with-visual-studio-2017
+ 
+-target_compile_definitions(gtest INTERFACE
++target_compile_definitions(GTest::gtest INTERFACE
+   -DGTEST_LANG_CXX11=1
+ )
+ 
+--- a/cdk/cmake/headers/check.cmake.in
++++ b/cdk/cmake/headers/check.cmake.in
+@@ -31,7 +31,7 @@
+ # Auto generated file for compiling public header tests
+ #
+ 
+-CMAKE_MINIMUM_REQUIRED(VERSION 3.8)
++CMAKE_MINIMUM_REQUIRED(VERSION 3.15)
+ PROJECT(Headers_check)
+ 
+ add_compile_options(/wd4251)  # FIXME: DLL warning
+--- a/cdk/core/CMakeLists.txt
++++ b/cdk/core/CMakeLists.txt
+@@ -27,7 +27,7 @@
+ # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ 
+ 
+-cmake_minimum_required(VERSION 3.8)
++cmake_minimum_required(VERSION 3.15)
+ # TODO: Why it is not enough to set it in the top-level CMakeLists.txt?
+ #cmake_policy(SET CMP0023 OLD)
+ 
+--- a/cdk/extra/lz4/CMakeLists.txt
++++ b/cdk/extra/lz4/CMakeLists.txt
+@@ -26,7 +26,7 @@
+ # along with this program; if not, write to the Free Software Foundation, 
Inc.,
+ # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ 
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.15)
+ PROJECT(zstd C)
+ 
+ include(../setup.cmake)
+--- a/cdk/extra/ngs_mockup/CMakeLists.txt
++++ b/cdk/extra/ngs_mockup/CMakeLists.txt
+@@ -27,7 +27,7 @@
+ # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ 
+ 
+-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
++CMAKE_MINIMUM_REQUIRED(VERSION 3.15)
+ PROJECT(NGSMockupServer)
+ 
+ IF(NOT DEFINED WITH_NGS_MOCKUP)
+--- a/cdk/extra/process_launcher/CMakeLists.txt
++++ b/cdk/extra/process_launcher/CMakeLists.txt
+@@ -39,7 +39,7 @@
+ #  cmake -DBOOST_INCLUDE_DIR=/usr/local/include 
-DBOOST_LIB_DIR=/usr/local/lib -DMY_INCLUDE_DIR=/usr/local/include:/usr/include 
 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_ECLIPSE_VERSION=4.4 
-DCMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT=TRUE -DGMOCK_LIBRARIES=gmock -G 
"Eclipse CDT4 - Unix Makefiles" ../process_launcher
+ #
+ 
+-cmake_minimum_required (VERSION 2.8)
++cmake_minimum_required (VERSION 3.15)
+ 
+ project (process_launcher)
+ 
+--- a/cdk/extra/protobuf/CMakeLists.txt
++++ b/cdk/extra/protobuf/CMakeLists.txt
+@@ -57,7 +57,7 @@
+ # - fix minor compilation issues on SunPro 5.14.0
+ 
+ 
+-cmake_minimum_required(VERSION 3.1)
++cmake_minimum_required(VERSION 3.15)
+ PROJECT(Protobuf)
+ 
+ include(../setup.cmake)
+--- a/cdk/extra/zlib/CMakeLists.txt
++++ b/cdk/extra/zlib/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.5)
++cmake_minimum_required(VERSION 3.15)
+ cmake_policy(SET CMP0048 NEW)  # allow VERSION specification in project()
+ set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
+ 
+--- a/cdk/extra/zstd/CMakeLists.txt
++++ b/cdk/extra/zstd/CMakeLists.txt
+@@ -8,7 +8,7 @@
+ # ################################################################
+ 
+ PROJECT(zstd)
+-CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9)
++CMAKE_MINIMUM_REQUIRED(VERSION 3.15)
+ 
+ include(../setup.cmake)
+ include(platform)
+--- a/cdk/protocol/mysqlx/tests/CMakeLists.txt
++++ b/cdk/protocol/mysqlx/tests/CMakeLists.txt
+@@ -26,7 +26,7 @@
+ # along with this program; if not, write to the Free Software Foundation, 
Inc.,
+ # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ 
+-cmake_minimum_required (VERSION 3.8)
++cmake_minimum_required (VERSION 3.15)
+ 
+ if (WITH_TESTS)
+ 
+--- a/jdbc/CMakeLists.txt
++++ b/jdbc/CMakeLists.txt
+@@ -28,7 +28,7 @@
+ 
+ 
+ PROJECT(MYSQLCPPCONN)
+-cmake_minimum_required(VERSION 3.8)
++cmake_minimum_required(VERSION 3.15)
+ 
+ if(POLICY CMP0003)
+   cmake_policy(SET CMP0003 NEW)
+--- a/jdbc/link_test/CMakeLists.txt
++++ b/jdbc/link_test/CMakeLists.txt
+@@ -27,7 +27,7 @@
+ # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ 
+ 
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.15)
+ cmake_policy(SET CMP0022 NEW)
+ 
+ #set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE ON)
+--- a/packaging/WiX/CMakeLists.txt
++++ b/packaging/WiX/CMakeLists.txt
+@@ -21,7 +21,7 @@
+ # along with this program; if not, write to the Free Software Foundation, 
Inc.,
+ # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ 
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.15)
+ 
+ #
+ # Build MSI package from files installed in CMAKE_INSTALL_PREFIX location.
+--- a/testapp/CMakeLists.txt
++++ b/testapp/CMakeLists.txt
+@@ -28,7 +28,7 @@
+ 
+ 
+ 
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.15)
+ PROJECT(MySQL_CONCPP_TEST)
+ 
+ #
+--- a/testing/sub_project_test/CMakeLists.txt
++++ b/testing/sub_project_test/CMakeLists.txt
+@@ -27,7 +27,7 @@
+ # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ 
+ 
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.15)
+ 
+ #
+ # This is test cmake project that uses Connector/C++ as a subproject,

diff --git 
a/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.4.0-hookup-tests.patch 
b/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.4.0-hookup-tests.patch
new file mode 100644
index 000000000000..06aeeb7eb675
--- /dev/null
+++ 
b/dev-db/mysql-connector-c++/files/mysql-connector-c++-9.4.0-hookup-tests.patch
@@ -0,0 +1,72 @@
+From 57aba195062ca02c50a2a680c815f2d2014b6f11 Mon Sep 17 00:00:00 2001
+From: Alfred Wingate <[email protected]>
+Date: Sat, 8 Mar 2025 00:05:15 +0200
+Subject: [PATCH 1/2] Build correctly against shared library gtest
+
+Not upstreamable as is.
+--- a/cdk/cmake/gtest.cmake
++++ b/cdk/cmake/gtest.cmake
+@@ -129,8 +129,8 @@ MESSAGE("gtest location: ${gtest_location}")
+ MESSAGE("gtest_main location: ${gtest_main_location}")
+ 
+ 
+-add_library(gtest STATIC IMPORTED)
+-add_library(gtest_main STATIC IMPORTED)
++add_library(gtest ALIAS GTest::gtest)
++add_library(gtest_main ALIAS GTest::gtest_main)
+ 
+ target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIRS})
+ 
+@@ -140,17 +140,6 @@ target_compile_definitions(gtest INTERFACE
+   -DGTEST_LANG_CXX11=1
+ )
+ 
+-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}"
+-)
+-
+ #
+ #  Setup configuration-specific locations for Win
+ #  TODO: Should the same be done for OSX?
+@@ -198,11 +187,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.51.0
+
+
+From 05fc947c7184a424259463699555f3cbaf2b38ec Mon Sep 17 00:00:00 2001
+From: Alfred Wingate <[email protected]>
+Date: Sat, 8 Mar 2025 00:06:41 +0200
+Subject: [PATCH 2/2] Hook cdk unittests to ctest
+
+--- a/cdk/cmake/testing.cmake
++++ b/cdk/cmake/testing.cmake
+@@ -365,6 +365,8 @@ IF(WITH_TESTS)
+     COMMENT "# Generating test group definitons."
+   )
+ 
++  gtest_discover_tests(${target_run_unit_tests})
++
+ ENDIF()
+ ENDMACRO(ADD_TEST_TARGET)
+ 
+-- 
+2.51.0
+

diff --git a/dev-db/mysql-connector-c++/mysql-connector-c++-9.4.0.ebuild 
b/dev-db/mysql-connector-c++/mysql-connector-c++-9.4.0.ebuild
new file mode 100644
index 000000000000..2a8b4ae480ec
--- /dev/null
+++ b/dev-db/mysql-connector-c++/mysql-connector-c++-9.4.0.ebuild
@@ -0,0 +1,185 @@
+# 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.4.0-hookup-tests.patch
+       "${FILESDIR}"/${PN}-9.4.0-cmake4.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
+}

Reply via email to