Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 lib, 3 stdenv, 4 buildPythonPackage, 5 fetchFromGitHub, 6 cmake, 7 comic-neue, 8 boost, 9 catch2_3, 10 inchi, 11 cairo, 12 eigen, 13 python, 14 rapidjson, 15 maeparser, 16 coordgenlibs, 17 numpy, 18 pandas, 19 pillow, 20 memorymappingHook, 21}: 22let 23 external = { 24 avalon = fetchFromGitHub { 25 owner = "rdkit"; 26 repo = "ava-formake"; 27 rev = "AvalonToolkit_2.0.5-pre.3"; 28 hash = "sha256-2MuFZgRIHXnkV7Nc1da4fa7wDx57VHUtwLthrmjk+5o="; 29 }; 30 yaehmop = fetchFromGitHub { 31 owner = "greglandrum"; 32 repo = "yaehmop"; 33 rev = "v2023.03.1"; 34 hash = "sha256-K9//cDN69U4sLETfIZq9NUaBE3RXOReH53qfiCzutqM="; 35 }; 36 freesasa = fetchFromGitHub { 37 owner = "mittinatten"; 38 repo = "freesasa"; 39 rev = "2.0.3"; 40 hash = "sha256-7E+imvfDAJFnXQRWb5hNaSu+Xrf9NXeIKc9fl+o3yHQ="; 41 }; 42 }; 43in 44buildPythonPackage rec { 45 pname = "rdkit"; 46 version = "2023.09.5"; 47 pyproject = false; 48 49 src = 50 let 51 versionTag = lib.replaceStrings [ "." ] [ "_" ] version; 52 in 53 fetchFromGitHub { 54 owner = pname; 55 repo = pname; 56 rev = "Release_${versionTag}"; 57 hash = "sha256-ZYNAHNBHQPx8rBJSvEWFEpdSpYyXcoqJ+nBA7tpHwQs="; 58 }; 59 60 unpackPhase = '' 61 cp -r $src/* . 62 find . -type d -exec chmod +w {} + 63 64 mkdir External/AvalonTools/avalon 65 # In buildPhase, CMake patches the file in this directory 66 # see https://github.com/rdkit/rdkit/pull/5928 67 cp -r ${external.avalon}/* External/AvalonTools/avalon 68 69 mkdir External/YAeHMOP/yaehmop 70 ln -s ${external.yaehmop}/* External/YAeHMOP/yaehmop 71 72 mkdir -p External/FreeSASA/freesasa 73 cp -r ${external.freesasa}/* External/FreeSASA/freesasa 74 chmod +w External/FreeSASA/freesasa/src 75 cp External/FreeSASA/freesasa2.c External/FreeSASA/freesasa/src 76 77 ln -s ${rapidjson} External/rapidjson-1.1.0 78 ln -s ${comic-neue}/share/fonts/truetype/ComicNeue-Regular.ttf Data/Fonts/ 79 ''; 80 81 nativeBuildInputs = [ cmake ]; 82 83 buildInputs = [ 84 boost 85 cairo 86 catch2_3 87 ] ++ lib.optionals (stdenv.system == "x86_64-darwin") [ memorymappingHook ]; 88 89 propagatedBuildInputs = [ 90 numpy 91 pandas 92 pillow 93 ]; 94 95 hardeningDisable = [ "format" ]; # required by yaehmop 96 97 dontUseSetuptoolsBuild = true; 98 dontUsePipInstall = true; 99 dontUseSetuptoolsCheck = true; 100 101 preConfigure = '' 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 "-DINCHI_LIBRARY=${inchi}/lib/libinchi.so" 111 "-DINCHI_LIBRARIES=${inchi}/lib/libinchi.so" 112 "-DINCHI_INCLUDE_DIR=${inchi}/include/inchi" 113 "-DEIGEN3_INCLUDE_DIR=${eigen}/include/eigen3" 114 "-DRDK_INSTALL_INTREE=OFF" 115 "-DRDK_INSTALL_STATIC_LIBS=OFF" 116 "-DRDK_BUILD_INCHI_SUPPORT=ON" 117 "-DRDK_BUILD_AVALON_SUPPORT=ON" 118 "-DRDK_BUILD_FREESASA_SUPPORT=ON" 119 "-DRDK_BUILD_YAEHMOP_SUPPORT=ON" 120 "-DRDK_BUILD_MAEPARSER_SUPPORT=ON" 121 "-DMAEPARSER_DIR=${maeparser}" 122 "-DRDK_BUILD_COORDGEN_SUPPORT=ON" 123 "-DCOORDGEN_DIR=${coordgenlibs}" 124 "-DRDK_USE_URF=OFF" 125 "-DRDK_USE_FLEXBISON=OFF" 126 "-DRDK_BUILD_CAIRO_SUPPORT=ON" 127 "-DRDK_BUILD_THREADSAFE_SSS=ON" 128 "-DRDK_TEST_MULTITHREADED=ON" 129 "-DRDK_BUILD_CPP_TESTS=ON" 130 "-DRDK_TEST_MULTITHREADED=ON" 131 "-DPYTHON_EXECUTABLE=${python}/bin/python" 132 "-DBOOST_ROOT=${boost}" 133 "-DBoost_NO_SYSTEM_PATHS=ON" 134 "-DBoost_NO_BOOST_CMAKE=TRUE" 135 "-DCMAKE_SKIP_BUILD_RPATH=ON" # fails to find libs in pythonImportsCheckPhase otherwise 136 ]; 137 138 checkPhase = '' 139 export QT_QPA_PLATFORM='offscreen' 140 export RDBASE=$(realpath ..) 141 export PYTHONPATH="$out/${python.sitePackages}:$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 = with maintainers; [ 154 rmcgibbo 155 natsukium 156 ]; 157 license = licenses.bsd3; 158 homepage = "https://www.rdkit.org"; 159 changelog = "https://github.com/rdkit/rdkit/releases/tag/${src.rev}"; 160 }; 161}