summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 72e51c67e55231cad2281c7d32b727604028e2c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# Merged with official ABS mariadb PKGBUILD by João, 2021/07/22 (all respective contributors apply herein)
# Maintainer: João Figueiredo & chaotic-aur <islandc0der@chaotic.cx>
# Contributor: Bartłomiej Piotrowski <bpiotrowski@archlinux.org>
# Contributor: Christian Hesse <mail@eworm.de>

pkgbase=mariadb-git
pkgname=(mariadb-libs-git mariadb-clients-git mariadb-git mytop-git)
pkgdesc='Fast SQL database server, derived from MySQL'
pkgver=10.9.7_r197760.g717e3b3cfdb
pkgrel=1
arch=($CARCH)
license=(GPL)
url='https://mariadb.org/'
makedepends=(git boost bzip2 cmake jemalloc libaio libxcrypt libxml2 lz4 lzo openssl systemd zlib zstd curl krb5 cracklib)
conflicts=(${pkgbase%-git})
provides=(${pkgbase%-git})
source=("$pkgbase::git+https://github.com/MariaDB/server.git"
		0001-arch-specific.patch)
sha256sums=('SKIP'
            '3289efb3452d199aec872115f35da3f1d6fd4ce774615076690e9bc8afae1460')

pkgver() {
  cd $pkgbase
  _major_ver="$(grep -m1 'MYSQL_VERSION_MAJOR' VERSION | cut -d '=' -f2)"
  _minor_ver="$(grep -m1 'MYSQL_VERSION_MINOR' VERSION | cut -d '=' -f2)"
  _micro_ver="$(grep -m1 'MYSQL_VERSION_PATCH' VERSION | cut -d '=' -f2)"
  echo "${_major_ver}.${_minor_ver}.${_micro_ver}_r$(git rev-list --count HEAD).g$(git rev-parse --short HEAD)"
}

prepare() {
  cd $pkgbase

  # For some reason, it doesn't automatically checkout the default remote branch
  git checkout 10.9

  # Arch Linux specific patches:
  #  * enable PrivateTmp for a little bit more security
  #  * force preloading jemalloc for memory management
  #  * make systemd-tmpfiles create MYSQL_DATADIR
  patch -Np1 < ../0001-arch-specific.patch
}

build() {
  local _cmake_options=(
    # build options
    -DCOMPILATION_COMMENT="Arch Linux"
    -DCMAKE_BUILD_TYPE=RelWithDebInfo
    -Wno-dev

    # file paths
    # /etc
    -DINSTALL_SYSCONFDIR=/etc
    -DINSTALL_SYSCONF2DIR=/etc/my.cnf.d
    # /run
    -DINSTALL_UNIX_ADDRDIR=/run/mysqld/mysqld.sock
    # /usr
    -DCMAKE_INSTALL_PREFIX=/usr
    # /usr/bin /usr/include
    -DINSTALL_SCRIPTDIR=bin
    -DINSTALL_INCLUDEDIR=include/mysql
    # /usr/lib
    -DINSTALL_PLUGINDIR=lib/mysql/plugin
    -DINSTALL_SYSTEMD_UNITDIR=/usr/lib/systemd/system/
    -DINSTALL_SYSTEMD_SYSUSERSDIR=/usr/lib/sysusers.d/
    -DINSTALL_SYSTEMD_TMPFILESDIR=/usr/lib/tmpfiles.d/
    # /usr/share
    -DINSTALL_SHAREDIR=share
    -DINSTALL_SUPPORTFILESDIR=share/mysql
    -DINSTALL_MYSQLSHAREDIR=share/mysql
    -DINSTALL_DOCREADMEDIR=share/doc/mariadb
    -DINSTALL_DOCDIR=share/doc/mariadb
    -DINSTALL_MANDIR=share/man
    # /var
    -DMYSQL_DATADIR=/var/lib/mysql

    # default settings
    -DDEFAULT_CHARSET=utf8mb4
    -DDEFAULT_COLLATION=utf8mb4_unicode_ci

    # features
    -DENABLED_LOCAL_INFILE=ON
    -DPLUGIN_EXAMPLE=NO
    -DPLUGIN_FEDERATED=NO
    -DPLUGIN_FEEDBACK=NO
    -DWITH_EMBEDDED_SERVER=ON
    -DWITH_EXTRA_CHARSETS=complex
    -DWITH_JEMALLOC=ON
    -DWITH_LIBWRAP=OFF
    -DWITH_PCRE=bundled
    -DWITH_READLINE=ON
    -DWITH_SSL=system
    -DWITH_SYSTEMD=yes
    -DWITH_UNIT_TESTS=OFF
    -DWITH_ZLIB=system
  )

  cmake -B build -S $pkgbase "${_cmake_options[@]}"

  cmake --build build
}

## Takes *really* long, so disabled by default.
# check() {
#   cd build/mysql-test
#   ./mtr --parallel=5 --mem --force --max-test-fail=0
# }

