File PKGBUILD of Package mysql

# Maintainer: Muflone http://www.muflone.com/contacts/english/
# Contributor: Francois Menning <f.menning@pm.me>
# Contributor: Rustam Tsurik <rustam.tsurik@gmail.com>
# Contributor: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Douglas Soares de Andrade <douglas@archlinux.org>

pkgname=('mysql' 'libmysqlclient' 'mysql-clients')
pkgbase=mysql
pkgver=9.0.1
pkgrel=1
pkgdesc="Fast SQL database server, community edition"
arch=('x86_64')
makedepends=('openssl' 'zlib' 'cmake' 'systemd-tools' 'systemd-libs' 'libaio'
             'jemalloc' 'rpcsvc-proto' 'libtirpc' 'icu' 'libedit' 'libevent'
             'libfido2' 're2' 'rapidjson')
license=('GPL-2.0-only')
url="https://www.mysql.com/products/community/"
source=("https://cdn.mysql.com/Downloads/MySQL-9.0/${pkgbase}-${pkgver}.tar.gz"{,.asc}
        "my-default.cnf"
        "mysql-ld.so.conf"
        "mysql.sysconfig"
        "mysqld_service.patch"
        "systemd-tmpfiles.patch"
        "systemd-sysusers.conf")
sha256sums=('18fa65f1ea6aea71e418fe0548552d9a28de68e2b8bc3ba9536599eb459a6606'
            'SKIP'
            'edd5ffa5a982e47c5fcda5751b79690c38a5a57e32616df27631c51c2dfd5760'
            'e1c23fa0971a13d998f2790379b68c475438d05b6d6f2691b99051dbf497567f'
            '203dcd22fea668477ac7123dbd9909fae72d3d07f8855417a669a9c94db072ae'
            '8fbedfc2c5fe271ed13217feeceeac00202d2cb135e4283eeee2f9a13d6251af'
            '270074dc0a01e0f959590ad95e5bbaaac3f821bb44eba32d039a6aee506b9c6a'
            '200a992eb41c95efa99845d017439ddd4018a3e51f57ffca8cb802b0d25123f1')
validpgpkeys=('BCA43417C3B485DD128EC6D4B7B3B788A8D3785C') # MySQL Release Engineering

build() {
  rm -rf build
  mkdir build
  cd build

  cmake "../${pkgbase}-${pkgver}" \
    -DCMAKE_AR=/usr/bin/gcc-ar \
    -DCMAKE_RANLIB=/usr/bin/gcc-ranlib \
    -DBUILD_CONFIG=mysql_release \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DSYSCONFDIR=/etc/mysql \
    -DMYSQL_DATADIR=/var/lib/mysql \
    -DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock \
    -DENABLED_LOCAL_INFILE=ON \
    -DINSTALL_INFODIR=share/mysql/docs \
    -DINSTALL_MANDIR=share/man \
    -DINSTALL_PLUGINDIR=lib/mysql/plugin \
    -DINSTALL_SCRIPTDIR=bin \
    -DINSTALL_INCLUDEDIR=include/mysql \
    -DINSTALL_DOCREADMEDIR=share/mysql \
    -DINSTALL_SUPPORTFILESDIR=share/mysql \
    -DINSTALL_MYSQLSHAREDIR=share/mysql \
    -DINSTALL_DOCDIR=share/mysql/docs \
    -DINSTALL_SHAREDIR=share/mysql \
    -DROUTER_INSTALL_CONFIGDIR=../etc/mysqlrouter \
    -DROUTER_INSTALL_DATADIR=/var/lib/mysqlrouter \
    -DROUTER_INSTALL_RUNTIMEDIR=/run \
    -DROUTER_INSTALL_LOGDIR=/var/log/mysqlrouter \
    -DWITH_SYSTEM_LIBS=ON \
    -DWITH_FIDO=system \
    -DWITH_SSL=system \
    -DWITH_LIBWRAP=OFF \
    -DWITH_LTO=ON \
    -DWITH_JEMALLOC=ON \
    -DWITH_READLINE=ON \
    -DWITH_SYSTEMD=yes \
    -DWITH_PROTOBUF=bundled \
    -DWITH_UNIT_TESTS=OFF \
    -DPLUGIN_EXAMPLE=NO \
    -DWITHOUT_EXAMPLE_STORAGE_ENGINE=ON \
    -DPLUGIN_FEDERATED=NO \
    -DWITHOUT_FEDERATED_STORAGE_ENGINE=ON \
    -DPLUGIN_FEEDBACK=NO \
    -DCMAKE_C_FLAGS="${CFLAGS}" \
    -DCMAKE_C_LINK_FLAGS="${LDFLAGS}" \
    -DCMAKE_CXX_FLAGS="${CXXFLAGS} -DU_DEFINE_FALSE_AND_TRUE=1" \
    -DCMAKE_CXX_LINK_FLAGS="${LDFLAGS}" \
    -DDEFAULT_CHARSET=utf8mb4 \
    -DDEFAULT_COLLATION=utf8mb4_unicode_ci \
    -DWITH_BOOST="../${pkgname}-${pkgver}/boost"
  make
}

