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

EAPI=6

PYTHON_COMPAT=( python2_7 )
inherit cmake-multilib python-single-r1

DESCRIPTION="Tool for tracing, analyzing, and debugging graphics APIs"
HOMEPAGE="https://github.com/apitrace/apitrace"
SRC_URI="https://github.com/${PN}/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"

LICENSE="MIT"
LICENSE+=" BSD CC-BY-3.0 CC-BY-4.0 public-domain" #bundled snappy
SLOT="0"
KEYWORDS="*"
IUSE="+cli egl opengl opengles qt5 system-snappy X"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"

RDEPEND="${PYTHON_DEPS}
	media-libs/libpng:0=
	media-libs/mesa[egl?,${MULTILIB_USEDEP}]
	media-libs/waffle
	sys-libs/zlib:=[${MULTILIB_USEDEP}]
	sys-process/procps
	X? ( x11-libs/libX11 )
	opengl? ( virtual/opengl )
	opengles? ( virtual/opengles )
	qt5? (
		dev-qt/qtcore:5
		dev-qt/qtgui:5[-gles2]
		dev-qt/qtnetwork:5
		dev-qt/qtwebkit:5
		dev-qt/qtwidgets:5[-gles2]
	)
	system-snappy? ( >=app-arch/snappy-1.1.1[${MULTILIB_USEDEP}] )
"
DEPEND="${RDEPEND}"

PATCHES=(
	"${FILESDIR}"/${PN}-8.0-glxtrace-only.patch
	"${FILESDIR}"/${PN}-8.0-disable-multiarch.patch
	"${FILESDIR}"/${PN}-8.0-docs-install.patch
	"${FILESDIR}"/${PN}-8.0-snappy-license.patch
	"${FILESDIR}"/0001-Fallback-to-NULL-platform-if-no-X.patch
)

src_prepare() {
	cmake-utils_src_prepare

	# The apitrace code grubs around in the internal zlib structures.
	# We have to extract this header and clean it up to keep that working.
	# Do not be surprised if a zlib upgrade breaks things ...
	rm -rf "${S}"/thirdparty/{getopt,less,libpng,zlib,dxerr,directxtex,devcon} || die
	if use system-snappy ; then
		rm -rf "${S}"/thirdparty/snappy || die
	fi
}

src_configure() {
	my_configure() {
		local mycmakeargs=(
			-DENABLE_EGL=$(usex opengles)
			-DENABLE_STATIC_SNAPPY=$(usex !system-snappy)
		)
		if multilib_is_native_abi ; then
			mycmakeargs+=(
				-DENABLE_CLI=$(usex cli)
				-DENABLE_GUI=$(usex qt5)
				-DENABLE_X11=$(usex X)
				-DENABLE_WAFFLE=$(usex opengles)
			)
		else
			mycmakeargs+=(
				-DBUILD_LIB_ONLY=ON
				-DENABLE_CLI=OFF
				-DENABLE_GUI=OFF
			)
		fi
		cmake-utils_src_configure
	}

	multilib_parallel_foreach_abi my_configure
}

src_install() {
	cmake-multilib_src_install

	dosym egltrace.so /usr/$(get_libdir)/${PN}/wrappers/libGL.so
	dosym egltrace.so /usr/$(get_libdir)/${PN}/wrappers/libGL.so.1
	dosym egltrace.so /usr/$(get_libdir)/${PN}/wrappers/libGL.so.1.2

	rm docs/INSTALL.markdown || die
	dodoc docs/* README.markdown

	exeinto /usr/$(get_libdir)/${PN}/scripts
	doexe $(find scripts -type f -executable)
}