package_mariadb-libs-git() {
  pkgdesc='MariaDB libraries'
  depends=(bzip2 libaio libxcrypt libcrypt.so lz4 lzo openssl xz zlib)
  optdepends=('krb5: for gssapi authentication')
  conflicts=(mariadb-libs libmysqlclient{,-git} libmariadbclient{,-git} mariadb-connector-c{,-git})
  provides=(mariadb-libs libmariadbclient{,-git} mariadb-connector-c{,-git} libmariadb.so libmariadbd.so)
  replaces=(libmariadbclient-git)

  for dir in libmariadb libmysqld libservices include; do
    DESTDIR="$pkgdir" cmake --install "build/$dir"
  done

  ln -s build/mariadb_config "$pkgdir"/usr/bin/mariadb-config
  ln -s build/mariadb_config "$pkgdir"/usr/bin/mysql_config
  install -D -m0644 $pkgbase/man/mysql_config.1 "$pkgdir"/usr/share/man/man1/mysql_config.1

  install -D -m0644 build/support-files/mariadb.pc "$pkgdir"/usr/share/pkgconfig/mariadb.pc
  install -D -m0644 $pkgbase/support-files/mysql.m4 "$pkgdir"/usr/share/aclocal/mysql.m4

  cd "$pkgdir"

  # remove static libraries
  rm usr/lib/*.a

  # remove man pages
  rm -r usr/share/man
}

package_mariadb-clients-git() {
  pkgdesc='MariaDB client tools'
  depends=(mariadb-libs-git=$pkgver jemalloc)
  conflicts=(mysql-clients{,-git})
  provides=(mysql-clients=$pkgver)

  DESTDIR="$pkgdir" cmake --install build/client

  # install man pages
  for man in mysql mysql_plugin mysql_upgrade mysqladmin mysqlbinlog mysqlcheck mysqldump mysqlimport mysqlshow mysqlslap mysqltest; do
    install -D -m0644 $pkgbase/man/"$man.1" "$pkgdir"/usr/share/man/man1/"$man.1"
  done
}

package_mariadb-git() {
  pkgdesc='Fast SQL database server, derived from MySQL'
  backup=('etc/my.cnf'
          'etc/my.cnf.d/client.cnf'
          'etc/my.cnf.d/enable_encryption.preset'
          'etc/my.cnf.d/mysql-clients.cnf'
          'etc/my.cnf.d/server.cnf'
          'etc/my.cnf.d/s3.cnf'
          'etc/my.cnf.d/spider.cnf'
          'etc/security/user_map.conf')
  install=mariadb.install
  depends=(mariadb-clients-git=$pkgver systemd-libs libxml2 zstd)
  optdepends=('cracklib: for cracklib plugin'
              'curl: for ha_s3 plugin'
              'galera: for MariaDB cluster with Galera WSREP'
              'python-mysqlclient: for myrocks_hotbackup'
              'perl-dbd-mariadb: for mariadb-hotcopy, mariadb-convert-table-format and mariadb-setpermission')
  conflicts=(mysql{,-git})
  provides=(mysql=$pkgver)
  options=(emptydirs)

  DESTDIR="$pkgdir" cmake --install build

  cd "$pkgdir"

  # no SysV init, please!
  rm -r etc/logrotate.d
  rm usr/bin/rcmysql
  rm usr/share/mysql/{binary-configure,mysql{,d_multi}.server}

  # move to proper licenses directories
  install -d usr/share/licenses/mariadb
  mv usr/share/doc/mariadb/COPYING* usr/share/licenses/mariadb/

  # move it where one might look for it
  mv usr/share/{groonga{,-normalizer-mysql},doc/mariadb/}

  # move to pam directories
  install -d {etc,usr/lib}/security
  mv usr/share/user_map.conf etc/security/
  mv usr/share/pam_user_map.so usr/lib/security/

  # already installed to real systemd unit directory or useless
  rm -r usr/share/mysql/systemd/
  rm -r usr/lib/systemd/system/mariadb@bootstrap.service.d

  # provided by mariadb-libs
  rm usr/bin/{mariadb{_,-},mysql_}config
  rm -r usr/include/
  rm usr/share/man/man1/mysql_config.1
  rm -r usr/share/aclocal
  rm usr/lib/lib*
  rm -r usr/lib/pkgconfig
  rm usr/lib/mysql/plugin/{auth_gssapi_client,caching_sha2_password,client_ed25519,dialog,mysql_clear_password,sha256_password}.so

  # provided by mariadb-clients
  rm usr/bin/mysql{,_plugin,_upgrade,admin,binlog,check,dump,import,show,slap,test}
  rm usr/bin/mariadb{,-{admin,binlog,check,conv,dump,import,plugin,show,slap,test,upgrade}}
  rm usr/share/man/man1/mysql{,_plugin,_upgrade,admin,binlog,check,dump,import,show,slap,test}.1

  # provided by mytop
  rm usr/bin/mytop

  # not needed
  rm -r usr/{mysql-test,sql-bench}
  rm usr/share/man/man1/mysql-test-run.pl.1
}

package_mytop-git() {
  pkgdesc='Top clone for MariaDB'
  depends=(perl perl-dbd-mariadb perl-term-readkey)

  install -D -m0755 build/scripts/mytop "$pkgdir"/usr/bin/mytop
}