check() {
  cd build/mysql-test

  # Takes *really* long, so disabled by default.
  # ./mtr --parallel=5 --mem --force --max-test-fail=0
}

package_libmysqlclient(){
  pkgdesc="MySQL client libraries"
  depends=('libsasl' 'zlib' 'zstd')
  conflicts=('libmariadbclient' 'mariadb-libs')
  provides=("libmariadbclient=${pkgver}" "libmysqlclient=${pkgver}" "mariadb-libs=${pkgver}")

  cd build
  for dir in include libmysql libservices
  do
    make -C "${dir}" DESTDIR="${pkgdir}" install
  done

  install -m 700 -d "${pkgdir}/var/lib/mysql"
  install -m 644 -D "${srcdir}/my-default.cnf" "${pkgdir}/etc/mysql/my.cnf.default"
  install -m 644 -D "${srcdir}/${pkgbase}-${pkgver}/support-files/mysql.m4" "${pkgdir}/usr/share/aclocal/mysql.m4"
}

package_mysql-clients(){
  pkgdesc="MySQL client tools"
  depends=('libmysqlclient' 'zlib' 'openssl' 'jemalloc' 'libedit' 'lz4' 'zstd' 'bash')
  conflicts=('mariadb-clients')
  provides=("mariadb-clients=${pkgver}" "mysql-clients=${pkgver}")

  cd build
  make -C "client" DESTDIR="${pkgdir}" install

  install -m 755 -d "${pkgdir}/usr/bin"
  install -m 755 "runtime_output_directory/mysql_client_test" "${pkgdir}/usr/bin"
  install -m 755 "scripts/mysql_config" "${pkgdir}/usr/bin"

  # install man pages
  install -m 755 -d "${pkgdir}/usr/share/man/man1"
  for man in mysql mysqladmin mysqlcheck mysqldump mysqlimport mysqlshow mysqlslap mysql_config mysql_config_editor
  do
    install -m 644 "${srcdir}/${pkgbase}-${pkgver}/man/${man}.1" "${pkgdir}/usr/share/man/man1/${man}.1"
  done

  # install pkgconfig
  install -m 644 -D "${srcdir}/build/scripts/mysqlclient.pc" "${pkgdir}/usr/lib/pkgconfig/mysqlclient.pc"

  # provided by mysql
  rm "${pkgdir}/usr/bin/mysqlbinlog"
  rm "${pkgdir}/usr/bin/mysql_migrate_keyring"
  rm "${pkgdir}/usr/bin/mysql_secure_installation"
  rm "${pkgdir}/usr/bin/mysqltest"
}

