# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-cluster/charm/charm-6.2.0.ebuild,v 1.3 2012/07/01 14:12:34 jlec Exp $

EAPI=4

inherit eutils flag-o-matic fortran-2 multilib toolchain-funcs

DESCRIPTION="Message-passing parallel language and runtime system"
HOMEPAGE="http://charm.cs.uiuc.edu/"
SRC_URI="http://charm.cs.uiuc.edu/distrib/${P}_src.tar.gz"

LICENSE="charm"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="cmkopt tcp smp doc"

DEPEND="
	doc? (
	>=app-text/poppler-0.12.3-r3[utils]
	dev-tex/latex2html
	virtual/tex-base )"
RDEPEND=""

case ${ARCH} in
	x86)
		CHARM_ARCH="net-linux" ;;

	amd64)
		CHARM_ARCH="net-linux-amd64" ;;
esac

FORTRAN_STANDARD="90"

src_prepare() {
	epatch "${FILESDIR}"/${P}-gcc-4.7.patch

	# TCP instead of default UDP for socket comunication
	# protocol
	if use tcp; then
		CHARM_OPTS="${CHARM_OPTS} tcp"
	fi

	# enable direct SMP support using shared memory
	if use smp; then
		CHARM_OPTS="${CHARM_OPTS} smp"
	fi

	# CMK optimization
	if use cmkopt; then
		append-flags -DCMK_OPTIMIZE=1
	fi

	sed \
		-e "/CMK_CF90/s:f90:${FC}:g" \
		-e "/CMK_CXX/s:g++:$(tc-getCXX):g" \
		-e "/CMK_CC/s:gcc:$(tc-getCC):g" \
		-e '/CMK_F90_MODINC/s:-p:-I:g' \
		-e "/CMK_LD/s:\"$: ${LDFLAGS} \":g" \
		-i src/arch/net-linux*/*sh || die

	sed \
		-e "s:\(-o conv-cpm\):${LDFLAGS} \1:g" \
		-e "s:\(-o charmxi\):${LDFLAGS} \1:g" \
		-e "s:\(-o charmrun-silent\):${LDFLAGS} \1:g" \
		-e "s:\(-o charmrun-notify\):${LDFLAGS} \1:g" \
		-e "s:\(-o charmrun\):${LDFLAGS} \1:g" \
		-e "s:\(-o charmd_faceless\):${LDFLAGS} \1:g" \
		-e "s:\(-o charmd\):${LDFLAGS} \1:g" \
		-i \
			src/scripts/Makefile \
			src/arch/net/charmrun/Makefile

	append-cflags -DALLOCA_H

	echo "charm opts: ${CHARM_OPTS}"
}

src_compile() {
	# build charmm++ first
	./build charm++ ${CHARM_ARCH} ${CHARM_OPTS} ${CFLAGS} || \
		die "Failed to build charm++"

	# make pdf/html docs
	if use doc; then
		cd "${S}"/doc
		make doc || die "failed to create pdf/html docs"
	fi
}

src_install() {
	# make charmc play well with gentoo before
	# we move it into /usr/bin
	epatch "${FILESDIR}/charm-6.1.2-charmc-gentoo.patch"

	sed -e "s|gentoo-include|${P}|" \
		-e "s|gentoo-libdir|$(get_libdir)|g" \
		-e "s|VERSION|${P}/VERSION|" \
		-i ./src/scripts/charmc || die "failed patching charmc script"

	# install binaries
	cd "${S}"/bin
	dobin ./charmd ./charmd_faceless ./charmr* ./charmc ./charmxi \
		./conv-cpm ./dep.pl || die "Failed to install binaries"

	# install headers
	cd "${S}"/include
	insinto /usr/include/${P}
	doins * || die "failed to install header files"

	# install static libs
	# charm has a lot of .o "libs" that it requires at runtime
	cd "${S}"/lib
	dolib.a *.{a,o} || die "failed to install static libs"

	# install shared libs
	cd "${S}"/lib_so
	dolib.so *.so* || die "failed to install shared libs"

	# basic docs
	cd "${S}"
	dodoc CHANGES README  || die "Failed to install docs"

	# install examples
	find examples/ -name 'Makefile' | xargs sed \
		-r "s:(../)+bin/charmc:/usr/bin/charmc:" -i || \
		die "Failed to fix examples"
	find examples/ -name 'Makefile' | xargs sed \
		-r "s:./charmrun:./charmrun ++local:" -i || \
		die "Failed to fix examples"
	insinto /usr/share/doc/${PF}/examples
	doins -r examples/charm++/*

	# pdf/html docs
	if use doc; then
		cd "${S}"/doc
		# install pdfs
		insinto /usr/share/doc/${PF}/pdf
		doins  doc/pdf/* || die "failed to install pdf docs"
		# install html
		docinto html
		dohtml -r doc/html/* || die "failed to install html docs"
	fi
}

pkg_postinst() {
	echo
	einfo "Please test your charm installation by copying the"
	einfo "content of /usr/share/doc/${PF}/examples to a"
	einfo "temporary location and run 'make test'."
	echo
}