Skip to content

Commit

Permalink
add databases/mysql81-server and databases/mysql81-client
Browse files Browse the repository at this point in the history
Welcome MySQL81 to the Port Tree

Special thanks for help: fluffy, both
Sponsored by:	Netzkommune GmbH
  • Loading branch information
joneum committed Dec 18, 2023
1 parent cba62a5 commit 7e5dafe
Show file tree
Hide file tree
Showing 61 changed files with 2,194 additions and 1 deletion.
1 change: 1 addition & 0 deletions Mk/Uses/mysql.mk
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ DEFAULT_MYSQL_VER?= ${MYSQL_DEFAULT:S/.//}
MYSQL57_LIBVER= 20
MYSQL57p_LIBVER= 20
MYSQL80_LIBVER= 21
MYSQL81_LIBVER= 22
. for v in 5 6 11
MYSQL10${v}m_LIBVER= 3
. endfor
Expand Down
2 changes: 1 addition & 1 deletion Mk/bsd.default-versions.mk
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ LUAJIT_DEFAULT?= luajit-devel
. endif
# Possible values: 5.10, 5.20, 6.8
MONO_DEFAULT?= 5.20
# Possible values: 5.7, 8.0, 10.5m, 10.6m, 10.11m, 5.7p, 5.7w
# Possible values: 5.7, 8.0, 8.1, 10.5m, 10.6m, 10.11m, 5.7p, 5.7w
MYSQL_DEFAULT?= 8.0
# Possible values: ninja, samurai
NINJA_DEFAULT?= ninja
Expand Down
2 changes: 2 additions & 0 deletions databases/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,8 @@
SUBDIR += mysql57-server
SUBDIR += mysql80-client
SUBDIR += mysql80-server
SUBDIR += mysql81-client
SUBDIR += mysql81-server
SUBDIR += mysqlbackup
SUBDIR += mysqldump-secure
SUBDIR += mysqlreport
Expand Down
47 changes: 47 additions & 0 deletions databases/mysql81-client/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
PORTNAME= mysql
PORTREVISION= 0
PKGNAMESUFFIX= 81-client

COMMENT= Multithreaded SQL database (client)

LICENSE+= LGPL21

MASTERDIR= ${.CURDIR}/../mysql81-server

PKGMESSAGE= ${.CURDIR}/pkg-message
PATCHDIR= ${MASTERDIR}/files
PLIST= ${.CURDIR}/pkg-plist

CONFLICTS_INSTALL= mysql8[1-9]-client \
mysql[0-79][0-9]-client \
mariadb[0-9][0-9]-client \
percona[0-9][0-9]-client

CMAKE_ARGS+= -DWITHOUT_SERVER=1 -DINSTALL_SUPPORTFILESDIR=0

USE_LDCONFIG+= ${PREFIX}/lib/mysql

MMAN1= comp_err.1 lz4_decompress.1 mysql.1 mysql_config.1 mysql_config_editor.1 \
mysqladmin.1 mysqlbinlog.1 mysqlcheck.1 mysqldump.1 mysqlimport.1 mysqlman.1 \
mysqlpump.1 mysqlshow.1 mysqlslap.1 perror.1 zlib_decompress.1

CLIENT_ONLY= yes

OPTIONS_GROUP+= PLUGINS
PLUGINS_DESC= Default Client Plugins
OPTIONS_GROUP_PLUGINS= SASLCLIENT
SASLCLIENT_DESC= SASL client plugin module
SASLCLIENT_CMAKE_BOOL= WITH_AUTHENTICATION_LDAP
SASLCLIENT_LIB_DEPENDS= libsasl2.so:security/cyrus-sasl2
SASLCLIENT_USES= ldap

OPTIONS_DEFAULT+= SASLCLIENT
OPTIONS_SUB= yes

post-install:
@${RM} -r ${STAGEDIR}${PREFIX}/lib/mysql/private
@${LN} -s libmysqlclient.a ${STAGEDIR}${PREFIX}/lib/mysql/libmysqlclient_r.a
@${LN} -s libmysqlclient.so ${STAGEDIR}${PREFIX}/lib/mysql/libmysqlclient_r.so
@${LN} -s libmysqlclient.so.22 ${STAGEDIR}${PREFIX}/lib/mysql/libmysqlclient_r.so.22

.include "${MASTERDIR}/Makefile"
8 changes: 8 additions & 0 deletions databases/mysql81-client/pkg-message
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[
{ type: install
message: <<EOM
This is the mysql CLIENT without the server.
for complete server and client, please install databases/mysql80-server
EOM
}
]
40 changes: 40 additions & 0 deletions databases/mysql81-client/pkg-plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
bin/comp_err
bin/my_print_defaults
bin/mysql
bin/mysql_config
bin/mysql_config_editor
bin/mysql_migrate_keyring
bin/mysqladmin
bin/mysqlbinlog
bin/mysqlcheck
bin/mysqldump
bin/mysqlimport
bin/mysqlpump
bin/mysqlshow
bin/mysqlslap
bin/perror
bin/zlib_decompress
include/mysql/errmsg.h
include/mysql/field_types.h
include/mysql/my_command.h
include/mysql/my_compress.h
include/mysql/my_list.h
include/mysql/mysql.h
include/mysql/mysql/client_plugin.h
include/mysql/mysql/plugin_auth_common.h
include/mysql/mysql/udf_registration_types.h
include/mysql/mysql_com.h
include/mysql/mysql_time.h
include/mysql/mysql_version.h
include/mysql/mysqld_error.h
lib/mysql/libmysqlclient.a
lib/mysql/libmysqlclient.so
lib/mysql/libmysqlclient.so.22
lib/mysql/libmysqlclient_r.a
lib/mysql/libmysqlclient_r.so
lib/mysql/libmysqlclient_r.so.22
lib/mysql/plugin/authentication_fido_client.so
lib/mysql/plugin/authentication_ldap_sasl_client.so
lib/mysql/plugin/authentication_oci_client.so
libdata/pkgconfig/mysqlclient.pc
share/aclocal/mysql.m4
221 changes: 221 additions & 0 deletions databases/mysql81-server/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
PORTNAME?= mysql
PORTVERSION= 8.1.0
PORTREVISION?= 0
CATEGORIES= databases
MASTER_SITES= MYSQL/MySQL-8.1
PKGNAMESUFFIX?= 81-server
DISTNAME= ${PORTNAME}-boost-${PORTVERSION}${DISTVERSIONSUFFIX}

MAINTAINER= joneum@FreeBSD.org
COMMENT?= Multithreaded SQL database (server)
WWW= https://www.mysql.com/

LICENSE= GPLv2

WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}${DISTVERSIONSUFFIX}

