# Copyright 1999-2006 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ inherit eutils fortran multilib IUSE="3dnow X altivec double-precision mopac7 mpi sse sse2" DESCRIPTION="The ultimate molecular dynamics simulation package" SRC_URI="ftp://ftp.gromacs.org/pub/${PN}/${P}.tar.gz" HOMEPAGE="http://www.gromacs.org/" LICENSE="GPL-2" SLOT="0" KEYWORDS="~x86 ~amd64 ~sparc ~ppc64" DEPEND=">=sci-libs/fftw-3.0.1 mpi? ( >=sys-cluster/lam-mpi-7.0.6 ) >=sys-devel/binutils-2.12* app-shells/tcsh X? ( x11-libs/lesstif virtual/x11 ) mopac7? ( sci-chemistry/mopac7 ) sparc? ( =sys-devel/gcc-3* )" pkg_setup() { # !!!Please note!!! # for troublesome work gromacs should be compiled with the same mpi setting # as fftw. if use mpi; then if ! built_with_use =sci-libs/fftw-3* mpi; then die "=sci-libs/fftw-3* must be built with USE=mpi." fi fi } src_unpack() { unpack ${A} if use ppc64 && use altivec ; then epatch "${FILESDIR}"/${PN}-ppc64-altivec.patch fi cd "${S}" # Fix a typo in a couple of files. sed -e "s:_nb_kerne010_x86_64_sse2:_nb_kernel010_x86_64_sse2:" \ -i src/gmxlib/nonbonded/nb_kernel_x86_64_sse2/nb_kernel010_x86_64_sse2.intel_syntax.s \ -i src/gmxlib/nonbonded/nb_kernel_x86_64_sse2/nb_kernel010_x86_64_sse2.s \ || die "Failed to fix sse2 typo." # Fix a sandbox violation that occurs when re-emerging with mpi. sed "/libdir=\"\$(libdir)\"/ a\ temp_libdir=\"${D}usr/$( get_libdir )\" ; \\\\" \ -i src/tools/Makefile.am \ || die "sed tools/Makefile.am failed" sed -e "s:\$\$libdir:\$temp_libdir:" \ -i src/tools/Makefile.am \ || die "sed tools/Makefile.am failed" cd "${WORKDIR}" && mv ${P} ${P}-single ; use double-precision && cp -prP ${P}-single ${P}-double ; if use mpi ; then cp -prP ${P}-single ${P}-single-mpi use double-precision && cp -prP ${P}-double ${P}-double-mpi fi } src_compile() { # static should work but something's broken. # gcc spec file may be screwed up. # Static linking should try -lgcc instead of -lgcc_s. # For more info: # http://lists.debian.org/debian-gcc/2002/debian-gcc-200201/msg00150.html # We will compile single precision by default, and suffix double-precision with _d. # Sparc is the only arch I can test on that needs to use fortran. local myconf ; case "${ARCH}" in x86) myconf="$myconf $(use_enable sse ia32-sse)" myconf="$myconf $(use_enable sse2 ia32-sse)" myconf="$myconf $(use_enable 3dnow ia32-3dnow)" ;; amd64) myconf="$myconf --enable-x86-64-sse" ;; ppc) if use altivec ; then myconf="$myconf --enable-ppc-altivec --disable-fortran" else myconf="$myconf --enable-fortran" && fortran_pkg_setup fi ;; ppc64) if use altivec ; then myconf="$myconf --enable-ppc-altivec --disable-fortran" else myconf="$myconf --enable-fortran" && fortran_pkg_setup fi ;; sparc) myconf="$myconf --enable-fortran" && fortran_pkg_setup ;; ia64) myconf="$myconf --enable-ia64-asm" ;; alpha) myconf="$myconf --enable-axp-asm" ;; esac myconf="--enable-shared \ --datadir=/usr/share \ --bindir=/usr/bin \ --libdir=/usr/$(get_libdir) \ --with-fft=fftw3 \ $(use_with X x) \ $(use_enable mopac7) \ ${myconf}" cd "${WORKDIR}"/${P}-single econf ${myconf} --enable-float || die "configure single-precision failed" emake || die "emake single failed" if use mpi ; then cd "${WORKDIR}"/${P}-single-mpi econf ${myconf} --enable-float --enable-mpi --program-suffix=_mpi \ || die "failed to configure single-mpi mdrun" emake mdrun || die "failed to make single-precision mpi mdrun" ; fi if use double-precision ; then cd "${WORKDIR}"/${P}-double econf ${myconf} --enable-double --program-suffix=_d \ || die "configure double-precision failed" emake || die "emake double failed" if use mpi ; then cd "${WORKDIR}"/${P}-double-mpi econf ${myconf} --enable-double --enable-mpi --program-suffix=_mpi_d \ || die "failed to configure double-mpi mdrun" ; emake mdrun \ || die "failed to make double-precision mpi mdrun" ; fi fi } src_install () { cd ${WORKDIR}/${P}-single ; emake DESTDIR=${D} install || die "installing single failed" if use mpi ; then cd "${WORKDIR}"/${P}-single-mpi emake DESTDIR=${D} install-mdrun \ || die "installing mdrun_mpi failed" fi if use double-precision ; then cd ${WORKDIR}/${P}-double && emake DESTDIR=${D} install \ || die "installing double failed" if use mpi ; then cd "${WORKDIR}"/${P}-double-mpi emake DESTDIR=${D} install-mdrun \ || die "installing mdrun_mpi_d failed" fi fi dodoc AUTHORS INSTALL README # Move html and leave examples and templates under /usr/share/gromacs. mv "${D}"/usr/share/"${PN}"/html "${D}"/usr/share/doc/"${PF}"/ }