# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/media-gfx/tachyon/tachyon-0.98.9.ebuild,v 1.2 2010/03/07 22:32:01 alexxy Exp $

EAPI=2

inherit eutils

DESCRIPTION="A portable, high performance parallel ray tracing system"
HOMEPAGE="http://jedi.ks.uiuc.edu/~johns/raytracer/"
SRC_URI="http://jedi.ks.uiuc.edu/~johns/raytracer/files/${PV}/${P}.tar.gz"

LICENSE="BSD"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="doc examples jpeg mpi opengl png threads"

CDEPEND="jpeg? ( media-libs/jpeg )
	mpi? ( virtual/mpi )
	opengl? ( virtual/opengl )
	png? ( media-libs/libpng )"
DEPEND="${CDEPEND}
	dev-util/pkgconfig"
RDEPEND="${CDEPEND}"

S="${WORKDIR}/${PN}/unix"

# TODO: Test on alpha, ia64, ppc
# TODO: MPI: Depend on lam or virtual ? Test MPI
# TODO: Check for threads dependencies
# TODO: add other architectures
# TODO: X, Motif, MBOX, Open Media Framework, Spaceball I/O, MGF ?

TACHYON_MAKE_TARGET=

pkg_setup() {
	if use threads ; then
		if use opengl ; then
			TACHYON_MAKE_TARGET=linux-thr-ogl
			if use mpi ; then
				die "tachyon does not support MPI with OpenGL and threads"
			fi
		elif use mpi ; then
			TACHYON_MAKE_TARGET=linux-mpi-thr
		else
			TACHYON_MAKE_TARGET=linux-thr
		fi

		# TODO: Support for linux-athlon-thr ?
	else
		if use opengl ; then
			# TODO: Support target: linux-lam-64-ogl

			die "OpenGL is only available with USE=threads!"
		elif use mpi ; then
				TACHYON_MAKE_TARGET=linux-mpi
		else
			TACHYON_MAKE_TARGET=linux
		fi

		# TODO: Support for linux-p4, linux-athlon, linux-ps2 ?
	fi

	if [[ -z "${TACHYON_MAKE_TARGET}" ]]; then
		die "No target found, check use flags"
	else
		einfo "Using target: ${TACHYON_MAKE_TARGET}"
	fi
}

src_prepare() {
	if use jpeg ; then
		sed -i \
			-e "s:USEJPEG=:USEJPEG=-DUSEJPEG:g" \
			-e "s:JPEGLIB=:JPEGLIB=-ljpeg:g" Make-config \
			|| die "sed failed"
	fi

	if use png ; then
		sed -i \
			-e "s:USEPNG=:USEPNG=-DUSEPNG:g" \
			-e "s:PNGINC=:PNGINC=$(pkg-config libpng --cflags):g" \
			-e "s:PNGLIB=:PNGLIB=$(pkg-config libpng --libs):g" Make-config \
			|| die "sed failed"
	fi

	if use mpi ; then
		sed -i "s:MPIDIR=:MPIDIR=/usr:g" Make-config || die "sed failed"
		sed -i "s:linux-lam:linux-mpi:g" Make-config || die "sed failed"
	fi
	sed -i \
		-e "s:-O3::g;s:-g::g;s:-pg::g" \
		-e "s:-m32:${CFLAGS}:g" \
		-e "s:-m64:${CFLAGS}:g" \
		-e "s:-ffast-math::g" \
		-e "s:-fomit-frame-pointer::g" Make-arch || die "sed failed"
}

src_compile() {
	emake ${TACHYON_MAKE_TARGET} || die "emake failed"
}

src_install() {
	cd ..
	dodoc Changes README || die "dodoc failed"

	if use doc ; then
		dohtml docs/tachyon/* || die "dohtml failed"
	fi

	cd compile/${TACHYON_MAKE_TARGET}

	dobin tachyon || die "dobin failed"
	dolib libtachyon.a || die "dolib failed"

	if use examples; then
		cd "${S}/../scenes"
		insinto "/usr/share/${PN}/examples"
		doins * || die "doins failed"
	fi
}
