Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ lib
2, buildPythonPackage
3, fetchFromGitHub
4, cmake
5, comic-neue
6, boost
7, catch2
8, inchi
9, cairo
10, eigen
11, python
12, rapidjson
13, maeparser
14, coordgenlibs
15, numpy
16, pandas
17, pillow
18}:
19let
20 external = {
21 avalon = fetchFromGitHub {
22 owner = "rohdebe1";
23 repo = "ava-formake";
24 rev = "AvalonToolkit_2.0.2";
25 hash = "sha256-YI39OknHiSyArNGqRKrSVzEJnFc1xJ0W3UcTZrTKeME=";
26 };
27 yaehmop = fetchFromGitHub {
28 owner = "greglandrum";
29 repo = "yaehmop";
30 rev = "v2022.09.1";
31 hash = "sha256-QMnc5RyHlY3giw9QmrkGntiA+Srs7OhCIKs9GGo5DfQ=";
32 };
33 freesasa = fetchFromGitHub {
34 owner = "mittinatten";
35 repo = "freesasa";
36 rev = "2.0.3";
37 hash = "sha256-7E+imvfDAJFnXQRWb5hNaSu+Xrf9NXeIKc9fl+o3yHQ=";
38 };
39 };
40in
41buildPythonPackage rec {
42 pname = "rdkit";
43 version = "2022.09.1";
44 format = "other";
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 hash = "sha256-AaawjCv3/ShByOKU0c37/hjuyfD7NhFC8UngDoG7C0s=";
55 };
56
57 unpackPhase = ''
58 cp -r $src/* .
59 find . -type d -exec chmod +w {} +
60
61 mkdir External/AvalonTools/avalon
62 ln -s ${external.avalon}/* External/AvalonTools/avalon
63
64 mkdir External/YAeHMOP/yaehmop
65 ln -s ${external.yaehmop}/* External/YAeHMOP/yaehmop
66
67 mkdir -p External/FreeSASA/freesasa
68 cp -r ${external.freesasa}/* External/FreeSASA/freesasa
69 chmod +w External/FreeSASA/freesasa/src
70 cp External/FreeSASA/freesasa2.c External/FreeSASA/freesasa/src
71
72 ln -s ${rapidjson} External/rapidjson-1.1.0
73 ln -s ${comic-neue}/share/fonts/truetype/ComicNeue-Regular.ttf Data/Fonts/
74 '';
75
76 nativeBuildInputs = [
77 cmake
78 ];
79
80 buildInputs = [
81 boost
82 cairo
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 # Since we can't expand with bash in cmakeFlags
99 cmakeFlags="$cmakeFlags -DPYTHON_NUMPY_INCLUDE_PATH=$(${python}/bin/python -c 'import numpy; print(numpy.get_include())')"
100 cmakeFlags="$cmakeFlags -DFREESASA_DIR=$PWD/External/FreeSASA/freesasa"
101 cmakeFlags="$cmakeFlags -DFREESASA_SRC_DIR=$PWD/External/FreeSASA/freesasa"
102 cmakeFlags="$cmakeFlags -DAVALONTOOLS_DIR=$PWD/External/AvalonTools/avalon"
103 '';
104
105 cmakeFlags = [
106 "-DCATCH_DIR=${catch2}/include/catch2"
107 "-DINCHI_LIBRARY=${inchi}/lib/libinchi.so"
108 "-DINCHI_LIBRARIES=${inchi}/lib/libinchi.so"
109 "-DINCHI_INCLUDE_DIR=${inchi}/include/inchi"
110 "-DEIGEN3_INCLUDE_DIR=${eigen}/include/eigen3"
111 "-DRDK_INSTALL_INTREE=OFF"
112 "-DRDK_INSTALL_STATIC_LIBS=OFF"
113 "-DRDK_BUILD_INCHI_SUPPORT=ON"
114 "-DRDK_BUILD_AVALON_SUPPORT=ON"
115 "-DRDK_BUILD_FREESASA_SUPPORT=ON"
116 "-DRDK_BUILD_YAEHMOP_SUPPORT=ON"
117 "-DRDK_BUILD_MAEPARSER_SUPPORT=ON"
118 "-DMAEPARSER_DIR=${maeparser}"
119 "-DRDK_BUILD_COORDGEN_SUPPORT=ON"
120 "-DCOORDGEN_DIR=${coordgenlibs}"
121 "-DRDK_USE_URF=OFF"
122 "-DRDK_USE_FLEXBISON=OFF"
123 "-DRDK_BUILD_CAIRO_SUPPORT=ON"
124 "-DRDK_BUILD_THREADSAFE_SSS=ON"
125 "-DRDK_TEST_MULTITHREADED=ON"
126 "-DRDK_BUILD_CPP_TESTS=ON"
127 "-DRDK_TEST_MULTITHREADED=ON"
128 "-DPYTHON_EXECUTABLE=${python}/bin/python"
129 "-DBOOST_ROOT=${boost}"
130 "-DBoost_NO_SYSTEM_PATHS=ON"
131 "-DBoost_NO_BOOST_CMAKE=TRUE"
132 "-DCMAKE_SKIP_BUILD_RPATH=ON" # fails to find libs in pythonImportsCheckPhase otherwise
133 ];
134
135 checkPhase = ''
136 export QT_QPA_PLATFORM='offscreen'
137 export RDBASE=$(realpath ..)
138 export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
139 (cd $RDBASE/rdkit/Chem && python $RDBASE/rdkit/TestRunner.py test_list.py)
140 '';
141
142 pythonImportsCheck = [
143 "rdkit"
144 "rdkit.Chem"
145 "rdkit.Chem.AllChem"
146 ];
147
148 meta = with lib; {
149 description = "Open source toolkit for cheminformatics";
150 maintainers = [ maintainers.rmcgibbo ];
151 license = licenses.bsd3;
152 homepage = "https://www.rdkit.org";
153 };
154}