# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

# TODO: Add python support.

EAPI="5"

inherit multilib-minimal

if [[ ${PV} == 9999 ]] ; then
	EGIT_REPO_URI="https://github.com/tatsuhiro-t/nghttp2.git"
	inherit git-2
else
	SRC_URI="https://github.com/tatsuhiro-t/nghttp2/releases/download/v${PV}/${P}.tar.gz"
	KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86"
fi

DESCRIPTION="HTTP/2 C Library"
HOMEPAGE="https://nghttp2.org/"

LICENSE="MIT"
SLOT="0/1.14" # <C++>.<C> SONAMEs
IUSE="cxx debug hpack-tools jemalloc libressl static-libs test +threads utils xml"

RDEPEND="
	cxx? ( dev-libs/boost:=[${MULTILIB_USEDEP},threads] )
	hpack-tools? ( >=dev-libs/jansson-2.5 )
	jemalloc? ( dev-libs/jemalloc )
	utils? (
		>=dev-libs/libev-4.15
		!libressl? ( >=dev-libs/openssl-1.0.2:0[-bindist] )
		libressl? ( dev-libs/libressl )
		>=sys-libs/zlib-1.2.3
	)
	xml? ( >=dev-libs/libxml2-2.7.7:2 )"
DEPEND="${RDEPEND}
	virtual/pkgconfig
	test? ( >=dev-util/cunit-2.1[${MULTILIB_USEDEP}] )"

multilib_src_configure() {
	ECONF_SOURCE=${S} \
	econf \
		--disable-examples \
		--disable-failmalloc \
		--disable-werror \
		--without-cython \
		--disable-python-bindings \
		--without-spdylay \
		$(use_enable cxx asio-lib) \
		$(use_enable debug) \
		$(multilib_native_use_enable hpack-tools) \
		$(use_enable static-libs static) \
		$(use_enable threads) \
		$(multilib_native_use_enable utils app) \
		$(multilib_native_use_with jemalloc) \
		$(multilib_native_use_with xml libxml2)
}

multilib_src_install_all() {
	use static-libs || find "${ED}" -name '*.la' -delete
}
