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

EAPI=5

inherit eutils gnome2-utils toolchain-funcs qmake-utils games

MY_P=${PN}_v${PV}-source

DESCRIPTION="A Nintendo multi-system emulator formerly known as bsnes"
HOMEPAGE="http://byuu.org/higan/ https://code.google.com/p/higan/"
SRC_URI="http://byuu.org/files/${MY_P}.tar.xz"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="amd64 x86"
IUSE="ao +alsa openal opengl oss profile_accuracy +profile_balanced profile_performance pulseaudio qt4 +sdl udev xv"
REQUIRED_USE="|| ( ao openal alsa pulseaudio oss )
	|| ( xv opengl sdl )
	|| ( profile_accuracy profile_balanced profile_performance )"

RDEPEND="
	x11-libs/libX11
	x11-libs/libXext
	ao? ( media-libs/libao )
	openal? ( media-libs/openal )
	alsa? ( media-libs/alsa-lib )
	pulseaudio? ( media-sound/pulseaudio )
	xv? ( x11-libs/libXv )
	opengl? ( virtual/opengl )
	sdl? ( media-libs/libsdl[X,joystick,video] )
	udev? ( virtual/udev )
	!qt4? ( x11-libs/gtk+:2 )
	qt4? ( >=dev-qt/qtgui-4.5:4 )"
DEPEND="${RDEPEND}
	virtual/pkgconfig"

S=${WORKDIR}/${MY_P}

disable_module() {
	sed -i \
		-e "s|$1\b||" \
		"${S}"/target-ethos/Makefile || die
}

src_prepare() {
	local i

	epatch "${FILESDIR}"/${P}-QA.patch

	sed -i \
		-e "/handle/s#/usr/local/lib#/usr/$(get_libdir)#" \
		nall/dl.hpp || die "fixing libdir failed!"

	# audio modules
	use ao || disable_module audio.ao
	use openal || disable_module audio.openal
	use pulseaudio ||  { disable_module audio.pulseaudio
		disable_module audio.pulseaudiosimple ;}
	use oss || disable_module audio.oss
	use alsa || disable_module audio.alsa

	# video modules
	use opengl || disable_module video.glx
	use xv || disable_module video.xv
	use sdl || disable_module video.sdl

	# input modules
	use sdl || disable_module input.sdl
	use udev || disable_module input.udev

	# regenerate .moc if needed
	if use qt4; then
		cd phoenix/qt || die
		 "$(qt4_get_bindir)"/moc -i -I. -o platform.moc platform.moc.hpp || die
	fi

	for i in profile_accuracy profile_balanced profile_performance ; do
		if use ${i} ; then
			cp -dRP "${S}" "${S}_${i}" || die
		fi
	done
}

src_compile() {
	local mytoolkit i

	if use qt4; then
		mytoolkit="qt"
	else
		mytoolkit="gtk"
	fi

	for i in profile_accuracy profile_balanced profile_performance ; do
		if use ${i} ; then
			cd "${S}_${i}" || die
			emake \
				platform="linux" \
				compiler="$(tc-getCXX)" \
				profile="${i#profile_}" \
				phoenix="${mytoolkit}"

			sed \
				-e "s:%GAMES_DATADIR%:${GAMES_DATADIR}:" \
				< "${FILESDIR}"/${PN}-wrapper \
				> out/${PN}-wrapper || die "generating wrapper failed!"
		fi
	done
}

src_install() {
	local i

	for i in profile_accuracy profile_balanced profile_performance ; do
		if use ${i} ; then
			# install higan
			newgamesbin "${S}_${i}"/out/${PN} ${PN}-${i#profile_}.bin
			newgamesbin "${S}_${i}"/out/${PN}-wrapper ${PN}-${i#profile_}
			make_desktop_entry "${PN}-${i#profile_}" "${PN} (${i#profile_})"
		fi
	done

	# copy home directory stuff to a global location
	insinto "${GAMES_DATADIR}"/${PN}
	doins -r data/cheats.bml profile/*

	# install shaders
	if use opengl; then
		insinto "${GAMES_DATADIR}/${PN}/Video Shaders"
		doins -r shaders/*.shader
	fi

	doicon -s 48 data/${PN}.png

	prepgamesdirs
}

pkg_preinst() {
	games_pkg_preinst
	gnome2_icon_savelist
}

pkg_postinst() {
	elog "optional dependencies:"
	elog "  dev-games/higan-ananke (extra rom load options)"
	elog "  games-util/higan-purify (Rom purifier)"

	games_pkg_postinst
	gnome2_icon_cache_update
}

pkg_postrm() {
	gnome2_icon_cache_update
}