--- gromacs-4.0.3.ebuild 2009-04-18 18:43:48.000000000 +0200 +++ gromacs-4.0.4.ebuild 2009-04-18 17:01:30.000000000 +0200 @@ -1,35 +1,29 @@ # Copyright 1999-2009 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/sci-chemistry/gromacs/gromacs-4.0.3.ebuild,v 1.2 2009/03/08 19:50:46 maekke Exp $ +# $Header: $ EAPI="1" LIBTOOLIZE="true" -inherit autotools eutils flag-o-matic fortran multilib +inherit autotools bash-completion eutils fortran multilib DESCRIPTION="The ultimate molecular dynamics simulation package" HOMEPAGE="http://www.gromacs.org/" -SRC_URI="ftp://ftp.gromacs.org/pub/${PN}/${P}.tar.gz" +SRC_URI="ftp://ftp.gromacs.org/pub/${PN}/${P}.tar.gz + test? ( ftp://ftp.gromacs.org/pub/tests/gmxtest-${PV}.tgz ) + doc? ( ftp://ftp.gromacs.org/pub/manual/manual-4.0.pdf )" LICENSE="GPL-2" SLOT="0" -KEYWORDS="~alpha amd64 ~ppc64 ~sparc x86" -IUSE="3dnow X altivec blas double-precision gsl lapack mpi +single-precision sse sse2 static xml" +KEYWORDS="~alpha ~amd64 ~ppc64 ~sparc ~x86" +IUSE="X blas dmalloc doc -double-precision fftw fkernels gsl lapack mpi +single-precision static test +xml zsh-completion" -# mopac7 qm/mm is broken until we can get files from -# http://md.chem.rug.nl/~groenhof/qmmm.html -# or somewhere else... - -DEPEND=">=sci-libs/fftw-3.0.1 - app-shells/tcsh - X? ( x11-libs/libX11 - x11-libs/libXt - x11-libs/libXp - x11-libs/libXext - x11-proto/xproto - x11-libs/openmotif ) +DEPEND="app-shells/tcsh + X? ( x11-libs/libX11 ) + dmalloc? ( dev-libs/dmalloc ) blas? ( virtual/blas ) + fftw? ( >=sci-libs/fftw-3.0.1 ) gsl? ( sci-libs/gsl ) lapack? ( virtual/lapack ) mpi? ( virtual/mpi ) @@ -37,10 +31,7 @@ RDEPEND="${DEPEND}" -FORTRAN="g77 gfortran ifc" - src_unpack() { - unpack ${A} cd "${S}" # Fix typos in a couple of files. @@ -64,6 +55,8 @@ -i src/tools/Makefile.am \ || die "sed tools/Makefile.am failed" + use fkernels && epatch "${FILESDIR}/${P}-configure-gfortran.patch" + eautoreconf cd "${WORKDIR}" @@ -75,74 +68,37 @@ } 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 ; local myconf_s ; local myconf_d ; + local suffix_d ; - case "${ARCH}" in - - x86) - if ( use sse || use sse2 ) ; then - myconf="${myconf} --enable-ia32-sse" - fi - myconf="$myconf $(use_enable 3dnow ia32-3dnow)" - - if ( ! use sse && ! use sse2 && ! use 3dnow ) ; then - if ! has_version "=sys-devel/gcc-3*" ; then - die "If you must run gromacs without sse (not recommended) gfortran will not work." - else - myconf="${myconf} --enable-fortran" && fortran_pkg_setup - fi - else - myconf="${myconf} --disable-fortran" - fi - ;; - - amd64) - myconf="$myconf --enable-x86-64-sse --disable-fortran" - ;; - - ppc*) - if use altivec ; then - myconf="${myconf} --enable-ppc-altivec --disable-fortran" - else - if ! has_version "=sys-devel/gcc-3*" ; then - die "If you must run gromacs without sse (not recommended) gfortran will not work." - else - myconf="${myconf} --enable-fortran" && fortran_pkg_setup - fi - fi - ;; - - ia64) - myconf="$myconf --enable-ia64-asm --disable-fortran" - ;; - - alpha) - if ! has_version "=sys-devel/gcc-3*" ; then - die "If you must run gromacs without sse (not recommended) gfortran will not work." - else - myconf="$myconf --enable-fortran" && fortran_pkg_setup - fi - ;; - - sparc) - if ! has_version "=sys-devel/gcc-3*" ; then - die "If you must run gromacs without sse (not recommended) gfortran will not work." - else - myconf="${myconf} --enable-fortran" && fortran_pkg_setup - fi - ;; - esac + #leave all assembly options enabled mdrun is smart enough to deside itself + #there so no gentoo on bluegene! + myconf="${myconf} --disable-bluegene" + + #from gromacs configure + if ! use fftw; then + ewarn "WARNING: The built-in FFTPACK routines are slow." + ewarn "Are you sure you don\'t want to use FFTW?" + ewarn "It is free and much faster..." + fi + + if [[ $(gcc-version) == "4.1" ]]; then + ewarn "gcc 4.1 is not supported by gromacs" + ewarn "please run test suite" + fi + + #fortran will gone in gromacs 4.1 anyway + #note for gentoo-PREFIX on aix, fortran (xlf) is still much faster + if use fkernels; then + ewarn "Fortran kernels are usually not faster than C kernels and assembly" + ewarn "I hope, you know what are you doing..." + FORTRAN="g77 gfortran ifc" + myconf="${myconf} --enable-fortran" && fortran_pkg_setup + else + myconf="${myconf} --disable-fortran" + fi # if we need external blas if use blas; then @@ -159,7 +115,8 @@ myconf="--datadir=/usr/share \ --bindir=/usr/bin \ --libdir=/usr/$(get_libdir) \ - --with-fft=fftw3 \ + $(use_with dmalloc) \ + $(use_with fftw fft fftw3) \ $(use_with gsl) \ $(use_enable mpi) \ $(use_with X x) \ @@ -167,35 +124,58 @@ $(use_enable static all-static) \ ${myconf}" + #if we build both double is suffixed if ( use double-precision && use single-precision ); then - einfo "Building Single Precison Gromacs" - cd "${WORKDIR}"/"${P}"-single - myconf_s="${myconf} --enable-float --disable-double --program-suffix=''" - econf ${myconf_s} || die "Single Precision econf failed" - emake || die "Single Precision emake failed" - - einfo "Building Double Precision Gromacs" - cd "${WORKDIR}"/"${P}"-double - myconf_d="${myconf} --enable-double --disable-float --program-suffix=_d" - econf ${myconf_d} || die "Double Precision econf failed" - emake || die "Double Precision emake failed" + suffix_d="_d" + else + suffix_d="" + fi - elif use double-precision ; then + if use double-precision ; then + #from gromacs manual + elog + elog For most simulations single precision is accurate enough. In some + elog cases double precision is required to get reasonable results: + elog + elog -normal mode analysis, for the conjugate gradient or l-bfgs minimization + elog and the calculation and diagonalization of the Hessian + elog -calculation of the constraint force between two large groups of atoms + elog -energy conservation: this can only be done without temperature coupling and + elog without cutoffs + elog einfo "Building Double Precison Gromacs" cd "${WORKDIR}"/"${P}"-double - myconf_d="${myconf} --enable-double --disable-float --program-suffix=''" + myconf_d="${myconf} --enable-double --program-suffix='${suffix_d}'" econf ${myconf_d} || die "Double Precision econf failed" emake || die "Double Precision emake failed" + fi - elif use single-precision ; then + if use single-precision ; then einfo "Building Single Precison Gromacs" cd "${WORKDIR}"/"${P}"-single - myconf_s="${myconf} --enable-float --disable-double --program-suffix=''" + myconf_s="${myconf} --enable-float --program-suffix=''" econf ${myconf_s} || die "configure failed" emake || die "Single Precision emake failed" fi } +src_test() { + if use single-precision ; then + export PATH="${WORKDIR}/${P}-single/src/kernel:${WORKDIR}/${P}-single/src/tools:$PATH" + cd "${WORKDIR}/gmxtest" + #test is broken, only do simple tests + ./gmxtest.pl simple || die "Single Precision test failed" + fi + + if use double-precision ; then + export PATH="${WORKDIR}/${P}-double/src/kernel:${WORKDIR}/${P}-double/src/tools:$PATH" + cd "${WORKDIR}/gmxtest" + use single-precision && ./gmxtest.pl clean + #test is broken, only do simple tests + ./gmxtest.pl -double simple || die "Double Precision test failed" + fi +} + src_install() { if use single-precision ; then einfo "Installing Single Precision" @@ -208,8 +188,36 @@ cd "${WORKDIR}"/"${P}"-double emake DESTDIR="${D}" install || die "Installing Double Precision failed" fi + + sed -n -e '/^GMXBIN/,/^GMXDATA/p' ${D}/usr/bin/GMXRC.bash > "${T}/80gromacs" + doenvd "${T}/80gromacs" + rm -f ${D}/usr/bin/GMXRC* + + dobashcompletion ${D}/usr/bin/completion.bash ${PN} + if use zsh-completion ; then + insinto /usr/share/zsh/site-functions + newins ${D}/usr/bin/completion.zsh _${PN} + fi + rm -r ${D}/usr/bin/completion.* 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}"/ + if use doc; then + # Move html and leave examples and templates under /usr/share/gromacs. + mv "${D}"/usr/share/"${PN}"/html "${D}"/usr/share/doc/"${PF}"/ + dodoc "${DISTDIR}"/manual-4.0.pdf + fi +} + +pkg_postinst() { + env-update && source /etc/profile + elog + elog Please read and cite: + elog Gromacs 4, J. Chem. Theory Comput. 4, 435 \(2008\). + elog http://dx.doi.org/10.1021/ct700301q + elog + bash-completion_pkg_postinst + elog + elog $(luck) + elog For more Gromacs cool quotes \(gcq\) add luck to your .bashrc + elog }