123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- # Copyright 1999-2013 Gentoo Foundation
- # Distributed under the terms of the GNU General Public License v2
- EAPI=4
- inherit eutils fortran-2 flag-o-matic pax-utils toolchain-funcs
- DESCRIPTION="A powerful quantum chemistry package"
- LICENSE="gamess"
- HOMEPAGE="http://www.msg.chem.iastate.edu/GAMESS/GAMESS.html"
- SRC_URI="
- ${P}.tar.gz
- qmmm-tinker? ( tinker.tar.Z )"
- SLOT="0"
- # NOTE: PLEASE do not stabilize gamess. It does not make sense
- # since the tarball has fetch restrictions and upstream only
- # provides the latest version. In other words: As soon as a
- # new version comes out the stable version will be useless since
- # users can not get at the tarball any more.
- KEYWORDS="~amd64 ~ppc ~x86"
- IUSE="mpi neo pax_kernel qmmm-tinker"
- CDEPEND="
- app-shells/tcsh
- mpi? ( virtual/mpi )
- virtual/blas"
- DEPEND="${CDEPEND}
- virtual/pkgconfig"
- RDEPEND="${CDEPEND}
- net-misc/openssh"
- S="${WORKDIR}/${PN}"
- RESTRICT="fetch"
- GAMESS_DOWNLOAD="http://www.msg.ameslab.gov/GAMESS/License_Agreement.html"
- GAMESS_VERSION="1 AUG 2011 (R1)"
- pkg_nofetch() {
- echo
- elog "Please download ${PN}-current.tar.gz from"
- elog "${GAMESS_DOWNLOAD}."
- elog "Be sure to select the version ${GAMESS_VERSION} tarball!!"
- elog "Then move the tarball to"
- elog "${DISTDIR}/${P}.tar.gz"
- if use qmmm-tinker ; then
- elog "Also download http://www.msg.ameslab.gov/GAMESS/tinker.tar.Z"
- elog "and place tinker.tar.Z to ${DISTDIR}"
- fi
- echo
- }
- get_fcomp() {
- case $(tc-getFC) in
- *gfortran* )
- FCOMP="gfortran" ;;
- ifort )
- FCOMP="ifc" ;;
- * )
- FCOMP=$(tc-getFC) ;;
- esac
- }
- pkg_setup() {
- fortran-2_pkg_setup
- get_fcomp
- # currently amd64 is only supported with gfortran
- if [[ "${ARCH}" == "amd64" ]] && [[ ${FCOMP} != *gfortran* ]];
- then die "You will need gfortran to compile gamess on amd64"
- fi
- # note about qmmm-tinker
- if use qmmm-tinker; then
- einfo "By default MM subsistem is restricted to 1000 atoms"
- einfo "if you want larger MM subsystems then you should set"
- einfo "QMMM_GAMESS_MAXMM variable to needed value in your make.conf"
- einfo "By default maximum number of atom classes types and size of"
- einfo "hessian are restricted to 250, 500 and 1000000 respectively"
- einfo "If you want larger sizes set:"
- einfo "QMMM_GAMESS_MAXCLASS"
- einfo "QMMM_GAMESS_MAXCTYP"
- einfo "QMMM_GAMESS_MAXHESS"
- einfo "in your make.conf"
- fi
- #note about mpi
- if use mpi; then
- ewarn ""
- ewarn "You should adjust rungms script for your mpi implentation"
- ewarn "because deafult one will not work"
- ewarn ""
- fi
- }
- src_unpack() {
- unpack ${A}
- if use qmmm-tinker; then
- mv tinker gamess/ || die "failed to move tinker directory"
- fi
- }
- src_prepare() {
- tc-export PKG_CONFIG
- # apply LINUX-arch patches to gamess makesfiles
- epatch "${FILESDIR}/${P}.gentoo.patch"
- epatch "${FILESDIR}/${PN}-checktst.patch"
- # select arch
- # NOTE: please leave lked alone; it should be good as is!!
- cd "${S}"
- local active_arch;
- if [[ "${ARCH}" == "amd64" ]]; then
- active_arch="linux64";
- else
- active_arch="linux32";
- fi
- # for hardened-gcc let't turn off ssp, since it breakes
- # a few routines
- if use pax_kernel && [[ ${FCOMP} == g77 ]]; then
- FFLAGS="${FFLAGS} -fno-stack-protector-all"
- fi
- # Enable mpi stuff
- if use mpi; then
- sed -e "s:set COMM = sockets:set COMM = mpi:g" \
- -i ddi/compddi || die "Enabling mpi build failed"
- sed -e "s:MPI_INCLUDE_PATH = ' ':MPI_INCLUDE_PATH = '-I/usr/include ':g" \
- -i ddi/compddi || die "Enabling mpi build failed"
- sed -e "s:MSG_LIBRARIES='../ddi/libddi.a -lpthread':MSG_LIBRARIES='../ddi/libddi.a -lmpi -lpthread':g" \
- -i lked || die "Enabling mpi build failed"
- fi
- # enable NEO
- if use neo; then
- sed -e "s:NEO=false:NEO=true:" -i compall lked || \
- die "Failed to enable NEO code"
- else
- sed -e "s:NEO=true:NEO=false:" -i compall lked || \
- die "Failed to disable NEO code"
- fi
- # enable GAMESS-qmmm
- if use qmmm-tinker; then
- epatch "${FILESDIR}/${PN}-qmmm-tinker-fix-idate.patch"
- sed -e "s:TINKER=false:TINKER=true:" -i compall lked || \
- die "Failed to enable TINKER code"
- if [ "x$QMMM_GAMESS_MAXMM" == "x" ]; then
- einfo "No QMMM_GAMESS_MAXMM set. Using default value = 1000"
- else
- einfo "Setting QMMM_GAMESS_MAXMM to $QMMM_GAMESS_MAXMM"
- sed -e "s:maxatm=1000:maxatm=$QMMM_GAMESS_MAXMM:g" \
- -i tinker/sizes.i \
- || die "Setting QMMM_GAMESS_MAXMM failed"
- sed -e "s:MAXATM=1000:MAXATM=$QMMM_GAMESS_MAXMM:g" \
- -i source/inputb.src \
- || die "Setting QMMM_GAMESS_MAXMM failed"
- fi
- if [ "x$QMMM_GAMESS_MAXCLASS" == "x" ]; then
- einfo "No QMMM_GAMESS_MAXMM set. Using default value = 250"
- else
- sed -e "s:maxclass=250:maxclass=$QMMM_GAMESS_MAXCLASS:g" \
- -i tinker/sizes.i \
- || die "Setting QMMM_GAMESS_MAXCLASS failed"
- fi
- if [ "x$QMMM_GAMESS_MAXCTYP" == "x" ]; then
- einfo "No QMMM_GAMESS_MAXCTYP set. Using default value = 500"
- else
- sed -e "s:maxtyp=500:maxtyp=$QMMM_GAMESS_MAXCTYP:g" \
- -i tinker/sizes.i \
- || die "Setting QMMM_GAMESS_MAXCTYP failed"
- fi
- if [ "x$QMMM_GAMESS_MAXHESS" == "x" ]; then
- einfo "No QMMM_GAMESS_MAXHESS set. Usingdefault value = 1000000"
- else
- sed -e "s:maxhess=1000000:maxhess=$QMMM_GAMESS_MAXHESS:g" \
- -i tinker/sizes.i \
- || die "Setting QMMM_GAMESS_MAXHESS failed"
- fi
- fi
- # greate proper activate sourcefile
- cp "./tools/actvte.code" "./tools/actvte.f" || \
- die "Failed to create actvte.f"
- sed -e "s/^\*UNX/ /" -i "./tools/actvte.f" || \
- die "Failed to perform UNX substitutions in actvte.f"
- # fix GAMESS' compall script to use proper CC
- sed -e "s|\$CCOMP -c \$extraflags source/zunix.c|$(tc-getCC) -c \$extraflags source/zunix.c|" \
- -i compall || die "Failed setting up compall script"
- # insert proper FFLAGS into GAMESS' comp makefile
- # in case we're using ifc let's strip all the gcc
- # specific stuff
- if [[ ${FCOMP} == "ifort" ]]; then
- sed -e "s/gentoo-OPT = '-O2'/OPT = '${FFLAGS} -quiet'/" \
- -i comp || die "Failed setting up comp script"
- elif ! use x86; then
- sed -e "s/-malign-double //" \
- -e "s/gentoo-OPT = '-O2'/OPT = '${FFLAGS}'/" \
- -i comp || die "Failed setting up comp script"
- else
- sed -e "s/gentoo-OPT = '-O2'/OPT = '${FFLAGS}'/" \
- -i comp || die "Failed setting up comp script"
- fi
- # fix up GAMESS' linker script;
- sed -e "s/gentoo-LDOPTS=' '/LDOPTS='${LDFLAGS}'/" \
- -i lked || die "Failed setting up lked script"
- # fix up GAMESS' ddi TCP/IP socket build
- sed -e "s/gentoo-CC = 'gcc'/CC = '$(tc-getCC)'/" \
- -i ddi/compddi || die "Failed setting up compddi script"
- # Creating install.info
- cat > install.info <<-EOF
- #!/bin/csh
- setenv GMS_PATH $WORKDIR/gamess
- setenv GMS_TARGET $active_arch
- setenv GMS_FORTRAN $FCOMP
- setenv GMS_MATHLIB atlas
- setenv GMS_MATHLIB_PATH /usr/$(get_libdir)/atlas
- setenv GMS_DDI_COMM sockets
- EOF
- }
- src_compile() {
- # build actvte
- cd "${S}"/tools
- ${FCOMP} -o actvte.x actvte.f || \
- die "Failed to compile actvte.x"
- # for hardened (PAX) users and ifc we need to turn
- # MPROTECT off
- if [[ ${FCOMP} == "ifort" ]] && use pax_kernel; then
- pax-mark -PemRxS actvte.x
- fi
- # build gamess
- cd "${S}"
- ./compall || die "compall failed"
- # build the ddi TCP/IP socket stuff
- cd ${S}/"ddi"
- ./compddi || die "compddi failed"
- # finally, link it all together
- cd "${S}"
- ./lked || die "lked failed"
- # for hardened (PAX) users and ifc we need to turn
- # MPROTECT off
- if [[ ${FCOMP} == "ifort" ]] && use pax_kernel; then
- pax-mark -PemRxS ${PN}.00.x
- fi
- }
- src_install() {
- # the executables
- dobin ${PN}.00.x rungms \
- || die "Failed installing binaries"
- if use !mpi; then
- dobin ddi/ddikick.x \
- || die "Failed installing binaries"
- fi
- # the docs
- dodoc *.DOC qmnuc/*.DOC || die "Failed installing docs"
- # install ericftm
- insinto /usr/share/${PN}
- doins auxdata/ericfmt.dat || die "Failed installing ericfmt.dat"
- # install mcpdata
- insinto /usr/share/${PN}/MCP
- doins auxdata/MCP/* || die "Failed installing MCP"
- # install BASES
- insinto /usr/share/${PN}/BASES
- doins auxdata/BASES/* || die "Failed installing BASES"
- # install QUANPOL
- insinto /usr/share/${PN}/QUANPOL
- doins auxdata/QUANPOL/* || die "Failed installing QUANPOL"
- # install tinker params in case of qmmm
- if use qmmm-tinker ; then
- dodoc tinker/simomm.doc || die "Failed installing docs"
- insinto /usr/share/${PN}
- doins -r tinker/params51 || die "Failed to install Tinker params"
- fi
- # install the tests the user should run, and
- # fix up the runscript; also grab a copy of rungms
- # so the user is ready to run the tests
- insinto /usr/share/${PN}/tests
- insopts -m0644
- doins tests/* || die "Failed installing tests"
- insopts -m0744
- doins runall || die "Failed installing tests"
- doins tools/checktst/checktst tools/checktst/chkabs || \
- die "Failed to install main test checker"
- doins tools/checktst/exam* || \
- die "Failed to install individual test files"
- insinto /usr/share/${PN}/neotests
- insopts -m0644
- doins -r qmnuc/neotests/* || die "Failed to install NEO tests"
- }
- pkg_postinst() {
- echo
- einfo "Before you use GAMESS for any serious work you HAVE"
- einfo "to run the supplied test files located in"
- einfo "/usr/share/gamess/tests and check them thoroughly."
- einfo "Otherwise all scientific publications resulting from"
- einfo "your GAMESS runs should be immediately rejected :)"
- einfo "To do so copy the content of /usr/share/gamess/tests"
- einfo "to some temporary location and execute './runall'. "
- einfo "Then run the checktst script in the same directory to"
- einfo "validate the tests."
- einfo "Please consult TEST.DOC and the other docs!"
- if [[ ${FCOMP} == "ifort" ]]; then
- echo
- ewarn "IMPORTANT NOTE: We STRONGLY recommend to stay away"
- ewarn "from ifc-9.0 for now and use the ifc-8.1 series of"
- ewarn "compilers UNLESS you can run through ALL of the "
- ewarn "test cases (see above) successfully."
- fi
- echo
- einfo "If you want to run on more than a single CPU"
- einfo "you will have to acquaint yourself with the way GAMESS"
- einfo "does multiprocessor runs and adjust rungms according to"
- einfo "your target network architecture."
- echo
- }
|