SLAVEDIRS= databases/mysql81-client
USES= bison:build cmake:noninja cpe groff:run libedit localbase \
ncurses perl5 pkgconfig shebangfix ssl

CPE_VENDOR= oracle

USE_CXXSTD= c++17
USE_PERL5= run

MY_DBDIR= /var/db/mysql
MY_SECDIR= /var/db/mysql_secure
MY_TMPDIR= /var/db/mysql_tmpdir

LIB_DEPENDS+= libcurl.so:ftp/curl \
libevent.so:devel/libevent \
libicutu.so:devel/icu \
liblz4.so:archivers/liblz4 \
libfido2.so:security/libfido2 \
libhidapi.so:comms/hidapi \
${LIB_DEPENDS_${ARCH}}
LIB_DEPENDS_aarch64= libunwind.so:devel/libunwind
LIB_DEPENDS_amd64= libunwind.so:devel/libunwind
LIB_DEPENDS_armv7= libunwind.so:devel/libunwind
LIB_DEPENDS_i386= libunwind.so:devel/libunwind
LIB_DEPENDS_powerpc= libunwind.so:devel/libunwind
LIB_DEPENDS_powerpc64= libunwind.so:devel/libunwind
LIB_DEPENDS_powerpc64le= libunwind.so:devel/libunwind

