1PORTNAME?=		mysql
2PORTVERSION=		9.0.1
3PORTREVISION?=		1
4CATEGORIES=		databases
5MASTER_SITES=		MYSQL/MySQL-9.0
6PKGNAMESUFFIX?=		90-server
7
8MAINTAINER=		ports@MidnightBSD.org
9COMMENT?=		Multithreaded SQL database (server)
10WWW=		https://www.mysql.com/
11
12LICENSE=		gpl2
13
14# MySQL8.2+ supports only 64-bit platforms
15NOT_FOR_ARCHS= armv6 armv7 i386 powerpc
16
17BROKEN_MidnightBSD_3.2= Needs newer C++20 support for std:ranges
18
19USES=		bison:build cmake:noninja cpe groff:run libedit localbase llvm:build,run \
20		ncurses perl5 pkgconfig shebangfix ssl compiler:c++20-lang
21
22WRKSRC=		${WRKDIR}/${PORTNAME}-${PORTVERSION}${DISTVERSIONSUFFIX}
23
24SLAVEDIRS=	databases/mysql84-client
25
26CPE_VENDOR=	oracle
27
28USE_CXXSTD=	c++20
29USE_PERL5=	run
30
31MY_DBDIR=	/var/db/mysql
32MY_SECDIR=	/var/db/mysql_secure
33MY_TMPDIR=	/var/db/mysql_tmpdir
34
35LIB_DEPENDS+=	libcurl.so:ftp/curl \
36		libicutu.so:devel/icu \
37		liblz4.so:archivers/liblz4 \
38		libhidapi.so:comms/hidapi \
39		libfido2.so:security/libfido2 \
40		${LIB_DEPENDS_${ARCH}}
41LIB_DEPENDS_aarch64=	libunwind.so:devel/libunwind
42LIB_DEPENDS_amd64=	libunwind.so:devel/libunwind
43LIB_DEPENDS_powerpc64=		libunwind.so:devel/libunwind
44LIB_DEPENDS_powerpc64le=	libunwind.so:devel/libunwind
45
46BUILD_DEPENDS=	liblz4>0:archivers/liblz4 \
47		${BUILD_DEPENDS_${ARCH}}
48BUILD_DEPENDS_aarch64=	libunwind>0:devel/libunwind
49BUILD_DEPENDS_amd64=	libunwind>0:devel/libunwind
50BUILD_DEPENDS_powerpc64=	libunwind>0:devel/libunwind
51BUILD_DEPENDS_powerpc64le=	libunwind>0:devel/libunwind
52
53CMAKE_BUILD_TYPE=	Release
54CFLAGS+=		-fPIC
55CFLAGS_aarch64?=	-march=armv8-a+crc+crypto
56
57CMAKE_ARGS+=	-DINSTALL_LAYOUT=FREEBSD \
58		-DINSTALL_LDCONFIGDIR="${LOCALBASE}/libdata/ldconfig" \
59		-DINSTALL_PKGCONFIGDIR="${LOCALBASE}/libdata/pkgconfig" \
60		-DINSTALL_DOCDIR="share/doc/mysql" \
61		-DINSTALL_DOCREADMEDIR="share/doc/mysql" \
62		-DINSTALL_INCLUDEDIR="include/mysql" \
63		-DINSTALL_INFODIR="${INFO_PATH}" \
64		-DINSTALL_LIBDIR="lib/mysql" \
65		-DINSTALL_PRIV_LIBDIR="lib/mysql/private" \
66		-DINSTALL_MANDIR="share/man" \
67		-DINSTALL_MYSQLDATADIR="${MY_DBDIR}" \
68		-DINSTALL_MYSQLKEYRINGDIR="etc/mysql/keyring" \
69		-DINSTALL_MYSQLSHAREDIR="share/mysql" \
70		-DINSTALL_MYSQLTESTDIR="" \
71		-DINSTALL_PLUGINDIR="lib/mysql/plugin" \
72		-DINSTALL_SBINDIR="libexec" \
73		-DINSTALL_SCRIPTDIR="bin" \
74		-DINSTALL_SECURE_FILE_PRIVDIR="${MY_SECDIR}" \
75		-DINSTALL_SHAREDIR="share" \
76		-DINSTALL_SUPPORTFILESDIR="share/mysql" \
77		-DWITH_BOOST="${WRKSRC}/boost" \
78		-DWITH_SYSTEM_LIBS=1 \
79		-DWITH_EDITLINE=system \
80		-DWITH_LZ4=system \
81		-DWITH_ICU=system \
82		-DWITH_CURL=system \
83		-DWITH_ZSTD=bundled \
84		-DWITH_PROTOBUF=bundled \
85		-DWITH_SSL=system \
86		-DWITH_ZLIB=system \
87		-DWITH_LZ4=system
88
89SHEBANG_FILES=	scripts/*.pl* scripts/*.sh
90
91.ifdef USE_MYSQL
92IGNORE=		you have `USE_MYSQL' variable defined either in environment or in make(1) arguments, please undefine and try again
93.endif
94
95SUB_LIST=	MY_DBDIR=${MY_DBDIR} \
96		MY_SECDIR=${MY_SECDIR} \
97		MY_TMPDIR=${MY_TMPDIR}
98
99PLIST_SUB=	MY_DBDIR=${MY_DBDIR} \
100		MY_SECDIR=${MY_SECDIR} \
101		MY_TMPDIR=${MY_TMPDIR}
102
103# MySQL-Server part
104.if !defined(CLIENT_ONLY)
105USES+=		mysql:90
106
107CONFLICTS_INSTALL=	mysql*-server \
108			mysqlwsrep*-server \
109			mariadb*-server \
110			percona*-server
111
112USE_RC_SUBR=	mysql-server
113
114SUB_FILES=	my.cnf.sample pkg-message
115
116USERS=		mysql
117GROUPS=		mysql
118
119USE_LDCONFIG+=	${PREFIX}/lib/mysql/plugin
120
121MMAN1=		ibd2sdi.1 innochecksum.1 my_print_defaults.1 myisam_ftdump.1 myisamchk.1 \
122		myisamlog.1 myisampack.1 mysql_secure_installation.1 mysql_ssl_rsa_setup.1 \
123		mysql_tzinfo_to_sql.1 mysql_upgrade.1 mysql.server.1 mysqldumpslow.1 mysqld_multi.1 \
124		mysqld_safe.1 mysqlrouter_passwd.1 mysqlrouter_plugin_info.1 mysqlrouter.1
125MMAN8=		mysqld.8
126
127CMAKE_ARGS+=	-DWITHOUT_CLIENTLIBS="ON"
128# Disable unit tests, it fails on !amd64 and <13.0 due to c++17 rules
129CMAKE_ARGS+=	-DWITH_UNIT_TESTS="OFF"
130
131OPTIONS_GROUP=		STORAGE
132OPTIONS_GROUP_STORAGE=	ARCHIVE BLACKHOLE EXAMPLE FEDERATED INNOBASE PARTITION PERFSCHEMA
133OPTIONS_SUB=		YES
134STORAGE_DESC=		Permissible "Storage Engines" (to compile statically into the server)
135ARCHIVE_DESC=		Compile "Archive Storage" statically in server
136BLACKHOLE_DESC=		Compile "Blackhole Storage" statically in server
137EXAMPLE_DESC=		Compile "Example Storage" statically in server
138FEDERATED_DESC=		Compile "Federated Storage" statically in server
139INNOBASE_DESC=		Compile "InnoDB Storage" statically in server
140PARTITION_DESC=		Compile "Partitioning support Storage" statically in server
141PERFSCHEMA_DESC=	Compile "Performance Schema Storage" statically in server
142
143ARCHIVE_CMAKE_ON=	-DWITH_ARCHIVE_STORAGE_ENGINE=1
144BLACKHOLE_CMAKE_ON=	-DWITH_BLACKHOLE_STORAGE_ENGINE=1
145EXAMPLE_CMAKE_ON=	-DWITH_EXAMPLE_STORAGE_ENGINE=1
146FEDERATED_CMAKE_ON=	-DWITH_FEDERATED_STORAGE_ENGINE=1
147INNOBASE_CMAKE_ON=	-DWITH_INNOBASE_STORAGE_ENGINE=1
148PARTITION_CMAKE_ON=	-DWITH_PARTITION_STORAGE_ENGINE=1
149PERFSCHEMA_CMAKE_ON=	-DWITH_PERFSCHEMA_STORAGE_ENGINE=1
150
151OPTIONS_GROUP+=		FEATURES
152OPTIONS_GROUP_FEATURES=	PERFSCHM
153FEATURES_DESC=		Default features knobs
154PERFSCHM_DESC=		Enable "Performance Schema" by default (High RAM usage)
155OPTIONS_DEFAULT+=	PERFSCHM
156
157PERFSCHM_SUB_LIST+=		PERFSCHEMRC=""
158# todo, likely broken, see
159# https://dev.mysql.com/doc/refman/8.4/en/source-configuration-options.html
160PERFSCHM_SUB_LIST_OFF+=		PERFSCHEMRC="--skip-performance-schema"
161FEDERATED_SUB_LIST+=		FEDER="--federated"
162FEDERATED_SUB_LIST_OFF+=	FEDER=""
163.endif
164
165.include <bsd.mport.options.mk>
166
167CXXFLAGS+=	-malign-double
168
169.include <bsd.port.pre.mk>
170
171post-extract:
172	@${RM} -rv ${WRKSRC}/sql/sql_hints.yy.cc ${WRKSRC}/sql/sql_hints.yy.h
173
174.if !defined(CLIENT_ONLY)
175post-install:
176	${MKDIR} ${ETCDIR}
177	${INSTALL_DATA} ${WRKDIR}/my.cnf.sample ${ETCDIR}/my.cnf.sample
178	${MKDIR} ${ETCDIR}/keyring
179	${MKDIR} ${MY_SECDIR}
180	${MKDIR} ${MY_TMPDIR}
181.endif
182
183.include <bsd.port.post.mk>
184