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

EAPI="3"
SUPPORT_PYTHON_ABIS="1"
RESTRICT_PYTHON_ABIS="3.* *-jython 2.7-pypy-*"

inherit distutils eutils

MY_PN="ScientificPython"
MY_P="${MY_PN}-${PV}"

DESCRIPTION="Scientific Module for Python"
DOWNLOAD_NUMBER="3420"
SRC_URI="http://sourcesup.cru.fr/frs/download.php/${DOWNLOAD_NUMBER}/${MY_P}.tar.gz"
HOMEPAGE="http://sourcesup.cru.fr/projects/scientific-py/"

LICENSE="CeCILL-2"
SLOT="0"
KEYWORDS="~amd64 ~ppc ~x86 ~amd64-linux ~x86-linux"
IUSE="doc mpi test"

RDEPEND="
	<dev-python/numpy-1.9
	dev-python/pyro:3
	sci-libs/netcdf
	mpi? ( virtual/mpi )"
DEPEND="${RDEPEND}
	test? ( dev-python/nose )"

S="${WORKDIR}/${MY_P}"

PYTHON_CFLAGS=("2.* + -fno-strict-aliasing")

PYTHON_MODNAME="Scientific"

src_prepare() {
	distutils_src_prepare
	epatch "${FILESDIR}/${PN}-2.9-mpi.patch"
	use mpi && epatch "${FILESDIR}/${P}-mpi-netcdf.patch"
}

src_compile() {
	distutils_src_compile

	if use mpi; then
		cd Src/MPI
		building_of_mpipython() {
			PYTHONPATH="$(ls -d ../../build-${PYTHON_ABI}/lib*)" "$(PYTHON)" compile.py
			mv -f mpipython mpipython-${PYTHON_ABI}
		}
		python_execute_function \
			--action-message 'Building of mpipython with $(python_get_implementation) $(python_get_version)' \
			--failure-message 'Building of mpipython failed with $(python_get_implementation) $(python_get_version)' \
			building_of_mpipython
	fi
}

src_test() {
	cd Tests
	python_execute_nosetests -P '$(ls -d ../build-${PYTHON_ABI}/lib.*)'
}

src_install() {
	distutils_src_install
	# do not install bsp related stuff, since we don't compile the interface
	dodoc README README.MPI Doc/CHANGELOG || die "dodoc failed"
	insinto /usr/share/doc/${PF}
	doins Examples/{demomodule.c,netcdf_demo.py} || die "doins examples failed"

	if use mpi; then
		installation_of_mpipython() {
			dobin Src/MPI/mpipython-${PYTHON_ABI}
		}
		python_execute_function -q installation_of_mpipython
		python_generate_wrapper_scripts "${ED}usr/bin/mpipython"
		doins Examples/mpi.py || die "doins mpi example failed failed"
	fi

	if use doc; then
		dohtml Doc/Reference/* || die "dohtml failed"
	fi
}
