sci-chemistry/vmd: Fix /tmp PATH, open .pdb files as pymol does
authorPacho Ramos <pacho@gentoo.org>
Sun, 15 Dec 2019 15:31:06 +0000 (16:31 +0100)
committerPacho Ramos <pacho@gentoo.org>
Sun, 15 Dec 2019 15:31:29 +0000 (16:31 +0100)
Package-Manager: Portage-2.3.81, Repoman-2.3.19
Signed-off-by: Pacho Ramos <pacho@gentoo.org>
sci-chemistry/vmd/files/vmd-1.9.3-tmpdir.patch [new file with mode: 0644]
sci-chemistry/vmd/vmd-1.9.3-r2.ebuild [new file with mode: 0644]

diff --git a/sci-chemistry/vmd/files/vmd-1.9.3-tmpdir.patch b/sci-chemistry/vmd/files/vmd-1.9.3-tmpdir.patch
new file mode 100644 (file)
index 0000000..22712ab
--- /dev/null
@@ -0,0 +1,22 @@
+--- a/scripts/vmd/vmdinit.tcl~ 2016-10-27 05:46:34.000000000 +0200
++++ b/scripts/vmd/vmdinit.tcl  2019-12-03 16:29:01.894002827 +0100
+@@ -197,7 +197,7 @@
+       set env(TMPDIR) /tmp
+     }
+     default {
+-      set env(TMPDIR) /usr/tmp
++      set env(TMPDIR) /tmp
+     }
+   }
+ }
+--- a/scripts/vmd/chemical2vmd~        2000-07-03 19:30:23.000000000 +0200
++++ b/scripts/vmd/chemical2vmd 2019-12-03 16:28:49.316861178 +0100
+@@ -61,7 +61,7 @@
+ # Make a temp. file to store the load command
+-$ENV{'TMPDIR'} = '/usr/tmp' if !$ENV{'TMPDIR'};
++$ENV{'TMPDIR'} = '/tmp' if !$ENV{'TMPDIR'};
+ sub tmpfile {
+     local ($tempfile) = $ENV{'TMPDIR'} . '/chemical2vmd.' . $$;
+     local ($i);
diff --git a/sci-chemistry/vmd/vmd-1.9.3-r2.ebuild b/sci-chemistry/vmd/vmd-1.9.3-r2.ebuild
new file mode 100644 (file)
index 0000000..02ad806
--- /dev/null
@@ -0,0 +1,266 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+PYTHON_COMPAT=( python2_7 )
+
+inherit cuda desktop flag-o-matic prefix python-single-r1 toolchain-funcs xdg
+
+DESCRIPTION="Visual Molecular Dynamics"
+HOMEPAGE="http://www.ks.uiuc.edu/Research/vmd/"
+SRC_URI="
+       https://dev.gentoo.org/~jlec/distfiles/${P}-gentoo-patches.tar.xz
+       ${P}.src.tar
+"
+
+SLOT="0"
+LICENSE="vmd"
+KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
+IUSE="cuda gromacs msms povray sqlite tachyon xinerama"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RESTRICT="fetch"
+
+# currently, tk-8.5* with USE=truetype breaks some
+# tk apps such as Sequence Viewer or Timeline.
+CDEPEND="
+       >=dev-lang/tk-8.6.1:0=
+       dev-lang/perl
+       dev-libs/expat
+       dev-python/numpy[${PYTHON_USEDEP}]
+       sci-libs/netcdf:0=
+       virtual/opengl
+       >=x11-libs/fltk-1.1.10-r2:1
+       x11-libs/libXft
+       x11-libs/libXi
+       ${PYTHON_DEPS}
+       cuda? ( >=dev-util/nvidia-cuda-toolkit-4.2.9-r1:= )
+       gromacs? ( >=sci-chemistry/gromacs-5.0.4-r1:0=[tng] )
+       sqlite? ( dev-db/sqlite:3= )
+       tachyon? ( >=media-gfx/tachyon-0.99_beta6 )
+       xinerama? ( x11-libs/libXinerama )
+"
+DEPEND="${CDEPEND}"
+BDEPEND="
+       virtual/pkgconfig
+       dev-lang/swig
+"
+RDEPEND="${CDEPEND}
+       sci-biology/stride
+       sci-chemistry/chemical-mime-data
+       sci-chemistry/surf
+       x11-terms/xterm
+       msms? ( sci-chemistry/msms-bin )
+       povray? ( media-gfx/povray )
+"
+
+VMD_DOWNLOAD="http://www.ks.uiuc.edu/Development/Download/download.cgi?PackageName=VMD"
+# Binary only plugin!!
+QA_PREBUILT="usr/lib*/vmd/plugins/LINUX/tcl/intersurf1.1/bin/intersurf.so"
+QA_FLAGS_IGNORED_amd64=" usr/lib64/vmd/plugins/LINUX/tcl/volutil1.3/volutil"
+QA_FLAGS_IGNORED_x86=" usr/lib/vmd/plugins/LINUX/tcl/volutil1.3/volutil"
+
+pkg_nofetch() {
+       elog "Please download ${P}.src.tar from"
+       elog "${VMD_DOWNLOAD}"
+       elog "after agreeing to the license and get"
+       elog "https://dev.gentoo.org/~jlec/distfiles/${P}-gentoo-patches.tar.xz"
+       elog "Place both into your DISTDIR directory"
+       elog
+       elog "Due to an upstream bug (https://bugs.gentoo.org/640440) sources"
+       elog "file may get downloaded as a compressed tarball or not. In that case"
+       elog "you will need to ensure you uncompress the file and rename it"
+       elog "as ${P}.src.tar"
+}
+
+src_prepare() {
+       xdg_src_prepare
+
+       use cuda && cuda_sanitize
+
+       eapply "${FILESDIR}"/${PN}-1.9.1-cuda-device_ptr.patch
+
+       cd "${WORKDIR}"/plugins || die
+
+       eapply -p2 "${WORKDIR}"/${P}-gentoo-plugins.patch
+
+       [[ ${SILENT} == yes ]] || sed '/^.SILENT/d' -i $(find -name Makefile)
+
+       sed \
+               -e "s:CC = gcc:CC = $(tc-getCC):" \
+               -e "s:CXX = g++:CXX = $(tc-getCXX):" \
+               -e "s:COPTO =.*\":COPTO = -fPIC -o \":" \
+               -e "s:LOPTO = .*\":LOPTO = ${LDFLAGS} -fPIC -o \":" \
+               -e "s:CCFLAGS =.*\":CCFLAGS = ${CFLAGS}\":" \
+               -e "s:CXXFLAGS =.*\":CXXFLAGS = ${CXXFLAGS}\":" \
+               -e "s:SHLD = gcc:SHLD = $(tc-getCC) -shared:" \
+               -e "s:SHXXLD = g++:SHXXLD = $(tc-getCXX) -shared:" \
+               -e "s:-ltcl8.5:-ltcl:" \
+               -i Make-arch || die "Failed to set up plugins Makefile"
+
+       sed \
+               -e '/^AR /s:=:?=:g' \
+               -e '/^RANLIB /s:=:?=:g' \
+               -i ../plugins/*/Makefile || die
+
+       tc-export AR RANLIB
+
+       sed \
+               -e "s:\$(CXXFLAGS)::g" \
+               -i hesstrans/Makefile || die
+
+       # prepare vmd itself
+       cd "${S}" || die
+
+       eapply -p2 "${WORKDIR}"/${P}-gentoo-base.patch
+       eapply "${FILESDIR}"/${P}-configure-libtachyon.patch
+       eapply "${FILESDIR}"/${P}-tmpdir.patch
+
+       # PREFIX
+       sed \
+               -e "s:/usr/include/:${EPREFIX}/usr/include:g" \
+               -i configure || die
+
+       sed \
+               -e "s:gentoo-bindir:${ED}/usr/bin:g" \
+               -e "s:gentoo-libdir:${ED}/usr/$(get_libdir):g" \
+               -e "s:gentoo-opengl-include:${EPREFIX}/usr/include/GL:g" \
+               -e "s:gentoo-opengl-libs:${EPREFIX}/usr/$(get_libdir):g" \
+               -e "s:gentoo-gcc:$(tc-getCC):g" \
+               -e "s:gentoo-g++:$(tc-getCXX):g" \
+               -e "s:gentoo-nvcc:${EPREFIX}/opt/cuda/bin/nvcc:g" \
+               -e "s:gentoo-cflags:${CFLAGS}:g" \
+               -e "s:gentoo-cxxflags:${CXXFLAGS}:g" \
+               -e "s:gentoo-nvflags::g" \
+               -e "s:gentoo-ldflags:${LDFLAGS}:g" \
+               -e "s:gentoo-plugindir:${WORKDIR}/plugins:g" \
+               -e "s:gentoo-fltk-include:$(fltk-config --includedir):g" \
+               -e "s:gentoo-fltk-libs:$(dirname $(fltk-config --libs)) -Wl,-rpath,$(dirname $(fltk-config --libs)):g" \
+               -e "s:gentoo-libtachyon-include:${EPREFIX}/usr/include/tachyon:g" \
+               -e "s:gentoo-libtachyon-libs:${EPREFIX}/usr/$(get_libdir):g" \
+               -e "s:gentoo-netcdf-include:${EPREFIX}/usr/include:g" \
+               -e "s:gentoo-netcdf-libs:${EPREFIX}/usr/$(get_libdir):g" \
+               -i configure || die
+
+       if use cuda; then
+               sed \
+                       -e "s:gentoo-cuda-lib:${EPREFIX}/opt/cuda/$(get_libdir):g" \
+                       -e "/NVCCFLAGS/s:=:= ${NVCCFLAGS}:g" \
+                       -i configure src/Makefile || die
+               sed \
+                       -e '/compute_/d' \
+                       -i configure || die
+               sed \
+                       -e 's:-gencode .*code=sm_..::' \
+                       -i src/Makefile || die
+       fi
+
+       sed \
+               -e "s:LINUXPPC:LINUX:g" \
+               -e "s:LINUXALPHA:LINUX:g" \
+               -e "s:LINUXAMD64:LINUX:g" \
+               -e "s:gentoo-stride:${EPREFIX}/usr/bin/stride:g" \
+               -e "s:gentoo-surf:${EPREFIX}/usr/bin/surf:g" \
+               -e "s:gentoo-tachyon:${EPREFIX}/usr/bin/tachyon:g" \
+               -i "${S}"/bin/vmd.sh || die "failed setting up vmd wrapper script"
+
+       EMAKEOPTS=(
+               TCLINC="-I${EPREFIX}/usr/include"
+               TCLLIB="-L${EPREFIX}/usr/$(get_libdir)"
+               TCLLDFLAGS="-shared"
+               NETCDFLIB="$($(tc-getPKG_CONFIG) --libs-only-L netcdf)${EPREFIX}/usr/$(get_libdir)/libnetcdf.so"
+               NETCDFINC="$($(tc-getPKG_CONFIG) --cflags-only-I netcdf)${EPREFIX}/usr/include"
+               NETCDFLDFLAGS="$($(tc-getPKG_CONFIG) --libs netcdf)"
+               NETCDFDYNAMIC=1
+               EXPATINC="-I${EPREFIX}/usr/include"
+               EXPATLIB="$($(tc-getPKG_CONFIG) --libs expat)"
+               EXPATLDFLAGS="-shared"
+               EXPATDYNAMIC=1
+       )
+       if use gromacs; then
+               EMAKEOPTS+=(
+                       TNGLIB="$($(tc-getPKG_CONFIG) --libs libgromacs)"
+                       TNGINC="-I${EPREFIX}/usr/include"
+                       TNGLDFLAGS="-shared"
+                       TNGDYNAMIC=1
+               )
+       fi
+       if use sqlite; then
+               EMAKEOPTS+=(
+                       SQLITELIB="$($(tc-getPKG_CONFIG) --libs sqlite3)"
+                       SQLITEINC="-I${EPREFIX}/usr/include"
+                       SQLITELDFLAGS="-shared"
+                       SQLITEDYNAMIC=1
+               )
+       fi
+}
+
+src_configure() {
+       local myconf="OPENGL OPENGLPBUFFER COLVARS FLTK TK TCL PTHREADS PYTHON IMD NETCDF NUMPY NOSILENT XINPUT"
+       rm -f configure.options && echo $myconf >> configure.options
+
+       use cuda && myconf+=" CUDA"
+#      use mpi && myconf+=" MPI"
+       use tachyon && myconf+=" LIBTACHYON"
+       use xinerama && myconf+=" XINERAMA"
+
+       export \
+               PYTHON_INCLUDE_DIR="$(python_get_includedir)" \
+               PYTHON_LIBRARY_DIR="$(python_get_library_path)" \
+               PYTHON_LIBRARY="$(python_get_LIBS)" \
+               NUMPY_INCLUDE_DIR="$(python_get_sitedir)/numpy/core/include" \
+               NUMPY_LIBRARY_DIR="$(python_get_sitedir)/numpy/core/include"
+
+       perl ./configure LINUX \
+               ${myconf} || die
+}
+
+src_compile() {
+       # build plugins
+       cd "${WORKDIR}"/plugins || die
+
+       emake \
+               ${EMAKEOPTS[@]} \
+               LINUX
+
+       # build vmd
+       cd "${S}"/src || die
+       emake
+}
+
+src_install() {
+       # install plugins
+       cd "${WORKDIR}"/plugins || die
+       emake \
+                       PLUGINDIR="${ED}/usr/$(get_libdir)/${PN}/plugins" \
+                       distrib
+
+       # install vmd
+       cd "${S}"/src || die
+       emake install
+
+       # install docs
+       cd "${S}" || die
+       dodoc Announcement README doc/ig.pdf doc/ug.pdf
+
+       # remove some of the things we don't want and need in
+       # /usr/lib
+       cd "${ED}"/usr/$(get_libdir)/vmd || die
+       rm -fr doc README Announcement LICENSE || \
+               die "failed to clean up /usr/lib/vmd directory"
+
+       # adjust path in vmd wrapper
+       sed \
+               -e "s:${ED}::" -i "${ED}"/usr/bin/${PN} \
+               -e "/^defaultvmddir/s:^.*$:defaultvmddir=\"${EPREFIX}/usr/$(get_libdir)/${PN}\":g" \
+               || die "failed to set up vmd wrapper script"
+
+       # install icon and generate desktop entry
+       insinto /usr/share/pixmaps
+       doins "${WORKDIR}"/vmd.png
+       eprefixify "${WORKDIR}"/vmd.desktop
+       sed -i '/^Path/d' "${WORKDIR}"/vmd.desktop || die
+       # Open PDB files with VMD
+       echo "MimeType=chemical/x-pdb;" >> "${WORKDIR}"/vmd.desktop || die
+       domenu "${WORKDIR}"/vmd.desktop
+}