aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sci-chemistry/gamess/gamess-20180930.3-r1.ebuild')
-rw-r--r--sci-chemistry/gamess/gamess-20180930.3-r1.ebuild379
1 files changed, 379 insertions, 0 deletions
diff --git a/sci-chemistry/gamess/gamess-20180930.3-r1.ebuild b/sci-chemistry/gamess/gamess-20180930.3-r1.ebuild
new file mode 100644
index 000000000..17fe76f76
--- /dev/null
+++ b/sci-chemistry/gamess/gamess-20180930.3-r1.ebuild
@@ -0,0 +1,379 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit check-reqs fortran-2 flag-o-matic pax-utils toolchain-funcs
+
+DESCRIPTION="A powerful quantum chemistry package"
+HOMEPAGE="https://www.msg.chem.iastate.edu/GAMESS/GAMESS.html"
+SRC_URI="
+ ${P}.tar.gz
+ qmmm-tinker? ( tinker.tar.gz )"
+
+SLOT="0"
+LICENSE="gamess"
+# 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 ~x86"
+IUSE="mpi msucc neo openmp pax-kernel qmmm-tinker vb2000"
+
+CDEPEND="
+ app-shells/tcsh
+ mpi? ( virtual/mpi )
+ virtual/blas"
+DEPEND="${CDEPEND}"
+BDEPEND="virtual/pkgconfig"
+RDEPEND="${CDEPEND}
+ net-misc/openssh"
+
+REQUIRED_USE="( openmp? ( !neo !vb2000 ) )"
+
+S="${WORKDIR}/${PN}"
+
+RESTRICT="fetch"
+
+GAMESS_DOWNLOAD="http://www.msg.ameslab.gov/GAMESS/License_Agreement.html"
+GAMESS_VERSION="September 30, 2018 R3"
+
+pre_build_checks() {
+ if use msucc; then
+ CHECKREQS_MEMORY=6G
+ check-reqs_pkg_setup
+ fi
+}
+
+pkg_pretend() {
+ pre_build_checks
+}
+
+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 into your DISTDIR folder"
+ if use qmmm-tinker ; then
+ elog "Also download http://www.msg.ameslab.gov/GAMESS/tinker.tar.gz"
+ elog "and place tinker.tar.gz into your DISTDIR folder"
+ fi
+ echo
+}
+
+get_fcomp() {
+ case $(tc-getFC) in
+ *gfortran* )
+ FCOMP="gfortran" ;;
+ ifort )
+ FCOMP="ifc" ;;
+ * )
+ FCOMP=$(tc-getFC) ;;
+ esac
+}
+
+pkg_setup() {
+ pre_build_checks
+ use openmp && FORTRAN_NEED_OPENMP=1
+ 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
+ eapply "${FILESDIR}/${P}.gentoo.patch"
+ eapply_user
+ # 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
+
+ # fix "relocation truncated to fit" problem
+ append-flags -mcmodel=medium
+ append-ldflags -mcmodel=medium
+
+ # 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 VB2000
+ if use vb2000; then
+ sed -e "s:VB2000=false:VB2000=true:" -i compall lked || \
+ die "Failed to enable VB2000 code"
+ else
+ sed -e "s:VB2000=true:VB2000=false:" -i compall lked || \
+ die "Failed to disable VB2000 code"
+ fi
+ # enable GAMESS-qmmm
+ if use qmmm-tinker; then
+ eapply "${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
+ # create 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_BUILD_DIR $WORKDIR/gamess
+ setenv GMS_TARGET $active_arch
+ setenv GMS_FORTRAN $FCOMP
+ setenv GMS_GFORTRAN_VERNO $(gcc-major-version).$(gcc-minor-version)
+ setenv GMS_MATHLIB atlas
+ setenv GMS_MATHLIB_PATH /usr/$(get_libdir)/atlas
+ setenv GMS_DDI_COMM sockets
+ setenv GMS_LIBCCHEM false
+ setenv GMS_PHI false
+ setenv GMS_SHMTYPE sysv
+ setenv GMS_OPENMP $(usex openmp true false)
+ setenv GMS_MSUCC $(usex msucc true false)
+ 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 gms-files.csh \
+ || die "Failed installing binaries"
+ if use !mpi; then
+ dobin ddi/ddikick.x \
+ || die "Failed installing binaries"
+ fi
+
+ # the docs
+ dodoc *.DOC qmnuc/*.DOC
+
+ # install ericftm
+ insinto /usr/share/${PN}
+ doins auxdata/ericfmt.dat
+
+ # install mcpdata
+ insinto /usr/share/${PN}/MCP
+ doins auxdata/MCP/*
+
+ # install BASES
+ insinto /usr/share/${PN}/BASES
+ doins auxdata/BASES/*
+
+ # install QUANPOL
+ insinto /usr/share/${PN}/QUANPOL
+ doins auxdata/QUANPOL/*
+
+ # install tinker params in case of qmmm
+ if use qmmm-tinker ; then
+ dodoc tinker/simomm.doc
+ insinto /usr/share/${PN}
+ doins -r tinker/params51
+ 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 -r tests/*
+ insopts -m0744
+ doins runall
+ #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/*
+
+ if use vb2000; then
+ insinto /usr/share/${PN}/vb2000
+ insopts -m0644
+ doins -r vb2000/{MAP,VBOLIB,test_results,tests}
+ insopts -m0744
+ doins -r vb2000/{checktst,checkvbtst,runallvb}
+ docinto vb2000
+ dodoc vb2000/DOC/*
+ fi
+}
+
+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
+}