summaryrefslogtreecommitdiff
path: root/dev-db/mariadb-connector-c/mariadb-connector-c-9999.ebuild
blob: 61034f959549f669929fa3623290dcfaa970f016 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

if [[ ${PV} == 9999 ]] ; then
	inherit git-r3
	EGIT_REPO_URI="https://github.com/MariaDB/mariadb-connector-c.git"
else
	MY_PN=${PN#mariadb-}
	MY_PV=${PV/_b/-b}
	SRC_URI="https://downloads.mariadb.com/Connectors/c/connector-c-${PV}/${P}-src.tar.gz"
	S="${WORKDIR%/}/${PN}-${MY_PV}-src"
	KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~x86"
fi

inherit cmake-multilib flag-o-matic toolchain-funcs

DESCRIPTION="C client library for MariaDB/MySQL"
HOMEPAGE="https://mariadb.org/"

LICENSE="LGPL-2.1"
SLOT="0/3"
IUSE="+curl gnutls kerberos static-libs test"
RESTRICT="!test? ( test )"

DEPEND="
	app-arch/zstd:=[${MULTILIB_USEDEP}]
	virtual/zlib:=[${MULTILIB_USEDEP}]
	virtual/libiconv:=[${MULTILIB_USEDEP}]
	curl? ( net-misc/curl[${MULTILIB_USEDEP}] )
	gnutls? ( >=net-libs/gnutls-3.3.24:=[${MULTILIB_USEDEP}] )
	!gnutls? ( dev-libs/openssl:=[${MULTILIB_USEDEP}] )
	kerberos? (
		|| (
			app-crypt/mit-krb5[${MULTILIB_USEDEP}]
			app-crypt/heimdal[${MULTILIB_USEDEP}]
		)
	)
"
BDEPEND="test? ( dev-db/mariadb[server] )"
RDEPEND="${DEPEND}"

MULTILIB_CHOST_TOOLS=( /usr/bin/mariadb_config )
MULTILIB_WRAPPED_HEADERS+=( /usr/include/mariadb/mariadb_version.h )

PATCHES=(
	"${FILESDIR}"/${PN}-3.1.3-fix-pkconfig-file.patch
)

src_prepare() {
	local sedargs=(
		# These tests the remote_io plugin which requires network access
		-e '/{"test_remote1/s:{://&:'

		# These tests don't work with --skip-grant-tables
		-e '/{"test_conc366/s:{://&:'
		-e '/{"test_conc544/s:{://&:'
		-e '/{"test_conc627/s:{://&:'
		-e '/{"test_conc66/s:{://&:'
		-e '/{"test_parsec/s:{://&:'

		# [Warning] Aborted connection 2078 to db: 'test' user: 'root' host: '' (Got an error reading communication packets)
		# Not sure about this one - might also require network access
		-e '/{"test_default_auth/s:{://&:'

		# Not sure about this one eighter. It should fail on connection but it
		# does not. Maybe because we use domain socket?
		-e '/{"test_conc26/s:{://&:'
	)

	sed -i "${sedargs[@]}" unittest/libmariadb/{connection,misc,ps_bugs}.c || die

	cmake_src_prepare
}

src_configure() {
	# mariadb cannot use ld.gold, bug #508724
	tc-ld-is-gold && tc-ld-force-bfd

	# bug #943757
	append-cflags -std=gnu17

	cmake-multilib_src_configure
}

multilib_src_configure() {
	local mycmakeargs=(
		-DWITH_EXTERNAL_ZLIB=ON
		-DWITH_SSL:STRING=$(usex gnutls GNUTLS OPENSSL)
		-DWITH_CURL=$(usex curl)
		-DWITH_ICONV=ON

		# This variable is available only if dependency requirements are met,
		# thus the related QA notice is falsely positive in this case.
		-DCLIENT_PLUGIN_AUTH_GSSAPI_CLIENT:STRING=$(usex kerberos DYNAMIC OFF)

		-DMARIADB_UNIX_ADDR="${EPREFIX}/var/run/mysqld/mysqld.sock"
		-DINSTALL_LIBDIR="$(get_libdir)"
		-DINSTALL_MANDIR=share/man
		-DINSTALL_PCDIR="$(get_libdir)/pkgconfig"
		-DINSTALL_PLUGINDIR="$(get_libdir)/mariadb/plugin"
		-DINSTALL_BINDIR=bin
		-DWITH_UNIT_TESTS=$(usex test)
	)

	cmake_src_configure
}

multilib_src_test() {
	mkdir -vp "${T}/mysql/data" || die

	mysql_install_db --no-defaults --datadir="${T}/mysql/data" || die
	mysqld --no-defaults --datadir="${T}/mysql/data" --socket="${T}/mysql/mysql.sock" --skip-grant-tables --skip-networking &

	local attempts=0
	while ! mysqladmin ping --socket="${T}/mysql/mysql.sock" --silent ; do
		# 5 minutes should be more than enough
		if [[ ${attempts} -gt 300 ]] ; then
			die "mysqld not found after 300 seconds, aborting"
		fi

		sleep 1
		attempts=$((attempts + 1))
	done

	cd unittest/libmariadb || die
	MYSQL_TEST_SOCKET="${T}/mysql/mysql.sock" MARIADB_CC_TEST=1 ctest --verbose || die
}

multilib_src_install_all() {
	if ! use static-libs ; then
		find "${ED}" -name "*.a" -delete || die
	fi
}