1SUMMARY = "A robust, scalable, and reliable SQL server" 2HOMEPAGE = "http://mariadb.org" 3SECTION = "libs" 4LICENSE = "GPL-2.0-only" 5LIC_FILES_CHKSUM = "file://COPYING;md5=b1becf0cfa3366e0f4d854d1d264f311" 6 7SRC_URI = "https://archive.mariadb.org/${BP}/source/${BP}.tar.gz \ 8 file://my.cnf \ 9 file://mysqld.service \ 10 file://install_db.service \ 11 file://install_db \ 12 file://mysql-systemd-start \ 13 file://configure.cmake-fix-valgrind.patch \ 14 file://support-files-CMakeLists.txt-fix-do_populate_sysroot.patch \ 15 file://fix-arm-atomic.patch \ 16 file://0001-Fix-library-LZ4-lookup.patch \ 17 file://0001-innobase-Define-__NR_futex-if-it-does-not-exist.patch \ 18 file://0001-aio_linux-Check-if-syscall-exists-before-using-it.patch \ 19 file://ssize_t.patch \ 20 file://mm_malloc.patch \ 21 file://sys_futex.patch \ 22 file://cross-compiling.patch \ 23 file://0001-sql-CMakeLists.txt-fix-gen_lex_hash-not-found.patch \ 24 file://lfs64.patch \ 25 file://0001-Add-missing-includes-cstdint-and-cstdio.patch \ 26 " 27SRC_URI:append:libc-musl = " file://ppc-remove-glibc-dep.patch" 28SRC_URI[sha256sum] = "1c89dee0caed0f68bc2a1d203eb98a123150e6a179f6ee0f1fc0ba3f08dc71dc" 29 30UPSTREAM_CHECK_URI = "https://github.com/MariaDB/server/releases" 31 32S = "${WORKDIR}/mariadb-${PV}" 33 34BINCONFIG_GLOB = "mysql_config" 35 36inherit cmake gettext binconfig update-rc.d useradd systemd multilib_script pkgconfig 37 38MULTILIB_SCRIPTS = "${PN}-server:${bindir}/mariadbd-safe \ 39 ${PN}-setupdb:${bindir}/mariadb-install-db" 40 41INITSCRIPT_PACKAGES = "${PN}-server ${PN}-setupdb" 42INITSCRIPT_NAME:${PN}-server = "mysqld" 43INITSCRIPT_PARAMS:${PN}-server ?= "start 45 5 . stop 45 0 6 1 ." 44 45USERADD_PACKAGES = "${PN}-setupdb" 46USERADD_PARAM:${PN}-setupdb = "--system --home-dir /var/mysql -g mysql --shell /bin/false mysql" 47GROUPADD_PARAM:${PN}-setupdb = "--system mysql" 48 49INITSCRIPT_NAME:${PN}-setupdb = "install_db" 50INITSCRIPT_PARAMS:${PN}-setupdb ?= "defaults 44 44" 51 52SYSTEMD_PACKAGES = "${PN}-server ${PN}-setupdb" 53SYSTEMD_SERVICE:${PN}-server = "mysqld.service" 54SYSTEMD_AUTO_ENABLE:${PN}-server ?= "disable" 55 56SYSTEMD_SERVICE:${PN}-setupdb = "install_db.service" 57SYSTEMD_AUTO_ENABLE:${PN}-setupdb ?= "enable" 58ALLOW_EMPTY:${PN}-setupdb ?= "1" 59FILES:${PN}-setupdb = "${sysconfdir}/init.d/install_db \ 60 ${bindir}/mariadb-install-db \ 61 ${bindir}/my_print_defaults \ 62 ${bindir}/mysql_install_db \ 63 ${bindir}/mysql-systemd-start \ 64 " 65 66PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} lz4 openssl" 67EXTRA_OEMAKE = "'GEN_LEX_HASH=${STAGING_BINDIR_NATIVE}/gen_lex_hash'" 68 69PACKAGECONFIG:class-native = "" 70PACKAGECONFIG[pam] = ",-DWITHOUT_AUTH_PAM=TRUE,libpam" 71PACKAGECONFIG[valgrind] = "-DWITH_VALGRIND=TRUE,-DWITH_VALGRIND=FALSE,valgrind" 72PACKAGECONFIG[krb5] = ", ,krb5" 73PACKAGECONFIG[lz4] = ", ,lz4" 74PACKAGECONFIG[openssl] = "-DWITH_SSL='system',-DWITH_SSL='bundled',openssl" 75 76# MariaDB doesn't link properly with gold 77# https://mariadb.atlassian.net/browse/MDEV-5982 78TARGET_CFLAGS += "-fuse-ld=bfd" 79LDFLAGS += " -pthread" 80 81BUILD_CFLAGS += "-fuse-ld=bfd" 82BUILD_CXXFLAGS += "-fuse-ld=bfd" 83 84LDFLAGS:x86:toolchain-clang = "-latomic" 85 86EXTRA_OECMAKE = "-DWITH_EMBEDDED_SERVER=ON \ 87 -DWITH_JEMALLOC=no \ 88 -DWITHOUT_TOKUDB=TRUE \ 89 -DCMAKE_DISABLE_FIND_PACKAGE_Boost=TRUE \ 90 -DGROFF=FALSE \ 91 -DNROFF=FALSE \ 92 -DENABLE_DTRACE=FALSE \ 93 -DWITH_PIC=ON \ 94 -DWITH_PCRE=system \ 95 -DINSTALL_LAYOUT=RPM \ 96 -DINSTALL_DOCDIR:PATH=${datadir}/doc/${BPN} \ 97 -DINSTALL_LIBDIR:PATH=${baselib} \ 98 -DINSTALL_PLUGINDIR:PATH=${baselib}/plugin \ 99 -DINSTALL_SYSCONFDIR:PATH=${sysconfdir} \ 100 -DMYSQL_DATADIR:PATH=/var/mysql \ 101 -DCAT_EXECUTABLE=`which cat` \ 102 -DSTACK_DIRECTION=1 \ 103 -DCMAKE_AR:FILEPATH=${AR}" 104 105 106# With Ninja it fails with: 107# make: *** No rule to make target `install'. Stop. 108OECMAKE_GENERATOR = "Unix Makefiles" 109 110ARM_INSTRUCTION_SET:armv4 = "arm" 111ARM_INSTRUCTION_SET:armv5 = "arm" 112 113do_configure:append() { 114 # handle distros with different values of ${libexecdir} 115 libexecdir2=`echo ${libexecdir} | sed -e 's+/usr/++g'` 116 sed -i -e "s:/libexec:/$libexecdir2:g" ${S}/scripts/mysql_install_db.sh 117 sed -i -e "s:mysqld libexec:mysqld $libexecdir2:g" ${S}/scripts/mysql_install_db.sh 118 sed -i -e "s:/libexec:/$libexecdir2:g" ${S}/scripts/mysqld_safe.sh 119} 120 121do_generate_toolchain_file:append:class-native () { 122 # If these are set cmake will assume we're cross-compiling, which will 123 # result in certain things we want being disabled 124 sed -i "/set( CMAKE_SYSTEM_NAME/d" ${WORKDIR}/toolchain.cmake 125 sed -i "/set( CMAKE_SYSTEM_PROCESSOR/d" ${WORKDIR}/toolchain.cmake 126} 127 128 129do_compile:prepend:class-target () { 130 # These need to be in-tree or make will think they need to be built, 131 # and since we're cross-compiling that is disabled 132 cp ${STAGING_BINDIR_NATIVE}/comp_err ${S}/extra 133 cp ${STAGING_BINDIR_NATIVE}/comp_sql ${S}/scripts 134 if [ "${@bb.utils.contains('PACKAGECONFIG', 'krb5', 'yes', 'no', d)}" = "no" ]; then 135 if ! [ -e ${B}/include/openssl/kssl.h ] ; then 136 mkdir -p ${B}/include/openssl 137 echo "#ifndef KSSL_H" >${B}/include/openssl/kssl.h 138 echo "#define KSSL_H" >>${B}/include/openssl/kssl.h 139 echo "#include <openssl/opensslconf.h>">>${B}/include/openssl/kssl.h 140 echo "#endif" >>${B}/include/openssl/kssl.h 141 fi 142 fi 143} 144 145SYSROOT_PREPROCESS_FUNCS += "mariadb_sysroot_preprocess" 146 147# We need to append this so it runs *after* binconfig's preprocess function 148# 149# We really don't care exactly what the directories were set to originally. 150# plugindir is not fixed, but we don't create any plugins. 151# 152mariadb_sysroot_preprocess () { 153 sed -i -es,^pkgincludedir=.*,pkgincludedir=\'${STAGING_INCDIR}/mysql\', ${SYSROOT_DESTDIR}${bindir_crossscripts}/mysql_config 154 sed -i -es,^pkglibdir=.*,pkglibdir=\'${STAGING_LIBDIR}\', ${SYSROOT_DESTDIR}${bindir_crossscripts}/mysql_config 155} 156 157do_install() { 158 oe_runmake 'DESTDIR=${D}' install 159 160 install -d ${D}/${sysconfdir}/init.d 161 install -m 0644 ${WORKDIR}/my.cnf ${D}/${sysconfdir}/ 162 install -m 0755 ${WORKDIR}/install_db ${D}/${sysconfdir}/init.d/ 163 mv ${D}/${sysconfdir}/init.d/mysql ${D}/${sysconfdir}/init.d/mysqld 164 165 install -d ${D}${systemd_unitdir}/system 166 install -m 0644 ${WORKDIR}/mysqld.service ${D}${systemd_unitdir}/system 167 install -m 0644 ${WORKDIR}/install_db.service ${D}${systemd_unitdir}/system 168 sed -i -e 's,@BINDIR@,${bindir},g' -e 's,@PREFIX@,${prefix},g' ${D}${systemd_unitdir}/system/mysqld.service \ 169 ${D}${systemd_unitdir}/system/install_db.service 170 171 install -d ${D}${bindir} 172 install -m 755 ${WORKDIR}/mysql-systemd-start ${D}${bindir} 173 install -d ${D}${datadir}/doc/${PN} 174 if [ -f ${D}${datadir}/doc/README ]; then 175 mv ${D}${datadir}/doc/README ${D}${datadir}/doc/${PN}/ 176 fi 177 178 # mini-benchmark used for Gitlab-CI to run on every commit to catch 179 # if there are severe performance regressions. 180 # remove it to avoid introducing bash dependency 181 if [ -f ${D}${datadir}/mysql/mini-benchmark ]; then 182 rm -rf ${D}${datadir}/mysql/mini-benchmark 183 fi 184 if ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'true', 'false', d)}; then 185 pam_so=$(find ${D} -name pam_user_map.so) 186 if [ x"${pam_so}" != x ]; then 187 pam_dir=$(dirname ${pam_so}) 188 mv ${pam_dir} ${D}/${libdir} 189 rmdir --ignore-fail-on-non-empty ${pam_dir%security} 190 fi 191 fi 192} 193 194PACKAGES = "${PN}-dbg ${PN}-setupdb ${PN} \ 195 libmysqlclient-r libmysqlclient-r-dev libmysqlclient-r-staticdev \ 196 libmysqlclient libmysqlclient-dev libmysqlclient-staticdev \ 197 libmysqld libmysqld-dev ${PN}-client ${PN}-server ${PN}-leftovers" 198CONFFILES:${PN}-server += "${sysconfdir}/my.cnf ${sysconfdir}/my.cnf.d/server.cnf" 199CONFFILES:${PN}-client += "${sysconfdir}/my.cnf.d/mysql-clients.cnf" 200CONFFILES:libmysqlclient += "${sysconfdir}/my.cnf.d/client.cnf" 201 202RPROVIDES:${PN}-dbg += "libmysqlclient-r-dbg libmysqlclient-dbg" 203 204FILES:${PN} = " " 205RDEPENDS:${PN} = "${PN}-client ${PN}-server" 206ALLOW_EMPTY:${PN} = "1" 207 208RDEPENDS:${PN}-client = "perl perl-module-getopt-long perl-module-file-temp \ 209 perl-module-fcntl perl-module-sys-hostname perl-module-ipc-open3 \ 210 perl-module-exporter" 211RDEPENDS:${PN}-server = "perl perl-module-getopt-long perl-module-data-dumper \ 212 perl-module-file-basename perl-module-file-path perl-module-sys-hostname \ 213 perl-module-file-copy perl-module-file-temp perl-module-posix \ 214 ${PN}-client ${PN}-setupdb libdbi-perl libdbd-mysql-perl lzo" 215RDEPENDS:${PN}-leftovers = "perl perl-module-cwd perl-module-benchmark perl-module-getopt-long \ 216 perl-module-posix perl-module-data-dumper perl-module-sigtrap perl-module-threads \ 217 perl-module-threads-shared perl-module-io-socket perl-module-sys-hostname perl-module-file-copy \ 218 perl-module-file-spec perl-module-file-find perl-module-file-basename perl-module-file-path \ 219 perl-module-constant perl-module-lib perl-module-file-temp perl-module-file-spec-functions \ 220 perl-module-io-socket-inet perl-module-io-select bash" 221RDEPENDS:${PN}-setupdb = "coreutils" 222 223# Allow old code to link to the backward compatible library 224RDEPENDS:libmysqlclient-dev = "libmysqlclient-r-dev" 225 226PACKAGE_PREPROCESS_FUNCS += "src_package_preprocess" 227src_package_preprocess () { 228 # Trim build paths from comments in generated sources to ensure reproducibility 229 sed -i -e "s,${S}/sql/,,g" \ 230 -e "s,${B}/sql/,,g" \ 231 ${B}/sql/yy_oracle.hh \ 232 ${B}/sql/yy_mariadb.cc \ 233 ${B}/sql/yy_mariadb.hh \ 234 ${B}/sql/yy_oracle.cc 235} 236 237FILES:libmysqlclient = "\ 238 ${libdir}/libmysqlclient.so.* \ 239 ${libdir}/libmariadb.so.* \ 240 ${sysconfdir}/my.cnf.d/client.cnf" 241FILES:libmysqlclient-dev = " \ 242 ${includedir}/mysql/ \ 243 ${libdir}/libmysqlclient.so \ 244 ${libdir}/libmariadb.so \ 245 ${sysconfdir}/aclocal \ 246 ${bindir}/mysql_config" 247FILES:libmysqlclient-staticdev = "\ 248 ${libdir}/*.a" 249 250# Avoid warnings about ha_xtradb.so.0.0.0 and ha_innodb_plugin.so.0.0.0 251# which are intentionally non-PIC on 32-bit x86 (see e.g. 252# storage/xtradb/plug.in in the source) 253INSANE_SKIP:libmysqlclient:append:x86 = " textrel" 254 255FILES:libmysqlclient-r = "${libdir}/libmysqlclient_r.so.*" 256FILES:libmysqlclient-r-dev = "\ 257 ${libdir}/libmysqlclient_r.so" 258FILES:libmysqlclient-r-staticdev = "${libdir}/libmysqlclient_r.a" 259 260FILES:libmysqld = "\ 261 ${libdir}/libmysqld.so.* \ 262 ${libdir}/libmariadbd.so.*" 263FILES:libmysqld-dev = "\ 264 ${libdir}/libmysqld.so \ 265 ${libdir}/libmariadbd.so" 266 267FILES:${PN}-client = "\ 268 ${bindir}/myisam_ftdump \ 269 ${bindir}/mysql \ 270 ${bindir}/mariadb \ 271 ${bindir}/mysql_client_test \ 272 ${bindir}/mariadb-client-test \ 273 ${bindir}/mysql_client_test_embedded \ 274 ${bindir}/mariadb-client-test-embedded \ 275 ${bindir}/mysql_find_rows \ 276 ${bindir}/mariadb-find-rows \ 277 ${bindir}/mysql_fix_extensions \ 278 ${bindir}/mariadb-fix-extensions \ 279 ${bindir}/mysql_waitpid \ 280 ${bindir}/mariadb-waitpid \ 281 ${bindir}/mysqlaccess \ 282 ${bindir}/mariadb-access \ 283 ${bindir}/mysqladmin \ 284 ${bindir}/mariadb-admin \ 285 ${bindir}/mysqlcheck \ 286 ${bindir}/mariadb-check \ 287 ${bindir}/mysqldump \ 288 ${bindir}/mariadb-dump \ 289 ${bindir}/mysqldumpslow \ 290 ${bindir}/mariadb-dumpslow \ 291 ${bindir}/mysqlimport \ 292 ${bindir}/mariadb-import \ 293 ${bindir}/mysqlshow \ 294 ${bindir}/mariadb-show \ 295 ${bindir}/mysqlslap \ 296 ${bindir}/mariadb-slap \ 297 ${bindir}/mysqltest_embedded \ 298 ${bindir}/mariadb-test-embedded \ 299 ${libexecdir}/mysqlmanager \ 300 ${sysconfdir}/my.cnf.d/mysql-clients.cnf" 301 302FILES:${PN}-server = "\ 303 ${bindir}/msql2mysql \ 304 ${bindir}/my_print_defaults \ 305 ${bindir}/myisamchk \ 306 ${bindir}/myisamlog \ 307 ${bindir}/myisampack \ 308 ${bindir}/mysql_convert_table_format \ 309 ${bindir}/mariadb-convert-table-format \ 310 ${bindir}/mysql_install_db \ 311 ${bindir}/mysql_secure_installation \ 312 ${bindir}/mariadb-secure-installation \ 313 ${bindir}/mysql_setpermission \ 314 ${bindir}/mariadb-setpermission \ 315 ${bindir}/mysql-systemd-start \ 316 ${bindir}/mysql_tzinfo_to_sql \ 317 ${bindir}/mariadb-tzinfo-to-sql \ 318 ${bindir}/mysql_upgrade \ 319 ${bindir}/mariadb-upgrade \ 320 ${bindir}/mysql_plugin \ 321 ${bindir}/mariadb-plugin \ 322 ${bindir}/mysqlbinlog \ 323 ${bindir}/mariadb-binlog \ 324 ${bindir}/mysqld_multi \ 325 ${bindir}/mariadbd-multi \ 326 ${bindir}/mariadbd-safe \ 327 ${bindir}/mysqld_safe \ 328 ${bindir}/mysqld_safe_helper \ 329 ${bindir}/mariadbd-safe-helper \ 330 ${bindir}/mysqlhotcopy \ 331 ${bindir}/mariadb-hotcopy \ 332 ${bindir}/mysqltest \ 333 ${bindir}/mariadb-test \ 334 ${bindir}/perror \ 335 ${bindir}/replace \ 336 ${bindir}/resolve_stack_dump \ 337 ${bindir}/resolveip \ 338 ${libexecdir}/mysqld \ 339 ${sbindir}/mysqld \ 340 ${sbindir}/mariadbd \ 341 ${libdir}/plugin/*.so \ 342 ${libdir}/security/*.so \ 343 ${libdir}/plugin/auth_pam_tool_dir/auth_pam_tool \ 344 ${datadir}/mysql/ \ 345 ${localstatedir}/mysql/ \ 346 ${sysconfdir}/init.d/mysqld \ 347 ${sysconfdir}/my.cnf \ 348 ${sysconfdir}/my.cnf.d/server.cnf \ 349 ${sysconfdir}/security/user_map.conf \ 350 ${sysconfdir}/tmpfiles.d" 351 352DESCRIPTION:${PN}-leftovers = "unpackaged and probably unneeded files for ${PN}" 353FILES:${PN}-leftovers = "/" 354