################################################################################
#
# thrift
#
################################################################################

THRIFT_VERSION = 0.9.2
THRIFT_SITE = http://www.us.apache.org/dist/thrift/$(THRIFT_VERSION)
THRIFT_DEPENDENCIES = host-autoconf-archive host-pkgconf host-thrift boost \
	libevent openssl zlib
THRIFT_INSTALL_STAGING = YES
HOST_THRIFT_DEPENDENCIES = host-autoconf-archive host-bison host-boost \
	host-flex host-libevent host-openssl host-pkgconf host-zlib

THRIFT_CONF_OPTS = --with-sysroot=$(STAGING_DIR) \
	--with-boost \
	--with-boost-libdir=$(STAGING_DIR)/usr/lib \
	--disable-tests \
	--disable-tutorial
HOST_THRIFT_CONF_OPTS = --with-sysroot=$(HOST_DIR) \
	--disable-tests \
	--disable-tutorial
THRIFT_AUTORECONF = YES
THRIFT_AUTORECONF_OPTS = -I $(HOST_DIR)/usr/share/autoconf-archive
THRIFT_LICENSE = Apache-2.0
THRIFT_LICENSE_FILES = LICENSE

# relocation truncated to fit: R_68K_GOT16O
ifeq ($(BR2_m68k_cf),y)
THRIFT_CONF_ENV += CXXFLAGS="$(TARGET_CXXFLAGS) -mxgot"
endif

ifeq ($(BR2_STATIC_LIBS),y)
# openssl uses zlib, so we need to explicitly link with it when static
THRIFT_CONF_ENV += LIBS=-lz
endif

# Language selection
# The generator (host tool) works with all of them regardless
# This is just for the libraries / bindings
THRIFT_LANG_CONF_OPTS += --without-csharp --without-java --without-erlang \
	--without-python --without-perl --without-php --without-php_extension \
	--without-ruby --without-haskell --without-go --without-d \
	--without-qt4 --without-lua
HOST_THRIFT_CONF_OPTS += $(THRIFT_LANG_CONF_OPTS) --without-c_glib
THRIFT_CONF_OPTS += $(THRIFT_LANG_CONF_OPTS)

# C bindings
ifeq ($(BR2_PACKAGE_LIBGLIB2),y)
THRIFT_DEPENDENCIES += libglib2
else
THRIFT_CONF_OPTS += --without-c_glib
endif

# De-hardcode THRIFT for cross compiling
define THRIFT_TOOL_NO_HARDCODE
	for f in `find $(@D) -name Makefile.am -type f`; do \
		$(SED) "/^THRIFT =/d" $$f; \
	done
	$(SED) "s:top_builddir)/compiler/cpp/thrift:THRIFT):" $(@D)/tutorial/Makefile.am
endef

THRIFT_POST_PATCH_HOOKS += THRIFT_TOOL_NO_HARDCODE

define THRIFT_BUILD_CMDS
	$(TARGET_MAKE_ENV) $(MAKE) THRIFT=$(HOST_DIR)/usr/bin/thrift -C $(@D)
endef

# Install runtime only
define THRIFT_INSTALL_TARGET_CMDS
	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/lib DESTDIR=$(TARGET_DIR) install
endef

$(eval $(autotools-package))
$(eval $(host-autotools-package))

# to be used by other packages
THRIFT = $(HOST_DIR)/usr/bin/thrift
