From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <gentoo-commits+bounces-1349711-garchives=archives.gentoo.org@lists.gentoo.org> Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id AD554158086 for <garchives@archives.gentoo.org>; Wed, 15 Dec 2021 10:09:26 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 16CC32BC026; Wed, 15 Dec 2021 10:09:20 +0000 (UTC) Received: from smtp.gentoo.org (mail.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id CE2222BC026 for <gentoo-commits@lists.gentoo.org>; Wed, 15 Dec 2021 10:09:19 +0000 (UTC) Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id D0D4D343716 for <gentoo-commits@lists.gentoo.org>; Wed, 15 Dec 2021 10:09:10 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 5B301D0 for <gentoo-commits@lists.gentoo.org>; Wed, 15 Dec 2021 10:09:09 +0000 (UTC) From: "Andrew Ammerlaan" <andrewammerlaan@gentoo.org> To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Andrew Ammerlaan" <andrewammerlaan@gentoo.org> Message-ID: <1639562941.e4d21e84be5fb16ae0d7f9bee7f7ab33fcb93eee.andrewammerlaan@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: sci-chemistry/openbabel/, sci-chemistry/openbabel/files/ X-VCS-Repository: repo/gentoo X-VCS-Files: sci-chemistry/openbabel/Manifest sci-chemistry/openbabel/files/openbabel-python.cmake sci-chemistry/openbabel/metadata.xml sci-chemistry/openbabel/openbabel-9999.ebuild X-VCS-Directories: sci-chemistry/openbabel/files/ sci-chemistry/openbabel/ X-VCS-Committer: andrewammerlaan X-VCS-Committer-Name: Andrew Ammerlaan X-VCS-Revision: e4d21e84be5fb16ae0d7f9bee7f7ab33fcb93eee X-VCS-Branch: master Date: Wed, 15 Dec 2021 10:09:09 +0000 (UTC) Precedence: bulk List-Post: <mailto:gentoo-commits@lists.gentoo.org> List-Help: <mailto:gentoo-commits+help@lists.gentoo.org> List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org> List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org> List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org> X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: c2d51536-4ea0-4093-98a4-24af01210481 X-Archives-Hash: 09291fe2bc808535371e3cae85b981d1 commit: e4d21e84be5fb16ae0d7f9bee7f7ab33fcb93eee Author: Peter Levine <plevine457 <AT> gmail <DOT> com> AuthorDate: Sun Mar 21 07:54:12 2021 +0000 Commit: Andrew Ammerlaan <andrewammerlaan <AT> gentoo <DOT> org> CommitDate: Wed Dec 15 10:09:01 2021 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e4d21e84 sci-chemistry/openbabel: Add openbabel-9999 Add an up-to-date live ebuild with a templated versioning scheme, and match the bindings to USE flags. Package-Manager: Portage-3.0.17, Repoman-3.0.2 Signed-off-by: Peter Levine <plevine457 <AT> gmail.com> Signed-off-by: Andrew Ammerlaan <andrewammerlaan <AT> gentoo.org> sci-chemistry/openbabel/Manifest | 1 + .../openbabel/files/openbabel-python.cmake | 104 ++++++++ sci-chemistry/openbabel/metadata.xml | 4 + sci-chemistry/openbabel/openbabel-9999.ebuild | 272 +++++++++++++++++++++ 4 files changed, 381 insertions(+) diff --git a/sci-chemistry/openbabel/Manifest b/sci-chemistry/openbabel/Manifest index b22751d4a860..ac334bea30ea 100644 --- a/sci-chemistry/openbabel/Manifest +++ b/sci-chemistry/openbabel/Manifest @@ -1,2 +1,3 @@ DIST openbabel-2.4.1.tar.gz 11618304 BLAKE2B 8fc051e83add9be6456e281a109bd6bbec282a64ffc83309819f0decbf167b4914fbb7f1966e95e103f268754045b804317f51c79a952ace707c6af2bd320125 SHA512 427e678f0a911bd27b9a8a05e60b6e09f113be4e5dd180daaf80c28d06368e52b57501261755ab3817a8d31f2754db24471fd0ceee706d029386d6f70800e9c6 +DIST openbabel.jpg 12159 BLAKE2B b701df2b8c29df607dc2bd3997a282aa9a726d56c789ff2db900d33234dc691f76b6af12a4c9ccda4f09984504b863c40c39e8bf91058939996714ede2dd37c7 SHA512 998ea526c8c92f87dd203527fdd9f4e001357e951409209f41ab68e0b730fe12d97f9079c12ca289be413854ea2abcf8bb691ae5af823a6f29d6a590e1a3e2b0 DIST openbabel.png 29060 BLAKE2B 8d217d92125cc73462437411dd4e0cc05179cb0934f5ed15a307acc6b549b8ebab250a48a05ef7657f48c6df394f37da9b659de61efb1477b79b573a5b393ad3 SHA512 bbcaaa37663b526c9038ccb9edaf05ccc3ad1a861739a737f05f363098d8402a10b36e341fcc0aca636e809c6c32db99bf987b41719a0c756bf5e31444d3eb70 diff --git a/sci-chemistry/openbabel/files/openbabel-python.cmake b/sci-chemistry/openbabel/files/openbabel-python.cmake new file mode 100644 index 000000000000..425b4656a9d2 --- /dev/null +++ b/sci-chemistry/openbabel/files/openbabel-python.cmake @@ -0,0 +1,104 @@ +# The following is a cmake fragment taken from scripts/CMakeLists.txt and +# edited for Gentoo python multibuild compatibility. + +if (PYTHON_BINDINGS) + # Tags should be edited to reflect the active python implementation + set(EPYTHON @@EPYTHON@@) + set(PYTHON_INCUDE_DIR @@PYTHON_INCUDE_DIR@@) + set(PYTHON_LIBS @@PYTHON_LIBS@@) + set(PYTHON_SITEDIR @@PYTHON_SITEDIR@@) + + include_directories(${PYTHON_INCUDE_DIR}) + + add_custom_command( + OUTPUT ${CMAKE_SOURCE_DIR}/scripts/${EPYTHON}/openbabel-python.cpp ${CMAKE_SOURCE_DIR}/scripts/${EPYTHON}/openbabel.py + COMMAND ${SWIG_EXECUTABLE} -python -c++ -small -O -templatereduce -naturalvar -I${CMAKE_SOURCE_DIR}/include -I${CMAKE_BINARY_DIR}/include -o ${CMAKE_SOURCE_DIR}/scripts/${EPYTHON}/openbabel-python.cpp ${eigen_define} -outdir ${CMAKE_SOURCE_DIR}/scripts/${EPYTHON} ${CMAKE_SOURCE_DIR}/scripts/openbabel-python.i + MAIN_DEPENDENCY openbabel-python.i + VERBATIM + ) + + configure_file(${CMAKE_SOURCE_DIR}/scripts/python/openbabel/__init__.py.in + ${CMAKE_BINARY_DIR}/scripts/${EPYTHON}/openbabel/__init__.py) + + add_library(bindings_python_${EPYTHON} MODULE ${CMAKE_SOURCE_DIR}/scripts/${EPYTHON}/openbabel-python.cpp) + target_link_libraries(bindings_python_${EPYTHON} ${PYTHON_LIBS} ${BABEL_LIBRARY}) + + set_target_properties(bindings_python_${EPYTHON} + PROPERTIES + OUTPUT_NAME _openbabel + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/scripts/${EPYTHON}/openbabel + PREFIX "" + SUFFIX .so ) + + add_dependencies(bindings_python_${EPYTHON} openbabel) + + install(TARGETS bindings_python_${EPYTHON} + LIBRARY DESTINATION ${PYTHON_SITEDIR}/openbabel + COMPONENT bindings_python) + install(FILES ${CMAKE_BINARY_DIR}/scripts/${EPYTHON}/openbabel/__init__.py + DESTINATION ${PYTHON_SITEDIR}/openbabel + COMPONENT bindings_python) + install(FILES ${CMAKE_SOURCE_DIR}/scripts/${EPYTHON}/openbabel.py + DESTINATION ${PYTHON_SITEDIR}/openbabel + COMPONENT bindings_python) + install(FILES ${CMAKE_SOURCE_DIR}/scripts/python/openbabel/pybel.py + DESTINATION ${PYTHON_SITEDIR}/openbabel + COMPONENT bindings_python) + + if (ENABLE_TESTS) + # Make sure all module files are together in the same directory for testing + add_custom_command(TARGET bindings_python_${EPYTHON} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/scripts/${EPYTHON}/openbabel.py ${CMAKE_BINARY_DIR}/scripts/${EPYTHON}/openbabel/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/scripts/python/openbabel/pybel.py ${CMAKE_BINARY_DIR}/scripts/${EPYTHON}/openbabel/) + set(TEST_SOURCE_DIR ${CMAKE_SOURCE_DIR}/test) + # define TESTDATADIR for tests that need input files + add_definitions(-DTESTDATADIR="${TEST_SOURCE_DIR}/files/") + # define FORMATDIR for location of format plugin binaries + set(FORMATDIR "${CMAKE_BINARY_DIR}/lib${LIB_SUFFIX}/") + add_definitions(-DFORMATDIR="${FORMATDIR}/") + include_directories(${TEST_SOURCE_DIR}) + + # The macro is modified from cmake/modules/UsePythonTest.cmake + MACRO(ADD_PYTHON_TEST TESTNAME FILENAME) + GET_SOURCE_FILE_PROPERTY(loc ${FILENAME} LOCATION) + STRING(REGEX REPLACE ";" " " wo_semicolumn "${ARGN}") + FILE(WRITE ${CMAKE_BINARY_DIR}/test/${TESTNAME}.cmake +" + MESSAGE(\"${PYTHONPATH}\") + EXECUTE_PROCESS( + COMMAND ${EPYTHON} ${loc} ${wo_semicolumn} + RESULT_VARIABLE import_res + OUTPUT_VARIABLE import_output + ERROR_VARIABLE import_output + ) + + # Pass the output back to ctest + IF(import_output) + MESSAGE(\${import_output}) + ENDIF(import_output) + IF(import_res) + MESSAGE(SEND_ERROR \${import_res}) + ENDIF(import_res) +" + ) + ADD_TEST(${TESTNAME} ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/test/${TESTNAME}.cmake) + ENDMACRO(ADD_PYTHON_TEST) + + set(pybindtests + bindings + _pybel + example + obconv_writers + cdjsonformat + pcjsonformat + roundtrip + ) + foreach(pybindtest ${pybindtests}) + ADD_PYTHON_TEST(pybindtest_${pybindtest}_${EPYTHON} ${TEST_SOURCE_DIR}/test${pybindtest}.py) + set_tests_properties(pybindtest_${pybindtest}_${EPYTHON} PROPERTIES + ENVIRONMENT "PYTHONPATH=${CMAKE_BINARY_DIR}/scripts/${EPYTHON}:${CMAKE_BINARY_DIR}/lib${LIB_SUFFIX};LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/scripts/${EPYTHON}:${CMAKE_BINARY_DIR}/lib${LIB_SUFFIX}:\$ENV{LD_LIBRARY_PATH};BABEL_LIBDIR=${CMAKE_BINARY_DIR}/lib${LIB_SUFFIX}/;BABEL_DATADIR=${CMAKE_SOURCE_DIR}/data" + FAIL_REGULAR_EXPRESSION "ERROR;FAIL;Test failed" + ) + endforeach(pybindtest ${pybindtests}) + endif (ENABLE_TESTS) +endif(PYTHON_BINDINGS) diff --git a/sci-chemistry/openbabel/metadata.xml b/sci-chemistry/openbabel/metadata.xml index 88ffa5eb106b..f31c73d435ac 100644 --- a/sci-chemistry/openbabel/metadata.xml +++ b/sci-chemistry/openbabel/metadata.xml @@ -14,4 +14,8 @@ <upstream> <remote-id type="sourceforge">openbabel</remote-id> </upstream> + <use> + <flag name="inchi">Build support for IUPAC International Chemical Identifier format</flag> + <flag name="json">Build support for JSON formats (ChemDoodle, PubChem, etc...)</flag> + </use> </pkgmetadata> diff --git a/sci-chemistry/openbabel/openbabel-9999.ebuild b/sci-chemistry/openbabel/openbabel-9999.ebuild new file mode 100644 index 000000000000..8f231a4565a2 --- /dev/null +++ b/sci-chemistry/openbabel/openbabel-9999.ebuild @@ -0,0 +1,272 @@ +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +PYTHON_COMPAT=( python3_{7,8,9} ) +WX_GTK_VER=3.0-gtk3 + +inherit cmake desktop flag-o-matic perl-functions python-r1 toolchain-funcs wxwidgets xdg-utils + +DESCRIPTION="Interconverts file formats used in molecular modeling" +HOMEPAGE="https://openbabel.org/" + +if [[ "${PV}" == *9999* ]]; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/openbabel/${PN}.git" +else + if [[ "${PV}" == *_p* ]]; then # eg., openbabel-3.1.1_p20210325 + # Set to commit hash + OPENBABEL_COMMIT= + SRC_URI="https://github.com/${PN}/${PN}/archive/${OPENBABEL_COMMIT}.tar.gz -> ${P}.tar.gz" + S="${WORKDIR}/${PN}-${OPENBABEL_COMMIT}" + else + MY_P="${PN}-$(ver_rs 1- -)" + SRC_URI="https://github.com/${PN}/${PN}/archive/${MY_P}.tar.gz -> ${P}.tar.gz" + S="${WORKDIR}/${PN}-${MY_P}" + fi + KEYWORDS="~amd64 ~arm ~x86 ~amd64-linux ~x86-linux ~ppc-macos" +fi + +SRC_URI="${SRC_URI} + https://openbabel.org/docs/dev/_static/babel130.png -> ${PN}.png + http://openbabel.org/OBTitle.jpg -> ${PN}.jpg" + +# See src/CMakeLists.txt for LIBRARY_VERSION +SLOT="0/7.0.0" +LICENSE="GPL-2" +IUSE="cpu_flags_arm_neon cpu_flags_x86_sse2 cpu_flags_x86_sse4_2 doc examples +inchi json minimal openmp perl png python test wxwidgets" + +RESTRICT="!test? ( test )" + +# Inaccurate dependency logic upstream +REQUIRED_USE=" + python? ( ${PYTHON_REQUIRED_USE} ) + test? ( inchi json !minimal wxwidgets ) +" + +BDEPEND=" + dev-lang/perl + doc? ( + app-doc/doxygen + dev-texlive/texlive-latex + ) + perl? ( >=dev-lang/swig-2 ) + python? ( >=dev-lang/swig-2 ) + test? ( dev-lang/python ) +" + +COMMON_DEPEND=" + dev-cpp/eigen:3 + dev-libs/libxml2:2 + sys-libs/zlib:= + inchi? ( sci-libs/inchi ) + json? ( >=dev-libs/rapidjson-1.1.0 ) + png? ( x11-libs/cairo ) + python? ( ${PYTHON_DEPS} ) + wxwidgets? ( x11-libs/wxGTK:${WX_GTK_VER}[X] ) +" + +DEPEND=" + ${COMMON_DEPEND} + perl? ( dev-lang/perl ) +" + +RDEPEND=" + ${COMMON_DEPEND} + perl? ( + dev-lang/perl:= + !sci-chemistry/openbabel-perl + ) +" + +pkg_setup() { + use openmp && tc-check-openmp +} + +prepare_python_bindings() { + mkdir -p scripts/${EPYTHON} || die + # Appends to scripts/CMakeLists.txt, substituting the correct tags, for + # each valid python implementation, + cat "${FILESDIR}"/${PN}-python.cmake | \ + sed -e "s|@@EPYTHON@@|${EPYTHON}|" \ + -e "s|@@PYTHON_INCUDE_DIR@@|$(python_get_includedir)|" \ + -e "s|@@PYTHON_LIBS@@|$(python_get_LIBS)|" \ + -e "s|@@PYTHON_SITEDIR@@|$(python_get_sitedir)|" >> \ + scripts/CMakeLists.txt || die +} + +src_prepare() { + cmake_src_prepare + + if use perl; then + perl_set_version + + sed -e "/\${LIB_INSTALL_DIR}\/auto/s|\${LIB_INSTALL_DIR}|${VENDOR_ARCH}|" \ + -e "/\${LIB_INSTALL_DIR}\/Chemistry/s|\${LIB_INSTALL_DIR}|${VENDOR_ARCH}|" \ + -i scripts/CMakeLists.txt || die + fi + + if use python; then + # Skip the python bindings sections as we'll append our own + sed -e '/^if (PYTHON_BINDINGS)$/s|PYTHON_BINDINGS|false|' \ + -i {scripts,test}/CMakeLists.txt || die + if use test; then + # Problems with testbindings built with -O2 + local test_skip="@unittest.skip('Similar to Issue #2138')" + sed -e "/def testTemplates/s|^| ${test_skip}\\n|" \ + -i test/testbindings.py || die + test_skip="@unittest.skip('Similar to Issue #2246')" + sed -e "/^def test_write_string/s|^|${test_skip}\\n|" \ + -i test/testobconv_writers.py || die + fi + python_foreach_impl prepare_python_bindings + fi + + # Remove dependency automagic + if ! use png; then + sed -e '/^find_package(Cairo/d' -i CMakeLists.txt || die + fi + if ! use wxwidgets; then + sed -e '/^find_package(wxWidgets/d' -i CMakeLists.txt || die + fi + if ! use inchi; then + sed -e '/^else()$/s|else\(\)|elseif\(false\)|' \ + -i cmake/modules/FindInchi.cmake || die + fi + + # Don't install example bins to /usr/bin + if use examples; then + sed -e "/RUNTIME DESTINATION/s|bin|share/doc/${PF}/examples|" \ + -i doc/examples/CMakeLists.txt || die + fi + + # boost is only used if building with gcc-3.x, which isn't supported in + # Gentoo. Still, it shouldn't look for, and include, its headers + sed -e '/find_package(Boost/d' -i {{tools,src}/,}CMakeLists.txt || die +} + +src_configure() { + if use json; then + # -DOPTIMIZE_NATIVE=ON also forces -march=native so use + # cpu_flags to set defines instead + use cpu_flags_x86_sse2 && append-cppflags -DRAPIDJSON_SSE2 + use cpu_flags_x86_sse4_2 && append-cppflags -DRAPIDJSON_SSE42 + use cpu_flags_arm_neon && append-cppflags -DRAPIDJSON_NEON + fi + + use wxwidgets && setup-wxwidgets + + use_bindings() { + (use perl || use python) && (echo 'yes' || die) || (echo 'no' || die) + } + + local mycmakeargs=( + -DBUILD_DOCS=$(usex doc) + -DBUILD_EXAMPLES=$(usex examples) + -DBUILD_GUI=$(usex wxwidgets) + -DENABLE_OPENMP=$(usex openmp) + -DENABLE_TESTS=$(usex test) + -DMINIMAL_BUILD=$(usex minimal) + # Set this, otherwise it defaults to true and forces WITH_INCHI=true + -DOPENBABEL_USE_SYSTEM_INCHI=$(usex inchi) + -DOPTIMIZE_NATIVE=OFF + -DPERL_BINDINGS=$(usex perl) + -DPYTHON_BINDINGS=$(usex python) + -DRUN_SWIG=$(use_bindings) + -DWITH_COORDGEN=false + -DWITH_INCHI=$(usex inchi) + -DWITH_JSON=$(usex json) + -DWITH_MAEPARSER=false + ) + + if use test; then + # Help cmake find the python interpreter when dev-lang/python-exec is built + # without native-symlinks support. + python_setup + mycmakeargs+=( -DPYTHON_EXECUTABLE="${PYTHON}" ) + fi + + cmake_src_configure +} + +src_test() { + # Wierd deadlock causes system_load to keep rising + cmake_src_test -j1 +} + +openbabel-optimize() { + python_optimize "${D}/$(python_get_sitedir)"/openbabel || die +} + +src_install() { + cmake_src_install + + docinto html + for x in doc/*.html; do + [[ ${x} != doc/api*.html ]] && dodoc ${x} + done + # Rendered in some html pages + newdoc "${DISTDIR}"/${PN}.png babel130.png + newdoc "${DISTDIR}"/${PN}.jpg OBTitle.jpg + + if use doc; then + cmake_src_install docs + docinto html/API + dodoc -r doc/API/html/. + fi + + if use examples; then + # no compression since we want ready-to-run scripts + docompress -x /usr/share/doc/${PF}/examples + + # ${PV} doesn't correspond to the internal BABEL_VERSION for + # live or patch release builds so we grep it + local babel_ver=$( + grep '^#define BABEL_VERSION' < \ + "${BUILD_DIR}"/include/openbabel/babelconfig.h | \ + cut -d \" -f 2 || die + ) + docinto examples/povray + dodoc doc/dioxin.* doc/README*.pov* + # Needed by the povray example + dosym ../../../../${PN}/${babel_ver}/babel_povray3.inc \ + /usr/share/doc/${PF}/examples/povray/babel31.inc + + fi + + if use perl; then + docinto / + newdoc scripts/perl/Changes Changes.perl + newdoc scripts/perl/README README.perl + if use examples; then + docinto examples/perl + dodoc -r scripts/perl/examples/. + fi + fi + + if use python; then + python_foreach_impl openbabel-optimize + docinto / + newdoc scripts/python/README.rst README.python.rst + docinto html + dodoc scripts/python/*.html + if use examples; then + docinto examples/python + dodoc -r scripts/python/examples/. + fi + fi + + if use wxwidgets; then + make_desktop_entry obgui "Open Babel" ${PN} + doicon "${DISTDIR}"/${PN}.png + fi +} + +pkg_postinst() { + use wxwidgets && xdg_desktop_database_update +} + +pkg_postrm() { + use wxwidgets && xdg_desktop_database_update +}