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

EAPI="6"

PYTHON_COMPAT=( python2_7 )
PYTHON_REQ_USE='threads(+)'

inherit toolchain-funcs python-any-r1 waf-utils flag-o-matic

DESCRIPTION="OpenGL (ES) 2.0 benchmark"
HOMEPAGE="https://launchpad.net/glmark2"
# Note: the last tarball hosted on launchpad is 2012.12.tar.gz
# More recent versions are Chromium localmirror hosted tarballs created from
# bzr releases of https://code.launchpad.net/~glmark2-dev/glmark2/trunk
#SRC_URI="http://launchpad.net/${PN}/trunk/${PV}/+download/${P}.tar.gz"
SRC_URI="http://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/${PN}-bzr-${PV}.tar.gz"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="*"
IUSE="drm opengles opengl python X"

REQUIRED_USE="|| ( opengl opengles )"

RDEPEND="media-libs/libpng
	opengles? ( virtual/opengles )
	opengl? ( virtual/opengl )
	X? ( x11-libs/libX11 )
	!X? ( media-libs/waffle )
	drm? ( media-libs/mesa[gbm] )
	virtual/jpeg"
DEPEND="${RDEPEND}
	${PYTHON_DEPS}
	dev-util/pkgconfig"

PATCHES=(
	"${FILESDIR}/0001-native-state-x11-Don-t-terminate-fullscreen-if-EWMH-.patch"
	"${FILESDIR}/0002-Add-data-path-command-line-option.patch"
	"${FILESDIR}/0003-MainLoop-do-before_scene_setup-in-right-context.patch"
	"${FILESDIR}/0004-SceneDesktop-don-t-modify-framebuffer-zero.patch"
	"${FILESDIR}/0005-GLState-change-native-config-type-to-intptr_t.patch"
	"${FILESDIR}/0006-Add-waffle-backend.patch"
	"${FILESDIR}/0007-data-Remove-unused-uniforms-from-shaders.patch"
	"${FILESDIR}/clang-syntax.patch"
	"${FILESDIR}/libpng-1.6.patch"
	"${FILESDIR}/glmark2-libcxx.patch"
	"${FILESDIR}/deprecated-auto-ptr.patch"
)

pkg_setup() {
	python-any-r1_pkg_setup
}

src_configure() {
	local myconf=""
	local flavors=()
	# Remove this one after llvm upgrades.
	append-flags -Wno-unknown-warning-option
	append-flags -Wno-tautological-unsigned-zero-compare
	append-flags -std=gnu++11
	if use X; then
		if use opengl; then
			flavors+=(x11-gl)
		fi

		if use opengles; then
			flavors+=(x11-glesv2)
		fi
	else
		flavors+=(waffle)
	fi

	if use drm; then
		if use opengl; then
			flavors+=(drm-gl)
		fi

		if use opengles; then
			flavors+=(drm-glesv2)
		fi
	fi

	if [ ${#flavors[@]} -gt 0 ]; then
		SAVED_IFS=${IFS}
		IFS=","
		myconf+="--with-flavors=${flavors[*]}"
		IFS=${SAVED_IFS}
	fi

	export PKGCONFIG=$(tc-getPKG_CONFIG)
	waf-utils_src_configure ${myconf}
}
