/home/paraview/Documentation/dev/build.md
Go to the documentation of this file.
1 # Building ParaView
2 
3 This page describes how to build and install ParaView. It covers building for
4 development, on both Unix-type systems (Linux, HP-UX, Solaris, macOS), and
5 Windows. Note that Unix-like environments such as Cygwin and MinGW are not
6 officially supported. However, patches to fix problems with these platforms
7 will be considered for inclusion.
8 
9 ParaView depends on several open source tools and libraries such as Python, Qt,
10 CGNS, HDF5, etc. Some of these are included in the ParaView source itself
11 (e.g., HDF5), while others are expected to be present on the machine on which
12 ParaView is being built (e.g., Python, Qt).
13 
14 The first chapter is a getting started guide by OS that is very helpful if you have never
15 built ParaView before and do not know which options you need.
16 If you are looking for the generic help, please read the [Complete Compilation Guide](#complete-compilation-guide)
17 
18 ## Getting Started Guide
19 This is a section intended to help those that have never built ParaView before, are not
20 experienced with compilation in general or have no idea which option they may need when building ParaView.
21 If you follow this guide, you will be able to compile and run a standard version of ParaView
22 for your operating system. It will be built with the python wrapping, MPI capabilities and multithread capabilities.
23 
24  * If you are using a Linux distribution, please see [the Linux part](#linux),
25  * If you are using Microsoft Windows, please see [the Windows part](#windows),
26  * If you are using another OS, feel free to provide compilation steps.
27 
28 ### Linux
29 
30 #### Dependencies
31 Please run the command in a terminal to install the following dependencies depending of your linux distribution.
32 
33 ##### Ubuntu 18.04 LTS / Debian 10
34 `sudo apt-get install git cmake build-essential libgl1-mesa-dev libxt-dev qt5-default libqt5x11extras5-dev libqt5help5 qttools5-dev qtxmlpatterns5-dev-tools libqt5svg5-dev python3-dev python3-numpy libopenmpi-dev libtbb-dev ninja-build`
35 
36 ##### Centos 7
37 
38 ###### CMake
39 Download and install [cmake][cmake-download]) as the packaged version is not enough considering that
40 CMake 3.12 or higher is needed.
41 
42 ###### Others
43 `sudo yum install python3-devel openmpi-devel mesa-libGL-devel libX11-devel libXt-devel qt5-qtbase-devel qt5-qtx11extras-devel qt5-qttools-devel qt5-qtxmlpatterns-devel tbb-devel ninja-build git`
44 
45 ###### Environement
46 ```sh
47 alias ninja=ninja-build
48 export PATH=$PATH:/usr/lib64/openmpi/bin/
49 ```
50 
51 ##### ArchLinux
52 `sudo pacman -S base-devel ninja openmpi tbb qt python python-numpy cmake`
53 
54 ##### Other distribution
55 If you are using another distribution, please try to adapt the package list.
56 Feel free to then provide it so we can integrate it in this guide by creating an [issue][paraview-issues].
57 
58 #### Build
59 
60 To build ParaView developement version (usually refered as "master"), please run the following commands in a terminal :
61 ```sh
62 git clone --recursive https://gitlab.kitware.com/paraview/paraview.git
63 mkdir paraview_build
64 cd paraview_build
65 cmake -GNinja -DPARAVIEW_USE_PYTHON=ON -DPARAVIEW_USE_MPI=ON -DVTK_SMP_IMPLEMENTATION_TYPE=TBB -DCMAKE_BUILD_TYPE=Release ../paraview
66 ninja
67 ```
68 
69 To build a specific ParaView version, eg: v5.6.0 , please run the following commands in a terminal while replacing "tag" by the version you want to build
70 ```sh
71 git clone https://gitlab.kitware.com/paraview/paraview.git
72 mkdir paraview_build
73 cd paraview
74 git checkout tag
75 git submodule update --init --recursive
76 cd ../paraview_build
77 cmake -GNinja -DPARAVIEW_USE_PYTHON=ON -DPARAVIEW_USE_MPI=ON -DVTK_SMP_IMPLEMENTATION_TYPE=TBB -DCMAKE_BUILD_TYPE=Release ../paraview
78 ninja
79 ```
80 
81 #### Run
82 Double click on the paraview executable in the bin directory or run in the previous terminal
83 
84 ```sh
85 ./bin/paraview
86 ```
87 
88 ### Windows
89 
90 Note: the following steps concerning Visual Studio 2015 can also be applied to Visual Studio 2019.
91 If so, beware to use the msvc2019_64 Qt Version and the Developer Command Prompt for VS 2019.
92 
93 #### Dependencies
94  * Download and install [git bash for windows][gitforwindows]
95  * Download and install [cmake][cmake-download]
96  * Download and install [Visual Studio 2015 Community Edition][visual-studio]
97  * Download [ninja-build][ninja] and drop `ninja.exe` in `C:\Windows\`
98  * Download and install both `msmpisetup.exe` and `msmpisdk.msi` from [Microsoft MPI][msmpi]
99  * Download and install [Python for windows][pythonwindows], make sure to add the path to your Python installation folder to the `PATH` environnement variable.
100  * Download and install [Qt 5.12.3][qt-download-5.12.3] for windows, make sure to check the MSVC 2015 64-bit component during installation, make sure to add `C:\Qt\Qt5.12.3\5.12.3\msvc2015_64\bin` to your `PATH` environnement variable.
101 
102 #### Recover the source
103  * Open git bash
104  * To build ParaView developement version (usually refered as "master"), run the following commands:
105 
106 ```sh
107 cd C:
108 mkdir pv
109 cd pv
110 git clone --recursive https://gitlab.kitware.com/paraview/paraview.git
111 mv paraview pv
112 mkdir pvb
113 ```
114 
115  * Or, to build a specific ParaView version, eg: v5.6.0 , please run the following commands while replacing "tag" by the version you want to build
116 
117 ```sh
118 cd C:
119 mkdir pv
120 cd pv
121 git clone https://gitlab.kitware.com/paraview/paraview.git
122 mv paraview pv
123 mkdir pvb
124 cd pv
125 git checkout tag
126 git submodule update --init --recursive
127 ```
128 
129 #### Build
130 
131  * Open VS2015 x64 Native Tools Command Prompt and run the following commands
132 ```sh
133 cd C:\pv\pvb
134 cmake -GNinja -DPARAVIEW_USE_PYTHON=ON -DPARAVIEW_USE_MPI=ON -DVTK_SMP_IMPLEMENTATION_TYPE=OpenMP -DCMAKE_BUILD_TYPE=Release ..\pv
135 ninja
136 ```
137 
138 #### Run
139 
140  * Double click on the `C:\pv\pvb\bin\paraview` executable
141 
142 ## Complete Compilation Guide
143 
144 ### Obtaining the source
145 
146 To obtain ParaView's sources locally, clone this repository using
147 [Git][git].
148 
149 ```sh
150 git clone --recursive https://gitlab.kitware.com/paraview/paraview.git
151 ```
152 
153 ### Building
154 
155 ParaView supports all of the common generators supported by CMake. The Ninja,
156 Makefiles, and Visual Studio generators are the most well-tested however.
157 
158 #### Prerequisites
159 
160 ParaView only requires a few packages in order to build in general, however
161 specific features may require additional packages to be provided to ParaView's
162 build configuration.
163 
164 Required:
165 
166  * [CMake][cmake]
167  - Version 3.12 or newer, however, the latest version is always recommended
168  * Supported compiler
169  - GCC 4.8 or newer
170  - Clang 4 or newer
171  - Xcode 9 or newer
172  - Visual Studio 2015 or newer
173 
174 Optional dependencies:
175 
176  * [Python][python]
177  - At least 3.3 is required
178  * [Qt5][qt]
179  - Version 5.9 or newer
180 
181 ##### Installing CMake
182 
183 CMake is a tool that makes cross-platform building simple. On several systems
184 it will probably be already installed or available through system package
185 management utilities. If it is not, there are precompiled binaries available on
186 [CMake's download page][cmake-download].
187 
188 ##### Installing Qt
189 
190 ParaView uses Qt as its GUI library. Precompiled binaries are available on
191 [Qt's website][qt-download].
192 
193 Note that on Windows, the compiler used for building ParaView must match the
194 compiler version used to build Qt.
195 
196 The Linux packages for Qt 5.9 use a version of protobuf that may conflict with
197 that used by ParaView. If, when running ParaView, error messages about a
198 mismatch in protobuf versions appears, moving the `libqgtk3.so` plugin out of
199 the `plugins/platformthemes` directory has been sufficient in the past.
200 
201 #### Optional Additions
202 
203 ##### Download And Install ffmpeg (`.avi`) movie libraries
204 
205 When the ability to write `.avi` files is desired, and writing these files is
206 not supported by the OS, ParaView can use the ffmpeg library. This is generally
207 true for Linux. Source code for ffmpeg can be obtained from [the
208 website][ffmpeg].
209 
210 ##### MPI
211 
212 To run ParaView in parallel, an [MPI][mpi] implementation is required. If an
213 MPI implementation that exploits special interconnect hardware is provided on
214 your system, we suggest using it for optimal performance. Otherwise, on
215 Linux/Mac, we suggest either [OpenMPI][openmpi] or [MPICH][mpich]. On Windows,
216 [Microsoft MPI][msmpi] is required.
217 
218 ##### Python
219 
220 In order to use scripting, [Python][python] is required (version 3.3). Python
221 is also required in order to build ParaViewWeb support.
222 
223 ##### OSMesa
224 
225 Off-screen Mesa can be used as a software-renderer for running ParaView on a
226 server without hardware OpenGL acceleration. This is usually available in
227 system packages on Linux. For example, the `libosmesa6-dev` package on Debian
228 and Ubuntu. However, for older machines, building a newer version of Mesa is
229 likely necessary for bug fixes and support. Its source and build instructions
230 can be found on [its website][mesa].
231 
232 ### Creating the Build Environment
233 
234 #### Linux (Ubuntu/Debian)
235 
236  * `sudo apt install` the following packages:
237  - `build-essential`
238  - `cmake`
239  - `mesa-common-dev`
240  - `mesa-utils`
241  - `freeglut3-dev`
242  - `ninja-build`
243  - `ninja` is a speedy replacement for `make`, highly recommended.
244 
245 *Note*: If you are using an Ubuntu-provided compiler, there is a known issue
246 with the optional Python linking. This case is hard to auto-detect, so if
247 undefined symbol errors related to Python symbols arise, setting
248 `vtk_undefined_symbols_allowed=OFF` may resolve the errors. If it does not,
249 please file a new issue.
250 
251 #### Windows
252 
253  * [Visual Studio 2015 Community Edition][visual-studio]
254  * Use "x64 Native Tools Command Prompt" for the installed Visual Studio
255  version to configure with CMake and to build with ninja.
256  * Get [ninja][ninja]. Unzip the binary and put it in `PATH`.
257 
258 ### Building
259 
260 In order to build, CMake requires two steps, configure and build. ParaView
261 itself does not support what are known as in-source builds, so the first step
262 is to create a build directory.
263 
264 !!! note
265  On Windows, there have historically been issues with long paths to the
266  build directory. These should have been addressed, but they may appear
267  again. If any are seen, please report them to [the issue
268  tracker][paraview-issues].
269 
270 ```sh
271 mkdir -p paraview/build
272 cd paraview/build
273 ccmake ../path/to/paraview/source # -GNinja may be added to use the Ninja generator
274 ```
275 
276 CMake's GUI has input entries for the build directory and the generator
277 already. Note that on Windows, the GUI must be launched from a "Native Tools
278 Command Prompt" available with Visual Studio in the start menu.
279 
280 #### Build Settings
281 
282 ParaView has a number of settings available for its build. These are categorized
283 as build options, capability option, feature options and miscellanoues options.
284 
285 
286 #### Build Options
287 
288 These options impact the build. These begin with the prefix `PARAVIEW_BUILD_`.
289 The common variables to modify include:
290 
291  * `PARAVIEW_BUILD_SHARED_LIBS` (default `ON`): If set, shared libraries will
292  be built. This is usually what is wanted.
293 
294 Less common, but variables which may be of interest to some:
295 
296  * `PARAVIEW_BUILD_EDITION` (default `CANONICAL`): Choose which features to
297  enable in this build. This is useful to generate ParaView builds with
298  limited features. More on this later.
299  * `PARAVIEW_BUILD_EXAMPLES` (default `OFF`): If set, ParaView's example code
300  will be added as tests to the ParaView test suite.
301  * `PARAVIEW_BUILD_DEVELOPER_DOCUMENTATION` (default `OFF`): If set, the HTML
302  documentation for ParaView's C++, Python, and proxies will be generated.
303  * `PARAVIEW_BUILD_TESTING` (default `OFF`): Whether to build tests or not.
304  Valid values are `OFF` (no testing), `WANT` (enable tests as possible), and
305  `ON` (enable all tests; may error out if features otherwise disabled are
306  required by test code).
307  * `PARAVIEW_BUILD_VTK_TESTING` (default `OFF`): Whether to build tests for the
308  VTK codebase built by ParaView. Valid values are same as
309  `PARAVIEW_BUILD_TESTING`.
310 
311 More advanced build options are:
312 
313  * `PARAVIEW_BUILD_ALL_MODULES` (default `OFF`): If set, ParaView will enable
314  all modules not disabled by other features.
315  * `PARAVIEW_BUILD_LEGACY_REMOVE` (default `OFF`): Remove legacy / deprecated
316  code.
317  * `PARAVIEW_BUILD_LEGACY_SILENT` (default `OFF`): Silence all legacy
318  / deprecated code messages.
319  * `PARAVIEW_BUILD_WITH_EXTERNAL` (default `OFF`): When set to `ON`, the build
320  will try to use external copies of all included third party libraries unless
321  explicitly overridden.
322  * `PARAVIEW_BUILD_WITH_KITS` (default `OFF`): Compile ParaView into a smaller
323  set of libraries. Can be useful on platforms where ParaView takes a long
324  time to launch due to expensive disk access.
325 
326 #### Capability settings
327 
328 These settings control capabitities of the build. These begin with the prefix
329 `PARAVIEW_USE_`. The common variables to modify include:
330 
331  * `PARAVIEW_USE_QT` (default `ON`): Builds the `paraview` GUI application.
332  * `PARAVIEW_USE_MPI` (default `OFF`): Whether MPI support will be available
333  or not.
334  * `PARAVIEW_USE_PYTHON` (default `OFF`): Whether Python
335  support will be available or not.
336 
337 Less common, but potentially useful variables are:
338 
339  * `PARAVIEW_USE_VTKM` (default `ON`): Whether VTK-m based filters are enabled.
340  * `PARAVIEW_USE_FORTRAN` (default `ON` if Fortran compiler found): Enable
341  Fortran support for Catalyst libraries.
342 
343 #### Feature settings
344 
345 These settings control optional features. These begin with the prefix
346 `PARAVIEW_ENABLE_`. The common variables to modify include:
347 
348  * `PARAVIEW_ENABLE_RAYTRACING` (default `OFF`): Enable ray-tracing support
349  with OSPray and/or OptiX. Requires appropriate external libraries.
350  * `PARAVIEW_ENABLE_WEB` (default `OFF`; requires `PARAVIEW_USE_PYTHON`):
351  Whether ParaViewWeb support will be available or not.
352 
353 More advanced / less common options include:
354 
355  * `PARAVIEW_ENABLE_VISITBRIDGE` (default `OFF`): Enable support for VisIt
356  readers.
357  * `PARAVIEW_ENABLE_NVPIPE` (default `OFF`): Use [nvpipe][nvpipe] image
358  compression when communicating the GPU. Requires CUDA and an NVIDIA GPU.
359  * `PARAVIEW_ENABLE_GDAL` (default `OFF`): Enable support for reading GDAL
360  files.
361  * `PARAVIEW_ENABLE_LAS` (default `OFF`): Enable support for reading LAS
362  files.
363  * `PARAVIEW_ENABLE_OPENTURNS` (default `OFF`): Enable support for reading
364  OpenTURNS files.
365  * `PARAVIEW_ENABLE_PDAL` (default `OFF`): Enable support for reading PDAL
366  files.
367  * `PARAVIEW_ENABLE_MOTIONFX` (default `OFF`): Enable support for reading
368  MotionFX files.
369  * `PARAVIEW_ENABLE_MOMENTINVARIANTS` (default `OFF`): Enable
370  MomentInvariants filters.
371  * `PARAVIEW_ENABLE_LOOKINGGLASS` (default `OFF`): Enable LookingGlass display.
372  * `PARAVIEW_ENABLE_XDMF2` (default `OFF`): Enable support for reading Xdmf2
373  files.
374  * `PARAVIEW_ENABLE_XDMF3` (default `OFF`): Enable support for reading Xdmf3
375  files.
376  * `PARAVIEW_ENABLE_FFMPEG` (default `OFF`; not available on Windows): Enable
377  FFmpeg support.
378  * `PARAVIEW_ENABLE_COSMOTOOLS` (default `OFF`; requires `PARAVIEW_USE_MPI`
379  and not available on Windows): Enable support for CosmoTools which includes
380  GenericIO readers and writers as well as some point cloud algorithms.
381 
382 
383 #### Plugin settings
384 
385 ParaView build includes several plugins. These can be enabled / disabled using the
386 following options:
387 
388  * `PARAVIEW_PLUGINS_DEFAULT` (default `ON`): Pass this flag to the command
389  line using `-DPARAVIEW_PLUGINS_DEFAULT=OFF` before the first cmake run to
390  disable all plugins by default. Note this has no impact after the first
391  cmake configure and hence must be passed on the command line itself.
392  * `PARAVIEW_PLUGIN_ENABLE_<name>` (default varies): Whether to enable a
393  plugin or not.
394  * `PARAVIEW_PLUGIN_AUTOLOAD_<name>` (default `OFF`): Whether to autoload a
395  plugin at startup or not. Note that this affects all clients linking to
396  ParaView's plugin target.
397 
398 #### Miscellaneous settings
399 ParaView uses VTK's module system to control its build. This infrastructure
400 provides a number of variables to control modules which are not otherwise
401 controlled by the other options provided.
402 
403  * `VTK_MODULE_USE_EXTERNAL_<name>` (default depends on
404  `PARAVIEW_BUILD_WITH_EXTERNAL`): Use an external source for the named third-party
405  module rather than the copy contained within the ParaView source tree.
406  * `VTK_MODULE_ENABLE_<name>` (default `DEFAULT`): Change the build settings
407  for the named module. Valid values are those for the module system's build
408  settings (see below).
409  * `VTK_GROUP_ENABLE_<name>` (default `DEFAULT`): Change the default build
410  settings for modules belonging to the named group. Valid values are those
411  for the module system's build settings (see below).
412 
413 For variables which use the module system's build settings, the valid values are as follows:
414 
415  * `YES`: Require the module to be built.
416  * `WANT`: Build the module if possible.
417  * `DEFAULT`: Use the settings by the module's groups and
418  `PARAVIEW_BUILD_ALL_MODULES`.
419  * `DONT_WANT`: Don't build the module unless required as a dependency.
420  * `NO`: Do not build the module.
421 
422 If any `YES` module requires a `NO` module, an error is raised.
423 
424 More advanced options:
425 
426  * `PARAVIEW_INITIALIZE_MPI_ON_CLIENT` (default `ON`; requires
427  `PARAVIEW_USE_MPI`): Initialize MPI on client processes by default.
428  * `PARAVIEW_USE_QTHELP` (default `ON`; requires
429  `PARAVIEW_USE_QT`): Use Qt's help infrastructure for runtime
430  documentation.
431  * `PARAVIEW_VERSIONED_INSTALL` (default `ON`): Whether to add version numbers
432  to ParaView's include and plugin directories in the install tree.
433  * `PARAVIEW_CUSTOM_LIBRARY_SUFFIX` (default depends on
434  `PARAVIEW_VERSIONED_INSTALL`): The custom suffix for libraries built by
435  ParaView. Defaults to either an empty string or `pvX.Y` where `X` and `Y`
436  are ParaView's major and minor version components, respectively.
437  * `PARAVIEW_INSTALL_DEVELOPMENT_FILES` (default `ON`): If set, ParaView will
438  install its headers, CMake API, etc. into its install tree for use.
439  * `PARAVIEW_RELOCATABLE_INSTALL` (default `ON`): If set, the install tree
440  will be relocatable to another path or machine. External dependencies
441  needed by ParaView which are in non-standard locations may need manual
442  settings in ParaView-using projects (those which share an install prefix
443  with ParaView should be OK though). If unset, the install tree will include
444  hints for the location of its dependencies which may include
445  build-machine-specific paths in the install tree.
446  * `PARAVIEW_SERIAL_TESTS_USE_MPIEXEC` (default `OFF`): Used on HPC to run
447  serial tests on compute nodes. If set, it prefixes serial tests with
448  "${MPIEXEC_EXECUTABLE}" "${MPIEXEC_NUMPROC_FLAG}" "1" ${MPIEXEC_PREFLAGS}
449 
450 <!--
451 These variables should be documented once they're effective again.
452 
453  * `PARAVIEW_USE_EXTERNAL_VTK` (default `OFF`): Use an externally provided
454  VTK. Note that ParaView has fairly narrow requirements for the VTK it can
455  use, so only very recent versions are likely to work.
456 -->
457 ## Building editions
458 
459 A typical ParaView build includes several modules and dependencies. While these
460 are necessary for a fully functional application, there are cases (e.g. in situ
461 use-cases) where a build with limited set of features is adequate. ParaView build supports
462 this using the `PARAVIEW_BUILD_EDITION` setting. Supported values for this setting are:
463 
464 * `CORE`: Build modules necessary for core ParaView functionality.
465  This does not include rendering.
466 * `RENDERING`: Build modules necessary for supporting rendering including views
467  and representations. This includes everything in `CORE`.
468 * `CATALYST`: Build all modules necessary for in situ use cases without
469  rendering and optional components like NetCDF- and HDF5-based readers and
470  writers.
471 * `CATALYST_RENDERING`: Same as `CATALYST` but with rendering supported added.
472 * `CANONICAL` (default): Build modules necessary for standard ParaView build.
473 
474 
475 ### Building documentation
476 
477 The following targets are used to build documentation for ParaView:
478 
479  * `ParaViewDoxygenDoc` - build the doxygen documentation from ParaView's C++ source files.
480  * `ParaViewPythonDoc` - build the documentation from ParaView's Python source files.
481  * `ParaViewDoc-TGZ` - build a gzipped tarball of ParaView documentation.
482 
483 ## Using spack
484 
485 [Spack][spack] is a package manager for supercomputers, Linux and macOS. ParaView is one of
486 the packages available in Spack. To install ParaView from spack, you can use:
487 
488 ```
489 spack install paraview
490 ```
491 
492 Please refer to [Spack documentation][spack-docs] for ways of customizing the install,
493 including choosing the version and/or variant to build. Based on the version chosen,
494 spack will download appropriate ParaView source and build it.
495 
496 To make it easier to build ParaView using spack from an existing source checkout, we have included
497 relevant spack `package.yaml` files within the ParaView codebase itself. This
498 also makes it easier to keep the spack package up-to-date with any changes to
499 the ParaView buildsystem. With every release (and as frequently as required), we
500 will push the changes to the ParaView paraview.yaml file upstream to the
501 official spack repository.
502 
503 To build your existing source checkout of ParaView using Spack, here are the
504 steps:
505 
506 ```bash
507 # assuming you've installed spack as documented in spack docs
508 # and activate the spack environment appropriately
509 
510 # add custom paraview/package.yaml
511 > spack repo add $PARAVIEW_SOURCE_DIR/Utilities/spack/repo
512 
513 # use info to confirm that the paraview package is available
514 # only one version should be available
515 > spack info paraview
516 
517 # install similar to any other spack package
518 # e.g. following command installs osmesa-capable ParaView
519 # with mpich
520 
521 > spack install paraview+osmesa^mesa~glx^mpich
522 ```
523 
524 [cmake-download]: https://cmake.org/download
525 [cmake]: https://cmake.org
526 [ffmpeg]: https://ffmpeg.org
527 [git]: https://git-scm.org
528 [gitforwindows]: https://gitforwindows.org/
529 [mesa]: https://www.mesa3d.org
530 [mpi]: https://www.mcs.anl.gov/research/projects/mpi
531 [mpich]: https://www.mpich.org
532 [msmpi]: https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi
533 [ninja]: https://github.com/ninja-build/ninja/releases
534 [nvpipe]: https://github.com/NVIDIA/NvPipe
535 [openmpi]: https://www.open-mpi.org
536 [paraview-issues]: https://gitlab.kitware.com/paraview/paraview/-/issues
537 [python]: https://python.org
538 [pythonwindows]: https://www.python.org/downloads/windows/
539 [qt-download]: https://download.qt.io/official_releases/qt
540 [qt]: https://qt.io
541 [qt-download-5.12.3]: https://download.qt.io/archive/qt/5.12/5.12.3/
542 [tbb]: https://github.com/intel/tbb/releases
543 [visual-studio]: https://visualstudio.microsoft.com/vs/older-downloads
544 [spack]: https://spack.io/
545 [spack-docs]: https://spack.readthedocs.io/en/latest/