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

EAPI=5
MY_P=${P}-src-with-docu
MY_V=${PV//\./-}
PYTHON_COMPAT=( python2_7 )
PYTHON_REQ_USE="threads,xml"
inherit cmake-utils python-r1

DESCRIPTION="C++ computer vision library with emphasize on customizable algorithms and data structures"
HOMEPAGE="http://hci.iwr.uni-heidelberg.de/vigra/"
SRC_URI="https://github.com/ukoethe/vigra/releases/download/Version-${MY_V}/${MY_P}.tar.gz"

LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64 ~ppc ~ppc64 ~sparc ~x86 ~amd64-linux ~x86-linux ~sparc-solaris ~x64-solaris ~x86-solaris"
IUSE="doc +fftw +hdf5 +jpeg mpi openexr +png +python test +tiff"

# runtime dependency on python:2.7 is required by the vigra-config script
RDEPEND="
	dev-lang/python:2.7
	>=dev-libs/boost-1.52.0-r6:=[python?,${PYTHON_USEDEP}]
	fftw? ( sci-libs/fftw:3.0 )
	hdf5? ( >=sci-libs/hdf5-1.8.0:=[mpi?] )
	jpeg? ( virtual/jpeg )
	openexr? ( media-libs/openexr:= )
	png? ( media-libs/libpng:0= )
	python? ( ${PYTHON_DEPS} dev-python/numpy[${PYTHON_USEDEP}] )
	tiff? ( media-libs/tiff:0= )"

DEPEND="${RDEPEND}
	doc? (
		app-doc/doxygen
		python? ( >=dev-python/sphinx-1.1.3-r5[${PYTHON_USEDEP}] )
	)
	test? ( >=dev-python/nose-1.1.2-r1[${PYTHON_USEDEP}] )"

REQUIRED_USE="
	doc? ( hdf5 fftw )
	python? ( hdf5 ${PYTHON_REQUIRED_USE} )
	test? ( hdf5 python fftw )"

PATCHES=(
	"${FILESDIR}/${P}-automagicness.patch"
	"${FILESDIR}/${P}-cmake-scripts.patch"
	"${FILESDIR}/${P}-mpi-fixes.patch"
)
DOCS=( README.md )

pkg_setup() {
	use python && python_setup
}

src_prepare() {
	einfo "Removing shipped doc, Win32 dependencies and VCS files"
	rm -rf doc
	rm vigra-dependencies-win32-vs8.zip
	rm .git* .hg* .travis.yml

	cmake-utils_src_prepare

	# Don't use python_fix_shebang because we can't put this behind USE="python"
	sed -i -e '/env/s:python:python2:' config/vigra-config.in || die
}

src_configure() {
	vigra_configure() {
		local libdir="$(get_libdir)"

		local mycmakeargs=(
			-DAUTOEXEC_TESTS=OFF
			-DDOCDIR="${BUILD_DIR}/doc"
			-DDOCINSTALL="share/doc/${P}"
			-DLIBDIR_SUFFIX="${libdir/lib}"
			-DWITH_VALGRIND=OFF
			$(cmake-utils_use_enable doc DOC)
			$(cmake-utils_use_with fftw FFTW3)
			$(cmake-utils_use_with hdf5 HDF5)
			$(cmake-utils_use_with jpeg JPEG)
			$(cmake-utils_use_with mpi MPI)
			$(cmake-utils_use_with png PNG)
			$(cmake-utils_use_with openexr OPENEXR)
			$(cmake-utils_use_with python VIGRANUMPY)
			$(cmake-utils_use_with tiff TIFF)
			$(cmake-utils_use_build test TESTING)
			$(cmake-utils_use test CREATE_CTEST_TARGETS)
			$(cmake-utils_use test AUTOBUILD_TESTS)
		)
		cmake-utils_src_configure
	}

	if use python; then
		python_foreach_impl vigra_configure
	else
		# required for docdir
		_check_build_dir init
		vigra_configure
	fi
}

src_compile() {
	local VIGRA_BUILD_DIR
	vigra_compile() {
		cmake-utils_src_compile
		VIGRA_BUILD_DIR="${BUILD_DIR}"
	}
	if use python; then
		python_foreach_impl vigra_compile
	else
		vigra_compile
	fi

	if use doc; then
		einfo "Generating Documentation"
		# use build dir from last compile command
		BUILD_DIR="${VIGRA_BUILD_DIR}" cmake-utils_src_make doc
	fi
}

src_install() {
	if use python; then
		python_foreach_impl cmake-utils_src_install
		python_optimize
	else
		cmake-utils_src_install
	fi
}

src_test() {
	# perhaps disable tests (see #390447)
	vigra_test() {
		PYTHONPATH="${BUILD_DIR}/vigranumpy/vigra" cmake-utils_src_test
	}
	if use python; then
		python_foreach_impl vigra_test
	else
		vigra_test
	fi
}