Package: guix-patches;
Reported by: David Elsing <david.elsing <at> posteo.net>
Date: Mon, 3 Oct 2022 00:06:02 UTC
Severity: normal
Tags: patch
Done: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
Bug is archived. No further changes may be made.
Message #92 received at 58261 <at> debbugs.gnu.org (full text, mbox):
From: David Elsing <david.elsing <at> posteo.net> To: Liliana Marie Prikler <liliana.prikler <at> ist.tugraz.at>, 58261 <at> debbugs.gnu.org Subject: Re: [PATCH 11/11] gnu: Add rdkit. Date: Fri, 07 Oct 2022 15:12:44 +0000
Liliana Marie Prikler <liliana.prikler <at> ist.tugraz.at> writes: > Am Montag, dem 03.10.2022 um 00:19 +0000 schrieb David Elsing: >> * gnu/packages/chemistry.scm (rdkit): New variable. >> --- >> gnu/packages/chemistry.scm | 198 >> ++++++++++++++++++ >> .../rdkit-cmake-external-dependencies.patch | 102 +++++++++ >> 2 files changed, 300 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 a39deff4bf..869cf264e3 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 web) >> #:use-module (gnu packages xml) >> @@ -899,3 +903,197 @@ (define-public yaehmop-tightbind >> (description "@code{YAeHMOP} contains a program and library for >> performing >> extended Hückel calculations.") >> (license license:bsd-2))) >> + >> +(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") >> + #t)))) >> + (build-system cmake-build-system) >> + (native-inputs >> + `(("bison" ,bison) >> + ("boost" ,boost) >> + ("catch2" ,catch2) >> + ("eigen" ,eigen) >> + ("flex" ,flex) >> + ("freesasa" ,freesasa) >> + ("pkg-config" ,pkg-config) >> + ("rapidjson" ,rapidjson) >> + ("tar" ,tar) >> + ("avalontoolkit-src" >> + ,(let ((version "1.2.0")) >> + (origin >> + (method url-fetch) >> + (uri (string-append >> + >> "http://sourceforge.net/projects/avalontoolkit/files/" >> + "AvalonToolkit_" (substring version 0 3) >> "/AvalonToolkit_" >> + version ".source.tar")) >> + (sha256 >> + (base32 >> + >> "0rnnyy6axs2da7aa4q6l30ldavbk49v6l22llj1adn74h1i67bpv")) >> + (modules '((guix build utils) (ice-9 ftw) (srfi srfi- >> 26))) >> + (snippet >> + #~(begin >> + (chdir "..") >> + (delete-file-recursively "StandardFiles") >> + (delete-file-recursively >> "SourceDistribution/java") >> + #t))))) >> + ("ringdecomposerlib-src" >> + ,(let ((version "1.1.3")) >> + (origin >> + (method git-fetch) >> + (uri (git-reference >> + (url >> "https://github.com/rareylab/RingDecomposerLib") >> + (commit (string-append "v" version "_rdkit")))) >> + (file-name (git-file-name name version)) >> + (sha256 >> + (base32 >> + >> "1rxzs2wpkkdi40wdzxc4sn0brk7dm7ivgqyfh38gf2f5c7pbg0wi"))))))) >> + (inputs >> + (list cairo >> + coordgenlibs >> + font-comic-neue >> + freetype >> + inchi >> + maeparser >> + python >> + sqlite >> + yaehmop-tightbind)) >> + (propagated-inputs >> + (list python-numpy python-cairocffi python-pillow)) >> + (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") >> + (symlink #$(this-package-native-input "rapidjson") >> + "External/rapidjson-1.1.0") >> + (invoke "tar" "xvf" >> + #$(this-package-native-input "avalontoolkit- >> src") >> + "-C" "External/AvalonTools") >> + (symlink #$(this-package-native-input >> "ringdecomposerlib-src") >> + "External/RingFamilies/RingDecomposerLib") >> + #t)) > You might want to try unbundling those. Either way, you should find a > solution that doesn't depend on native-input labels. Ok, I unbundled them, but the package definitions became a bit long. :) Do you think it is ok like that? >> + (add-after 'copy-external-dependencies 'patch-source >> + (lambda _ >> + (with-directory-excursion "External/AvalonTools" >> + (invoke "patch" "-p0" "-i" >> + "AvalonToolkit_1.2_patch.txt")) >> + (substitute* "External/YAeHMOP/EHTTools.cpp" >> + (("<yaehmop/tightbind/bind.h>") "<yaehmop/bind.h>")) >> + #t)) > See my comment on yaehmop. >> + (add-after 'unpack 'create-sqlite-data-files >> + (lambda _ >> + (invoke "sqlite3" "Data/RDData.sqlt" >> + ".read rdkit/Dbase/test_data/RDData.sqlite") >> + (invoke "sqlite3" "Data/RDTests.sqlt" >> + ".read rdkit/Dbase/test_data/RDTests.sqlite") >> + #t)) > Do you only need this for tests? If so, do this in a pre-check phase. Ok. >> + (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" >> + (("<inchi_api.h>") "<inchi/inchi_api.h>")) >> + #t)) >> + (add-before 'build 'enable-bytecode-determinism >> + (lambda _ >> + (setenv "PYTHONHASHSEED" "0") >> + (setenv "PYTHONDONTWRITEBYTECODE" "1") >> + #t)) >> + (delete 'check) >> + (add-after 'install 'check >> + (lambda* (#:key inputs outputs tests? parallel-tests? >> + #:allow-other-keys) >> + (when tests? >> + (let >> + ((job-count (number->string >> + (or (and parallel-tests? >> + (parallel-job-count)) >> + 1)))) >> + (setenv "RDBASE" (canonicalize-path "../source")) >> + (add-installed-pythonpath inputs outputs) > This line should also be pre-check, maybe even these two lines. >> + (invoke "ctest" >> + "-j" job-count >> + "-E" (string-append >> + ;; need pickled data >> + "(pyDiscreteValueVect" >> "|pySparseIntVect" >> + "|graphmoltestPickler" >> "|pyPartialCharges" >> + "|substructLibraryTest" >> "|pyFeatures" >> + "|pythonTestDirML" >> "|pythonTestDirChem" >> + ;; Catching Python exception fails >> + "|pyRanker)")))) > Use string-join instead. Thanks! >> + #t))))) >> + (home-page "https://rdkit.org/") >> + (synopsis "Open-Source Cheminformatics Software") > "Open-Source" is meaningless in Guix. >> + (description "RDKit is a collection of cheminformatics and >> +machine-learning software written in C++ and Python.") > Not particularly descriptive, but then again, neither is rdkit itself. > > Cheers
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.