summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorAdam J. Stewart <ajstewart426@gmail.com>2017-05-18 10:06:44 -0500
committerGitHub <noreply@github.com>2017-05-18 10:06:44 -0500
commit48588cb1d89b45a947a0fe2d27d41b40b251e536 (patch)
tree8b1590ec534fe094bbbd49f4fc21247345c3ab42 /var
parent48eec5fc0f06f42411ffe156d285f7d7a008de65 (diff)
downloadspack-48588cb1d89b45a947a0fe2d27d41b40b251e536.tar.gz
spack-48588cb1d89b45a947a0fe2d27d41b40b251e536.tar.bz2
spack-48588cb1d89b45a947a0fe2d27d41b40b251e536.tar.xz
spack-48588cb1d89b45a947a0fe2d27d41b40b251e536.zip
Add a new package for Open Babel (#4256)
* Add a new package for Open Babel * Add post-installation tests, stolen from the fine folks at Homebrew * Add patch to fix Python 3.6 support * Add a more complete patch to get Python 3.6 support working * Add patch to convert tabs to spaces in test script testpdbformat.py contains mixed tabs and spaces causing the unit tests to fail. With this patch, all tests pass with flying colors.
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/openbabel/package.py80
-rw-r--r--var/spack/repos/builtin/packages/openbabel/python-3.6-rtld-global.patch42
-rw-r--r--var/spack/repos/builtin/packages/openbabel/testpdbformat-tabs-to-spaces.patch47
3 files changed, 169 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/openbabel/package.py b/var/spack/repos/builtin/packages/openbabel/package.py
new file mode 100644
index 0000000000..014d1183f3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openbabel/package.py
@@ -0,0 +1,80 @@
+##############################################################################
+# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+from spack import *
+
+
+class Openbabel(CMakePackage):
+ """Open Babel is a chemical toolbox designed to speak the many languages
+ of chemical data. It's an open, collaborative project allowing anyone to
+ search, convert, analyze, or store data from molecular modeling, chemistry,
+ solid-state materials, biochemistry, or related areas."""
+
+ homepage = "http://openbabel.org/wiki/Main_Page"
+ url = "https://sourceforge.net/projects/openbabel/files/openbabel/2.4.1/openbabel-2.4.1.tar.gz"
+
+ version('2.4.1', 'd9defcd7830b0592fece4fe54a137b99')
+
+ variant('python', default=True, description='Build Python bindings')
+
+ extends('python', when='+python')
+
+ depends_on('python', type=('build', 'run'), when='+python')
+ depends_on('cmake@2.4.8:', type='build')
+ depends_on('pkg-config', type='build')
+ depends_on('cairo') # required to support PNG depiction
+ depends_on('eigen@3.0:') # required if using the language bindings
+ depends_on('libxml2') # required to read/write CML files, XML formats
+ depends_on('zlib') # required to support reading gzipped files
+
+ # Needed for Python 3.6 support
+ patch('python-3.6-rtld-global.patch', when='@:2.4.1+python')
+
+ # Convert tabs to spaces. Allows unit tests to pass
+ patch('testpdbformat-tabs-to-spaces.patch', when='@:2.4.1')
+
+ def cmake_args(self):
+ spec = self.spec
+ args = []
+
+ if '+python' in spec:
+ args.extend([
+ '-DPYTHON_BINDINGS=ON',
+ '-DPYTHON_EXECUTABLE={0}'.format(spec['python'].command.path),
+ ])
+ else:
+ args.append('-DPYTHON_BINDINGS=OFF')
+
+ return args
+
+ @run_after('install')
+ @on_package_attributes(run_tests=True)
+ def check_install(self):
+ obabel = Executable(join_path(self.prefix.bin, 'obabel'))
+ obabel('-:C1=CC=CC=C1Br', '-omol')
+
+ if '+python' in self.spec:
+ # Attempt to import the Python modules
+ for module in ['openbabel', 'pybel']:
+ python('-c', 'import {0}'.format(module))
diff --git a/var/spack/repos/builtin/packages/openbabel/python-3.6-rtld-global.patch b/var/spack/repos/builtin/packages/openbabel/python-3.6-rtld-global.patch
new file mode 100644
index 0000000000..68cd56a1f5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openbabel/python-3.6-rtld-global.patch
@@ -0,0 +1,42 @@
+The DLFCN module has been removed from python 3.6, as it is not
+documented. Same funtionality can be achive with the os module
+that makes available the os.RTLD_GLOBAL variable for dlopen()
+
+See https://github.com/openbabel/openbabel/pull/372 for the
+source of this patch. The original patch only affects the CMake
+file that SWIG uses to generate openbabel.py. This patch also
+includes changes to openbabel.py.
+
+diff -Nuar a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
+--- a/scripts/CMakeLists.txt 2017-05-17 10:02:54.408527942 -0500
++++ b/scripts/CMakeLists.txt 2017-05-17 10:04:09.701598715 -0500
+@@ -81,11 +81,8 @@
+ COMMAND ${SWIG_EXECUTABLE} -python -c++ -small -O -templatereduce -naturalvar -I${openbabel_SOURCE_DIR}/include -I${openbabel_BINARY_DIR}/include -o ${openbabel_SOURCE_DIR}/scripts/python/openbabel-python.cpp ${eigen_define} -outdir ${openbabel_SOURCE_DIR}/scripts/python ${openbabel_SOURCE_DIR}/scripts/openbabel-python.i
+ COMMAND ${CMAKE_COMMAND} -E echo "import sys" > ob.py
+ COMMAND ${CMAKE_COMMAND} -E echo "if sys.platform.find('linux'\) != -1:" >> ob.py
+- COMMAND ${CMAKE_COMMAND} -E echo " try:" >> ob.py
+- COMMAND ${CMAKE_COMMAND} -E echo " import dl" >> ob.py
+- COMMAND ${CMAKE_COMMAND} -E echo " except ImportError:" >> ob.py
+- COMMAND ${CMAKE_COMMAND} -E echo " import DLFCN as dl" >> ob.py
+- COMMAND ${CMAKE_COMMAND} -E echo " sys.setdlopenflags(sys.getdlopenflags() | dl.RTLD_GLOBAL)" >> ob.py
++ COMMAND ${CMAKE_COMMAND} -E echo " import os" >> ob.py
++ COMMAND ${CMAKE_COMMAND} -E echo " sys.setdlopenflags(sys.getdlopenflags() | os.RTLD_GLOBAL)" >> ob.py
+ COMMAND cat ${openbabel_SOURCE_DIR}/scripts/python/openbabel.py >> ob.py
+ COMMAND ${CMAKE_COMMAND} -E copy ob.py ${openbabel_SOURCE_DIR}/scripts/python/openbabel.py
+ COMMAND ${CMAKE_COMMAND} -E remove ob.py
+diff -Nuar a/scripts/python/openbabel.py b/scripts/python/openbabel.py
+--- a/scripts/python/openbabel.py 2017-05-17 10:02:54.398527534 -0500
++++ b/scripts/python/openbabel.py 2017-05-17 10:04:26.705292138 -0500
+@@ -1,10 +1,7 @@
+ import sys
+ if sys.platform.find('linux') != -1:
+- try:
+- import dl
+- except ImportError:
+- import DLFCN as dl
+- sys.setdlopenflags(sys.getdlopenflags() | dl.RTLD_GLOBAL)
++ import os
++ sys.setdlopenflags(sys.getdlopenflags() | os.RTLD_GLOBAL)
+ # This file was automatically generated by SWIG (http://www.swig.org).
+ # Version 3.0.10
+ #
diff --git a/var/spack/repos/builtin/packages/openbabel/testpdbformat-tabs-to-spaces.patch b/var/spack/repos/builtin/packages/openbabel/testpdbformat-tabs-to-spaces.patch
new file mode 100644
index 0000000000..0a71a72e01
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openbabel/testpdbformat-tabs-to-spaces.patch
@@ -0,0 +1,47 @@
+From 08cd38485d4cf1df8802da540f3018921dbc735e Mon Sep 17 00:00:00 2001
+From: "Adam J. Stewart" <ajstewart426@gmail.com>
+Date: Wed, 17 May 2017 10:56:23 -0500
+Subject: [PATCH] Convert tabs to spaces in testpdbformat.py
+
+See https://github.com/openbabel/openbabel/pull/1568
+
+---
+ test/testpdbformat.py | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/test/testpdbformat.py b/test/testpdbformat.py
+index 40bd316..ceb8496 100644
+--- a/test/testpdbformat.py
++++ b/test/testpdbformat.py
+@@ -24,12 +24,12 @@ class TestPDBFormat(BaseTest):
+
+ def testInsertionCodes(self):
+ """
+- Testing a PDB entry with insertion codes to distinguish residues
+- upon conversion to FASTA.
++ Testing a PDB entry with insertion codes to distinguish residues
++ upon conversion to FASTA.
+ """
+ self.canFindExecutable("babel")
+
+- self.entryPDBwithInsertioncodes="""ATOM 406 N VAL L 29 58.041 17.797 48.254 1.00 0.00 N
++ self.entryPDBwithInsertioncodes="""ATOM 406 N VAL L 29 58.041 17.797 48.254 1.00 0.00 N
+ ATOM 407 CA VAL L 29 57.124 18.088 47.170 1.00 0.00 C
+ ATOM 408 C VAL L 29 55.739 17.571 47.538 1.00 0.00 C
+ ATOM 409 O VAL L 29 55.535 16.362 47.550 1.00 0.00 O
+@@ -100,9 +100,9 @@ ATOM 473 HE1 TYR L 32 48.512 15.775 42.066 1.00 0.00 H
+ ATOM 474 HE2 TYR L 32 48.145 19.172 44.648 1.00 0.00 H
+ ATOM 475 HH TYR L 32 46.462 17.658 44.280 1.00 0.00 H
+ """
+- output, error = run_exec(self.entryPDBwithInsertioncodes,
+- "babel -ipdb -ofasta")
+- self.assertEqual(output.rstrip().rsplit("\n",1)[1], "VSSSY")
++ output, error = run_exec(self.entryPDBwithInsertioncodes,
++ "babel -ipdb -ofasta")
++ self.assertEqual(output.rstrip().rsplit("\n",1)[1], "VSSSY")
+
+ if __name__ == "__main__":
+ testsuite = []
+--
+2.9.4
+