#
# Copyright (C) 2007-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=apr-util
PKG_VERSION:=1.6.3
PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@APACHE/apr/
PKG_HASH:=a41076e3710746326c3945042994ad9a4fcac0ce0277dd8fea076fec3c9772b5
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>

PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE

PKG_CPE_ID:=cpe:/a:apache:apr-util

PKG_CONFIG_DEPENDS := \
	CONFIG_PACKAGE_libaprutil-crypto-openssl \
	CONFIG_PACKAGE_libaprutil-dbd-mysql \
	CONFIG_PACKAGE_libaprutil-dbd-odbc \
	CONFIG_PACKAGE_libaprutil-dbd-pgsql \
	CONFIG_PACKAGE_libaprutil-dbd-sqlite3 \
	CONFIG_PACKAGE_libaprutil-dbm-gdbm \
	CONFIG_PACKAGE_libaprutil-ldap

PKG_FIXUP:=autoreconf

PKG_INSTALL:=1

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk

define Package/libaprutil/Default
  SECTION:=libs
  CATEGORY:=Libraries
  URL:=https://apr.apache.org/
endef

define Package/libaprutil
$(call Package/libaprutil/Default)
  DEPENDS:=+libapr +libexpat +libuuid $(ICONV_DEPENDS)
  TITLE:=Apache Portable Runtime Utility Library
endef

## Prevent apu-iconv.m4 to append "/lib" to LDFLAGS if ICONV_PREFIX is empty
ifeq ($(ICONV_PREFIX),)
ICONV_PREFIX=no
endif

CONFIGURE_ARGS += \
	--with-apr="$(STAGING_DIR)/usr/bin/apr-1-config" \
	--with-expat="$(STAGING_DIR)/usr" \
	--with-iconv="$(ICONV_PREFIX)" \
	--without-sqlite2

ifneq ($(CONFIG_PACKAGE_libaprutil-crypto-openssl),)
CONFIGURE_ARGS += --with-crypto --with-openssl="$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS += --without-crypto
endif

ifneq ($(CONFIG_PACKAGE_libaprutil-dbd-mysql),)
CONFIGURE_ARGS += --with-mysql="$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS += --without-mysql
endif

ifneq ($(CONFIG_PACKAGE_libaprutil-dbd-odbc),)
CONFIGURE_ARGS += --with-odbc="$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS += --without-odbc
endif

ifneq ($(CONFIG_PACKAGE_libaprutil-dbd-pgsql),)
CONFIGURE_ARGS += --with-pgsql="$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS += --without-pgsql
endif

ifneq ($(CONFIG_PACKAGE_libaprutil-dbd-sqlite3),)
CONFIGURE_ARGS += --with-sqlite3="$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS += --without-sqlite3
endif

ifneq ($(CONFIG_PACKAGE_libaprutil-dbm-gdbm),)
CONFIGURE_ARGS += --with-gdbm="$(STAGING_DIR)/usr"
else
CONFIGURE_ARGS += --without-gdbm
endif

ifneq ($(CONFIG_PACKAGE_libaprutil-ldap),)
CONFIGURE_ARGS += \
	--with-ldap \
	--with-ldap-include="$(STAGING_DIR)/usr/include" \
	--with-ldap-lib="$(STAGING_DIR)/usr/lib"
else
CONFIGURE_ARGS += \
	--without-ldap
endif

CONFIGURE_VARS += \
	ac_cv_path_ODBC_CONFIG= \
	apu_cv_weak_symbols=yes \
	APR_BUILD_DIR="$(STAGING_DIR)/usr/share/build-1"

ifeq ($(CONFIG_USE_GLIBC)$(CONFIG_USE_MUSL),y)
CONFIGURE_VARS += \
	apu_cv_explicit_bzero=yes
endif

define Package/libaprutil/install/driver
	$(INSTALL_DIR) $(1)/usr/lib/apr-util-1
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/apr-util-1/apr_$(2)*.so \
					$(1)/usr/lib/apr-util-1
endef

define Package/libaprutil/Driver
define Package/libaprutil-$(subst _,-,$(1))
$(call Package/libaprutil/Default)
  TITLE:=libaprutil - $(2) driver
  DEPENDS:=libaprutil $(patsubst +%,+PACKAGE_libaprutil-$(subst _,-,$(1)):%,$(3))
endef
define Package/libaprutil-$(subst _,-,$(1))/install
$(foreach d,$(1),$(call Package/libaprutil/install/driver,$$(1),$(d));)
endef
$$(eval $$(call BuildPackage,libaprutil-$(subst _,-,$(1))))
endef

# PKG_CONFIG_DEPENDS trigger configure, but the compile afterward may be
# incomplete if the build directory is not cleaned before. This is not a
# general observation, yet it is valid for apr-util :/
define Build/Compile
	$(call Build/Compile/Default,clean all)
endef

define Build/InstallDev
	$(INSTALL_DIR) $(1)/usr/bin $(1)/usr/include/apr-1 \
		$(1)/usr/lib/apr-util-1 $(1)/usr/lib/pkgconfig
	$(CP) $(PKG_INSTALL_DIR)/usr/bin/apu-1-config $(1)/usr/bin
	$(SED) '/^prefix=\|^exec_prefix=/s|/usr|$(STAGING_DIR)/usr|' $(1)/usr/bin/apu-1-config
	$(SED) '/^bindir=/s|/usr|$$$${prefix}|' $(1)/usr/bin/apu-1-config
	$(CP) $(PKG_INSTALL_DIR)/usr/include/apr-1/* $(1)/usr/include/apr-1
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/apr-util-1/apr_*.{a,so} \
			$(1)/usr/lib/apr-util-1 2>/dev/null || :
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libaprutil-1.{a,so*} \
						$(1)/usr/lib
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/apr-util-1.pc \
					$(1)/usr/lib/pkgconfig
	$(INSTALL_DIR) $(2)/bin
	$(LN) ../../usr/bin/apu-1-config $(2)/bin/apu-1-config
endef

define Package/libaprutil/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libaprutil-1.so.* $(1)/usr/lib
endef

$(eval $(call BuildPackage,libaprutil))
$(eval $(call Package/libaprutil/Driver,crypto_openssl,OpenSSL,+libopenssl))
$(eval $(call Package/libaprutil/Driver,dbd_mysql,MySQL,+libmariadb))
$(eval $(call Package/libaprutil/Driver,dbd_odbc,ODBC,+unixodbc))
$(eval $(call Package/libaprutil/Driver,dbd_pgsql,PostgreSQL,+libpq))
$(eval $(call Package/libaprutil/Driver,dbd_sqlite3,SQLite3,+libsqlite3))
$(eval $(call Package/libaprutil/Driver,dbm_gdbm,GDBM dbm,+libgdbm))
$(eval $(call Package/libaprutil/Driver,ldap,LDAP,+libopenldap))
