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

EAPI=5

PYTHON_COMPAT=( python{2_7,3_3,3_4} )

inherit distutils-r1

DESCRIPTION="NumPy aware dynamic Python compiler using LLVM"
HOMEPAGE="http://numba.pydata.org/"
SRC_URI="https://github.com/${PN}/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"

LICENSE="BSD"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="doc examples test"

RDEPEND="
	dev-python/llvmlite[${PYTHON_USEDEP}]
	>=dev-python/numpy-1.6[${PYTHON_USEDEP}]
	$(python_gen_cond_dep 'dev-python/enum34[${PYTHON_USEDEP}]' python{2_7,3_3})
	virtual/python-funcsigs[${PYTHON_USEDEP}]"
DEPEND="test? ( ${RDEPEND} )
	doc? ( dev-python/sphinx[${PYTHON_USEDEP}] )"

# test phase is pointless since it errors in circa 60% of 1984 tests
RESTRICT="test"

# Delete intersphinx & entry to set sphinxjp.themecore, which is absent from portage, from conf.py
PATCHES=( "${FILESDIR}"/${P}-docbuild.patch )

python_prepare_all() {
	# Re-set them of doc build to one provided by sphinx
	if has_version ">=dev-python/sphinx-1.3.1"; then
		sed -e 's:basicstrap:classic:' -i docs/source/conf.py || die
	else
		sed -e 's:basicstrap:default:' -i docs/source/conf.py || die
	fi
	distutils-r1_python_prepare_all
}

python_compile() {
	if ! python_is_python3; then
		local CFLAGS="${CFLAGS} -fno-strict-aliasing"
		export CFLAGS
	fi
	distutils-r1_python_compile
}

python_compile_all() {
	use doc && emake -C docs/ html
}

python_test() {
	cd "${BUILD_DIR}"/lib* || die
	${PYTHON} -c "import numba; numba.test()" || die
}

python_install_all() {
	# doc needs obsolete sphinxjp package
#	use doc && dodoc docs/Numba.pdf
	use examples && local EXAMPLES=( examples/. )
	use doc && local HTML_DOCS=( docs/_build/html/. )

	distutils-r1_python_install_all
}