package_mysql(){
  pkgdesc="Fast SQL database server, community edition"
  backup=("etc/mysql/my.cnf"
          "etc/mysqlrouter/mysqlrouter.conf"
          "etc/logrotate.d/mysqlrouter"
          "etc/conf.d/${pkgname}.conf")
  install="${pkgbase}.install"
  depends=('mysql-clients' 'libsasl' 'zlib' 'jemalloc' 'libaio' 'libtirpc' 'icu'
           'lz4' 'libevent' 'systemd-libs' 'zstd' 'bash')
  conflicts=('mariadb')
  provides=("mariadb=${pkgver}" "mysql=${pkgver}")
  optdepends=('perl-dbd-mysql: for mysqlhotcopy, mysql_convert_table_format, mysql_setpermission, mysqldumpslow')
  options=('emptydirs')

  cd build
  make DESTDIR="${pkgdir}" install

  install -m 644 -D "${srcdir}/my-default.cnf" "${pkgdir}/etc/mysql/my.cnf"
  install -m 755 -d "${pkgdir}/etc/ld.so.conf.d"
  install -m 644 -D "${srcdir}/mysql-ld.so.conf" "${pkgdir}/etc/ld.so.conf.d/${pkgname}.conf"
  install -m 644 -D "${srcdir}/build/packaging/rpm-common/mysqlrouter.conf" "${pkgdir}/etc/mysqlrouter/mysqlrouter.conf"

  # provided by libmysqlclient
  rm "${pkgdir}/usr/bin/mysql_config"
  rm "${pkgdir}/usr/lib/libmysqlclient.a"
  rm "${pkgdir}/usr/lib/libmysqlclient.so"
  rm "${pkgdir}/usr/lib/libmysqlclient.so.24"
  rm "${pkgdir}/usr/lib/libmysqlclient.so.24.1.1"
  rm "${pkgdir}/usr/lib/libmysqlservices.a"
  rm "${pkgdir}/usr/lib/pkgconfig/mysqlclient.pc"
  rmdir "${pkgdir}/usr/lib/pkgconfig"
  rm -r "${pkgdir}/usr/include"
  rm "${pkgdir}/usr/share/mysql/aclocal/mysql.m4"
  rmdir "${pkgdir}/usr/share/mysql/aclocal"

  # provided by mysql-clients
  rm "${pkgdir}/usr/bin/mysql"
  rm "${pkgdir}/usr/bin/mysqladmin"
  rm "${pkgdir}/usr/bin/mysqlcheck"
  rm "${pkgdir}/usr/bin/mysqldump"
  rm "${pkgdir}/usr/bin/mysqlimport"
  rm "${pkgdir}/usr/bin/mysqlshow"
  rm "${pkgdir}/usr/bin/mysqlslap"
  rm "${pkgdir}/usr/bin/mysql_client_test"
  rm "${pkgdir}/usr/bin/mysql_config_editor"
  rm "${pkgdir}/usr/share/man/man1/mysql.1"
  rm "${pkgdir}/usr/share/man/man1/mysqladmin.1"
  rm "${pkgdir}/usr/share/man/man1/mysqlcheck.1"
  rm "${pkgdir}/usr/share/man/man1/mysql_config.1"
  rm "${pkgdir}/usr/share/man/man1/mysql_config_editor.1"
  rm "${pkgdir}/usr/share/man/man1/mysqldump.1"
  rm "${pkgdir}/usr/share/man/man1/mysqlimport.1"
  rm "${pkgdir}/usr/share/man/man1/mysqlshow.1"
  rm "${pkgdir}/usr/share/man/man1/mysqlslap.1"

  # not needed
  rm -r "${pkgdir}/usr/mysql-test"

  # Move somewhere else
  mv "${pkgdir}/usr/LICENSE.router" "${pkgdir}/usr/share/mysql/docs"
  mv "${pkgdir}/usr/README.router" "${pkgdir}/usr/share/mysql/docs"

  # Create environment file
  install -m 644 -D "${srcdir}/mysql.sysconfig" "${pkgdir}/etc/conf.d/${pkgname}.conf"

  # Fix permissions
  chmod 755 "${pkgdir}/usr"

  # Move systemd files
  mv "${pkgdir}/usr/usr/lib/systemd" "${pkgdir}/usr/lib"
  mv "${pkgdir}/usr/usr/lib/tmpfiles.d" "${pkgdir}/usr/lib"
  install -m 755 -d "${pkgdir}/usr/lib/sysusers.d"
  install -m 644 "${srcdir}/systemd-sysusers.conf" "${pkgdir}/usr/lib/sysusers.d/${pkgname}.conf"

  # Move logrotate files
  install -d -m 755 "${pkgdir}/etc/logrotate.d/"
  mv "${pkgdir}/usr/mysqlrouter-log-rotate" "${pkgdir}/etc/logrotate.d/mysqlrouter"

  # Move docs files
  mv "${pkgdir}/usr/docs/sample_mysqlrouter.conf" "${pkgdir}/usr/share/mysql/docs"
  rmdir "${pkgdir}/usr/docs"

  # Cleanup
  rmdir "${pkgdir}/usr/usr/lib"
  rmdir "${pkgdir}/usr/usr"

  # Arch Linux specific patches:
  #  * enable PrivateTmp for a little bit more security
  #  * force preloading jemalloc for memory management
  #  * fix path to our config
  cd "${pkgdir}"
  patch -Np1 -i "${srcdir}/mysqld_service.patch"
  patch -Np1 -i "${srcdir}/systemd-tmpfiles.patch"
}

openSUSE Build Service is sponsored by