openwrt-packages/utils/mariadb/Makefile

543 lines
17 KiB
Makefile

#
# Copyright (C) 2018 Sebastian Kemper <sebastian_ml@gmx.net>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=mariadb
PKG_VERSION:=10.1.32
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://downloads.mariadb.org/interstitial/$(PKG_NAME)-$(PKG_VERSION)/source
PKG_HASH:=0e2aae6a6a190d07c8e36e87dd43377057fa82651ca3c583462563f3e9369096
PKG_MAINTAINER:=Sebastian Kemper <sebastian_ml@gmx.net>
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=COPYING
HOST_BUILD_PARALLEL:=1
PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0
HOST_BUILD_DEPENDS:=libxml2/host
PKG_BUILD_DEPENDS:=mariadb/host
CMAKE_INSTALL:=1
PLUGIN_DIR:=/usr/lib/mysql/plugin
MARIADB_COMMON_DEPENDS := \
+libatomic \
+libopenssl \
+libstdcpp \
+zlib
MARIADB_SERVER_PLUGINS := \
adt_null \
auth_0x0100 \
auth_ed25519 \
auth_socket \
auth_test_plugin \
client_ed25519 \
debug_key_management \
dialog_examples \
disks \
example_key_management \
feedback \
file_key_management \
ha_archive \
ha_blackhole \
ha_connect \
ha_example \
ha_federated \
ha_federatedx \
ha_innodb \
ha_spider \
ha_test_sql_discovery \
handlersocket \
libdaemon_example \
locales \
metadata_lock_info \
mypluglib \
qa_auth_client \
qa_auth_interface \
qa_auth_server \
query_cache_info \
query_response_time \
semisync_master \
semisync_slave \
server_audit \
simple_password_check \
sql_errlog \
wsrep_info
PKG_CONFIG_DEPENDS := \
$(patsubst %,CONFIG_PACKAGE_$(PKG_NAME)-server-plugin-%,$(subst _,-,$(MARIADB_SERVER_PLUGINS))) \
CONFIG_PACKAGE_mariadb-server
plugin-adt_null := PLUGIN_AUDIT_NULL
plugin-auth_0x0100 := PLUGIN_AUTH_0X0100
plugin-auth_ed25519 := PLUGIN_AUTH_ED25519
plugin-auth_socket := PLUGIN_AUTH_SOCKET
plugin-auth_test_plugin := PLUGIN_AUTH_TEST_PLUGIN
plugin-client_ed25519 := PLUGIN_CLIENT_ED25519
plugin-debug_key_management := PLUGIN_DEBUG_KEY_MANAGEMENT
plugin-dialog_examples := PLUGIN_DIALOG_EXAMPLES
plugin-disks := PLUGIN_DISKS
plugin-example_key_management := PLUGIN_EXAMPLE_KEY_MANAGEMENT
plugin-feedback := PLUGIN_FEEDBACK
plugin-file_key_management := PLUGIN_FILE_KEY_MANAGEMENT
plugin-ha_archive := PLUGIN_ARCHIVE
plugin-ha_blackhole := PLUGIN_BLACKHOLE
plugin-ha_connect := PLUGIN_CONNECT
plugin-ha_example := PLUGIN_EXAMPLE
plugin-ha_federated := PLUGIN_FEDERATED
plugin-ha_federatedx := PLUGIN_FEDERATEDX
plugin-ha_innodb := PLUGIN_INNOBASE
plugin-ha_spider := PLUGIN_SPIDER
plugin-ha_test_sql_discovery := PLUGIN_TEST_SQL_DISCOVERY
plugin-handlersocket := PLUGIN_HANDLERSOCKET
plugin-libdaemon_example := PLUGIN_DAEMON_EXAMPLE
plugin-locales := PLUGIN_LOCALES
plugin-metadata_lock_info := PLUGIN_METADATA_LOCK_INFO
plugin-mypluglib := PLUGIN_FTEXAMPLE
plugin-qa_auth_client := PLUGIN_QA_AUTH_CLIENT
plugin-qa_auth_interface := PLUGIN_QA_AUTH_INTERFACE
plugin-qa_auth_server := PLUGIN_QA_AUTH_SERVER
plugin-query_cache_info := PLUGIN_QUERY_CACHE_INFO
plugin-query_response_time := PLUGIN_QUERY_RESPONSE_TIME
plugin-semisync_master := PLUGIN_SEMISYNC_MASTER
plugin-semisync_slave := PLUGIN_SEMISYNC_SLAVE
plugin-server_audit := PLUGIN_SERVER_AUDIT
plugin-simple_password_check := PLUGIN_SIMPLE_PASSWORD_CHECK
plugin-sql_errlog := PLUGIN_SQL_ERRLOG
plugin-wsrep_info := PLUGIN_WSREP_INFO
MARIADB_CLIENT := \
mysql \
mysqlcheck
MARIADB_CLIENT_EXTRA := \
mysql_find_rows \
mysql_waitpid \
mysqlaccess \
mysqladmin \
mysqldump \
mysqlimport \
mysqlshow \
mysqlslap \
mytop
MARIADB_SERVER := \
innochecksum \
my_print_defaults \
mysql_install_db \
mysql_upgrade \
mysqld
MARIADB_SERVER_EXTRA := \
aria* \
mariabackup \
msql2mysql \
myisam_ftdump \
myisamchk \
myisamlog \
myisampack \
mysql_convert_table_format \
mysql_fix_extensions \
mysql_plugin \
mysql_secure_installation \
mysql_setpermission \
mysql_tzinfo_to_sql \
mysqlbinlog \
mysqld_multi \
mysqld_safe \
mysqld_safe_helper \
mysqldumpslow \
mysqlhotcopy \
perror \
replace \
resolve_stack_dump
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/cmake.mk
define Package/mariadb/install/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$(2) $(1)/usr/bin
endef
define Package/mariadb/description/Default
MariaDB is a fast, stable and true multi-user, multi-threaded SQL
database server. SQL (Structured Query Language) is the most popular
database query language in the world. The main goals of MariaDB are
speed, robustness and ease of use.
endef
define Package/libmariadbclient
SECTION:=libs
CATEGORY:=Libraries
DEPENDS:=$(MARIADB_COMMON_DEPENDS)
TITLE:=MariaDB database client library
URL:=https://mariadb.org/
PROVIDES:=libmysqlclient libmysqlclient-r
endef
define Package/libmariadbclient/description
$(call Package/mariadb/description/Default)
This package includes the client library.
endef
define Package/mariadb/Default
SECTION:=utils
CATEGORY:=Utilities
URL:=https://mariadb.org/
SUBMENU:=database
endef
define Package/mariadb-client
$(call Package/mariadb/Default)
TITLE:=MariaDB database core client binaries
DEPENDS:= \
$(MARIADB_COMMON_DEPENDS) \
+libncursesw
endef
define Package/mariadb-client/description
$(call Package/mariadb/description/Default)
This package includes the following core client binaries:
$(subst $(space),$(newline),$(MARIADB_CLIENT))
endef
define Package/mariadb-client-extra
$(call Package/mariadb/Default)
TITLE:=MariaDB database extra client binaries
DEPENDS:=mariadb-client
endef
define Package/mariadb-client-extra/description
$(call Package/mariadb/description/Default)
This package includes the following extra client binaries:
$(subst $(space),$(newline),$(MARIADB_CLIENT_EXTRA))
endef
define Package/mariadb-extra-charsets
$(call Package/mariadb/Default)
TITLE:=MariaDB database extra character sets
DEPENDS:=mariadb-server
endef
define Package/mariadb-extra-charsets/description
$(call Package/mariadb/description/Default)
The MariaDB server packaged by OpenWrt only provides support for UTF-8.
This package contains single Byte character sets and collations that can
be added at run time.
endef
define Package/mariadb-server
$(call Package/mariadb/Default)
DEPENDS:= \
$(MARIADB_COMMON_DEPENDS) \
+!arc:libaio \
+liblzma \
+libpcre \
+resolveip
TITLE:=MariaDB database core server binaries
MENU:=1
PROVIDES:=mysql-server
endef
define Package/mariadb-server/description
$(call Package/mariadb/description/Default)
This package includes the following core server binaries:
$(subst $(space),$(newline),$(MARIADB_SERVER))
endef
define Package/mariadb-server-extra
$(call Package/mariadb/Default)
TITLE:=MariaDB database extra server binaries
DEPENDS:=mariadb-server
endef
define Package/mariadb-server-extra/description
$(call Package/mariadb/description/Default)
This package includes the following extra server binaries:
$(subst $(space),$(newline),$(MARIADB_SERVER_EXTRA))
endef
# We won't need unit tests
CMAKE_OPTIONS += -DWITH_UNIT_TESTS=0
# This value is determined automatically during straight compile by compiling
# and running a test code. You cannot do that during cross-compile. However the
# stack grows downward in most if not all modern systems. The only exception
# according to buildroot is PA-RISC which is not supported by OpenWrt as far as
# I know. Therefore it makes sense to hardcode the value. If an arch is added
# the stack of which grows up one should expect unpredictable behavior at run
# time.
CMAKE_OPTIONS += -DSTACK_DIRECTION=-1
# Jemalloc was added for TokuDB. Since its configure script seems somewhat broken
# when it comes to cross-compilation we shall disable it and also disable TokuDB.
CMAKE_OPTIONS += -DWITH_JEMALLOC=no -DWITHOUT_TOKUDB=1
# Make it explicit that we are cross-compiling
CMAKE_OPTIONS += -DCMAKE_CROSSCOMPILING=1
# Explicitly disable dtrace to avoid detection of a host version
CMAKE_OPTIONS += -DENABLE_DTRACE=0
# Prevent mariadb from messing with OpenWrt's C(XX)FLAGS
CMAKE_OPTIONS += -DSECURITY_HARDENED=OFF
ifeq ($(CONFIG_PACKAGE_mariadb-server),)
CMAKE_OPTIONS += -DWITHOUT_SERVER=ON
else
CMAKE_OPTIONS += -DWITHOUT_SERVER=OFF
endif
CMAKE_OPTIONS += \
-DCONNECT_WITH_JDBC=NO \
-DCONNECT_WITH_LIBXML2=system \
-DCONNECT_WITH_ODBC=NO \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DDISABLE_SHARED=NO \
-DENABLED_PROFILING=OFF \
-DENABLE_STATIC_LIBS=OFF \
-DINSTALL_DOCDIR=share/doc/mariadb \
-DINSTALL_DOCREADMEDIR=share/doc/mariadb \
-DINSTALL_MANDIR=share/man \
-DINSTALL_MYSQLSHAREDIR=share/mysql \
-DINSTALL_MYSQLTESTDIR="" \
-DINSTALL_PLUGINDIR=lib/mysql/plugin \
-DINSTALL_SBINDIR=bin \
-DINSTALL_SCRIPTDIR=bin \
-DINSTALL_SQLBENCHDIR="" \
-DINSTALL_SUPPORTFILESDIR=share/mysql \
-DMYSQLD_USER=root \
-DMYSQL_DATADIR=/var/lib/mysql \
-DMYSQL_UNIX_ADDR=/var/run/mysqld.sock \
-DSKIP_TESTS=ON \
-DWITH_ASAN=OFF \
-DWITH_EMBEDDED_SERVER=OFF \
-DWITH_EXTRA_CHARSETS=none \
-DWITH_INNODB_BZIP2=OFF \
-DWITH_INNODB_LZ4=OFF \
-DWITH_INNODB_LZMA=ON \
-DWITH_INNODB_LZO=OFF \
-DWITH_INNODB_SNAPPY=OFF \
-DWITH_LIBEDIT=OFF \
-DWITH_LIBNUMA=NO \
-DWITH_LIBWRAP=OFF \
-DWITH_LIBWSEP=OFF \
-DWITH_MARIABACKUP=ON \
-DWITH_PCRE=system \
-DWITH_READLINE=OFF \
-DWITH_SAFEMALLOC=OFF \
-DWITH_SSL=system \
-DWITH_SYSTEMD=no \
-DWITH_VALGRIND=OFF \
-DWITH_ZLIB=system
# Default-disable some modules
CMAKE_OPTIONS += \
-DPLUGIN_CASSANDRA=NO \
-DPLUGIN_MROONGA=NO \
-DPLUGIN_OQGRAPH=NO \
-DPLUGIN_ROCKSDB=NO \
-DPLUGIN_SPHINX=NO \
-DPLUGIN_TOKUDB=NO \
-DPLUGIN_AUTH_PAM=NO \
-DPLUGIN_AUTH_GSSAPI=NO \
-DPLUGIN_AUTH_GSSAPI_CLIENT=NO \
-DPLUGIN_CRACKLIB_PASSWORD_CHECK=NO
CMAKE_OPTIONS += \
$(foreach p,$(MARIADB_SERVER_PLUGINS),-D$(plugin-$(p))=$(if $(CONFIG_PACKAGE_$(PKG_NAME)-server-plugin-$(subst _,-,$(p))),DYNAMIC,NO))
# Set CMAKE_FIND_ROOT_PATH_MODE_INCLUDE and CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
# to BOTH as otherwise the host build will not find some required dependencies
# installed on the host machine, like ncurses.
#
# Add "$(STAGING_DIR_HOSTPKG)/lib" to the RPATH of the host helpers,
# otherwise they might not find the location of a library at run time.
CMAKE_HOST_OPTIONS += \
-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE \
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH \
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH \
-DCMAKE_INSTALL_RPATH="$(STAGING_DIR_HOSTPKG)/lib" \
-DCMAKE_SKIP_RPATH=FALSE \
-DWITHOUT_SERVER=OFF \
-DWITHOUT_TOKUDB=1
# Some helpers must be compiled for host in order to crosscompile mariadb for
# the target. They are then included by import_executables.cmake which is
# generated during the build of the host helpers. It is not necessary to build
# the whole host package, only the "import_executables" target.
# -DIMPORT_EXECUTABLES=$(HOST_BUILD_DIR)/import_executables.cmake
# must then be passed to cmake during target build.
# see also https://mariadb.com/kb/en/mariadb/cross-compiling-mariadb/
CMAKE_OPTIONS += -DIMPORT_EXECUTABLES=$(STAGING_DIR_HOSTPKG)/share/mariadb/import_executables.cmake
define Host/Compile
$(call Host/Compile/Default,import_executables)
endef
define Host/Install
$(SED) 's|$(HOST_BUILD_DIR)|$(STAGING_DIR_HOSTPKG)/share/mariadb|' $(HOST_BUILD_DIR)/import_executables.cmake
$(INSTALL_DIR) $(1)/share/mariadb/{dbug,extra,scripts,sql}
$(INSTALL_BIN) $(HOST_BUILD_DIR)/dbug/factorial $(1)/share/mariadb/dbug
$(INSTALL_BIN) $(HOST_BUILD_DIR)/extra/comp_err $(1)/share/mariadb/extra
$(INSTALL_BIN) $(HOST_BUILD_DIR)/scripts/comp_sql $(1)/share/mariadb/scripts
$(INSTALL_BIN) $(HOST_BUILD_DIR)/sql/{gen_lex_hash,gen_lex_token} $(1)/share/mariadb/sql
$(INSTALL_DATA) $(HOST_BUILD_DIR)/import_executables.cmake $(1)/share/mariadb
endef
define Build/InstallDev
$(INSTALL_DIR) $(2)/bin $(1)/usr/bin $(1)/usr/include $(1)/usr/lib/pkgconfig $(1)/usr/share/aclocal
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mysql_config $(1)/usr/bin/
$(LN) $(STAGING_DIR)/usr/bin/mysql_config $(2)/bin/
$(CP) $(PKG_INSTALL_DIR)/usr/include/mysql $(1)/usr/include/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libmysqlclient*.so* $(1)/usr/lib/
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/pkgconfig/mariadb.pc $(1)/usr/lib/pkgconfig
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/aclocal/mysql.m4 $(1)/usr/share/aclocal
endef
define Package/libmariadbclient/install
$(INSTALL_DIR) $(1)$(PLUGIN_DIR)
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libmysqlclient*.so* $(1)/usr/lib/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)$(PLUGIN_DIR)/dialog.so $(1)$(PLUGIN_DIR)
$(INSTALL_BIN) $(PKG_INSTALL_DIR)$(PLUGIN_DIR)/mysql_clear_password.so $(1)$(PLUGIN_DIR)
endef
define Package/mariadb-client/install
$(INSTALL_DIR) $(1)/usr/bin
$(foreach b,$(MARIADB_CLIENT),$(call Package/mariadb/install/bin,$(1),$(b));)
endef
define Package/mariadb-client-extra/install
$(INSTALL_DIR) $(1)/usr/bin
$(foreach b,$(MARIADB_CLIENT_EXTRA),$(call Package/mariadb/install/bin,$(1),$(b));)
endef
define Package/mariadb-extra-charsets/install
$(INSTALL_DIR) $(1)/usr/share/mysql/charsets
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/charsets/* $(1)/usr/share/mysql/charsets
endef
define Package/mariadb-server/install
$(INSTALL_DIR) $(1)/usr/bin
$(foreach b,$(MARIADB_SERVER),$(call Package/mariadb/install/bin,$(1),$(b));)
$(INSTALL_DIR) $(1)/etc/init.d/
$(INSTALL_DIR) $(1)/etc/mysql
$(INSTALL_BIN) files/mysqld.init $(1)/etc/init.d/mysqld
$(INSTALL_CONF) conf/my.cnf $(1)/etc/mysql
$(INSTALL_DIR) $(1)$(PLUGIN_DIR)
$(INSTALL_CONF) $(PKG_INSTALL_DIR)$(PLUGIN_DIR)/daemon_example.ini $(1)$(PLUGIN_DIR)
$(INSTALL_DIR) $(1)/usr/share/mysql/english
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/english/errmsg.sys $(1)/usr/share/mysql/english
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/fill_help_tables.sql $(1)/usr/share/mysql/
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/maria_add_gis_sp_bootstrap.sql $(1)/usr/share/mysql/
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/mysql_performance_tables.sql $(1)/usr/share/mysql/
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/mysql_system_tables.sql $(1)/usr/share/mysql/
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/mysql/mysql_system_tables_data.sql $(1)/usr/share/mysql/
endef
define Package/mariadb-server-extra/install
$(INSTALL_DIR) $(1)/usr/bin
$(foreach b,$(MARIADB_SERVER_EXTRA),$(call Package/mariadb/install/bin,$(1),$(b));)
endef
define Package/mariadb-server/conffiles
/etc/mysql/my.cnf
/usr/lib/mysql/plugin/daemon_example.ini
endef
define BuildPlugin
define Package/$(PKG_NAME)-server-plugin-$(subst _,-,$(1))
$$(call Package/mariadb/Default)
TITLE:=MariaDB database plugin
DEPENDS:=mariadb-server $(patsubst +%,+PACKAGE_$(PKG_NAME)-server-plugin-$(subst _,-,$(1)):%,$(2))
endef
define Package/$(PKG_NAME)-server-plugin-$(subst _,-,$(1))/description
$$(call Package/mariadb/description/Default)
This package provides the $(1) plugin.
endef
define Package/$(PKG_NAME)-server-plugin-$(subst _,-,$(1))/install
$(INSTALL_DIR) $$(1)$(PLUGIN_DIR)
$(INSTALL_BIN) \
$(PKG_INSTALL_DIR)$(PLUGIN_DIR)/$(1).so \
$$(1)$(PLUGIN_DIR)
endef
$$(eval $$(call BuildPackage,$(PKG_NAME)-server-plugin-$(subst _,-,$(1))))
endef
$(eval $(call HostBuild))
$(eval $(call BuildPackage,libmariadbclient))
$(eval $(call BuildPackage,mariadb-client))
$(eval $(call BuildPackage,mariadb-client-extra))
$(eval $(call BuildPackage,mariadb-extra-charsets))
$(eval $(call BuildPackage,mariadb-server))
$(eval $(call BuildPackage,mariadb-server-extra))
$(eval $(call BuildPlugin,adt_null,))
$(eval $(call BuildPlugin,auth_0x0100,))
$(eval $(call BuildPlugin,auth_ed25519,))
$(eval $(call BuildPlugin,auth_socket,))
$(eval $(call BuildPlugin,auth_test_plugin,))
$(eval $(call BuildPlugin,client_ed25519,))
$(eval $(call BuildPlugin,debug_key_management,))
$(eval $(call BuildPlugin,dialog_examples,))
$(eval $(call BuildPlugin,disks,))
$(eval $(call BuildPlugin,example_key_management,))
$(eval $(call BuildPlugin,feedback,))
$(eval $(call BuildPlugin,file_key_management,))
$(eval $(call BuildPlugin,ha_archive,))
$(eval $(call BuildPlugin,ha_blackhole,))
$(eval $(call BuildPlugin,ha_connect,+libxml2))
$(eval $(call BuildPlugin,ha_federated,))
$(eval $(call BuildPlugin,ha_federatedx,))
$(eval $(call BuildPlugin,ha_innodb,))
$(eval $(call BuildPlugin,ha_spider,))
$(eval $(call BuildPlugin,ha_test_sql_discovery,))
$(eval $(call BuildPlugin,handlersocket,))
$(eval $(call BuildPlugin,libdaemon_example,))
$(eval $(call BuildPlugin,locales,))
$(eval $(call BuildPlugin,metadata_lock_info,))
$(eval $(call BuildPlugin,mypluglib,))
$(eval $(call BuildPlugin,qa_auth_client,))
$(eval $(call BuildPlugin,qa_auth_interface,))
$(eval $(call BuildPlugin,qa_auth_server,))
$(eval $(call BuildPlugin,query_cache_info,))
$(eval $(call BuildPlugin,query_response_time,))
$(eval $(call BuildPlugin,semisync_master,))
$(eval $(call BuildPlugin,semisync_slave,))
$(eval $(call BuildPlugin,server_audit,))
$(eval $(call BuildPlugin,simple_password_check,))
$(eval $(call BuildPlugin,sql_errlog,))
$(eval $(call BuildPlugin,wsrep_info,))