Index: tachyon-0.98.9-r1.ebuild =================================================================== RCS file: /var/cvsroot/gentoo-x86/media-gfx/tachyon/tachyon-0.98.9-r1.ebuild,v retrieving revision 1.2 diff -u -r1.2 tachyon-0.98.9-r1.ebuild --- tachyon-0.98.9-r1.ebuild 8 Nov 2010 18:45:47 -0000 1.2 +++ tachyon-0.98.9-r1.ebuild 13 Nov 2010 19:15:00 -0000 @@ -2,7 +2,7 @@ # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/media-gfx/tachyon/tachyon-0.98.9-r1.ebuild,v 1.2 2010/11/08 18:45:47 xarthisius Exp $ -EAPI="2" +EAPI="3" inherit eutils toolchain-funcs @@ -33,33 +33,90 @@ TACHYON_MAKE_TARGET= +make_arch() { + local OS= LIBS= CFTHR= CFOGL= CFMPI= LTHR= LOGL= LMPI= CF64= + + # TACHYON_MAKE_TARGET needs not to match with Make-arch, since we just + # produce that info here. This avoids patching, and the only thing + # Make-arch does, is basically calling `make all` with some pre-set flags + # we don't want anyway -- added bonus is that we can support more targets + case ${TACHYON_MAKE_TARGET} in + linux-*|linux) OS="-DLinux"; LIBS="-lm" ;; + darwin-*|darwin) OS="-DBsd"; LIBS="" ;; + solaris-*|solaris) OS="-DSunOS"; LIBS="-lm -lsocket -lnsl" ;; + esac + case ${TACHYON_MAKE_TARGET} in + darwin-*thr*) + # Darwin needs -framework Carbon for MPProcessorsScheduled + CFTHR="-DTHR -DUSEPOSIXTHREADS"; LTHR="-pthread -framework Carbon" + ;; + *-thr*) CFTHR="-DTHR -DUSEPOSIXTHREADS"; LTHR="-pthread" ;; + esac + case ${TACHYON_MAKE_TARGET} in + *-ogl*) CFOGL="-DUSEOPENGL"; LOGL="-lGL -lGLU -lX11" ;; + esac + case ${TACHYON_MAKE_TARGET} in + *-mpi*) CFMPI="-DMPI"; LMPI="-lmpi" ;; + esac + case ${CHOST} in + sparcv9-*|sparc64-*|powerpc64-*|ppc64-*|ia64-*|x86_64-*) + CF64="-DLP64" + ;; + esac + + emake all \ + "ARCH = gentoo-${TACHYON_MAKE_TARGET}" \ + "CC = $(tc-getCC)" \ + "CFLAGS = ${CFLAGS} \$(MISCFLAGS) ${OS} ${CFTHR} ${CFOGL} ${CFMPI} ${CF64}" \ + "AR = ar" \ + "ARFLAGS = r" \ + "STRIP = touch" \ + "LIBS = -L. -ltachyon \$(MISCLIB) ${LTHR} ${LOGL} ${LMPI} ${LIBS}" +} + pkg_setup() { - if use threads ; then - if use opengl ; then + case "${CHOST}:$(usev threads):$(usev mpi):$(usev opengl)" in + *-linux-gnu:threads::opengl) 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 + ;; + *-linux-gnu:threads:mpi:) TACHYON_MAKE_TARGET=linux-mpi-thr - else + ;; + *-linux-gnu:threads::) 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 + ;; + *-linux-gnu::mpi:) + TACHYON_MAKE_TARGET=linux-mpi + ;; + *-linux-gnu:::) TACHYON_MAKE_TARGET=linux - fi - - # TODO: Support for linux-p4, linux-athlon, linux-ps2 ? - fi + ;; + *-darwin*:threads::opengl) + TACHYON_MAKE_TARGET=darwin-thr-ogl + ;; + *-darwin*:threads::) + TACHYON_MAKE_TARGET=darwin-thr + ;; + *-darwin*:::) + TACHYON_MAKE_TARGET=darwin + ;; + # TODO: try mpi + *-solaris*:threads::opengl) + TACHYON_MAKE_TARGET=solaris-thr-ogl + ;; + *-solaris*:threads::) + TACHYON_MAKE_TARGET=solaris-thr + ;; + *-solaris*::mpi:) + TACHYON_MAKE_TARGET=solaris-mpi + ;; + *-solaris*:::) + TACHYON_MAKE_TARGET=solaris + ;; + *) + die "tachyon does not support selected combination of MPI, OpenGL and threads for target ${CHOST}" + ;; + esac if [[ -z "${TACHYON_MAKE_TARGET}" ]]; then die "No target found, check use flags" @@ -85,23 +142,15 @@ fi if use mpi ; then - sed -i "s:MPIDIR=:MPIDIR=/usr:g" Make-config || die "sed failed" + sed -i "s:MPIDIR=:MPIDIR=${EPREFIX}/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:STRIP = strip:STRIP = touch:g" \ - -e "s:CC = *cc:CC = $(tc-getCC):g" \ - -e "s:-fomit-frame-pointer::g" Make-arch || die "sed failed" epatch "${FILESDIR}"/${PV}-ldflags.patch } src_compile() { - emake ${TACHYON_MAKE_TARGET} || die "emake failed" + make_arch || die "emake failed" } src_install() { @@ -112,7 +161,7 @@ dohtml docs/tachyon/* || die "dohtml failed" fi - cd compile/${TACHYON_MAKE_TARGET} + cd compile/gentoo-${TACHYON_MAKE_TARGET} dobin tachyon || die "dobin failed"