xref: /OK3568_Linux_fs/yocto/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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://0001-MDEV-29644-a-potential-bug-of-null-pointer-dereferen.patch \
25          "
26SRC_URI:append:libc-musl = " file://ppc-remove-glibc-dep.patch"
27
28SRC_URI[sha256sum] = "f8c69d9080d85eafb3e3a84837bfa566a7f5527a8af6f9a081429d4de0de4778"
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
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
66EXTRA_OEMAKE = "'GEN_LEX_HASH=${STAGING_BINDIR_NATIVE}/gen_lex_hash'"
67
68PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} openssl"
69PACKAGECONFIG:class-native = ""
70PACKAGECONFIG[pam] = ",-DWITHOUT_AUTH_PAM=TRUE,libpam"
71PACKAGECONFIG[valgrind] = "-DWITH_VALGRIND=TRUE,-DWITH_VALGRIND=FALSE,valgrind"
72PACKAGECONFIG[krb5] = ", ,krb5"
73PACKAGECONFIG[zstd] = "-DWITH_ROCKSDB_ZSTD=ON,-DWITH_ROCKSDB_ZSTD=OFF,zstd"
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    if ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'true', 'false', d)}; then
178        pam_so=$(find ${D} -name pam_user_map.so)
179        if [ x"${pam_so}" != x ]; then
180            pam_dir=$(dirname ${pam_so})
181            mv ${pam_dir} ${D}/${libdir}
182            rmdir --ignore-fail-on-non-empty ${pam_dir%security}
183        fi
184    fi
185}
186
187PACKAGES = "${PN}-dbg ${PN}-setupdb ${PN} \
188    libmysqlclient-r libmysqlclient-r-dev libmysqlclient-r-staticdev \
189    libmysqlclient libmysqlclient-dev libmysqlclient-staticdev \
190    libmysqld libmysqld-dev ${PN}-client ${PN}-server ${PN}-leftovers"
191CONFFILES:${PN}-server += "${sysconfdir}/my.cnf ${sysconfdir}/my.cnf.d/server.cnf"
192CONFFILES:${PN}-client += "${sysconfdir}/my.cnf.d/mysql-clients.cnf"
193CONFFILES:libmysqlclient += "${sysconfdir}/my.cnf.d/client.cnf"
194
195RPROVIDES:${PN}-dbg += "libmysqlclient-r-dbg libmysqlclient-dbg"
196
197FILES:${PN} = " "
198RDEPENDS:${PN} = "${PN}-client ${PN}-server"
199ALLOW_EMPTY:${PN} = "1"
200
201RDEPENDS:${PN}-client = "perl perl-module-getopt-long perl-module-file-temp \
202    perl-module-fcntl perl-module-sys-hostname perl-module-ipc-open3 \
203    perl-module-exporter"
204RDEPENDS:${PN}-server = "perl perl-module-getopt-long perl-module-data-dumper \
205    perl-module-file-basename perl-module-file-path perl-module-sys-hostname \
206    perl-module-file-copy perl-module-file-temp perl-module-posix \
207    ${PN}-client ${PN}-setupdb libdbi-perl libdbd-mysql-perl lzo"
208RDEPENDS:${PN}-leftovers = "perl perl-module-cwd perl-module-benchmark perl-module-getopt-long \
209    perl-module-posix perl-module-data-dumper perl-module-sigtrap perl-module-threads \
210    perl-module-threads-shared perl-module-io-socket perl-module-sys-hostname perl-module-file-copy \
211    perl-module-file-spec perl-module-file-find perl-module-file-basename perl-module-file-path \
212    perl-module-constant perl-module-lib perl-module-file-temp perl-module-file-spec-functions \
213    perl-module-io-socket-inet perl-module-io-select bash"
214RDEPENDS:${PN}-setupdb = "coreutils"
215
216# Allow old code to link to the backward compatible library
217RDEPENDS:libmysqlclient-dev = "libmysqlclient-r-dev"
218
219FILES:libmysqlclient = "\
220    ${libdir}/libmysqlclient.so.* \
221    ${libdir}/libmariadb.so.* \
222    ${sysconfdir}/my.cnf.d/client.cnf"
223FILES:libmysqlclient-dev = " \
224    ${includedir}/mysql/ \
225    ${libdir}/libmysqlclient.so \
226    ${libdir}/libmariadb.so \
227    ${sysconfdir}/aclocal \
228    ${bindir}/mysql_config"
229FILES:libmysqlclient-staticdev = "\
230    ${libdir}/*.a"
231
232# Avoid warnings about ha_xtradb.so.0.0.0 and ha_innodb_plugin.so.0.0.0
233# which are intentionally non-PIC on 32-bit x86 (see e.g.
234# storage/xtradb/plug.in in the source)
235INSANE_SKIP:libmysqlclient:append:x86 = " textrel"
236
237FILES:libmysqlclient-r = "${libdir}/libmysqlclient_r.so.*"
238FILES:libmysqlclient-r-dev = "\
239    ${libdir}/libmysqlclient_r.so"
240FILES:libmysqlclient-r-staticdev = "${libdir}/libmysqlclient_r.a"
241
242FILES:libmysqld = "\
243    ${libdir}/libmysqld.so.* \
244    ${libdir}/libmariadbd.so.*"
245FILES:libmysqld-dev = "\
246    ${libdir}/libmysqld.so \
247    ${libdir}/libmariadbd.so"
248
249FILES:${PN}-client = "\
250    ${bindir}/myisam_ftdump \
251    ${bindir}/mysql \
252    ${bindir}/mariadb \
253    ${bindir}/mysql_client_test \
254    ${bindir}/mariadb-client-test \
255    ${bindir}/mysql_client_test_embedded \
256    ${bindir}/mariadb-client-test-embedded \
257    ${bindir}/mysql_find_rows \
258    ${bindir}/mariadb-find-rows \
259    ${bindir}/mysql_fix_extensions \
260    ${bindir}/mariadb-fix-extensions \
261    ${bindir}/mysql_waitpid \
262    ${bindir}/mariadb-waitpid \
263    ${bindir}/mysqlaccess \
264    ${bindir}/mariadb-access \
265    ${bindir}/mysqladmin \
266    ${bindir}/mariadb-admin \
267    ${bindir}/mysqlcheck \
268    ${bindir}/mariadb-check \
269    ${bindir}/mysqldump \
270    ${bindir}/mariadb-dump \
271    ${bindir}/mysqldumpslow \
272    ${bindir}/mariadb-dumpslow \
273    ${bindir}/mysqlimport \
274    ${bindir}/mariadb-import \
275    ${bindir}/mysqlshow \
276    ${bindir}/mariadb-show \
277    ${bindir}/mysqlslap \
278    ${bindir}/mariadb-slap \
279    ${bindir}/mysqltest_embedded \
280    ${bindir}/mariadb-test-embedded \
281    ${libexecdir}/mysqlmanager \
282    ${sysconfdir}/my.cnf.d/mysql-clients.cnf"
283
284FILES:${PN}-server = "\
285    ${bindir}/msql2mysql \
286    ${bindir}/my_print_defaults \
287    ${bindir}/myisamchk \
288    ${bindir}/myisamlog \
289    ${bindir}/myisampack \
290    ${bindir}/mysql_convert_table_format \
291    ${bindir}/mariadb-convert-table-format \
292    ${bindir}/mysql_install_db \
293    ${bindir}/mysql_secure_installation \
294    ${bindir}/mariadb-secure-installation \
295    ${bindir}/mysql_setpermission \
296    ${bindir}/mariadb-setpermission \
297    ${bindir}/mysql-systemd-start \
298    ${bindir}/mysql_tzinfo_to_sql \
299    ${bindir}/mariadb-tzinfo-to-sql \
300    ${bindir}/mysql_upgrade \
301    ${bindir}/mariadb-upgrade \
302    ${bindir}/mysql_plugin \
303    ${bindir}/mariadb-plugin \
304    ${bindir}/mysqlbinlog \
305    ${bindir}/mariadb-binlog \
306    ${bindir}/mysqld_multi \
307    ${bindir}/mariadbd-multi \
308    ${bindir}/mariadbd-safe \
309    ${bindir}/mysqld_safe \
310    ${bindir}/mysqld_safe_helper \
311    ${bindir}/mariadbd-safe-helper \
312    ${bindir}/mysqlhotcopy \
313    ${bindir}/mariadb-hotcopy \
314    ${bindir}/mysqltest \
315    ${bindir}/mariadb-test \
316    ${bindir}/perror \
317    ${bindir}/replace \
318    ${bindir}/resolve_stack_dump \
319    ${bindir}/resolveip \
320    ${libexecdir}/mysqld \
321    ${sbindir}/mysqld \
322    ${sbindir}/mariadbd \
323    ${libdir}/plugin/*.so \
324    ${libdir}/security/*.so \
325    ${libdir}/plugin/auth_pam_tool_dir/auth_pam_tool \
326    ${datadir}/mysql/ \
327    ${localstatedir}/mysql/ \
328    ${sysconfdir}/init.d/mysqld \
329    ${sysconfdir}/my.cnf \
330    ${sysconfdir}/my.cnf.d/server.cnf \
331    ${sysconfdir}/security/user_map.conf \
332    ${sysconfdir}/tmpfiles.d"
333
334DESCRIPTION:${PN}-leftovers = "unpackaged and probably unneeded files for ${PN}"
335FILES:${PN}-leftovers = "/"
336