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