BUILD_DEPENDS= liblz4>0:archivers/liblz4 \
${BUILD_DEPENDS_${ARCH}}
BUILD_DEPENDS_aarch64= libunwind>0:devel/libunwind
BUILD_DEPENDS_amd64= libunwind>0:devel/libunwind
BUILD_DEPENDS_armv7= libunwind>0:devel/libunwind
BUILD_DEPENDS_i386= libunwind>0:devel/libunwind
BUILD_DEPENDS_powerpc= libunwind>0:devel/libunwind
BUILD_DEPENDS_powerpc64= libunwind>0:devel/libunwind
BUILD_DEPENDS_powerpc64le= libunwind>0:devel/libunwind

CMAKE_BUILD_TYPE= Release
CFLAGS+= -fPIC
CFLAGS_aarch64?= -march=armv8-a+crc+crypto

CMAKE_ARGS+= -DINSTALL_LAYOUT=FREEBSD \
-DINSTALL_LDCONFIGDIR="${LOCALBASE}/libdata/ldconfig" \
-DINSTALL_PKGCONFIGDIR="${LOCALBASE}/libdata/pkgconfig" \
-DINSTALL_DOCDIR="share/doc/mysql" \
-DINSTALL_DOCREADMEDIR="share/doc/mysql" \
-DINSTALL_INCLUDEDIR="include/mysql" \
-DINSTALL_INFODIR="${INFO_PATH}" \
-DINSTALL_LIBDIR="lib/mysql" \
-DINSTALL_PRIV_LIBDIR="lib/mysql/private" \
-DINSTALL_MANDIR="share/man" \
-DINSTALL_MYSQLDATADIR="${MY_DBDIR}" \
-DINSTALL_MYSQLKEYRINGDIR="etc/mysql/keyring" \
-DINSTALL_MYSQLSHAREDIR="share/mysql" \
-DINSTALL_MYSQLTESTDIR="" \
-DINSTALL_PLUGINDIR="lib/mysql/plugin" \
-DINSTALL_SBINDIR="libexec" \
-DINSTALL_SCRIPTDIR="bin" \
-DINSTALL_SECURE_FILE_PRIVDIR="${MY_SECDIR}" \
-DINSTALL_SHAREDIR="share" \
-DINSTALL_SUPPORTFILESDIR="share/mysql" \
-DMYSQL_KEYRINGDIR="${ETCDIR}/keyring" \
-DWITH_BOOST="${WRKSRC}/boost" \
-DWITH_SYSTEM_LIBS=1 \
-DWITH_EDITLINE=system \
-DWITH_LIBEVENT=system \
-DWITH_LZ4=system \
-DWITH_ICU=system \
-DWITH_CURL=system \
-DWITH_ZSTD=bundled \
-DWITH_PROTOBUF=bundled \
-DWITH_SSL=system \
-DWITH_AUTHENTICATION_FIDO=1 \
-DBUILD_BUNDLED_ZLIB=0 \
-DBUILD_BUNDLED_LZ4=0

# The Mroonga, RocksDB, and TokuDB storage engines are disabled.
# Mroonga is only buildable on little endian archs.
# RocksDB is only buildable on little endian archs and requires POSIX timers.
# TokuDB is only buildable on 64-bit little endian archs.
CMAKE_ARGS+= -DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITHOUT_ROCKSDB_STORAGE_ENGINE=1 \
-DWITHOUT_TOKUDB_STORAGE_ENGINE=1

