diff --git a/libs/libmariadb/Makefile b/libs/libmariadb/Makefile new file mode 100644 index 000000000..ea56c2cc3 --- /dev/null +++ b/libs/libmariadb/Makefile @@ -0,0 +1,188 @@ +# +# Copyright (C) 2019 Sebastian Kemper +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=libmariadb +PKG_VERSION:=3.1.5 +PKG_RELEASE:=1 + +PKG_SOURCE:=mariadb-connector-c-$(PKG_VERSION)-src.tar.gz +PKG_SOURCE_URL := \ + https://mirror.netcologne.de/mariadb/connector-c-$(PKG_VERSION) \ + https://mirror.lstn.net/mariadb/connector-c-$(PKG_VERSION) \ + https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/connector-c-$(PKG_VERSION) \ + https://downloads.mariadb.org/interstitial/connector-c-$(PKG_VERSION) + +PKG_HASH:=a9de5fedd1a7805c86e23be49b9ceb79a86b090ad560d51495d7ba5952a9d9d5 +PKG_MAINTAINER:=Sebastian Kemper +PKG_LICENSE:=LGPL-2.1 +PKG_LICENSE_FILES:=COPYING.LIB + +PKG_BUILD_DIR:=$(BUILD_DIR)/mariadb-connector-c-$(PKG_VERSION)-src + +PKG_CPE_ID:=cpe:/a:mariadb:mariadb + +PKG_BUILD_PARALLEL:=1 + +CMAKE_INSTALL:=1 + +MARIADB_CONF_DIR:=/etc/mysql +MARIADB_PLUGIN_DIR:=/usr/lib/mariadb/plugin + +MARIADB_PORT=3306 +MARIADB_SOCKET=/var/run/mysqld/mysqld.sock + +MARIADB_CLIENT_PLUGINS := \ + auth_gssapi_client \ + remote_io + +PKG_CONFIG_DEPENDS := \ + $(patsubst %,CONFIG_PACKAGE_$(PKG_NAME)-plugin-%,$(subst _,-,$(MARIADB_CLIENT_PLUGINS))) + +plugin-auth_gssapi_client := CLIENT_PLUGIN_AUTH_GSSAPI_CLIENT +plugin-remote_io := CLIENT_PLUGIN_REMOTE_IO + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk +include $(INCLUDE_DIR)/nls.mk + +# Pass CPPFLAGS in the CFLAGS as otherwise the build system will +# ignore them. +TARGET_CFLAGS+=$(TARGET_CPPFLAGS) + +define Package/$(PKG_NAME)/install/plugin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)$(MARIADB_PLUGIN_DIR)/$(2).so $(1)$(MARIADB_PLUGIN_DIR) +endef + +define Package/$(PKG_NAME)/Default + SECTION:=libs + CATEGORY:=Libraries + URL:=https://mariadb.org/ + SUBMENU:=Database +endef + +define Package/$(PKG_NAME)/description/Default +MariaDB is a very fast and robust SQL database server. +endef + +define Package/$(PKG_NAME) + $(call Package/$(PKG_NAME)/Default) + DEPENDS:=+mariadb-common \ + $(ICONV_DEPENDS) \ + +libopenssl \ + +zlib + TITLE:=MariaDB database client library + MENU:=1 + PROVIDES:=libmariadbclient libmysqlclient libmysqlclient-r + ABI_VERSION:=3 +endef + +define Package/$(PKG_NAME)/conffiles +$(MARIADB_CONF_DIR)/conf.d/50-client.cnf +endef + +define Package/$(PKG_NAME)/description +$(call Package/$(PKG_NAME)/description/Default) + +This package includes the client library. + +endef + +# We won't need unit tests +CMAKE_OPTIONS += -DWITH_UNIT_TESTS=0 + +# Make it explicit that we are cross-compiling +CMAKE_OPTIONS += -DCMAKE_CROSSCOMPILING=1 + +CMAKE_OPTIONS += \ + -DINSTALL_INCLUDEDIR=include/mysql \ + -DINSTALL_LIBDIR=lib \ + -DINSTALL_PLUGINDIR=lib/mariadb/plugin \ + -DMARIADB_UNIX_ADDR=$(MARIADB_SOCKET) \ + -DWITH_EXTERNAL_ZLIB=YES \ + -DWITH_MYSQLCOMPAT=ON \ + -DWITH_SSL=OPENSSL + +# Help MariaDB find the correct libiconv. +# nls.mk sets it up so that with CONFIG_BUILD_NLS libiconv-full would be used, +# otherwise libiconv-stub (independent of the selected libc). MariaDB needs a +# leg up to find/pick the right lib. +CMAKE_OPTIONS += \ + -DICONV_INCLUDE_DIR=$(ICONV_PREFIX)/include \ + -DICONV_LIBRARIES=$(ICONV_PREFIX)/lib/libiconv.$(if $(CONFIG_BUILD_NLS),so,a) + +CMAKE_OPTIONS += \ + $(foreach p,$(MARIADB_CLIENT_PLUGINS),-D$(plugin-$(p))=$(if $(CONFIG_PACKAGE_$(PKG_NAME)-plugin-$(subst _,-,$(p))),DYNAMIC,OFF)) + +# LIBICONV_PLUG is used in GNU's libiconv for redefinition of exports [e.g. +# from libiconv_open() to iconv_open()]. But in OpenWrt this variable is not set +# when building libiconv-full. So when MariaDB sets LIBICONV_PLUG it expects +# iconv_open() to be available for example, which is not the case - only +# libiconv_open() is. To address this prevent the variable from being set. +# libiconv-stub does not use this variable, so there is no harm in always doing +# this. + +define Build/Prepare + $(call Build/Prepare/Default) + $(SED) '/ADD_DEFINITIONS(-DLIBICONV_PLUG)/d' $(PKG_BUILD_DIR)/CMakeLists.txt +endef + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/bin $(1)/usr/include $(1)/usr/lib/mysql $(1)/usr/lib/pkgconfig $(2)/bin + $(CP) $(PKG_INSTALL_DIR)/usr/include/mysql $(1)/usr/include + cd $(1)/usr/include/mysql; $(LN) mariadb_version.h mysql_version.h + $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{mariadb,mysqlclient}*.so* $(1)/usr/lib + cd $(1)/usr/lib/mysql; $(LN) ../lib{mariadb,mysqlclient}*.so* . + $(INSTALL_BIN) files/mysql_config $(1)/usr/bin + $(LN) $(STAGING_DIR)/usr/bin/mysql_config $(2)/bin + $(SED) 's/PORT/$(MARIADB_PORT)/' $(1)/usr/bin/mysql_config + $(SED) 's|PLUGIN_DIR|$(MARIADB_PLUGIN_DIR)|' $(1)/usr/bin/mysql_config + $(SED) 's|SOCKET|$(MARIADB_SOCKET)|' $(1)/usr/bin/mysql_config + cd "$(PKG_BUILD_DIR)/mariadb_config"; \ + CLIENT_VERSION=`sed -n 's|^#define[[:blank:]]*VERSION[[:blank:]]*"\([0-9.]*\)"|\1|p' mariadb_config.c`; \ + $(SED) "s/VERSION/$$$${CLIENT_VERSION}/" $(1)/usr/bin/mysql_config + $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libmariadb.pc $(1)/usr/lib/pkgconfig +endef + +define Package/$(PKG_NAME)/install + $(INSTALL_DIR) $(1)$(MARIADB_CONF_DIR)/conf.d + $(INSTALL_DIR) $(1)$(MARIADB_PLUGIN_DIR) + $(INSTALL_BIN) \ + $(PKG_INSTALL_DIR)$(MARIADB_PLUGIN_DIR)/caching_sha2_password.so \ + $(PKG_INSTALL_DIR)$(MARIADB_PLUGIN_DIR)/client_ed25519.so \ + $(PKG_INSTALL_DIR)$(MARIADB_PLUGIN_DIR)/dialog.so \ + $(PKG_INSTALL_DIR)$(MARIADB_PLUGIN_DIR)/mysql_clear_password.so \ + $(PKG_INSTALL_DIR)$(MARIADB_PLUGIN_DIR)/sha256_password.so \ + $(1)$(MARIADB_PLUGIN_DIR) + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/libmariadb.so.$(ABI_VERSION) $(1)/usr/lib + $(INSTALL_CONF) conf/50-client.cnf $(1)$(MARIADB_CONF_DIR)/conf.d +endef + +define BuildPlugin + define Package/$(PKG_NAME)-plugin-$(subst _,-,$(1)) + $(call Package/$(PKG_NAME)/Default) + TITLE:=$(PKG_NAME) plugin + DEPENDS:=$(PKG_NAME) $(patsubst +%,+PACKAGE_$(PKG_NAME)-plugin-$(subst _,-,$(1)):%,$(2)) + endef + define Package/$(PKG_NAME)-plugin-$(subst _,-,$(1))/description + $(call Package/$(PKG_NAME)/description/Default) + +This package provides the $(1) plugin. + + endef + define Package/$(PKG_NAME)-plugin-$(subst _,-,$(1))/install + $(INSTALL_DIR) $$(1)$(MARIADB_PLUGIN_DIR) + $(call Package/$(PKG_NAME)/install/plugin,$$(1),$(1)) + endef + $$(eval $$(call BuildPackage,$(PKG_NAME)-plugin-$(subst _,-,$(1)))) +endef + +$(eval $(call BuildPackage,$(PKG_NAME))) + +$(eval $(call BuildPlugin,auth_gssapi_client,+krb5-libs)) +$(eval $(call BuildPlugin,remote_io,+libcurl)) diff --git a/utils/mariadb/conf/50-client.cnf b/libs/libmariadb/conf/50-client.cnf similarity index 100% rename from utils/mariadb/conf/50-client.cnf rename to libs/libmariadb/conf/50-client.cnf diff --git a/libs/libmariadb/files/mysql_config b/libs/libmariadb/files/mysql_config new file mode 100755 index 000000000..5c4dfbd79 --- /dev/null +++ b/libs/libmariadb/files/mysql_config @@ -0,0 +1,61 @@ +#!/bin/sh + +PCFILE=libmariadb + +command -v pkg-config > /dev/null 2>&1 +ret="$?" +if [ "$ret" -ne 0 ]; then + echo pkg-config not found >&2 + exit 1 +fi + +pkg-config $PCFILE > /dev/null 2>&1 +ret="$?" +if [ "$ret" -ne 0 ]; then + echo $PCFILE pkg-config file missing >&2 + exit 1 +fi + +cflags=$(pkg-config $PCFILE --cflags) +include=$(pkg-config $PCFILE --cflags) +libs=$(pkg-config $PCFILE --libs) +plugindir=PLUGIN_DIR +socket=SOCKET +port=PORT +version=VERSION + +usage () { + cat <&2 ;; + esac + + shift +done + +exit 0 diff --git a/libs/libmariadb/patches/fix-ucontext-header.patch b/libs/libmariadb/patches/fix-ucontext-header.patch new file mode 100644 index 000000000..8e409729b --- /dev/null +++ b/libs/libmariadb/patches/fix-ucontext-header.patch @@ -0,0 +1,11 @@ +--- a/cmake/CheckIncludeFiles.cmake ++++ b/cmake/CheckIncludeFiles.cmake +@@ -46,4 +46,7 @@ + CHECK_INCLUDE_FILES (sys/un.h HAVE_SYS_UN_H) + CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H) + CHECK_INCLUDE_FILES (utime.h HAVE_UTIME_H) +-CHECK_INCLUDE_FILES (ucontext.h HAVE_UCONTEXT_H) ++CHECK_INCLUDE_FILES (ucontext.h HAVE_UCONTEXT_HEADER) ++IF(HAVE_UCONTEXT_HEADER) ++ CHECK_FUNCTION_EXISTS(makecontext HAVE_UCONTEXT_H) ++ENDIF(HAVE_UCONTEXT_HEADER) diff --git a/utils/mariadb/Makefile b/utils/mariadb/Makefile index 9c8b0eedc..bca45dc9a 100644 --- a/utils/mariadb/Makefile +++ b/utils/mariadb/Makefile @@ -20,8 +20,8 @@ PKG_SOURCE_URL := \ PKG_HASH:=cd50fddf86c2a47405737e342f78ebd40d5716f0fb32b976245de713bed01421 PKG_MAINTAINER:=Sebastian Kemper -PKG_LICENSE:=GPL-2.0 LGPL-2.1 -PKG_LICENSE_FILES:=COPYING THIRDPARTY libmariadb/COPYING.LIB +PKG_LICENSE:=GPL-2.0 +PKG_LICENSE_FILES:=COPYING THIRDPARTY PKG_CPE_ID:=cpe:/a:mariadb:mariadb @@ -61,9 +61,6 @@ MARIADB_DISABLE_PLUGINS := \ fulltext \ versioning -MARIADB_LIB_PLUGINS := \ - auth_gssapi_client - MARIADB_SERVER_PLUGINS := \ auth_ed25519 \ auth_gssapi \ @@ -90,12 +87,9 @@ MARIADB_SERVER_PLUGINS := \ wsrep_info PKG_CONFIG_DEPENDS := \ - $(patsubst %,CONFIG_PACKAGE_lib$(PKG_NAME)-plugin-%,$(subst _,-,$(MARIADB_LIB_PLUGINS))) \ $(patsubst %,CONFIG_PACKAGE_$(PKG_NAME)-server-plugin-%,$(subst _,-,$(MARIADB_SERVER_PLUGINS))) \ CONFIG_PACKAGE_mariadb-server -plugin-auth_gssapi_client := PLUGIN_AUTH_GSSAPI_CLIENT - plugin-auth_ed25519 := PLUGIN_AUTH_ED25519 plugin-auth_gssapi := PLUGIN_AUTH_GSSAPI plugin-auth_pam := PLUGIN_AUTH_PAM @@ -214,32 +208,6 @@ define Package/mariadb/description/Default MariaDB is a very fast and robust SQL database server. endef -define Package/libmariadb/Default - SECTION:=libs - CATEGORY:=Libraries - URL:=https://mariadb.org/ -endef - -define Package/libmariadb - $(call Package/libmariadb/Default) - DEPENDS:=+mariadb-common \ - $(MARIADB_COMMON_DEPENDS) - TITLE:=MariaDB database client library - MENU:=1 - PROVIDES:=libmariadbclient libmysqlclient libmysqlclient-r -endef - -define Package/libmariadb/conffiles -$(CONF_DIR)/conf.d/50-client.cnf -endef - -define Package/libmariadb/description -$(call Package/mariadb/description/Default) - -This package includes the client library. - -endef - define Package/mariadb/Default SECTION:=utils CATEGORY:=Utilities @@ -437,9 +405,13 @@ CMAKE_OPTIONS += \ -DICONV_LIBRARIES=$(ICONV_PREFIX)/lib/libiconv.$(if $(CONFIG_BUILD_NLS),so,a) CMAKE_OPTIONS += \ - $(foreach p,$(MARIADB_LIB_PLUGINS),-D$(plugin-$(p))=$(if $(CONFIG_PACKAGE_lib$(PKG_NAME)-plugin-$(subst _,-,$(p))),DYNAMIC,OFF)) \ $(foreach p,$(MARIADB_SERVER_PLUGINS),-D$(plugin-$(p))=$(if $(CONFIG_PACKAGE_$(PKG_NAME)-server-plugin-$(subst _,-,$(p))),DYNAMIC,NO)) +# Disable some client library plugins +CMAKE_OPTIONS += \ + -DCLIENT_PLUGIN_AUTH_GSSAPI_CLIENT=OFF \ + -DCLIENT_PLUGIN_REMOTE_IO=OFF + # 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. @@ -500,27 +472,9 @@ define Build/Prepare $(foreach p,$(MARIADB_DISABLE_PLUGINS),$(call Package/mariadb/disable/plugin,$(PKG_BUILD_DIR),$(p));) endef +# Define Build/InstallDev, otherwise build system starts installing files into +# staging area, which would interfere with mariadb-connector-c. define Build/InstallDev - $(INSTALL_DIR) $(2)/bin $(1)/usr/bin $(1)/usr/include $(1)/usr/lib/mysql $(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/lib{mariadb,mysqlclient}*.so* $(1)/usr/lib - cd $(1)/usr/lib/mysql; $(LN) ../lib{mariadb,mysqlclient}*.so* . - $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libmariadb.pc $(1)/usr/lib/pkgconfig - $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/aclocal/mysql.m4 $(1)/usr/share/aclocal -endef - -define Package/libmariadb/install - $(INSTALL_DIR) $(1)$(CONF_DIR)/conf.d - $(INSTALL_DIR) $(1)$(PLUGIN_DIR) - $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{mariadb,mysqlclient}*.so* $(1)/usr/lib - $(INSTALL_BIN) $(PKG_INSTALL_DIR)$(PLUGIN_DIR)/caching_sha2_password.so $(1)$(PLUGIN_DIR) - $(INSTALL_BIN) $(PKG_INSTALL_DIR)$(PLUGIN_DIR)/client_ed25519.so $(1)$(PLUGIN_DIR) - $(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) - $(INSTALL_BIN) $(PKG_INSTALL_DIR)$(PLUGIN_DIR)/sha256_password.so $(1)$(PLUGIN_DIR) - $(INSTALL_CONF) conf/50-client.cnf $(1)$(CONF_DIR)/conf.d endef define Package/mariadb-client/install @@ -577,26 +531,25 @@ define Package/mariadb-server-extra/install endef define BuildPlugin - define Package/$(1)-plugin-$(subst _,-,$(2)) - $(call Package/$(subst mariadb-server,mariadb,$(1))/Default) - TITLE:=$(1) plugin - DEPENDS:=$(1) $(patsubst +%,+PACKAGE_$(1)-plugin-$(subst _,-,$(2)):%,$(3)) + define Package/mariadb-server-plugin-$(subst _,-,$(1)) + $(call Package/mariadb/Default) + TITLE:=mariadb-server plugin + DEPENDS:=mariadb-server $(patsubst +%,+PACKAGE_mariadb-server-plugin-$(subst _,-,$(1)):%,$(2)) endef - define Package/$(1)-plugin-$(subst _,-,$(2))/description + define Package/mariadb-server-plugin-$(subst _,-,$(1))/description $(call Package/mariadb/description/Default) -This package provides the $(2) plugin. +This package provides the $(1) plugin. endef - define Package/$(1)-plugin-$(subst _,-,$(2))/install + define Package/mariadb-server-plugin-$(subst _,-,$(1))/install $(INSTALL_DIR) $$(1)$(PLUGIN_DIR) - $(call Package/mariadb/install/plugin,$$(1),$(2)) + $(call Package/mariadb/install/plugin,$$(1),$(1)) endef - $$(eval $$(call BuildPackage,$(1)-plugin-$(subst _,-,$(2)))) + $$(eval $$(call BuildPackage,mariadb-server-plugin-$(subst _,-,$(1)))) endef $(eval $(call HostBuild)) -$(eval $(call BuildPackage,libmariadb)) $(eval $(call BuildPackage,mariadb-client)) $(eval $(call BuildPackage,mariadb-client-base)) $(eval $(call BuildPackage,mariadb-client-extra)) @@ -604,28 +557,27 @@ $(eval $(call BuildPackage,mariadb-server)) $(eval $(call BuildPackage,mariadb-server-base)) $(eval $(call BuildPackage,mariadb-server-extra)) -$(eval $(call BuildPlugin,libmariadb,auth_gssapi_client,+krb5-libs)) -$(eval $(call BuildPlugin,mariadb-server,auth_ed25519,)) -$(eval $(call BuildPlugin,mariadb-server,auth_gssapi,+krb5-libs)) -$(eval $(call BuildPlugin,mariadb-server,auth_pam,+libpam)) -$(eval $(call BuildPlugin,mariadb-server,auth_pam_v1,+libpam)) -$(eval $(call BuildPlugin,mariadb-server,disks,)) -$(eval $(call BuildPlugin,mariadb-server,feedback,)) -$(eval $(call BuildPlugin,mariadb-server,file_key_management,)) -$(eval $(call BuildPlugin,mariadb-server,ha_archive,)) -$(eval $(call BuildPlugin,mariadb-server,ha_blackhole,)) -$(eval $(call BuildPlugin,mariadb-server,ha_connect,+libxml2)) -$(eval $(call BuildPlugin,mariadb-server,ha_federated,)) -$(eval $(call BuildPlugin,mariadb-server,ha_federatedx,)) -$(eval $(call BuildPlugin,mariadb-server,ha_sphinx,)) -$(eval $(call BuildPlugin,mariadb-server,ha_spider,)) -$(eval $(call BuildPlugin,mariadb-server,handlersocket,)) -$(eval $(call BuildPlugin,mariadb-server,locales,)) -$(eval $(call BuildPlugin,mariadb-server,metadata_lock_info,)) -$(eval $(call BuildPlugin,mariadb-server,query_cache_info,)) -$(eval $(call BuildPlugin,mariadb-server,query_response_time,)) -$(eval $(call BuildPlugin,mariadb-server,server_audit,)) -$(eval $(call BuildPlugin,mariadb-server,simple_password_check,)) -$(eval $(call BuildPlugin,mariadb-server,sql_errlog,)) -$(eval $(call BuildPlugin,mariadb-server,wsrep_info,)) +$(eval $(call BuildPlugin,auth_ed25519,)) +$(eval $(call BuildPlugin,auth_gssapi,+krb5-libs)) +$(eval $(call BuildPlugin,auth_pam,+libpam)) +$(eval $(call BuildPlugin,auth_pam_v1,+libpam)) +$(eval $(call BuildPlugin,disks,)) +$(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_sphinx,)) +$(eval $(call BuildPlugin,ha_spider,)) +$(eval $(call BuildPlugin,handlersocket,)) +$(eval $(call BuildPlugin,locales,)) +$(eval $(call BuildPlugin,metadata_lock_info,)) +$(eval $(call BuildPlugin,query_cache_info,)) +$(eval $(call BuildPlugin,query_response_time,)) +$(eval $(call BuildPlugin,server_audit,)) +$(eval $(call BuildPlugin,simple_password_check,)) +$(eval $(call BuildPlugin,sql_errlog,)) +$(eval $(call BuildPlugin,wsrep_info,))