at 23.11-beta 4.4 kB view raw
1{ lib 2, stdenv 3, buildPythonPackage 4, fetchFromGitHub 5, cmake 6, comic-neue 7, boost 8, catch2 9, inchi 10, cairo 11, eigen 12, python 13, rapidjson 14, maeparser 15, coordgenlibs 16, numpy 17, pandas 18, pillow 19, memorymappingHook 20}: 21let 22 external = { 23 avalon = fetchFromGitHub { 24 owner = "rdkit"; 25 repo = "ava-formake"; 26 rev = "AvalonToolkit_2.0.5-pre.3"; 27 hash = "sha256-2MuFZgRIHXnkV7Nc1da4fa7wDx57VHUtwLthrmjk+5o="; 28 }; 29 yaehmop = fetchFromGitHub { 30 owner = "greglandrum"; 31 repo = "yaehmop"; 32 rev = "v2023.03.1"; 33 hash = "sha256-K9//cDN69U4sLETfIZq9NUaBE3RXOReH53qfiCzutqM="; 34 }; 35 freesasa = fetchFromGitHub { 36 owner = "mittinatten"; 37 repo = "freesasa"; 38 rev = "2.0.3"; 39 hash = "sha256-7E+imvfDAJFnXQRWb5hNaSu+Xrf9NXeIKc9fl+o3yHQ="; 40 }; 41 }; 42in 43buildPythonPackage rec { 44 pname = "rdkit"; 45 version = "2023.09.1"; 46 format = "other"; 47 48 src = 49 let 50 versionTag = lib.replaceStrings [ "." ] [ "_" ] version; 51 in 52 fetchFromGitHub { 53 owner = pname; 54 repo = pname; 55 rev = "Release_${versionTag}"; 56 hash = "sha256-qaYD/46oCTnso1FbD08zr2JuatKmSSqNBhOYlfeIiAA="; 57 }; 58 59 unpackPhase = '' 60 cp -r $src/* . 61 find . -type d -exec chmod +w {} + 62 63 mkdir External/AvalonTools/avalon 64 # In buildPhase, CMake patches the file in this directory 65 # see https://github.com/rdkit/rdkit/pull/5928 66 cp -r ${external.avalon}/* External/AvalonTools/avalon 67 68 mkdir External/YAeHMOP/yaehmop 69 ln -s ${external.yaehmop}/* External/YAeHMOP/yaehmop 70 71 mkdir -p External/FreeSASA/freesasa 72 cp -r ${external.freesasa}/* External/FreeSASA/freesasa 73 chmod +w External/FreeSASA/freesasa/src 74 cp External/FreeSASA/freesasa2.c External/FreeSASA/freesasa/src 75 76 ln -s ${rapidjson} External/rapidjson-1.1.0 77 ln -s ${comic-neue}/share/fonts/truetype/ComicNeue-Regular.ttf Data/Fonts/ 78 ''; 79 80 nativeBuildInputs = [ 81 cmake 82 ]; 83 84 buildInputs = [ 85 boost 86 cairo 87 ] ++ lib.optionals (stdenv.system == "x86_64-darwin") [ 88 memorymappingHook 89 ]; 90 91 propagatedBuildInputs = [ 92 numpy 93 pandas 94 pillow 95 ]; 96 97 hardeningDisable = [ "format" ]; # required by yaehmop 98 99 dontUseSetuptoolsBuild = true; 100 dontUsePipInstall = true; 101 dontUseSetuptoolsCheck = true; 102 103 preConfigure = '' 104 # Since we can't expand with bash in cmakeFlags 105 cmakeFlags="$cmakeFlags -DPYTHON_NUMPY_INCLUDE_PATH=$(${python}/bin/python -c 'import numpy; print(numpy.get_include())')" 106 cmakeFlags="$cmakeFlags -DFREESASA_DIR=$PWD/External/FreeSASA/freesasa" 107 cmakeFlags="$cmakeFlags -DFREESASA_SRC_DIR=$PWD/External/FreeSASA/freesasa" 108 cmakeFlags="$cmakeFlags -DAVALONTOOLS_DIR=$PWD/External/AvalonTools/avalon" 109 ''; 110 111 cmakeFlags = [ 112 "-DCATCH_DIR=${catch2}/include/catch2" 113 "-DINCHI_LIBRARY=${inchi}/lib/libinchi.so" 114 "-DINCHI_LIBRARIES=${inchi}/lib/libinchi.so" 115 "-DINCHI_INCLUDE_DIR=${inchi}/include/inchi" 116 "-DEIGEN3_INCLUDE_DIR=${eigen}/include/eigen3" 117 "-DRDK_INSTALL_INTREE=OFF" 118 "-DRDK_INSTALL_STATIC_LIBS=OFF" 119 "-DRDK_BUILD_INCHI_SUPPORT=ON" 120 "-DRDK_BUILD_AVALON_SUPPORT=ON" 121 "-DRDK_BUILD_FREESASA_SUPPORT=ON" 122 "-DRDK_BUILD_YAEHMOP_SUPPORT=ON" 123 "-DRDK_BUILD_MAEPARSER_SUPPORT=ON" 124 "-DMAEPARSER_DIR=${maeparser}" 125 "-DRDK_BUILD_COORDGEN_SUPPORT=ON" 126 "-DCOORDGEN_DIR=${coordgenlibs}" 127 "-DRDK_USE_URF=OFF" 128 "-DRDK_USE_FLEXBISON=OFF" 129 "-DRDK_BUILD_CAIRO_SUPPORT=ON" 130 "-DRDK_BUILD_THREADSAFE_SSS=ON" 131 "-DRDK_TEST_MULTITHREADED=ON" 132 "-DRDK_BUILD_CPP_TESTS=ON" 133 "-DRDK_TEST_MULTITHREADED=ON" 134 "-DPYTHON_EXECUTABLE=${python}/bin/python" 135 "-DBOOST_ROOT=${boost}" 136 "-DBoost_NO_SYSTEM_PATHS=ON" 137 "-DBoost_NO_BOOST_CMAKE=TRUE" 138 "-DCMAKE_SKIP_BUILD_RPATH=ON" # fails to find libs in pythonImportsCheckPhase otherwise 139 ]; 140 141 checkPhase = '' 142 export QT_QPA_PLATFORM='offscreen' 143 export RDBASE=$(realpath ..) 144 export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH" 145 (cd $RDBASE/rdkit/Chem && python $RDBASE/rdkit/TestRunner.py test_list.py) 146 ''; 147 148 pythonImportsCheck = [ 149 "rdkit" 150 "rdkit.Chem" 151 "rdkit.Chem.AllChem" 152 ]; 153 154 meta = with lib; { 155 description = "Open source toolkit for cheminformatics"; 156 maintainers = with maintainers; [ rmcgibbo natsukium ]; 157 license = licenses.bsd3; 158 homepage = "https://www.rdkit.org"; 159 changelog = "https://github.com/rdkit/rdkit/releases/tag/${src.rev}"; 160 }; 161}