1PORTNAME?=		mysql
2PORTVERSION=		8.0.42
3PORTREVISION?=		1
4CATEGORIES=		databases
5MASTER_SITES=		MYSQL/MySQL-8.0
6PKGNAMESUFFIX?=		80-server
7DISTNAME=		${PORTNAME}-boost-${PORTVERSION}${DISTVERSIONSUFFIX}
8
9MAINTAINER=		ports@MidnightBSD.org
10COMMENT?=		Multithreaded SQL database (server)
11WWW=		https://www.mysql.com/
12
13LICENSE=		gpl2
14
15WRKSRC=		${WRKDIR}/${PORTNAME}-${PORTVERSION}${DISTVERSIONSUFFIX}
16
17SLAVEDIRS=	databases/mysql80-client
18USES=		bison:build cmake:noninja cpe \
19		groff:both libedit localbase ncurses perl5 pkgconfig shebangfix ssl
20CPE_VENDOR=	oracle
21
22USE_CXXSTD=	c++17
23USE_PERL5=	run
24
25MY_DBDIR=	/var/db/mysql
26MY_SECDIR=	/var/db/mysql_secure
27MY_TMPDIR=	/var/db/mysql_tmpdir
28
29LIB_DEPENDS+=	libcurl.so:ftp/curl \
30		libevent.so:devel/libevent \
31		libicutu.so:devel/icu \
32		liblz4.so:archivers/liblz4 \
33		libfido2.so:security/libfido2 \
34		libhidapi.so:comms/hidapi \
35		${LIB_DEPENDS_${ARCH}}
36LIB_DEPENDS_aarch64=	libunwind.so:devel/libunwind
37LIB_DEPENDS_amd64=	libunwind.so:devel/libunwind
38LIB_DEPENDS_armv7=	libunwind.so:devel/libunwind
39LIB_DEPENDS_i386=	libunwind.so:devel/libunwind
40LIB_DEPENDS_powerpc=		libunwind.so:devel/libunwind
41LIB_DEPENDS_powerpc64=		libunwind.so:devel/libunwind
42LIB_DEPENDS_powerpc64le=	libunwind.so:devel/libunwind
43
44BUILD_DEPENDS=	liblz4>0:archivers/liblz4 \
45		${BUILD_DEPENDS_${ARCH}}
46BUILD_DEPENDS_aarch64=	libunwind>0:devel/libunwind
47BUILD_DEPENDS_amd64=	libunwind>0:devel/libunwind
48BUILD_DEPENDS_armv7=	libunwind>0:devel/libunwind
49BUILD_DEPENDS_i386=	libunwind>0:devel/libunwind
50BUILD_DEPENDS_powerpc=	libunwind>0:devel/libunwind
51BUILD_DEPENDS_powerpc64=	libunwind>0:devel/libunwind
52BUILD_DEPENDS_powerpc64le=	libunwind>0:devel/libunwind
53
54CMAKE_BUILD_TYPE=	Release
55CFLAGS+=		-fPIC
56CFLAGS_aarch64?=	-march=armv8-a+crc+crypto
57
58CMAKE_ARGS+=	-DINSTALL_LAYOUT=FREEBSD \
59		-DINSTALL_LDCONFIGDIR="${LOCALBASE}/libdata/ldconfig" \
60		-DINSTALL_PKGCONFIGDIR="${LOCALBASE}/libdata/pkgconfig" \
61		-DINSTALL_DOCDIR="share/doc/mysql" \
62		-DINSTALL_DOCREADMEDIR="share/doc/mysql" \
63		-DINSTALL_INCLUDEDIR="include/mysql" \
64		-DINSTALL_INFODIR="${INFO_PATH}" \
65		-DINSTALL_LIBDIR="lib/mysql" \
66		-DINSTALL_PRIV_LIBDIR="lib/mysql/private" \
67		-DINSTALL_MANDIR="share/man" \
68		-DINSTALL_MYSQLDATADIR="${MY_DBDIR}" \
69		-DINSTALL_MYSQLKEYRINGDIR="etc/mysql/keyring" \
70		-DINSTALL_MYSQLSHAREDIR="share/mysql" \
71		-DINSTALL_MYSQLTESTDIR="" \
72		-DINSTALL_PLUGINDIR="lib/mysql/plugin" \
73		-DINSTALL_SBINDIR="libexec" \
74		-DINSTALL_SCRIPTDIR="bin" \
75		-DINSTALL_SECURE_FILE_PRIVDIR="${MY_SECDIR}" \
76		-DINSTALL_SHAREDIR="share" \
77		-DINSTALL_SUPPORTFILESDIR="share/mysql" \
78		-DMYSQL_KEYRINGDIR="${ETCDIR}/keyring" \
79		-DWITH_BOOST="${WRKSRC}/boost" \
80		-DWITH_SYSTEM_LIBS=1 \
81		-DWITH_EDITLINE=system \
82		-DWITH_LIBEVENT=system \
83		-DWITH_LZ4=system \
84		-DWITH_ICU=system \
85		-DWITH_CURL=system \
86		-DWITH_ZSTD=bundled \
87		-DWITH_PROTOBUF=bundled \
88		-DWITH_SSL=system \
89		-DWITH_AUTHENTICATION_FIDO=1 \
90		-DBUILD_BUNDLED_ZLIB=0 \
91		-DBUILD_BUNDLED_LZ4=0
92
93# The Mroonga, RocksDB, and TokuDB storage engines are disabled.
94# Mroonga is only buildable on little endian archs.
95# RocksDB is only buildable on little endian archs and requires POSIX timers.
96# TokuDB is only buildable on 64-bit little endian archs.
97CMAKE_ARGS+=	-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
98		-DWITHOUT_ROCKSDB_STORAGE_ENGINE=1 \
99		-DWITHOUT_TOKUDB_STORAGE_ENGINE=1
100
101SHEBANG_FILES=	scripts/*.pl* scripts/*.sh
102
103.ifdef USE_MYSQL
104IGNORE=		You have `USE_MYSQL' variable defined either in environment or in make(1) arguments. Please undefine and try again.
105.endif
106
107SUB_LIST=	MY_DBDIR=${MY_DBDIR} \
108		MY_SECDIR=${MY_SECDIR} \
109		MY_TMPDIR=${MY_TMPDIR}
110
111PLIST_SUB=	MY_DBDIR=${MY_DBDIR} \
112		MY_SECDIR=${MY_SECDIR} \
113		MY_TMPDIR=${MY_TMPDIR}
114
115# MySQL-Server part
116.if !defined(CLIENT_ONLY)
117USES+=		mysql:80
118
119CONFLICTS_INSTALL=	mysql*-server \
120			mysqlwsrep*-server \
121			mariadb*-server \
122			percona*-server
123
124USE_RC_SUBR=	mysql-server
125
126SUB_FILES=	my.cnf.sample pkg-message
127
128USERS=		mysql
129GROUPS=		mysql
130
131USE_LDCONFIG+=	${PREFIX}/lib/mysql/plugin
132
133MMAN1=		ibd2sdi.1 innochecksum.1 my_print_defaults.1 myisam_ftdump.1 myisamchk.1 \
134		myisamlog.1 myisampack.1 mysql_secure_installation.1 mysql_ssl_rsa_setup.1 \
135		mysql_tzinfo_to_sql.1 mysql_upgrade.1 mysql.server.1 mysqldumpslow.1 mysqld_multi.1 \
136		mysqld_safe.1 mysqlrouter_passwd.1 mysqlrouter_plugin_info.1 mysqlrouter.1
137MMAN8=		mysqld.8
138
139CMAKE_ARGS+=	-DWITH_EMBEDDED_SERVER="ON"
140CMAKE_ARGS+=	-DWITHOUT_CLIENTLIBS="ON"
141# Disable unit tests, it fails on !amd64 and <13.0 due to c++17 rules
142CMAKE_ARGS+=   -DWITH_UNIT_TESTS="OFF"
143
144OPTIONS_GROUP=		STORAGE
145OPTIONS_GROUP_STORAGE=	ARCHIVE BLACKHOLE EXAMPLE FEDERATED INNOBASE PARTITION PERFSCHEMA
146OPTIONS_SUB=		YES
147STORAGE_DESC=		Permissible "Storage Engines" (to compile statically into the server)
148ARCHIVE_DESC=		Compile "Archive Storage" statically in server
149BLACKHOLE_DESC=		Compile "Blackhole Storage" statically in server
150EXAMPLE_DESC=		Compile "Example Storage" statically in server
151FEDERATED_DESC=		Compile "Federated Storage" statically in server
152INNOBASE_DESC=		Compile "InnoDB Storage" statically in server
153PARTITION_DESC=		Compile "Partitioning support Storage" statically in server
154PERFSCHEMA_DESC=	Compile "Performance Schema Storage" statically in server
155
156ARCHIVE_CMAKE_ON=	-DWITH_ARCHIVE_STORAGE_ENGINE=1
157BLACKHOLE_CMAKE_ON=	-DWITH_BLACKHOLE_STORAGE_ENGINE=1
158EXAMPLE_CMAKE_ON=	-DWITH_EXAMPLE_STORAGE_ENGINE=1
159FEDERATED_CMAKE_ON=	-DWITH_FEDERATED_STORAGE_ENGINE=1
160INNOBASE_CMAKE_ON=	-DWITH_INNOBASE_STORAGE_ENGINE=1
161PARTITION_CMAKE_ON=	-DWITH_PARTITION_STORAGE_ENGINE=1
162PERFSCHEMA_CMAKE_ON=	-DWITH_PERFSCHEMA_STORAGE_ENGINE=1
163
164OPTIONS_GROUP+=		FEATURES
165OPTIONS_GROUP_FEATURES=	PERFSCHM
166FEATURES_DESC=		Default features knobs
167PERFSCHM_DESC=		Enable "Performance Schema" by default (High RAM usage)
168OPTIONS_DEFAULT+=	PERFSCHM
169
170PERFSCHM_SUB_LIST+=		PERFSCHEMRC=""
171PERFSCHM_SUB_LIST_OFF+=		PERFSCHEMRC="--skip-performance-schema"
172FEDERATED_SUB_LIST+=		FEDER="--federated"
173FEDERATED_SUB_LIST_OFF+=	FEDER=""
174.endif
175
176.include <bsd.mport.options.mk>
177
178# Since 8.0.20 release innodb engine uses new memory alligned allocator
179# which is broken on i386 due to different size of types and caused a
180# 'static_assert(alignof(T) <= alignof(std::max_align_t))' error
181.if ${ARCH} == i386
182#CMAKE_ARGS+=	-DDISABLE_PSI_MEMORY=1
183SSP_UNSAFE=	yes
184.endif
185
186.if ${ARCH} == powerpc
187LDFLAGS+=	-latomic
188USES+=		compiler:gcc-c++11-lib
189.else
190USES+=		compiler:c++17-lang
191.endif
192
193.include <bsd.port.pre.mk>
194
195post-extract:
196	@${RM} -rv ${WRKSRC}/sql/sql_hints.yy.cc ${WRKSRC}/sql/sql_hints.yy.h
197
198# XXX MBi alignment issue
199.if ${ARCH} == i386
200EXTRA_PATCHES+=	${FILESDIR}/extra-patch-boost-boost_1_77_0-boost-move-detail-type_traits.hpp
201.endif
202
203.if !defined(CLIENT_ONLY)
204post-install:
205	${MKDIR} ${ETCDIR}
206	${INSTALL_DATA} ${WRKDIR}/my.cnf.sample ${ETCDIR}/my.cnf.sample
207	${MKDIR} ${ETCDIR}/keyring
208	${MKDIR} ${MY_SECDIR}
209	${MKDIR} ${MY_TMPDIR}
210.endif
211
212.include <bsd.port.post.mk>
213