at master 330 lines 7.7 kB view raw
1{ 2 version, 3 sourceSha256, 4 patches ? [ ], 5}: 6{ 7 lib, 8 newScope, 9 stdenv, 10 fetchurl, 11 fetchFromGitHub, 12 cmake, 13 pkg-config, 14 15 # common dependencies 16 tk, 17 mpi, 18 python3Packages, 19 catalyst, 20 cli11, 21 boost, 22 eigen, 23 verdict, 24 double-conversion, 25 26 # common data libraries 27 lz4, 28 xz, 29 zlib, 30 pugixml, 31 expat, 32 jsoncpp, 33 libxml2, 34 exprtk, 35 utf8cpp, 36 libarchive, 37 nlohmann_json, 38 39 # filters 40 openturns, 41 openslide, 42 43 # io modules 44 cgns, 45 adios2, 46 libLAS, 47 libgeotiff, 48 laszip_2, 49 gdal, 50 pdal, 51 alembic, 52 imath, 53 openvdb, 54 c-blosc, 55 unixODBC, 56 libpq, 57 libmysqlclient, 58 ffmpeg, 59 libjpeg, 60 libpng, 61 libtiff, 62 proj, 63 sqlite, 64 libogg, 65 libharu, 66 libtheora, 67 hdf5, 68 netcdf, 69 opencascade-occt, 70 71 # threading 72 tbb, 73 llvmPackages, 74 75 # rendering 76 viskores, 77 freetype, 78 fontconfig, 79 libX11, 80 libXfixes, 81 libXrender, 82 libXcursor, 83 gl2ps, 84 libGL, 85 qt6, 86 87 # custom options 88 withQt6 ? false, 89 # To avoid conflicts between the propagated vtkPackages.hdf5 90 # and the input hdf5 used by most downstream packages, 91 # we set mpiSupport to false by default. 92 mpiSupport ? false, 93 pythonSupport ? false, 94 95 # passthru.tests 96 testers, 97}: 98let 99 vtkPackages = lib.makeScope newScope (self: { 100 inherit 101 tbb 102 mpi 103 mpiSupport 104 python3Packages 105 pythonSupport 106 ; 107 108 hdf5 = hdf5.override { 109 inherit mpi mpiSupport; 110 cppSupport = !mpiSupport; 111 }; 112 openvdb = self.callPackage openvdb.override { }; 113 netcdf = self.callPackage netcdf.override { }; 114 catalyst = self.callPackage catalyst.override { }; 115 adios2 = self.callPackage adios2.override { }; 116 cgns = self.callPackage cgns.override { }; 117 viskores = self.callPackage viskores.override { }; 118 }); 119 vtkBool = feature: bool: lib.cmakeFeature feature "${if bool then "YES" else "NO"}"; 120in 121stdenv.mkDerivation (finalAttrs: { 122 pname = "vtk"; 123 inherit version patches; 124 125 src = fetchurl { 126 url = "https://www.vtk.org/files/release/${lib.versions.majorMinor finalAttrs.version}/VTK-${finalAttrs.version}.tar.gz"; 127 hash = sourceSha256; 128 }; 129 130 nativeBuildInputs = [ 131 cmake 132 pkg-config # required for finding MySQl 133 ] 134 ++ lib.optionals pythonSupport [ 135 python3Packages.python 136 python3Packages.pythonRecompileBytecodeHook 137 ] 138 ++ lib.optional ( 139 pythonSupport && stdenv.buildPlatform == stdenv.hostPlatform 140 ) python3Packages.pythonImportsCheckHook; 141 142 buildInputs = [ 143 libLAS 144 libgeotiff 145 laszip_2 146 gdal 147 pdal 148 alembic 149 imath 150 c-blosc 151 unixODBC 152 libpq 153 libmysqlclient 154 ffmpeg 155 opencascade-occt 156 fontconfig 157 openturns 158 libarchive 159 libGL 160 vtkPackages.openvdb 161 ] 162 ++ lib.optionals stdenv.hostPlatform.isLinux [ 163 libXfixes 164 libXrender 165 libXcursor 166 ] 167 ++ lib.optional withQt6 qt6.qttools 168 ++ lib.optional mpiSupport mpi 169 ++ lib.optional pythonSupport tk; 170 171 # propagated by vtk-config.cmake 172 propagatedBuildInputs = [ 173 eigen 174 boost 175 verdict 176 double-conversion 177 freetype 178 lz4 179 xz 180 zlib 181 expat 182 exprtk 183 pugixml 184 jsoncpp 185 libxml2 186 utf8cpp 187 nlohmann_json 188 libjpeg 189 libpng 190 libtiff 191 proj 192 sqlite 193 libogg 194 libharu 195 libtheora 196 cli11 197 openslide 198 vtkPackages.hdf5 199 vtkPackages.cgns 200 vtkPackages.adios2 201 vtkPackages.netcdf 202 vtkPackages.catalyst 203 vtkPackages.viskores 204 vtkPackages.tbb 205 ] 206 ++ lib.optionals stdenv.cc.isClang [ 207 llvmPackages.openmp 208 ] 209 ++ lib.optionals stdenv.hostPlatform.isLinux [ 210 libX11 211 gl2ps 212 ] 213 # create meta package providing dist-info for python3Pacakges.vtk that common cmake build does not do 214 ++ lib.optionals pythonSupport [ 215 (python3Packages.mkPythonMetaPackage { 216 inherit (finalAttrs) pname version meta; 217 dependencies = 218 with python3Packages; 219 [ 220 numpy 221 wslink 222 matplotlib 223 ] 224 ++ lib.optional mpiSupport (mpi4py.override { inherit mpi; }); 225 }) 226 ]; 227 228 env = { 229 CMAKE_PREFIX_PATH = "${lib.getDev openvdb}/lib/cmake/OpenVDB"; 230 NIX_LDFLAGS = "-L${lib.getLib libmysqlclient}/lib/mariadb"; 231 }; 232 233 cmakeFlags = [ 234 (lib.cmakeFeature "CMAKE_INSTALL_BINDIR" "bin") 235 (lib.cmakeFeature "CMAKE_INSTALL_LIBDIR" "lib") 236 (lib.cmakeFeature "CMAKE_INSTALL_INCLUDEDIR" "include") 237 238 # vtk common configure options 239 (lib.cmakeBool "VTK_DISPATCH_SOA_ARRAYS" true) 240 (lib.cmakeBool "VTK_ENABLE_CATALYST" true) 241 (lib.cmakeBool "VTK_WRAP_SERIALIZATION" true) 242 (lib.cmakeBool "VTK_BUILD_ALL_MODULES" true) 243 (lib.cmakeBool "VTK_VERSIONED_INSTALL" false) 244 (lib.cmakeBool "VTK_SMP_ENABLE_OPENMP" true) 245 (lib.cmakeFeature "VTK_SMP_IMPLEMENTATION_TYPE" "TBB") 246 247 # use system packages if possible 248 (lib.cmakeBool "VTK_USE_EXTERNAL" true) 249 (lib.cmakeBool "VTK_MODULE_USE_EXTERNAL_VTK_fast_float" false) # required version incompatible 250 (lib.cmakeBool "VTK_MODULE_USE_EXTERNAL_VTK_pegtl" false) # required version incompatible 251 (lib.cmakeBool "VTK_MODULE_USE_EXTERNAL_VTK_ioss" false) # missing in nixpkgs 252 (lib.cmakeBool "VTK_MODULE_USE_EXTERNAL_VTK_token" false) # missing in nixpkgs 253 (lib.cmakeBool "VTK_MODULE_USE_EXTERNAL_VTK_fmt" false) # prefer vendored fmt 254 (lib.cmakeBool "VTK_MODULE_USE_EXTERNAL_VTK_scn" false) # missing in nixpkgs 255 (lib.cmakeBool "VTK_MODULE_USE_EXTERNAL_VTK_gl2ps" stdenv.hostPlatform.isLinux) # external gl2ps causes failure linking to macOS OpenGL.framework 256 257 # Rendering 258 (vtkBool "VTK_MODULE_ENABLE_VTK_RenderingRayTracing" false) # ospray 259 (vtkBool "VTK_MODULE_ENABLE_VTK_RenderingOpenXR" false) # openxr 260 (vtkBool "VTK_MODULE_ENABLE_VTK_RenderingOpenVR" false) # openvr 261 (vtkBool "VTK_MODULE_ENABLE_VTK_RenderingAnari" false) # anari 262 263 # withQt6 264 (vtkBool "VTK_GROUP_ENABLE_Qt" withQt6) 265 (lib.cmakeFeature "VTK_QT_VERSION" "Auto") # will search for Qt6 first 266 267 # pythonSupport 268 (lib.cmakeBool "VTK_USE_TK" pythonSupport) 269 (vtkBool "VTK_GROUP_ENABLE_Tk" pythonSupport) 270 (lib.cmakeBool "VTK_WRAP_PYTHON" pythonSupport) 271 (lib.cmakeBool "VTK_BUILD_PYI_FILES" pythonSupport) 272 (lib.cmakeFeature "VTK_PYTHON_VERSION" "3") 273 274 # mpiSupport 275 (lib.cmakeBool "VTK_USE_MPI" mpiSupport) 276 (vtkBool "VTK_GROUP_ENABLE_MPI" mpiSupport) 277 ]; 278 279 pythonImportsCheck = [ "vtk" ]; 280 281 dontWrapQtApps = true; 282 283 postFixup = 284 # Remove thirdparty find module that have been provided in nixpkgs. 285 '' 286 rm -rf $out/lib/cmake/vtk/patches 287 rm $out/lib/cmake/vtk/Find{EXPAT,Freetype,utf8cpp,LibXml2,FontConfig}.cmake 288 '' 289 # libvtkglad.so will find and load libGL.so at runtime. 290 + lib.optionalString stdenv.hostPlatform.isLinux '' 291 patchelf --add-rpath ${lib.getLib libGL}/lib $out/lib/libvtkglad.so 292 ''; 293 294 passthru = { 295 inherit 296 pythonSupport 297 mpiSupport 298 ; 299 300 vtkPackages = vtkPackages.overrideScope ( 301 final: prev: { 302 vtk = finalAttrs.finalPackage; 303 } 304 ); 305 306 tests = { 307 cmake-config = testers.hasCmakeConfigModules { 308 moduleNames = [ "VTK" ]; 309 310 package = finalAttrs.finalPackage; 311 312 nativeBuildInputs = lib.optionals withQt6 [ 313 qt6.qttools 314 qt6.wrapQtAppsHook 315 ]; 316 }; 317 }; 318 }; 319 320 requiredSystemFeatures = [ "big-parallel" ]; 321 322 meta = { 323 description = "Open source libraries for 3D computer graphics, image processing and visualization"; 324 homepage = "https://www.vtk.org/"; 325 changelog = "https://docs.vtk.org/en/latest/release_details/${lib.versions.majorMinor finalAttrs.version}.html"; 326 license = lib.licenses.bsd3; 327 maintainers = with lib.maintainers; [ qbisi ]; 328 platforms = lib.platforms.unix; 329 }; 330})