1{
2 lib,
3 stdenv,
4 fetchFromGitLab,
5 fetchurl,
6 boost,
7 cmake,
8 ffmpeg,
9 libsForQt5,
10 gdal,
11 gfortran,
12 libXt,
13 makeWrapper,
14 ninja,
15 mpi,
16 python312,
17 tbb,
18 libGLU,
19 libGL,
20 withDocs ? true,
21}:
22
23let
24 version = "5.13.2";
25
26 docFiles = [
27 (fetchurl {
28 url = "https://www.paraview.org/paraview-downloads/download.php?submit=Download&version=v${lib.versions.majorMinor version}&type=data&os=Sources&downloadFile=ParaViewTutorial-${version}.pdf";
29 name = "Tutorial.pdf";
30 hash = "sha256-jJ6YUT2rgVExfKv900LbSO+MDQ4u73K7cBScHxWoP+g=";
31 })
32 (fetchurl {
33 url = "https://www.paraview.org/paraview-downloads/download.php?submit=Download&version=v${lib.versions.majorMinor version}&type=data&os=Sources&downloadFile=ParaViewGettingStarted-${version}.pdf";
34 name = "GettingStarted.pdf";
35 hash = "sha256-ptPQA8By8Hj0qI5WRtw3ZhklelXeYeJwVaUdfd6msJM=";
36 })
37 (fetchurl {
38 url = "https://www.paraview.org/paraview-downloads/download.php?submit=Download&version=v${lib.versions.majorMinor version}&type=data&os=Sources&downloadFile=ParaViewCatalystGuide-${version}.pdf";
39 name = "CatalystGuide.pdf";
40 hash = "sha256-Pl7X5cBj3OralkOw5A29CtXnA+agYr6kWHf/+KZNHow=";
41 })
42 ];
43
44in
45stdenv.mkDerivation rec {
46 pname = "paraview";
47 inherit version;
48
49 src = fetchFromGitLab {
50 domain = "gitlab.kitware.com";
51 owner = "paraview";
52 repo = "paraview";
53 rev = "v${version}";
54 hash = "sha256-29PLXVpvj8RLkSDWQgj5QjBZ6l1/0NoVx/qcJXOSssU=";
55 fetchSubmodules = true;
56 };
57
58 # Find the Qt platform plugin "minimal"
59 preConfigure = ''
60 export QT_PLUGIN_PATH=${libsForQt5.qtbase.bin}/${libsForQt5.qtbase.qtPluginPrefix}
61 '';
62
63 cmakeFlags = [
64 "-DPARAVIEW_ENABLE_FFMPEG=ON"
65 "-DPARAVIEW_ENABLE_GDAL=ON"
66 "-DPARAVIEW_ENABLE_MOTIONFX=ON"
67 "-DPARAVIEW_ENABLE_VISITBRIDGE=ON"
68 "-DPARAVIEW_ENABLE_XDMF3=ON"
69 "-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON"
70 "-DPARAVIEW_USE_MPI=ON"
71 "-DPARAVIEW_USE_PYTHON=ON"
72 "-DVTK_SMP_IMPLEMENTATION_TYPE=TBB"
73 "-DVTKm_ENABLE_MPI=ON"
74 "-DCMAKE_INSTALL_LIBDIR=lib"
75 "-DCMAKE_INSTALL_INCLUDEDIR=include"
76 "-DCMAKE_INSTALL_BINDIR=bin"
77 "-DOpenGL_GL_PREFERENCE=GLVND"
78 "-GNinja"
79 ];
80
81 nativeBuildInputs = [
82 cmake
83 makeWrapper
84 ninja
85 gfortran
86 libsForQt5.wrapQtAppsHook
87 ];
88
89 buildInputs = [
90 libGLU
91 libGL
92 libXt
93 mpi
94 tbb
95 boost
96 ffmpeg
97 gdal
98 libsForQt5.qtbase
99 libsForQt5.qtx11extras
100 libsForQt5.qttools
101 libsForQt5.qtxmlpatterns
102 libsForQt5.qtsvg
103 ];
104
105 postInstall =
106 let
107 docDir = "$out/share/paraview-${lib.versions.majorMinor version}/doc";
108 in
109 lib.optionalString withDocs ''
110 mkdir -p ${docDir};
111 for docFile in ${lib.concatStringsSep " " docFiles}; do
112 cp $docFile ${docDir}/$(stripHash $docFile);
113 done;
114 '';
115
116 propagatedBuildInputs = [
117 (python312.withPackages (
118 ps: with ps; [
119 numpy
120 matplotlib
121 mpi4py
122 ]
123 ))
124 ];
125
126 # 23k objects, >4h on a normal build slot
127 requiredSystemFeatures = [ "big-parallel" ];
128
129 meta = {
130 homepage = "https://www.paraview.org";
131 description = "3D Data analysis and visualization application";
132 license = lib.licenses.bsd3;
133 maintainers = with lib.maintainers; [ guibert ];
134 changelog = "https://www.kitware.com/paraview-${lib.concatStringsSep "-" (lib.versions.splitVersion version)}-release-notes";
135 platforms = lib.platforms.linux;
136 };
137}