1{ lib
2, buildPythonPackage
3, fetchFromGitHub
4, fetchzip
5, cmake
6, boost
7, catch
8, inchi
9, cairo
10, eigen
11, python
12, rapidjson
13, maeparser
14, coordgenlibs
15, numpy
16, pandas
17, pillow
18, git
19}:
20let
21 external = {
22 avalon = fetchzip {
23 url = "http://sourceforge.net/projects/avalontoolkit/files/AvalonToolkit_1.2/AvalonToolkit_1.2.0.source.tar";
24 sha256 = "0nhxfxckb5a5qs0g148f55yarhncqjgjzcvdskkv9rxi2nrs7160";
25 stripRoot = false;
26 };
27 yaehmop = fetchFromGitHub {
28 owner = "greglandrum";
29 repo = "yaehmop";
30 rev = "1b13b52e2738a77715b1bad876e3b4e93f2b5269";
31 sha256 = "1jp7wz8win4mgwxkaz2gnrgsaaqgln04n2lwgfr96isdv1klf62d";
32 };
33 freesasa = fetchFromGitHub
34 {
35 owner = "mittinatten";
36 repo = "freesasa";
37 rev = "2.0.3";
38 sha256 = "0x686zm9fpyg5647fdgxnxgbwav99nc6ymh4bmkr2063yyda4kzc";
39 };
40 };
41in
42buildPythonPackage rec {
43 pname = "rdkit";
44 version = "2020.09.5";
45
46 src =
47 let
48 versionTag = lib.replaceStrings [ "." ] [ "_" ] version;
49 in
50 fetchFromGitHub {
51 owner = pname;
52 repo = pname;
53 rev = "Release_${versionTag}";
54 sha256 = "1ycbjia223d0w9xiwk36x2vkdidsx198rzkfyxz48cbax9vvklzq";
55 };
56
57 unpackPhase = ''
58 mkdir -p source/External/AvalonTools/avalon source/External/YAeHMOP/yaehmop source/External/FreeSASA/freesasa
59 cp -r ${src}/* source
60 cp -r ${external.avalon}/SourceDistribution/* source/External/AvalonTools/avalon
61 cp -r ${external.yaehmop}/* source/External/YAeHMOP/yaehmop
62 cp -r ${external.freesasa}/* source/External/FreeSASA/freesasa
63
64 find source -type d -exec chmod 755 {} +
65 cp source/External/FreeSASA/freesasa2.c source/External/FreeSASA/freesasa/src
66 ln -s ${rapidjson} source/External/rapidjson-1.1.0
67 '';
68
69 sourceRoot = "source";
70
71 nativeBuildInputs = [
72 cmake
73 git # required by freesasa
74 ];
75
76 buildInputs = [
77 boost
78 catch
79 inchi
80 eigen
81 cairo
82 rapidjson
83 ];
84
85 propagatedBuildInputs = [
86 numpy
87 pandas
88 pillow
89 ];
90
91 hardeningDisable = [ "format" ]; # required by yaehmop
92
93 dontUseSetuptoolsBuild = true;
94 dontUsePipInstall = true;
95 dontUseSetuptoolsCheck = true;
96
97 preConfigure = ''
98 # Don't want this contacting the git remote during the build
99 substituteInPlace External/YAeHMOP/CMakeLists.txt --replace \
100 'GIT_TAG master' 'DOWNLOAD_COMMAND true'
101
102 # Since we can't expand with bash in cmakeFlags
103 cmakeFlags="$cmakeFlags -DPYTHON_NUMPY_INCLUDE_PATH=$(${python}/bin/python -c 'import numpy; print(numpy.get_include())')"
104 cmakeFlags="$cmakeFlags -DFREESASA_DIR=$PWD/External/FreeSASA/freesasa"
105 cmakeFlags="$cmakeFlags -DFREESASA_SRC_DIR=$PWD/External/FreeSASA/freesasa"
106 cmakeFlags="$cmakeFlags -DAVALONTOOLS_DIR=$PWD/External/AvalonTools/avalon"
107 '';
108
109 cmakeFlags = [
110 "-DCATCH_DIR=${catch}/include/catch"
111 "-DINCHI_LIBRARY=${inchi}/lib/libinchi.so"
112 "-DINCHI_LIBRARIES=${inchi}/lib/libinchi.so"
113 "-DINCHI_INCLUDE_DIR=${inchi}/include/inchi"
114 "-DEIGEN3_INCLUDE_DIR=${eigen}/include/eigen3"
115 "-DRDK_INSTALL_INTREE=OFF"
116 "-DRDK_INSTALL_STATIC_LIBS=OFF"
117 "-DRDK_BUILD_INCHI_SUPPORT=ON"
118 "-DRDK_BUILD_AVALON_SUPPORT=ON"
119 "-DRDK_BUILD_FREESASA_SUPPORT=ON"
120 "-DRDK_BUILD_YAEHMOP_SUPPORT=ON"
121 "-DRDK_BUILD_MAEPARSER_SUPPORT=ON"
122 "-DMAEPARSER_DIR=${maeparser}"
123 "-DRDK_BUILD_COORDGEN_SUPPORT=ON"
124 "-DCOORDGEN_DIR=${coordgenlibs}"
125 "-DRDK_USE_URF=OFF"
126 "-DRDK_USE_FLEXBISON=OFF"
127 "-DRDK_BUILD_CAIRO_SUPPORT=ON"
128 "-DRDK_BUILD_THREADSAFE_SSS=ON"
129 "-DRDK_TEST_MULTITHREADED=ON"
130 "-DRDK_BUILD_CPP_TESTS=ON"
131 "-DRDK_TEST_MULTITHREADED=ON"
132 "-DPYTHON_EXECUTABLE=${python}/bin/python"
133 "-DBOOST_ROOT=${boost}"
134 "-DBoost_NO_SYSTEM_PATHS=ON"
135 "-DBoost_NO_BOOST_CMAKE=TRUE"
136 ];
137
138 checkPhase = ''
139 export QT_QPA_PLATFORM='offscreen'
140 export RDBASE=$(realpath ..)
141 export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
142 (cd $RDBASE/rdkit/Chem && python $RDBASE/rdkit/TestRunner.py test_list.py)
143 '';
144
145 pythonImportsCheck = [
146 "rdkit"
147 "rdkit.Chem"
148 "rdkit.Chem.AllChem"
149 ];
150
151 meta = with lib; {
152 description = "Open source toolkit for cheminformatics";
153 maintainers = [ maintainers.rmcgibbo ];
154 license = licenses.bsd3;
155 homepage = "https://www.rdkit.org";
156 };
157}