blob: 9ae1133b00c4a9156ca9113727208b3fd293ad81 [file] [log] [blame]
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
EAPI=2
FORTRAN_NEEDED=fortran
inherit eutils fortran-2 java-utils-2 toolchain-funcs
MY_P=${P/_/}
DESCRIPTION="MPI development tools"
HOMEPAGE="http://www-unix.mcs.anl.gov/perfvis/download/index.htm"
SRC_URI="ftp://ftp.mcs.anl.gov/pub/mpi/${PN%2}/${MY_P}.tar.gz"
LICENSE="mpich2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="minimal fortran threads debug"
COMMON_DEPEND="!minimal? ( x11-libs/libXtst
x11-libs/libXi )
|| ( sys-cluster/openmpi[fortran?,threads?]
sys-cluster/mpich2[fortran?,threads?] )"
DEPEND="!minimal? ( >=virtual/jdk-1.4 )
${COMMON_DEPEND}"
RDEPEND="
!minimal? ( >=virtual/jre-1.4 )
${COMMON_DEPEND}"
S="${WORKDIR}"/${MY_P}
MPE_IMP=""
# README:
# This ebuild is created to handle building with both mpich2 and openmpi.
# However, without empi (in the science overlay), and some further
# conversion to use mpi.eclass, we can only handle one implementation
# at a time. I still believe it's better to have the ebuild setup
# correctly in preperation.
pkg_setup() {
fortran-2_pkg_setup
local i
if has_version sys-cluster/openmpi; then
MPE_IMP=openmpi
elif has_version sys-cluster/mpich2; then
MPE_IMP=mpich2
else
die "Unknown MPI implementation"
fi
export JFLAGS="${JFLAGS} $(java-pkg_javac-args)"
if [[ "${MPE_IMP}" == openmpi ]] && [ -z "${MPE2_FORCE_OPENMPI_TEST}" ]; then
echo
elog "Currently src_test fails on collchk with openmpi, hence"
elog "testing is disabled by default. If you would like to"
elog "force testing, please add MPE_FORCE_OPENMPI_TEST=1"
elog "to your environment."
echo
fi
einfo "Building with support for: sys-cluster/${MPE_IMP}"
}
src_prepare() {
# Don't assume path contains ./
sed -i 's,\($MPERUN\) $pgm,\1 ./$pgm,' sbin/mpetestexeclog.in
epatch "${FILESDIR}"/slog2sdk-trace_rlog-makefile-fixes.patch
epatch "${FILESDIR}"/slog2sdk-trace_sample-makefile-fixes.patch
}
src_configure() {
local c="--with-mpicc=/usr/bin/mpicc"
if use fortran; then
c="${c} --with-mpif77=/usr/bin/mpif77"
else
c="${c} --disable-f77"
fi
if use minimal; then
c="${c} --enable-slog2=no --disable-rlog --disable-sample"
else
c="${c} --with-java2=$(java-config --jdk-home) --enable-slog2=build"
fi
if [[ "${MPE_IMP}" == openmpi ]]; then
c="${c} --disable-rlog --disable-sample"
fi
econf ${c} \
--sysconfdir=/etc/${PN} \
--datadir=/usr/share/${PN} \
--with-htmldir=/usr/share/${PN} \
--with-docdir=/usr/share/${PN} \
--enable-collchk \
--enable-wrappers \
$(use_enable !minimal graphics) \
$(use_enable threads threadlogging) \
$(use_enable debug g)
}
src_test() {
local rc
cd "${S}"
if [[ "${MPE_IMP}" == mpich2 ]]; then
echo "MPD_SECRETWORD=junk" > "${T}"/mpd.conf
chmod 600 "${T}"/mpd.conf
export MPD_CONF_FILE="${T}/mpd.conf"
"${ROOT}"usr/bin/mpd -d --pidfile="${T}"/mpd.pid
elif [[ "${MPE_IMP}" == openmpi* ]] && [ -z "${MPE2_FORCE_OPENMPI_TEST}" ]; then
elog
elog "Skipping tests for openmpi"
elog
return 0
fi
# No parallel make:
# http://trac.mcs.anl.gov/projects/mpich2/ticket/1095#comment:1
emake -j1 \
CC="${S}"/bin/mpecc \
FC="${S}"/bin/mpefc \
MPERUN="${ROOT}/usr/bin/mpiexec -n 4" \
CLOG2TOSLOG2="${S}/src/slog2sdk/bin/clog2TOslog2" \
check;
rc=${?}
if [[ "${MPE_IMP}" == mpich2 ]]; then
"${ROOT}"usr/bin/mpdallexit || kill $(<"${T}"/mpd.pid)
fi
return ${rc}
}
src_install() {
# No parallel make:
# http://trac.mcs.anl.gov/projects/mpich2/ticket/1095#comment:1
emake -j1 DESTDIR="${D}" install || die
rm -f "${D}"/usr/sbin/mpeuninstall || die
}