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

EAPI=5

PYTHON_COMPAT=( python2_7 )
inherit cmake-utils eutils python-r1 multilib-minimal

DESCRIPTION="A HTML/CSS User Interface library"
HOMEPAGE="http://librocket.com/"
SRC_URI="https://dev.gentoo.org/~hasufell/distfiles/${P}.tar.xz"

LICENSE="MIT"
SLOT="0"
KEYWORDS="amd64 x86"
IUSE="python samples"
REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"

RDEPEND="
	>=media-libs/freetype-2.5.0.1[${MULTILIB_USEDEP}]
	python? (
		${PYTHON_DEPS}
		dev-libs/boost[${PYTHON_USEDEP}]
	)
	samples? (
		virtual/opengl
		x11-libs/libXext
		x11-libs/libX11
	)"
DEPEND="${RDEPEND}"

DOCS=( changelog.txt readme.md )

python_BUILD_DIR=${WORKDIR}/${P}_build_python
CMAKE_USE_DIR="${S}"/Build

multilib_src_configure() {
	local mycmakeargs=(
		-DBUILD_PYTHON_BINDINGS=OFF
		-DSAMPLES_DIR=/usr/share/${PN}/samples
	)

	if multilib_is_native_abi ; then
		mycmakeargs+=( $(cmake-utils_use_build samples SAMPLES) )
	else
		mycmakeargs+=( -DBUILD_SAMPLES=OFF )
	fi

	cmake-utils_src_configure

	if multilib_is_native_abi ; then
		if use python ; then
			cfgpybind() {
				local mycmakeargs=(
					-DBUILD_PYTHON_BINDINGS=ON
					-DCMAKE_SKIP_RPATH=YES
				)
				BUILD_DIR="${python_BUILD_DIR}-${EPYTHON}" cmake-utils_src_configure
			}
			einfo "configuring python binding"
			python_foreach_impl cfgpybind
		fi
	fi
}

multilib_src_compile() {
	cmake-utils_src_compile
	local abi_build_dir=${BUILD_DIR}

	if multilib_is_native_abi ; then
		if use python ; then
			buildpybind() {
				cp "${abi_build_dir}"/{libRocketCore*,libRocketControls*} "${python_BUILD_DIR}-${EPYTHON}"/ || die
				BUILD_DIR="${python_BUILD_DIR}-${EPYTHON}" cmake-utils_src_make _rocketcontrols/fast _rocketcore/fast
			}
			einfo "compiling python binding"
			python_foreach_impl buildpybind
		fi
	fi
}

multilib_src_install() {
	cmake-utils_src_install

	if multilib_is_native_abi ; then
		if use python ; then
			instpybind() {
				python_domodule "${S}"/bin/rocket.py
				exeinto "$(python_get_sitedir)"
				doexe ${python_BUILD_DIR}-${EPYTHON}/_rocket{core,controls}.so
			}
			einfo "installing python binding"
			python_foreach_impl instpybind
		fi
	fi
}
