--- gromacs-3.3.1.ebuild 2006-12-13 02:16:50.000000000 -0600 +++ gromacs-3.3.1-r1.ebuild 2006-12-12 11:34:00.000000000 -0600 @@ -1,10 +1,10 @@ # Copyright 1999-2006 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/sci-chemistry/gromacs/gromacs-3.3.1.ebuild,v 1.1 2006/08/08 02:54:41 markusle Exp $ +# $Header: $ -inherit eutils fortran +inherit eutils fortran multilib -IUSE="altivec mpi xml" +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" @@ -12,39 +12,58 @@ LICENSE="GPL-2" SLOT="0" -KEYWORDS="~x86 ~amd64 ~ppc64" +KEYWORDS="~x86 ~amd64 ~sparc ~ppc64" -# gromacs uses fortran intrinsics such as RSHIFT that -# are currently missing from gfortran; hence we need -# to require g77 for the time being (see bug #141672). -FORTRAN="g77" - - -#mpi is a local USE flag now -#May become official when situation with mpich is cleared (now the only mpi implementation awailable is lam-mpi) -DEPEND="=sci-libs/fftw-2.1* - mpi? ( >=sys-cluster/lam-mpi-6.5.6 ) - >=sys-devel/binutils-2.10.91.0.2 +DEPEND=">=sci-libs/fftw-3.0.1 + mpi? ( >=sys-cluster/lam-mpi-7.0.6 ) + >=sys-devel/binutils-2.12* app-shells/tcsh - xml? ( dev-libs/libxml2 )" - + 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-2.1* mpi; then - die "=sci-libs/fftw-2.1* must be built with USE=mpi." + if ! built_with_use =sci-libs/fftw-3* mpi; then + die "=sci-libs/fftw-3* must be built with USE=mpi." fi fi - fortran_pkg_setup } src_unpack() { + unpack ${A} if use ppc64 && use altivec ; then - epatch ${FILESDIR}/${PN}-ppc64-altivec.patch + 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 } @@ -54,28 +73,118 @@ # Static linking should try -lgcc instead of -lgcc_s. # For more info: # http://lists.debian.org/debian-gcc/2002/debian-gcc-200201/msg00150.html - econf \ - --enable-fortran \ - --datadir=/usr/share/${P} \ + +# 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/lib \ - $(use_with xml) \ - $(use_enable mpi) \ - $(use_enable altivec ppc-altivec) \ - $(use_enable alpha axp-asm) || die "configure failed" + --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 -# $(use_enable static all-static) \ + 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 - emake || die } src_install () { - make DESTDIR=${D} install || die + 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 - # Install documentation. - dodoc AUTHORS COPYING INSTALL README + dodoc AUTHORS INSTALL README - #move html docs under /usr/share/doc - #and leave examples and templates under /usr/gromacs... - mv ${D}/usr/share/${P}/html ${D}/usr/share/doc/${PF} + # Move html and leave examples and templates under /usr/share/gromacs. + mv "${D}"/usr/share/"${PN}"/html "${D}"/usr/share/doc/"${PF}"/ }