SHEBANG_FILES= scripts/*.pl* scripts/*.sh

.ifdef USE_MYSQL
IGNORE= You have `USE_MYSQL' variable defined either in environment or in make(1) arguments. Please undefine and try again.
.endif
SUB_LIST= MY_DBDIR=${MY_DBDIR} \
MY_SECDIR=${MY_SECDIR} \
MY_TMPDIR=${MY_TMPDIR}
PLIST_SUB= MY_DBDIR=${MY_DBDIR} \
MY_SECDIR=${MY_SECDIR} \
MY_TMPDIR=${MY_TMPDIR} \
MYSQL80_LIBVER=${MYSQL80_LIBVER}
# MySQL-Server part
.if !defined(CLIENT_ONLY)
USES+= mysql:81
CONFLICTS_INSTALL= mysql*-server \
mysqlwsrep*-server \
mariadb*-server \
percona*-server
USE_RC_SUBR= mysql-server
SUB_FILES= my.cnf.sample pkg-message
USERS= mysql
GROUPS= mysql
USE_LDCONFIG+= ${PREFIX}/lib/mysql/plugin
MMAN1= ibd2sdi.1 innochecksum.1 my_print_defaults.1 myisam_ftdump.1 myisamchk.1 \
myisamlog.1 myisampack.1 mysql_secure_installation.1 mysql_ssl_rsa_setup.1 \
mysql_tzinfo_to_sql.1 mysql_upgrade.1 mysql.server.1 mysqldumpslow.1 mysqld_multi.1 \
mysqld_safe.1 mysqlrouter_passwd.1 mysqlrouter_plugin_info.1 mysqlrouter.1
MMAN8= mysqld.8
CMAKE_ARGS+= -DWITH_EMBEDDED_SERVER="ON"
CMAKE_ARGS+= -DWITHOUT_CLIENTLIBS="ON"
# Disable unit tests, it fails on !amd64 and <13.0 due to c++17 rules
CMAKE_ARGS+= -DWITH_UNIT_TESTS="OFF"
OPTIONS_GROUP= STORAGE
OPTIONS_GROUP_STORAGE= ARCHIVE BLACKHOLE EXAMPLE FEDERATED INNOBASE PARTITION PERFSCHEMA
OPTIONS_SUB= YES
STORAGE_DESC= Permissible "Storage Engines" (to compile statically into the server)
ARCHIVE_DESC= Compile "Archive Storage" statically in server
BLACKHOLE_DESC= Compile "Blackhole Storage" statically in server
EXAMPLE_DESC= Compile "Example Storage" statically in server
FEDERATED_DESC= Compile "Federated Storage" statically in server
INNOBASE_DESC= Compile "InnoDB Storage" statically in server
PARTITION_DESC= Compile "Partitioning support Storage" statically in server
PERFSCHEMA_DESC= Compile "Performance Schema Storage" statically in server
ARCHIVE_CMAKE_ON= -DWITH_ARCHIVE_STORAGE_ENGINE=1
BLACKHOLE_CMAKE_ON= -DWITH_BLACKHOLE_STORAGE_ENGINE=1
EXAMPLE_CMAKE_ON= -DWITH_EXAMPLE_STORAGE_ENGINE=1
FEDERATED_CMAKE_ON= -DWITH_FEDERATED_STORAGE_ENGINE=1
INNOBASE_CMAKE_ON= -DWITH_INNOBASE_STORAGE_ENGINE=1
PARTITION_CMAKE_ON= -DWITH_PARTITION_STORAGE_ENGINE=1
PERFSCHEMA_CMAKE_ON= -DWITH_PERFSCHEMA_STORAGE_ENGINE=1
OPTIONS_GROUP+= FEATURES
OPTIONS_GROUP_FEATURES= PERFSCHM
FEATURES_DESC= Default features knobs
PERFSCHM_DESC= Enable "Performance Schema" by default (High RAM usage)
OPTIONS_DEFAULT+= PERFSCHM
PERFSCHM_SUB_LIST+= PERFSCHEMRC=""
PERFSCHM_SUB_LIST_OFF+= PERFSCHEMRC="--skip-performance-schema"
FEDERATED_SUB_LIST+= FEDER="--federated"
FEDERATED_SUB_LIST_OFF+= FEDER=""
.endif
.include <bsd.port.options.mk>
# Since 8.0.20 release innodb engine uses new memory alligned allocator
# which is broken on i386 due to different size of types and caused a
# 'static_assert(alignof(T) <= alignof(std::max_align_t))' error
.if ${ARCH} == i386
CMAKE_ARGS+= -DDISABLE_PSI_MEMORY=1
SSP_UNSAFE= yes
.endif
.if ${ARCH} == powerpc
LDFLAGS+= -latomic
USES+= compiler:gcc-c++11-lib
.else
CXXFLAGS+= -malign-double
USES+= compiler:c++17-lang
.endif
.include <bsd.port.pre.mk>
post-extract:
@${RM} -rv ${WRKSRC}/sql/sql_hints.yy.cc ${WRKSRC}/sql/sql_hints.yy.h
# This can be removed after FreeBSD 12.4 and 13.1 EoL
.if defined(CLIENT_ONLY) && !exists(${OPENSSLBASE}/libdata/pkgconfig/openssl.pc)
EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-scripts_CMakeLists.txt
.endif
# XXX MBi alignment issue
.if ${ARCH} == i386
EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-boost_boost__1__77__0_boost_move_detail_type__traits.hpp \
${PATCHDIR}/extra-patch-storage_innobase_log_log0recv.cc
.endif
.if !defined(CLIENT_ONLY)
post-install:
${MKDIR} ${STAGEDIR}${ETCDIR}
${INSTALL_DATA} ${WRKDIR}/my.cnf.sample ${STAGEDIR}${ETCDIR}/my.cnf.sample
${MKDIR} ${STAGEDIR}${ETCDIR}/keyring
${MKDIR} ${STAGEDIR}${MY_SECDIR}
${MKDIR} ${STAGEDIR}${MY_TMPDIR}
.endif
.include <bsd.port.post.mk>
3 changes: 3 additions & 0 deletions databases/mysql81-server/distinfo
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
TIMESTAMP = 1695150470
SHA256 (mysql-boost-8.1.0.tar.gz) = cb19648bc8719b9f6979924bfea806b278bd26b8d67740e5742c6f363f142188
SIZE (mysql-boost-8.1.0.tar.gz) = 440038191
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
--- boost/boost_1_77_0/boost/move/detail/type_traits.hpp.orig 2021-08-05 09:42:11 UTC
+++ boost/boost_1_77_0/boost/move/detail/type_traits.hpp
@@ -1104,7 +1104,7 @@ struct alignment_struct
typedef int (alignment_dummy::*member_ptr);
typedef int (alignment_dummy::*member_function_ptr)();
struct alignment_struct
-{ long double dummy[4]; };
+{ double XXXdummy[4]; };

/////////////////////////////
// max_align_t
@@ -1122,7 +1122,7 @@ union max_align
float float_;
double double_;
void * void_ptr_;
- long double long_double_[4];
+ double XXXlong_double_[4];
alignment_dummy *unknown_class_ptr_;
function_ptr function_ptr_;
member_function_ptr member_function_ptr_;
10 changes: 10 additions & 0 deletions databases/mysql81-server/files/extra-patch-scripts_CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
--- scripts/CMakeLists.txt.orig 2022-12-16 15:34:44 UTC
+++ scripts/CMakeLists.txt
@@ -362,7 +362,6 @@ IF (WITH_SSL STREQUAL "system")
# We have implemented "system" for other platforms as well, but those
# are non-native packages.
IF(LINUX OR SOLARIS OR FREEBSD)
- SET(CONFIG_REQUIRES_PRIVATE "openssl")
STRING(REPLACE "-lssl" "" CONFIG_LIBS_PRIVATE "${CONFIG_LIBS_PRIVATE}")
STRING(REPLACE "-lcrypto" "" CONFIG_LIBS_PRIVATE "${CONFIG_LIBS_PRIVATE}")
STRING(REGEX REPLACE "[ ]+" " " CONFIG_LIBS_PRIVATE
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
--- storage/innobase/log/log0recv.cc.orig 2023-12-17 10:36:48 UTC
+++ storage/innobase/log/log0recv.cc
@@ -3695,7 +3695,7 @@ static void recv_recovery_begin(log_t &log, const lsn_
than number of concurrent IOs we want to sustain. We should also keep in
mind that the limit for the deltas hashmap is not strictly enforced and
this number includes the not-well specified safety margin. */
- size_t{256} * srv_buf_pool_instances);
+ static_cast<unsigned int>(size_t{256} * srv_buf_pool_instances));
const size_t delta_hashmap_max_mem =
UNIV_PAGE_SIZE * (buf_pool_get_n_pages() - pages_to_be_kept_free);

0 comments on commit 7e5dafe

Please sign in to comment.