From patchwork Fri Oct 7 15:22:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Elsing X-Patchwork-Id: 43197 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 5642527BBEA; Fri, 7 Oct 2022 17:03:49 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,SPF_HELO_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 5455D27BBE9 for ; Fri, 7 Oct 2022 17:03:48 +0100 (BST) Received: from localhost ([::1]:46060 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ogppD-0000TK-Fy for patchwork@mira.cbaines.net; Fri, 07 Oct 2022 12:03:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57162) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ogpBr-0002g2-Ix for guix-patches@gnu.org; Fri, 07 Oct 2022 11:23:07 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:38119) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ogpBr-0005rB-67 for guix-patches@gnu.org; Fri, 07 Oct 2022 11:23:07 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ogpBr-0005pJ-1f for guix-patches@gnu.org; Fri, 07 Oct 2022 11:23:07 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#58261] [PATCH v2 13/13] gnu: Add rdkit. Resent-From: David Elsing Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 07 Oct 2022 15:23:07 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 58261 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 58261@debbugs.gnu.org Cc: David Elsing Received: via spool by 58261-submit@debbugs.gnu.org id=B58261.166515616522263 (code B ref 58261); Fri, 07 Oct 2022 15:23:07 +0000 Received: (at 58261) by debbugs.gnu.org; 7 Oct 2022 15:22:45 +0000 Received: from localhost ([127.0.0.1]:37184 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ogpBU-0005n1-Cr for submit@debbugs.gnu.org; Fri, 07 Oct 2022 11:22:45 -0400 Received: from mout01.posteo.de ([185.67.36.65]:53329) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ogpBS-0005mM-8n for 58261@debbugs.gnu.org; Fri, 07 Oct 2022 11:22:43 -0400 Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id B50B1240028 for <58261@debbugs.gnu.org>; Fri, 7 Oct 2022 17:22:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1665156156; bh=UO0TEB24lbPfq5qh5fHxSQUZxOutbmYY9XFml3nPFg0=; h=From:To:Cc:Subject:Date:From; b=c/haFPVSCprujF/carsC0xml/jjtN9CgVdpjo5MJ0Q0tD4QCB/BgI/Cm3UVlyh7jl 1Or0o67cp/Q0KTEnQwNmfqCBE+ExiYEkWHKylKM6AXNgb2nyg949AX48DTQs1blpvY +N1dlIgFWPRkT/ZhLpluEKqDn93OtOWamI81vw2KqJckfz6DkBdOnRLKOQjerLdWt2 Oxjc5Gtxe5MmfsBKOVlh6X6c/oD3+PKghEh7+UtWAONtv2uyKIwGQx49+9r1vSbEjr zfq0TXRt3L6Z7ZhZNA8q+IakfM9OnEItyLjcKtd9IUj7POgbIllpW6sYsqnbSB9kgp DcTFCfGmVvMEQ== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4MkX9m1Ff1z9rxP; Fri, 7 Oct 2022 17:22:36 +0200 (CEST) From: David Elsing Date: Fri, 7 Oct 2022 15:22:26 +0000 Message-Id: <20221007152226.362-2-david.elsing@posteo.net> In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/packages/chemistry.scm (rdkit): New variable. --- gnu/packages/chemistry.scm | 178 ++++++++++++++++++ .../rdkit-cmake-external-dependencies.patch | 102 ++++++++++ 2 files changed, 280 insertions(+) create mode 100644 gnu/packages/patches/rdkit-cmake-external-dependencies.patch diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm index 43953238cd..4b34a38797 100644 --- a/gnu/packages/chemistry.scm +++ b/gnu/packages/chemistry.scm @@ -34,6 +34,7 @@ (define-module (gnu packages chemistry) #:use-module (gnu packages algebra) #:use-module (gnu packages autotools) #:use-module (gnu packages backup) + #:use-module (gnu packages base) #:use-module (gnu packages bison) #:use-module (gnu packages boost) #:use-module (gnu packages check) @@ -41,10 +42,12 @@ (define-module (gnu packages chemistry) #:use-module (gnu packages cpp) #:use-module (gnu packages documentation) #:use-module (gnu packages flex) + #:use-module (gnu packages fonts) #:use-module (gnu packages fontutils) #:use-module (gnu packages gcc) #:use-module (gnu packages gl) #:use-module (gnu packages graphviz) + #:use-module (gnu packages gtk) #:use-module (gnu packages gv) #:use-module (gnu packages image) #:use-module (gnu packages maths) @@ -56,6 +59,7 @@ (define-module (gnu packages chemistry) #:use-module (gnu packages qt) #:use-module (gnu packages serialization) #:use-module (gnu packages sphinx) + #:use-module (gnu packages sqlite) #:use-module (gnu packages stb) #:use-module (gnu packages tex) #:use-module (gnu packages web) @@ -1101,3 +1105,177 @@ (define-public ringdecomposerlib unique ring families, relevant cycles, the smallest set of smallest rings and other ring topology descriptions.") (license license:bsd-3))) + +(define-public rdkit + (package + (name "rdkit") + (version "2022.03.5") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/rdkit/rdkit") + (commit + (string-append + "Release_" (string-replace-substring version "." "_"))))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "19idgilabh04cbr1qj6zgrgsfjm248mmfz6fsr0smrd68d0xnml9")) + (patches + (search-patches "rdkit-cmake-external-dependencies.patch")) + (modules '((guix build utils))) + (snippet + #~(begin + ;; Remove pickle files (only used in tests), + ;; as they are compiled programs + (for-each + (lambda (name) + (display (string-append name "\n")) + (delete-file name)) + (find-files "." "\\.pkl(\\.gz)?$")) + ;; Remove SQLite data files (can be generated) + (delete-file "Data/RDData.sqlt") + (delete-file "Data/RDTests.sqlt"))))) + (build-system cmake-build-system) + (arguments + (list + #:imported-modules (append %cmake-build-system-modules + '((guix build python-build-system))) + #:modules '((guix build cmake-build-system) + (guix build utils) + ((guix build python-build-system) + #:select (add-installed-pythonpath))) + #:configure-flags + #~(list + "-DRDK_BUILD_AVALON_SUPPORT=ON" + "-DRDK_BUILD_CAIRO_SUPPORT=ON" + "-DRDK_BUILD_CPP_TESTS=ON" + "-DRDK_BUILD_FREESASA_SUPPORT=ON" + "-DRDK_BUILD_INCHI_SUPPORT=ON" + "-DRDK_BUILD_YAEHMOP_SUPPORT=ON" + (string-append "-DCATCH_DIR=" + #$(this-package-native-input "catch2") + "/include/catch2") + "-DRDK_INSTALL_DEV_COMPONENT=ON" + "-DRDK_INSTALL_INTREE=OFF" + "-DRDK_INSTALL_STATIC_LIBS=OFF" + (string-append + "-DRDK_OPTIMIZE_POPCNT=" + #$(let ((system (or (%current-target-system) + (%current-system)))) + (cond + ((string-prefix? "x86_64" system) "ON") + ((string-prefix? "i686" system) "ON") + (else "OFF")))) + "-DRDK_USE_BOOST_IOSTREAMS=ON" + "-DRDK_USE_FLEXBISON=ON") + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'copy-external-dependencies + (lambda _ + (symlink + (string-append + #$(this-package-input "font-comic-neue") + "/share/fonts/truetype/ComicNeue-Regular.ttf") + "Data/Fonts/ComicNeue-Regular.ttf"))) + (add-after 'copy-external-dependencies 'patch-source + (lambda _ + (substitute* "External/AvalonTools/CMakeLists.txt" + (("^if\\(NOT RDK_BUILD" orig) + (string-append "if(0)\n" orig)) + (("include_directories.*AVALON_SRC_PATH.*") + (string-append "endif()\ninclude_directories(" + #$avalontoolkit "/include/avalontoolkit)\n")) + (("LINK_LIBRARIES avalon_clib") + (string-append + "LINK_LIBRARIES -L" #$avalontoolkit "/lib -lavalontoolkit"))) + (let ((port + (open-file "External/RingFamilies/dummy.cpp" "w"))) + (display "" port) + (close port)) + (let ((port + (open-file "External/RingFamilies/CMakeLists.txt" "w"))) + (display (string-append + "rdkit_library(RingDecomposerLib dummy.cpp SHARED" + " LINK_LIBRARIES -lRingDecomposerLib)\n" + "set(RDK_URF_LIBS RingDecomposerLib CACHE STRING \"\" FORCE)\n") + port) + (close port)) + (substitute* "Code/GraphMol/MolInterchange/CMakeLists.txt" + (("if\\(NOT" orig) + (string-append "if(0)\n" orig)) + (("^include_directories.*") "endif()\n")) + (substitute* "External/YAeHMOP/EHTTools.cpp" + (("") "")))) + (add-after 'unpack 'fix-inchi-include + (lambda _ + (substitute* "Code/cmake/Modules/FindInchi.cmake" + (("inchi_api.h.*\\)") "inchi/inchi_api.h)") + (("INCHI_LIBRARY NAMES.*\\)") + "INCHI_LIBRARY NAMES inchi PATH_SUFFIXES inchi)") + (("find_library" prev) + (string-append + "list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.1)\n" + prev))) + (substitute* "External/INCHI-API/inchi.cpp" + (("") "")))) + (add-before 'build 'enable-bytecode-determinism + (lambda _ + (setenv "PYTHONHASHSEED" "0") + (setenv "PYTHONDONTWRITEBYTECODE" "1"))) + (add-after 'install 'pre-check + (lambda* (#:key inputs outputs #:allow-other-keys) + (with-directory-excursion "../source" + (invoke "sqlite3" "Data/RDData.sqlt" + ".read rdkit/Dbase/test_data/RDData.sqlite") + (invoke "sqlite3" "Data/RDTests.sqlt" + ".read rdkit/Dbase/test_data/RDTests.sqlite") + (setenv "RDBASE" (canonicalize-path "."))) + (add-installed-pythonpath inputs outputs))) + (delete 'check) + (add-after 'pre-check 'check + (lambda* (#:key tests? parallel-tests? #:allow-other-keys) + (when tests? + (let ((job-count (number->string + (if parallel-tests? (parallel-job-count) 1)))) + (invoke + "ctest" "-j" job-count + "-E" (string-append + "(" (string-join + '(;; need pickled data + "(pyDiscreteValueVect" "pySparseIntVect" + "graphmoltestPickler" "pyPartialCharges" + "substructLibraryTest" "pyFeatures" + "pythonTestDirML" "pythonTestDirChem" + ;; Catching Python exception fails + "pyRanker)") "|") ")"))))))))) + (native-inputs + (list bison + boost + catch2 + eigen + flex + freesasa + pkg-config + rapidjson + tar)) + (inputs + (list avalontoolkit + cairo + coordgenlibs + font-comic-neue + freetype + inchi + maeparser + python + ringdecomposerlib + sqlite + yaehmop)) + (propagated-inputs + (list python-numpy python-cairocffi python-pillow)) + (home-page "https://rdkit.org/") + (synopsis "Collection of cheminformatics software") + (description "RDKit is a C++ and Python library for cheminformatics, which +includes (among other things) the analysis and modification of molecules in 2D +and 3D and descriptor generation for machine learning.") + (license license:bsd-3))) diff --git a/gnu/packages/patches/rdkit-cmake-external-dependencies.patch b/gnu/packages/patches/rdkit-cmake-external-dependencies.patch new file mode 100644 index 0000000000..5b73864f51 --- /dev/null +++ b/gnu/packages/patches/rdkit-cmake-external-dependencies.patch @@ -0,0 +1,102 @@ +diff -ur a/External/FreeSASA/CMakeLists.txt b/External/FreeSASA/CMakeLists.txt +--- a/External/FreeSASA/CMakeLists.txt ++++ b/External/FreeSASA/CMakeLists.txt +@@ -10,7 +10,7 @@ + endif() + endif() + +-if(needDownload) ++if(FALSE) + # don't actually use the md5 here + set(FREESASA_VERSION "2.0.3") + set(FREESASA_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/freesasa-${FREESASA_VERSION}") +@@ -66,24 +66,24 @@ + endif() + + set (freesasa_h ${FREESASA_SRC_DIR}/src/freesasa.h) +-file(READ ${freesasa_h} freesasa_h_data) ++#file(READ ${freesasa_h} freesasa_h_data) + string(REGEX REPLACE "(#include )" "\\1\n#include " freesasa_h_data "${freesasa_h_data}") + string(REGEX REPLACE "([^R][^D][^K][^I][^T][^_][^F][^R][^E][^E][^S][^A][^S][^A][^_][^C][^L][^I][^B][^_][^E][^X][^P][^O][^R][^T][^ ])(extern const)" "\\1RDKIT_FREESASA_CLIB_EXPORT \\2" freesasa_h_data "${freesasa_h_data}") +-file(WRITE ${freesasa_h} "${freesasa_h_data}") ++#file(WRITE ${freesasa_h} "${freesasa_h_data}") + + add_definitions(-DUSE_THREADS=0) + add_definitions(-DUSE_JSON=0) + add_definitions(-DUSE_XML=0) +-rdkit_library(freesasa_clib ${freesasa_clib_srcs}) +-target_compile_definitions(freesasa_clib PRIVATE RDKIT_FREESASALIB_BUILD) ++#rdkit_library(freesasa_clib ${freesasa_clib_srcs}) ++#target_compile_definitions(freesasa_clib PRIVATE RDKIT_FREESASALIB_BUILD) + + if((MSVC AND RDK_INSTALL_DLLS_MSVC) OR ((NOT MSVC) AND WIN32)) + set_target_properties(freesasa_clib PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + endif() +-include_directories("${FREESASA_SRC_DIR}/src") ++#include_directories("${FREESASA_SRC_DIR}/src") + + rdkit_library(FreeSASALib RDFreeSASA.cpp SHARED +- LINK_LIBRARIES freesasa_clib GraphMol ) ++ LINK_LIBRARIES -lfreesasa GraphMol ) + target_compile_definitions(FreeSASALib PRIVATE RDKIT_FREESASALIB_BUILD) + + rdkit_headers(RDFreeSASA.h DEST GraphMol) +diff -ur a/External/YAeHMOP/CMakeLists.txt b/External/YAeHMOP/CMakeLists.txt +--- a/External/YAeHMOP/CMakeLists.txt ++++ b/External/YAeHMOP/CMakeLists.txt +@@ -18,32 +18,32 @@ + + include_directories( ${RDKit_ExternalDir}/YAeHMOP ) + +-ExternalProject_Add(yaehmop_project +- GIT_REPOSITORY https://github.com/greglandrum/yaehmop.git +- GIT_TAG master +- UPDATE_COMMAND "" +- PATCH_COMMAND "" +- PREFIX ${CMAKE_CURRENT_SOURCE_DIR} +- SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/yaehmop" +- SOURCE_SUBDIR "tightbind" +- CMAKE_ARGS -DUSE_BLAS_LAPACK=OFF -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} +- TEST_COMMAND "") +- +-include_directories(${PROJECT_BINARY_DIR}/include) +-link_directories(${PROJECT_BINARY_DIR}/lib) +-link_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/yaehmop_project-build) +- +-set(EHT_PARAM_FILE ${CMAKE_CURRENT_SOURCE_DIR}/yaehmop/tightbind/eht_parms.dat ) +-install(FILES ${EHT_PARAM_FILE} +- DESTINATION ${RDKit_ShareDir}/Data +- COMPONENT data) ++#ExternalProject_Add(yaehmop_project ++# GIT_REPOSITORY https://github.com/greglandrum/yaehmop.git ++# GIT_TAG master ++# UPDATE_COMMAND "" ++# PATCH_COMMAND "" ++# PREFIX ${CMAKE_CURRENT_SOURCE_DIR} ++# SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/yaehmop" ++# SOURCE_SUBDIR "tightbind" ++# CMAKE_ARGS -DUSE_BLAS_LAPACK=OFF -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ++# TEST_COMMAND "") ++ ++#include_directories(${PROJECT_BINARY_DIR}/include) ++#link_directories(${PROJECT_BINARY_DIR}/lib) ++#link_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/yaehmop_project-build) ++ ++#set(EHT_PARAM_FILE ${CMAKE_CURRENT_SOURCE_DIR}/yaehmop/tightbind/eht_parms.dat ) ++#install(FILES ${EHT_PARAM_FILE} ++# DESTINATION ${RDKit_ShareDir}/Data ++# COMPONENT data) + +-message("YAeHMOP include_dirs: ${PROJECT_BINARY_DIR}/include") +-message("YAeHMOP link_dirs: ${PROJECT_BINARY_DIR}/lib ${CMAKE_CURRENT_SOURCE_DIR}/src/yaehmop_project-build") ++#message("YAeHMOP include_dirs: ${PROJECT_BINARY_DIR}/include") ++#message("YAeHMOP link_dirs: ${PROJECT_BINARY_DIR}/lib ${CMAKE_CURRENT_SOURCE_DIR}/src/yaehmop_project-build") + +-rdkit_library(EHTLib EHTTools.cpp SHARED LINK_LIBRARIES yaehmop_eht GraphMol ) ++rdkit_library(EHTLib EHTTools.cpp SHARED LINK_LIBRARIES -lyaehmop_eht GraphMol ) + target_compile_definitions(EHTLib PRIVATE RDKIT_EHTLIB_BUILD) +-add_dependencies(EHTLib yaehmop_project) ++#add_dependencies(EHTLib yaehmop_project) + rdkit_headers(EHTTools.h DEST GraphMol) + rdkit_catch_test(testEHTLib1 test1.cpp + LINK_LIBRARIES EHTLib FileParsers SmilesParse )