1PORTNAME?=	mariadb
2PORTVERSION=	10.6.24
3PORTREVISION?=	0
4CATEGORIES=	databases
5MASTER_SITES=	https://mirror.nodesdirect.com/${SITESDIR}/ \
6		https://mirror.one.com/${SITESDIR}/ \
7		https://ftp.nluug.nl/db/${SITESDIR}/ \
8		https://ftp.icm.edu.pl/pub/unix/database/${SITESDIR}/ \
9		https://mirror.truenetwork.ru/${SITESDIR}/ \
10		https://mirrors.aliyun.com/${SITESDIR}/ \
11		https://ftp.ubuntu-tw.org/mirror/${SITESDIR}/ \
12		https://mirror.kku.ac.th/${SITESDIR}/ \
13		https://espejito.fder.edu.uy/${SITESDIR}/ \
14		https://ftp.osuosl.org/pub/${SITESDIR}/ \
15		https://downloads.mariadb.org/rest-api/mariadb/${PORTVERSION}/
16PKGNAMESUFFIX?=	106-server
17
18MAINTAINER=	ports@MidnightBSD.org
19COMMENT?=	Multithreaded SQL database (server)
20WWW=		https://mariadb.org/
21
22LICENSE=	gpl2
23LICENSE_FILE=	${WRKSRC}/COPYING
24
25DEPRECATED=           End-of-Life approaching, please switch to 11.8 (or 11.4)
26EXPIRATION_DATE=	2026-06-30
27
28LIB_DEPENDS+=	libpcre2-8.so:devel/pcre2 \
29		libzstd.so:archivers/zstd
30
31# Ugly workaround for MariaDB/CMake library detection
32LDFLAGS+=	-L${LOCALBASE}/lib
33
34USES=		bison:build cmake:insource compiler:c++11-lib cpe iconv:translit libedit ncurses shebangfix ssl
35
36SUB_FILES=	pkg-message
37PKGMESSAGE=	${WRKDIR}/pkg-message
38
39USE_LDCONFIG=	${PREFIX}/lib/mysql
40SHEBANG_FILES=	scripts/*.sh \
41		scripts/*.pl
42SITESDIR=	mariadb/mariadb-${PORTVERSION}/source
43DOCSDIR=	${PREFIX}/share/doc/mysql
44
45MARIADB_USER?=		mysql
46MARIADB_GROUP?=		mysql
47MARIADB_DBDIR?=		/var/db/mysql
48MARIADB_RUNDIR?=	/var/run/mysql
49MARIADB_SOCK?=		mysql.sock
50MARIADB_LOGDIR?=	/var/log/mysql
51
52USERS=			${MARIADB_USER}
53GROUPS=			${MARIADB_GROUP}
54
55OPTIONS_SINGLE=		GSSAPI
56OPTIONS_SINGLE_GSSAPI=	GSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT GSSAPI_NONE
57OPTIONS_DEFAULT=	GSSAPI_BASE
58
59.if ${PKGNAMESUFFIX:M*-server}
60# MySQL-Server options
61OPTIONS_DEFAULT+=	CONNECT_EXTRA INNOBASE SPHINX SPIDER WSREP
62OPTIONS_GROUP=		COMPRESSION ENGINES GROONGA
63OPTIONS_DEFINE=		CONNECT_EXTRA DOCS
64OPTIONS_DEFINE_amd64=	WSREP
65OPTIONS_DEFINE_aarch64=	WSREP
66OPTIONS_DEFINE_powerpc64le=	WSREP
67OPTIONS_DEFINE_powerpc64=	WSREP
68OPTIONS_DEFINE_riscv64=	WSREP
69OPTIONS_GROUP_COMPRESSION=	LZ4 LZO SNAPPY
70OPTIONS_GROUP_ENGINES=	COLUMNSTORE INNOBASE MROONGA OQGRAPH ROCKSDB S3 SPHINX SPIDER
71OPTIONS_GROUP_GROONGA=	ZMQ MSGPACK
72OPTIONS_EXCLUDE_i386=	ROCKSDB
73
74COLUMNSTORE_DESC=	Columnar storage egine (BETA)
75CONNECT_EXTRA_DESC=	Enable ODBC and XML in CONNECT engine
76COMPRESSION_DESC=	Optional page compression
77ENGINES_DESC=	Optional MariaDB storage engines
78GROONGA_DESC=	Optional Mroonga features
79INNOBASE_DESC=	InnoDB default engine
80MROONGA_DESC=	Mroonga Full Text Search engine
81MSGPACK_DESC=	MsgPack support
82OQGRAPH_DESC=	Open Query Graph Computation engine
83ROCKSDB_DESC=	RocksDB LSM engine
84S3_DESC=	S3 storage engine (Alpha)
85SPHINX_DESC=	SphinxSE engine
86SPIDER_DESC=	Partitioning and XA-transactions engine
87WSREP_DESC=	Build wsrep clustering
88ZMQ_DESC=	ZeroMQ support
89.endif
90
91CMAKE_ARGS+=	-DCMAKE_PREFIX_PATH=${PREFIX} \
92		-DINSTALL_DOCDIR="share/doc/mysql" \
93		-DINSTALL_DOCREADMEDIR="share/doc/mysql" \
94		-DINSTALL_INFODIR="info" \
95		-DINSTALL_LIBDIR="lib/mysql" \
96		-DINSTALL_MANDIR="share/man" \
97		-DINSTALL_MYSQLDATADIR="${MARIADB_DBDIR}" \
98		-DINSTALL_MYSQLSHAREDIR="share/mysql" \
99		-DINSTALL_MYSQLTESTDIR= \
100		-DINSTALL_PLUGINDIR="lib/mysql/plugin" \
101		-DINSTALL_SBINDIR="libexec" \
102		-DINSTALL_SCRIPTDIR="bin" \
103		-DINSTALL_SQLBENCHDIR= \
104		-DINSTALL_SUPPORTFILESDIR="share/mysql" \
105		-DINSTALL_SYSCONFDIR="${ETCDIR}" \
106		-DINSTALL_SYSCONF2DIR="${ETCDIR}/conf.d" \
107		-DINSTALL_UNIX_ADDRDIR="${MARIADB_RUNDIR}/${MARIADB_SOCK}" \
108		-DWITH_PCRE=system \
109		-DPCRE_LIBRARY_DIRS=${PREFIX}/lib \
110		-DWITH_SSL="${OPENSSLBASE}" \
111		-DCURSES_CURSES_LIBRARY="/usr/lib/libcurses.so" \
112		-DCURSES_FORM_LIBRARY="/usr/lib/libform.so" \
113		-DCURSES_CURSES_LIBRARY="/usr/lib/libncurses.so" \
114		-DKRB5_CONFIG="${KRB5CONFIG}" \
115		-DCURSES_NCURSES_LIBRARY="${NCURSESLIB}/libncurses.so" \
116		-DCOMPILATION_COMMENT="FreeBSD Ports" \
117		-DPLUGIN_AUTH_TEST_PLUGIN=NO
118CMAKE_OFF+=	CONC_WITH_UNIT_TESTS CONNECT_WITH_MONGO WITH_UNIT_TESTS
119CMAKE_ON+=	WITH_LIBWRAP WITHOUT_DOCS
120DISABLED_PLUGINS+=	AUTH_TEST_PLUGIN DAEMON_EXAMPLE DIALOG_EXAMPLES \
121		EXAMPLE EXAMPLE_KEY_MANAGEMENT FTEXAMPLE
122
123DATADIR=	${PREFIX}/share/mysql
124ETCDIR=		${PREFIX}/etc/mysql
125
126CONFLICTS_INSTALL=	mariadb10[0-57-9]-${PKGNAMESUFFIX:C/^[0-9]*-//}-* \
127			mariadb1011-${PKGNAMESUFFIX:C/^[0-9]*-//}-* \
128			mysql[0-9]*-${PKGNAMESUFFIX:C/^[0-9]*-//}-* \
129			mysqlwsrep* \
130			mytop \
131			percona[0-9]*-${PKGNAMESUFFIX:C/^[0-9]*-//}-*
132
133FASTMTX_CMAKE_BOOL=	WITH_FAST_MUTEXES
134GSSAPI_BASE_USES=	gssapi
135GSSAPI_HEIMDAL_USES=	gssapi:heimdal
136GSSAPI_MIT_USES=	gssapi:mit
137GSSAPI_NONE_CMAKE_ON=	-DPLUGIN_AUTH_GSSAPI_CLIENT=OFF
138OPTIONS_SUB=		yes
139SUB_LIST+=	MARIADB_RUNDIR="${MARIADB_RUNDIR}" \
140		MARIADB_SOCK="${MARIADB_SOCK}"
141
142.if ${PKGNAMESUFFIX:M*-client}
143# MySQL-Client part
144CMAKE_ON+=	CONC_WITH_MYSQLCOMPAT WITHOUT_SERVER
145CMAKE_OFF+=	WITH_WSREP
146USES+=		readline
147USE_LDCONFIG=	${PREFIX}/lib/mysql
148SUB_FILES+=	my.cnf.sample client.cnf.sample
149
150.else # ! ${PKGNAMESUFFIX:M*-client}
151# MySQL-Server part
152USES+=		mysql:106m
153
154USE_LDCONFIG+=	${PREFIX}/lib/mysql/plugin
155USE_RC_SUBR=	mysql-server
156
157CMAKE_ON+=	CMAKE_SKIP_BUILD_RPATH WITH_EMBEDDED_SERVER
158CMAKE_OFF+=	WITH_CLIENT
159SUB_FILES+=	server.cnf.sample
160SUB_LIST+=	MARIADB_DBDIR="${MARIADB_DBDIR}" \
161		MARIADB_LOGDIR="${MARIADB_LOGDIR}" \
162		MARIADB_USER="${MARIADB_USER}"
163PLIST_SUB+=	MARIADB_LOGDIR="${MARIADB_LOGDIR}" \
164		MARIADB_USER="${MARIADB_USER}" \
165		MARIADB_GROUP="${MARIADB_GROUP}"
166
167.for ENGINE in ${OPTIONS_GROUP_ENGINES:NINNOBASE}
168${ENGINE}_CMAKE_OFF=	-DPLUGIN_${ENGINE}=NO
169${ENGINE}_CMAKE_ON=	-DPLUGIN_${ENGINE}=DYNAMIC
170.endfor
171INNOBASE_VARS_OFF=	disabled_plugins+=INNOBASE
172COLUMNSTORE_BROKEN=	error: __float128 is not supported on this target
173CONNECT_EXTRA_LIB_DEPENDS=	libodbc.so:databases/unixODBC
174CONNECT_EXTRA_USE=		gnome=libxml2
175CONNECT_EXTRA_USES=		gnome
176CONNECT_EXTRA_CMAKE_BOOL=	CONNECT_WITH_LIBXML2 CONNECT_WITH_ODBC
177GSSAPI_NONE_VARS=	disabled_plugins+=AUTH_GSSAPI
178LZ4_CMAKE_ON=		-DGRN_WITH_LZ4=ON  -DWITH_INNODB_LZ4=ON  -DWITH_ROCKSDB_LZ4=ON
179LZ4_CMAKE_OFF=		-DGRN_WITH_LZ4=OFF -DWITH_INNODB_LZ4=OFF -DWITH_ROCKSDB_LZ4=OFF
180LZ4_LIB_DEPENDS=	liblz4.so:archivers/liblz4
181LZO_CMAKE_ON=		-DWITH_INNODB_LZO=ON
182LZO_CMAKE_OFF=		-DWITH_INNODB_LZO=OFF
183LZO_LIB_DEPENDS=	liblzo2.so:archivers/lzo2
184MROONGA_IMPLIES=	LZ4
185MSGPACK_LIB_DEPENDS=	libmsgpackc.so:devel/msgpack-c
186OQGRAPH_LIB_DEPENDS=	libboost_system.so:devel/boost-libs \
187			libJudy.so:devel/judy
188ROCKSDB_USES=		python
189ROCKSDB_CMAKE_ON=	-DPYTHON_SHEBANG=${PYTHON_CMD} -DWITH_ROCKSDB_zstd=ON
190SNAPPY_CMAKE_ON=	-DWITH_INNODB_SNAPPY=ON  -DWITH_ROCKSDB_snappy=ON
191SNAPPY_CMAKE_OFF=	-DWITH_INNODB_SNAPPY=OFF -DWITH_ROCKSDB_snappy=OFF
192SNAPPY_LIB_DEPENDS=	libsnappy.so:archivers/snappy
193WSREP_CMAKE_BOOL=	WITH_WSREP
194WSREP_LIB_DEPENDS=	libgalera.so:databases/galera26
195WSREP_RUN_DEPENDS=	bash:shells/bash \
196			rsync:net/rsync \
197			#stunnel:security/stunnel
198WSREP_SHEBANG_FILES=	bin/wsrep_sst_rsync
199ZMQ_LIB_DEPENDS=	libzmq.so:net/libzmq4
200ZSTD_LIB_DEPENDS=	libzstd.so:archivers/zstd
201
202.for PLUGIN in ${DISABLED_PLUGINS}
203CMAKE_ARGS+=		-DPLUGIN_${PLUGIN}=NO
204.endfor
205
206.endif # ${PKGNAMESUFFIX:M*-client}
207
208.include <bsd.mport.options.mk>
209
210.if ${OPSYS} == FreeBSD
211SUB_LIST+=	LEGACY_LIMITS="@comment " MODERN_LIMITS=""
212.else
213SUB_LIST+=	LEGACY_LIMITS="" MODERN_LIMITS="@comment "
214.endif
215
216.if ${SSL_DEFAULT} != base && ${PORT_OPTIONS:MGSSAPI_BASE}
217GSSAPI_BASE_IGNORE=	GSSAPI_BASE is not compatible with OpenSSL from ports. Use other GSSAPI options or OpenSSL from base system
218.endif
219
220.if ${SSL_DEFAULT:Mlibressl*}
221CFLAGS+=        -Wno-incompatible-function-pointer-types
222.endif
223
224.if ${ARCH} != amd64 && ${ARCH} != aarch64
225PLIST_SUB+=	WSREP="@comment "
226.endif
227
228post-patch:
229	${CP} ${WRKSRC}/cmake/os/FreeBSD.cmake \
230		${WRKSRC}/cmake/os/MidnightBSD.cmake
231	${REINPLACE_CMD} -e 's|/usr/bin/perl|/usr/local/bin/perl|g' ${WRKSRC}/scripts/CMakeLists.txt
232	${REINPLACE_CMD} -e 's|/usr/bin/perl|/usr/local/bin/perl|g' ${WRKSRC}/scripts/*.pl
233
234pre-configure:
235	${REINPLACE_CMD} 's|\(CHECK_LIBRARY_EXISTS.*\) "" HAVE_|\1 ${LOCALBASE}/lib HAVE_|' \
236		${WRKSRC}/cmake/pcre.cmake \
237		${WRKSRC}/storage/innobase/*.cmake
238
239post-configure:
240	${REINPLACE_CMD} -Ee 's|(#define INCLUDE.*)"$$|\1 -I${PREFIX}/include"|' \
241		-e 's|(#define LIBS .*)"$$|\1 -L${PREFIX}/lib"|' \
242		${WRKSRC}/libmariadb/mariadb_config/mariadb_config.c
243	${REINPLACE_CMD} 's|%%LOCALBASE%%|${PREFIX}|' \
244		${WRKSRC}/scripts/mysql_config.sh
245
246pre-install:
247	${MKDIR} ${FAKE_DESTDIR}${ETCDIR}/conf.d
248
249.if ${PKGNAMESUFFIX:M*-client}
250post-install:
251	${MKDIR} ${ETCDIR}
252	${MKDIR} ${ETCDIR}/conf.d
253	${INSTALL_DATA} ${WRKDIR}/my.cnf.sample ${ETCDIR}/my.cnf.sample
254	${INSTALL_DATA} ${WRKDIR}/client.cnf.sample \
255		${ETCDIR}/conf.d/client.cnf.sample
256	-${RM} -r ${FAKE_DESTDIR}${DATADIR} \
257		${FAKE_DESTDIR}${PREFIX}/include/mysql/server \
258		${FAKE_DESTDIR}${ETCDIR}/init.d \
259		${FAKE_DESTDIR}${PREFIX}/lib/mysql/pkgconfig
260
261post-install-GSSAPI_NONE-off:
262	${STRIP_CMD} ${FAKE_DESTDIR}${PREFIX}/lib/mysql/plugin/auth_gssapi_client.so
263
264.else # ! ${PKGNAMESUFFIX:M*-client}
265post-install:
266	${INSTALL_DATA} ${WRKDIR}/server.cnf.sample \
267		${ETCDIR}/conf.d/server.cnf.sample
268	${MV} ${PREFIX}/share/user_map.conf \
269		${PREFIX}/etc/mysql/user_map.conf.sample
270	${MV} ${PREFIX}/share/pam_user_map.so \
271		${PREFIX}/lib/mysql/
272	-${RM} -r ${PREFIX}/share/mysql/policy \
273		${PREFIX}/include/mysql/server/private \
274		${PREFIX}/lib/mysql/pkgconfig \
275		${PREFIX}/libexec/rcmysql \
276		${FAKE_DESTDIR}/suite \
277		${ETCDIR}/init.d \
278		${ETCDIR}/logrotate.d \
279		${DOCSDIR}/COPYING
280	${MKDIR} ${FAKE_DESTDIR}${MARIADB_LOGDIR}
281	${SED} '/%%/d;/^@comment /d;s/^/@comment /' ${PORTSDIR}/${CATEGORIES:[1]}/${PORTNAME}${PKGNAMESUFFIX:S/-server/-client/}/pkg-plist \
282		>> ${TMPPLIST}
283
284post-install-MROONGA-on:
285	${MV} ${FAKE_DESTDIR}${PREFIX}/share/groonga ${FAKE_DESTDIR}${DOCSDIR}
286	-${RM}	${FAKE_DESTDIR}${DOCSDIR}/groonga/COPYING \
287		${FAKE_DESTDIR}${DATADIR}/mroonga/COPYING
288
289post-install-SPIDER-on:
290	${MV} ${FAKE_DESTDIR}${ETCDIR}/conf.d/spider.cnf \
291		${FAKE_DESTDIR}${ETCDIR}/conf.d/spider.cnf.sample
292
293post-install-WSREP-on:
294	${MV} ${FAKE_DESTDIR}${DATADIR}/wsrep.cnf \
295		${FAKE_DESTDIR}${ETCDIR}/conf.d/wsrep.cnf.sample
296
297.endif # ${PKGNAMESUFFIX:M*-client}
298
299.include <bsd.port.mk>
300