547 lines
23 KiB
Python
547 lines
23 KiB
Python
# Copyright Spack Project Developers. See COPYRIGHT file for details.
|
|
#
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
|
|
import glob
|
|
import os
|
|
|
|
from spack.package import *
|
|
from spack.pkg.builtin.boost import Boost
|
|
|
|
|
|
class Vtk(CMakePackage):
|
|
"""The Visualization Toolkit (VTK) is an open-source, freely
|
|
available software system for 3D computer graphics, image
|
|
processing and visualization."""
|
|
|
|
homepage = "https://www.vtk.org"
|
|
url = "https://www.vtk.org/files/release/9.0/VTK-9.0.0.tar.gz"
|
|
list_url = "https://www.vtk.org/download/"
|
|
|
|
maintainers("chuckatkins", "danlipsa", "johnwparent")
|
|
|
|
license("BSD-3-Clause")
|
|
|
|
version(
|
|
"9.4.1",
|
|
sha256="c253b0c8d002aaf98871c6d0cb76afc4936c301b72358a08d5f3f72ef8bc4529",
|
|
preferred=True,
|
|
)
|
|
version("9.3.1", sha256="8354ec084ea0d2dc3d23dbe4243823c4bfc270382d0ce8d658939fd50061cab8")
|
|
version("9.2.6", sha256="06fc8d49c4e56f498c40fcb38a563ed8d4ec31358d0101e8988f0bb4d539dd12")
|
|
version("9.2.2", sha256="1c5b0a2be71fac96ff4831af69e350f7a0ea3168981f790c000709dcf9121075")
|
|
version("9.1.0", sha256="8fed42f4f8f1eb8083107b68eaa9ad71da07110161a3116ad807f43e5ca5ce96")
|
|
version("9.0.3", sha256="bc3eb9625b2b8dbfecb6052a2ab091fc91405de4333b0ec68f3323815154ed8a")
|
|
version("9.0.1", sha256="1b39a5e191c282861e7af4101eaa8585969a2de05f5646c9199a161213a622c7")
|
|
version("9.0.0", sha256="15def4e6f84d72f82386617fe595ec124dda3cbd13ea19a0dcd91583197d8715")
|
|
# v8.2.1a is a compatability version of VTK to allow VisIt to build in CI and contains
|
|
# patches that were not tested by VTK CI or for a VTK release
|
|
# - Python 3.8 compatability
|
|
# - VisIt 3.3.3 compatability
|
|
version(
|
|
"8.2.1a",
|
|
url="https://www.vtk.org/files/release/8.2/VTK-8.2.0.tar.gz",
|
|
sha256="34c3dc775261be5e45a8049155f7228b6bd668106c72a3c435d95730d17d57bb",
|
|
)
|
|
version("8.2.0", sha256="34c3dc775261be5e45a8049155f7228b6bd668106c72a3c435d95730d17d57bb")
|
|
version("8.1.2", sha256="0995fb36857dd76ccfb8bb07350c214d9f9099e80b1e66b4a8909311f24ff0db")
|
|
version("8.1.1", sha256="71a09b4340f0a9c58559fe946dc745ab68a866cf20636a41d97b6046cb736324")
|
|
version("8.1.0", sha256="6e269f07b64fb13774f5925161fb4e1f379f4e6a0131c8408c555f6b58ef3cb7")
|
|
version("8.0.1", sha256="49107352923dea6de05a7b4c3906aaf98ef39c91ad81c383136e768dcf304069")
|
|
version("7.1.0", sha256="5f3ea001204d4f714be972a810a62c0f2277fbb9d8d2f8df39562988ca37497a")
|
|
version("7.0.0", sha256="78a990a15ead79cdc752e86b83cfab7dbf5b7ef51ba409db02570dbdd9ec32c3")
|
|
version("6.3.0", sha256="92a493354c5fa66bea73b5fc014154af5d9f3f6cee8d20a826f4cd5d4b0e8a5e")
|
|
version("6.1.0", sha256="bd7df10a479606d529a8b71f466c44a2bdd11fd534c62ce0aa44fad91883fa34")
|
|
|
|
depends_on("c", type="build")
|
|
depends_on("cxx", type="build")
|
|
depends_on("pkgconfig", type="build", when="platform=linux")
|
|
|
|
# VTK7 defaults to OpenGL2 rendering backend
|
|
variant("opengl2", default=True, description="Enable OpenGL2 backend")
|
|
variant("python", default=False, description="Enable Python support", when="@8:")
|
|
variant("qt", default=False, description="Build with support for Qt")
|
|
variant("xdmf", default=False, description="Build XDMF file support")
|
|
variant("ffmpeg", default=False, description="Build with FFMPEG support")
|
|
variant("mpi", default=True, description="Enable MPI support")
|
|
variant("examples", default=False, description="Enable building & installing the VTK examples")
|
|
|
|
patch("gcc.patch", when="@6.1.0")
|
|
# patch to fix some missing stl includes
|
|
# which lead to build errors on newer compilers
|
|
|
|
patch(
|
|
"https://gitlab.kitware.com/vtk/vtk/-/commit/e066c3f4fbbfe7470c6207db0fc3f3952db633c.diff",
|
|
when="@9:9.0",
|
|
sha256="0546696bd02f3a99fccb9b7c49533377bf8179df16d901cefe5abf251173716d",
|
|
)
|
|
|
|
# Patch for paraview 5.10: +hdf5 ^hdf5@1.13.2:
|
|
# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/9690
|
|
# patch seems to effectively been added to vtk@9.2.3 (e81a2fe)
|
|
patch("xdmf2-hdf51.13.2.patch", when="@9:9.2.2 +xdmf")
|
|
|
|
# We cannot build with both osmesa and qt in spack
|
|
conflicts("^osmesa", when="+qt")
|
|
|
|
conflicts("%gcc@13", when="@9.2")
|
|
|
|
# VTK 8 vendors a heavily outdated version of CMake's GenerateExportHeader module, which
|
|
# has a bogus version check for GCC/Intel version to early exit. This drops the early exit.
|
|
patch("vtk-bogus-compiler-check.patch", when="@7.1:8")
|
|
|
|
# Based on PyPI wheel availability
|
|
with when("+python"), default_args(type=("build", "link", "run")):
|
|
depends_on("python@:3.13")
|
|
depends_on("python@:3.12", when="@:9.3")
|
|
depends_on("python@:3.11", when="@:9.2")
|
|
depends_on("python@:3.10", when="@:9.2.2")
|
|
depends_on("python@:3.9", when="@:9.1")
|
|
depends_on("python@:3.8", when="@:9.0.1")
|
|
depends_on("python@:3.7", when="@:8.2.0")
|
|
|
|
# We need mpi4py if buidling python wrappers and using MPI
|
|
depends_on("py-mpi4py", when="+python+mpi", type="run")
|
|
|
|
# python3.7 compatibility patch backported from upstream
|
|
# https://gitlab.kitware.com/vtk/vtk/commit/706f1b397df09a27ab8981ab9464547028d0c322
|
|
patch("python3.7-const-char.patch", when="@7.0.0:8.1.1 ^python@3.7:")
|
|
|
|
# Broken downstream FindMPI
|
|
patch("vtkm-findmpi-downstream.patch", when="@9.0.0")
|
|
|
|
for plat in ["linux", "darwin", "freebsd"]:
|
|
# use internal FindHDF5
|
|
patch("internal_findHDF5.patch", when=f"@:8 platform={plat}")
|
|
|
|
# Fix IOADIOS2 module to work with kits
|
|
# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8653
|
|
patch("vtk-adios2-module-no-kit.patch", when="@9:9.0.3")
|
|
|
|
# Python 3.8 compatibility for VTK 8.2
|
|
# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/6269
|
|
# https://gitlab.kitware.com/vtk/vtk/-/merge_requests/6275
|
|
patch("vtk82_python38.patch", when="@8.2.1a")
|
|
|
|
# Fix link error in exodusII
|
|
patch("vtk-8.2-exodusII-gcc11.patch", when="@8.2.1a")
|
|
|
|
# The use of the OpenGL2 backend requires at least OpenGL Core Profile
|
|
# version 3.2 or higher.
|
|
depends_on("gl@3.2:", when="+opengl2")
|
|
depends_on("gl@1.2:", when="~opengl2")
|
|
|
|
depends_on("xz")
|
|
patch("vtk_find_liblzma.patch", when="@8.2")
|
|
patch("vtk_movie_link_ogg.patch", when="@8.2")
|
|
patch("vtk_use_sqlite_name_vtk_expects.patch", when="@8.2")
|
|
patch("vtk_proj_include_no_strict.patch", when="@9: platform=windows")
|
|
# allow proj to be detected via a CMake produced export config file
|
|
# failing that, falls back on standard library detection
|
|
# required for VTK to build against modern proj/more robustly
|
|
patch("vtk_findproj_config.patch", when="@9:")
|
|
# adds a fake target alias'ing the hdf5 target to prevent
|
|
# checks for that target from falling on VTK's empty stub target
|
|
# Required to consume netcdf and hdf5 both built
|
|
# with CMake from VTK
|
|
# a patch with the same name is also applied to paraview
|
|
# the two patches are the same but for the path to the files they patch
|
|
patch("vtk_alias_hdf5.patch", when="@9:")
|
|
# VTK 9.0 on Windows uses dll instead of lib for hdf5-hl target, which fails linking. Can't
|
|
# be fixed by bumping CMake lower bound, because VTK vendors FindHDF5.cmake. Various other
|
|
# patches to FindHDF5.cmake are missing, so add conflict instead of a series of patches.
|
|
conflicts("@9.0 platform=windows")
|
|
depends_on("libxt", when="^[virtuals=gl] glx platform=linux")
|
|
|
|
# VTK will need Qt5OpenGL, and qt needs '-opengl' for that
|
|
depends_on("qt+opengl", when="+qt")
|
|
|
|
depends_on("boost", when="+xdmf")
|
|
depends_on("boost+mpi", when="+xdmf +mpi")
|
|
|
|
# TODO: replace this with an explicit list of components of Boost,
|
|
# for instance depends_on('boost +filesystem')
|
|
# See https://github.com/spack/spack/pull/22303 for reference
|
|
depends_on(Boost.with_default_variants, when="+xdmf")
|
|
depends_on("ffmpeg", when="+ffmpeg")
|
|
depends_on("mpi", when="+mpi")
|
|
|
|
depends_on("expat")
|
|
# See <https://gitlab.kitware.com/vtk/vtk/-/issues/18033> for why vtk doesn't
|
|
# work yet with freetype 2.10.3 (including possible patches)
|
|
depends_on("freetype @:2.10.2", when="@:9.0.1")
|
|
depends_on("freetype")
|
|
depends_on("glew")
|
|
depends_on("hdf5~mpi", when="~mpi")
|
|
depends_on("hdf5+mpi", when="+mpi")
|
|
depends_on("hdf5@1.8:", when="@8:9.0")
|
|
depends_on("hdf5@1.10:", when="@9.1:")
|
|
depends_on("jpeg")
|
|
depends_on("jsoncpp")
|
|
depends_on("libxml2")
|
|
depends_on("lz4")
|
|
depends_on("netcdf-c~mpi", when="~mpi")
|
|
depends_on("netcdf-c+mpi", when="+mpi")
|
|
depends_on("netcdf-cxx4", when="@:8.1.2")
|
|
depends_on("libpng")
|
|
depends_on("libtiff")
|
|
depends_on("zlib-api")
|
|
depends_on("eigen", when="@8.2.0:")
|
|
depends_on("double-conversion", when="@8.2.0:")
|
|
depends_on("sqlite", when="@8.2.0:")
|
|
depends_on("pugixml", when="@8.3.0:")
|
|
depends_on("libogg")
|
|
depends_on("libtheora")
|
|
depends_on("utf8cpp", when="@9:")
|
|
depends_on("gl2ps", when="@8.1:")
|
|
depends_on("gl2ps@1.4.1:", when="@9:")
|
|
# "8.2.1a" uses an internal proj so this special cases 8.2.1a
|
|
depends_on("proj@4:7", when="@:8.2.0, 9:9.1")
|
|
depends_on("proj@8:", when="@9.2:")
|
|
depends_on("cgns@4.1.1:+mpi", when="@9.1: +mpi")
|
|
depends_on("cgns@4.1.1:~mpi", when="@9.1: ~mpi")
|
|
|
|
# VTK introduced Seacas IOSS dependency on 9.1
|
|
with when("@9.1:"):
|
|
depends_on("seacas+mpi", when="+mpi")
|
|
depends_on("seacas~mpi", when="~mpi")
|
|
depends_on("seacas@2021-05-12:2022-10-14", when="@9.1")
|
|
# vtk@9.2: need Ioss::Utils::get_debug_stream() which 2022-10-14 and later provide
|
|
depends_on("seacas@2022-10-14:", when="@9.2:9.3")
|
|
depends_on("seacas@2024-06-27:", when="@9.4:")
|
|
|
|
depends_on("nlohmann-json", when="@9.2:")
|
|
|
|
# For finding Fujitsu-MPI wrapper commands
|
|
patch("find_fujitsu_mpi.patch", when="@:8.2.0%fj")
|
|
# Freetype@2.10.3 no longer exports FT_CALLBACK_DEF, this
|
|
# patch replaces FT_CALLBACK_DEF with simple extern "C"
|
|
# See https://gitlab.kitware.com/vtk/vtk/-/issues/18033
|
|
patch(
|
|
"https://gitlab.kitware.com/vtk/vtk/uploads/c6fa799a1a028b8f8a728a40d26d3fec/vtk-freetype-2.10.3-replace-FT_CALLBACK_DEF.patch",
|
|
sha256="eefda851f844e8a1dfb4ebd8a9ff92d2b78efc57f205774052c5f4c049cc886a",
|
|
when="@:9.0.1 ^freetype@2.10.3:",
|
|
)
|
|
|
|
patch(
|
|
"https://gitlab.kitware.com/vtk/vtk/-/commit/5a1c96e12e9b4a660d326be3bed115a2ceadb573.diff",
|
|
sha256="c446a90459b108082db5b28d9aeda99d030e636325e01929beba062cafb16b76",
|
|
when="@9.1",
|
|
)
|
|
|
|
# vtk@9 does not compile with gcc 13 or 14
|
|
# https://gitlab.kitware.com/vtk/vtk/-/issues/18782
|
|
patch(
|
|
"https://gitlab.kitware.com/vtk/vtk/-/merge_requests/9996.diff",
|
|
sha256="dab51ffd0d62b00c089c1245e6b105f740106b53893305c87193d4ba03a948e0",
|
|
when="@9.1:9.2 %gcc@13:",
|
|
)
|
|
|
|
# SEACAS >= 2024-06-27 needs c++17 which is already required in VTK master.
|
|
patch(
|
|
"https://gitlab.kitware.com/vtk/vtk/-/commit/00afe3ae0def6c2d0a6f7cb497c8d55874127820.diff",
|
|
sha256="1e5fb55b14ba6455a1891d27aa4a0506f47e3155014af06f97633ae1ef6e9cc2",
|
|
when="@9.4:",
|
|
)
|
|
|
|
# Needed to build VTK with external SEACAS.
|
|
patch(
|
|
"https://gitlab.kitware.com/vtk/vtk/-/commit/e98526813691e527fff7d5df6a1641ae36c0cf4f.diff",
|
|
sha256="174930dde06828ead84c68b1a192202766f6297a60f0c54eef6cab2605a466ef",
|
|
when="@9.4:",
|
|
)
|
|
|
|
# Needed to build VTK with external SEACAS >= 2022-10-14
|
|
@when("@9.4:")
|
|
def patch(self):
|
|
filter_file(
|
|
"^.*USE_VARIABLES SEACASIoss_INCLUDE_DIRS.*$", "", "ThirdParty/ioss/CMakeLists.txt"
|
|
)
|
|
|
|
@when("@9.2:")
|
|
def patch(self):
|
|
# provide definition for Ioss::Init::Initializer::Initializer(),
|
|
# required on macOS, as "-undefined error" is the default,
|
|
# but not on Linux, as undefined symbols are tolerated
|
|
filter_file("TARGETS Ioss", "TARGETS Ioss Ionit", "ThirdParty/ioss/CMakeLists.txt")
|
|
|
|
def url_for_version(self, version):
|
|
url = "http://www.vtk.org/files/release/{0}/VTK-{1}.tar.gz"
|
|
return url.format(version.up_to(2), version)
|
|
|
|
def setup_build_environment(self, env):
|
|
# VTK has some trouble finding freetype unless it is set in
|
|
# the environment
|
|
env.set("FREETYPE_DIR", self.spec["freetype"].prefix)
|
|
|
|
# Force API compatibility with HDF5
|
|
if "+hdf5" in self.spec:
|
|
if "@9.1:" in self.spec:
|
|
env.append_flags("CFLAGS", "-DH5_USE_110_API")
|
|
env.append_flags("CXXFLAGS", "-DH5_USE_110_API")
|
|
elif "@8:" in self.spec:
|
|
env.append_flags("CFLAGS", "-DH5_USE_18_API")
|
|
env.append_flags("CXXFLAGS", "-DH5_USE_18_API")
|
|
|
|
def cmake_args(self):
|
|
spec = self.spec
|
|
|
|
opengl_ver = "OpenGL{0}".format("2" if "+opengl2" in spec else "")
|
|
|
|
cmake_args = [
|
|
"-DBUILD_SHARED_LIBS=ON",
|
|
"-DVTK_RENDERING_BACKEND:STRING={0}".format(opengl_ver),
|
|
# prevents installation into lib64 which might not be in the path
|
|
# (solves #26314)
|
|
"-DCMAKE_INSTALL_LIBDIR:PATH=lib",
|
|
# Allow downstream codes (e.g. VisIt) to override VTK's classes
|
|
"-DVTK_ALL_NEW_OBJECT_FACTORY:BOOL=ON",
|
|
]
|
|
|
|
# Version 8.2.1a using internal libproj/pugixml for compatability
|
|
if spec.satisfies("@8.2.1a"):
|
|
cmake_args.append("-DVTK_USE_SYSTEM_LIBPROJ:BOOL=OFF")
|
|
cmake_args.append("-DVTK_USE_SYSTEM_PUGIXML:BOOL=OFF")
|
|
|
|
# Disable wrappers for other languages.
|
|
cmake_args.append("-DVTK_WRAP_JAVA=OFF")
|
|
if spec.satisfies("@:8.1"):
|
|
cmake_args.append("-DVTK_WRAP_TCL=OFF")
|
|
|
|
# In general, we disable use of VTK "ThirdParty" libs, preferring
|
|
# spack-built versions whenever possible but there are exceptions.
|
|
if spec.satisfies("@:8"):
|
|
cmake_args.extend(
|
|
["-DVTK_USE_SYSTEM_LIBRARIES:BOOL=ON", "-DVTK_USE_SYSTEM_LIBHARU=OFF"]
|
|
)
|
|
if spec.satisfies("@:8.0"):
|
|
cmake_args.append("-DVTK_USE_SYSTEM_GL2PS=OFF")
|
|
else:
|
|
cmake_args.extend(
|
|
[
|
|
"-DVTK_USE_EXTERNAL:BOOL=ON",
|
|
"-DVTK_MODULE_USE_EXTERNAL_VTK_fast_float:BOOL=OFF",
|
|
"-DVTK_MODULE_USE_EXTERNAL_VTK_libharu:BOOL=OFF",
|
|
"-DVTK_MODULE_USE_EXTERNAL_VTK_pegtl:BOOL=OFF",
|
|
"-DVTK_MODULE_USE_EXTERNAL_VTK_token:BOOL=OFF",
|
|
"-DHDF5_ROOT={0}".format(spec["hdf5"].prefix),
|
|
]
|
|
)
|
|
if spec.satisfies("@9.1:"):
|
|
cmake_args.extend(
|
|
[
|
|
"-DVTK_MODULE_USE_EXTERNAL_VTK_exprtk:BOOL=OFF",
|
|
# uses an unreleased version of fmt
|
|
"-DVTK_MODULE_USE_EXTERNAL_VTK_fmt:BOOL=OFF",
|
|
]
|
|
)
|
|
if spec.satisfies("@9.2:"):
|
|
cmake_args.append("-DVTK_MODULE_USE_EXTERNAL_VTK_verdict:BOOL=OFF")
|
|
|
|
# Some variable names have changed
|
|
if spec.satisfies("@8.2.0"):
|
|
cmake_args.append("-DVTK_USE_SYSTEM_PUGIXML:BOOL=OFF")
|
|
elif spec.satisfies("@:8.1"):
|
|
cmake_args.extend(
|
|
[
|
|
"-DVTK_USE_SYSTEM_LIBPROJ4:BOOL=OFF",
|
|
"-DNETCDF_CXX_ROOT={0}".format(spec["netcdf-cxx"].prefix),
|
|
]
|
|
)
|
|
|
|
if "+mpi" in spec:
|
|
if spec.satisfies("@:8.2.0"):
|
|
cmake_args.extend(["-DVTK_Group_MPI:BOOL=ON", "-DVTK_USE_SYSTEM_DIY2:BOOL=OFF"])
|
|
else:
|
|
cmake_args.extend(["-DVTK_USE_MPI=ON"])
|
|
else:
|
|
cmake_args.append("-DVTK_USE_MPI=OFF")
|
|
|
|
if "+ffmpeg" in spec:
|
|
if spec.satisfies("@:8"):
|
|
cmake_args.append("-DModule_vtkIOFFMPEG:BOOL=ON")
|
|
else:
|
|
cmake_args.append("-DVTK_MODULE_ENABLE_VTK_IOFFMPEG:STRING=YES")
|
|
|
|
# Enable/Disable wrappers for Python.
|
|
if "+python" in spec:
|
|
cmake_args.append("-DVTK_WRAP_PYTHON=ON")
|
|
if "+mpi" in spec and spec.satisfies("@:8"):
|
|
cmake_args.append("-DVTK_USE_SYSTEM_MPI4PY:BOOL=ON")
|
|
if spec.satisfies("@9.0.0: ^python@3:"):
|
|
cmake_args.append("-DVTK_PYTHON_VERSION=3")
|
|
else:
|
|
cmake_args.append("-DVTK_WRAP_PYTHON=OFF")
|
|
|
|
if "darwin" in spec.architecture:
|
|
cmake_args.extend(["-DCMAKE_MACOSX_RPATH=ON"])
|
|
|
|
if "+qt" in spec:
|
|
qt_ver = spec["qt"].version.up_to(1)
|
|
qt_bin = spec["qt"].prefix.bin
|
|
qmake_exe = os.path.join(qt_bin, "qmake")
|
|
|
|
# https://github.com/martijnkoopman/Qt-VTK-viewer/blob/master/doc/Build-VTK.md
|
|
# The content of the above link changes over time with versions.
|
|
# Older commits have information on VTK-8.
|
|
if spec.satisfies("@:8"):
|
|
cmake_args.extend(
|
|
[
|
|
"-DVTK_QT_VERSION:STRING={0}".format(qt_ver),
|
|
"-DQT_QMAKE_EXECUTABLE:PATH={0}".format(qmake_exe),
|
|
"-DVTK_Group_Qt:BOOL=ON",
|
|
]
|
|
)
|
|
else:
|
|
cmake_args.extend(
|
|
[
|
|
"-DVTK_GROUP_ENABLE_Qt:STRING=YES",
|
|
"-DVTK_MODULE_ENABLE_VTK_GUISupportQt:STRING=YES",
|
|
]
|
|
)
|
|
|
|
# NOTE: The following definitions are required in order to allow
|
|
# VTK to build with qt~webkit versions (see the documentation for
|
|
# more info: http://www.vtk.org/Wiki/VTK/Tutorials/QtSetup).
|
|
if "~webkit" in spec["qt"]:
|
|
if spec.satisfies("@:8"):
|
|
cmake_args.extend(
|
|
[
|
|
"-DVTK_Group_Qt:BOOL=OFF",
|
|
"-DModule_vtkGUISupportQt:BOOL=ON",
|
|
"-DModule_vtkGUISupportQtOpenGL:BOOL=ON",
|
|
]
|
|
)
|
|
else:
|
|
cmake_args.extend(
|
|
[
|
|
"-DVTK_GROUP_ENABLE_Qt:STRING=NO",
|
|
"-DVTK_MODULE_ENABLE_VTK_GUISupportQt:STRING=YES",
|
|
]
|
|
)
|
|
|
|
if "+xdmf" in spec:
|
|
if spec.satisfies("^cmake@3.12:"):
|
|
# This policy exists only for CMake >= 3.12
|
|
cmake_args.extend(["-DCMAKE_POLICY_DEFAULT_CMP0074=NEW"])
|
|
|
|
if spec.satisfies("@:8"):
|
|
cmake_args.extend(
|
|
[
|
|
# Enable XDMF Support here
|
|
"-DModule_vtkIOXdmf2:BOOL=ON",
|
|
"-DModule_vtkIOXdmf3:BOOL=ON",
|
|
"-DBOOST_ROOT={0}".format(spec["boost"].prefix),
|
|
"-DBOOST_LIBRARY_DIR={0}".format(spec["boost"].prefix.lib),
|
|
"-DBOOST_INCLUDE_DIR={0}".format(spec["boost"].prefix.include),
|
|
"-DBOOST_NO_SYSTEM_PATHS:BOOL=ON",
|
|
# This is needed because VTK has multiple FindBoost
|
|
# and they stick to system boost if there's a system boost
|
|
# installed with CMake
|
|
"-DBoost_NO_BOOST_CMAKE:BOOL=ON",
|
|
# The xdmf project does not export any CMake file...
|
|
"-DVTK_USE_SYSTEM_XDMF3:BOOL=OFF",
|
|
"-DVTK_USE_SYSTEM_XDMF2:BOOL=OFF",
|
|
]
|
|
)
|
|
else:
|
|
cmake_args.extend(
|
|
[
|
|
"-DVTK_MODULE_ENABLE_VTK_xdmf2:STRING=YES",
|
|
"-DVTK_MODULE_ENABLE_VTK_xdmf3:STRING=YES",
|
|
"-DVTK_MODULE_ENABLE_VTK_IOXdmf2:STRING=YES",
|
|
"-DVTK_MODULE_ENABLE_VTK_IOXdmf3:STRING=YES",
|
|
]
|
|
)
|
|
|
|
if "+mpi" in spec:
|
|
if spec.satisfies("@:8"):
|
|
cmake_args.append("-DModule_vtkIOParallelXdmf3:BOOL=ON")
|
|
else:
|
|
cmake_args.append("-DVTK_MODULE_ENABLE_VTK_IOParallelXdmf3:STRING=YES")
|
|
|
|
cmake_args.append("-DVTK_RENDERING_BACKEND:STRING=" + opengl_ver)
|
|
|
|
if spec.satisfies("^[virtuals=gl] osmesa"):
|
|
cmake_args.extend(
|
|
[
|
|
"-DVTK_USE_X:BOOL=OFF",
|
|
"-DVTK_USE_COCOA:BOOL=OFF",
|
|
"-DVTK_OPENGL_HAS_OSMESA:BOOL=ON",
|
|
]
|
|
)
|
|
|
|
else:
|
|
cmake_args.append("-DVTK_OPENGL_HAS_OSMESA:BOOL=OFF")
|
|
if spec.satisfies("@:7.9.9"):
|
|
# This option is gone in VTK 8.1.2
|
|
cmake_args.append("-DOpenGL_GL_PREFERENCE:STRING=LEGACY")
|
|
|
|
if "platform=darwin" in spec:
|
|
cmake_args.extend(["-DVTK_USE_X:BOOL=OFF", "-DVTK_USE_COCOA:BOOL=ON"])
|
|
|
|
elif "platform=linux" in spec:
|
|
cmake_args.extend(["-DVTK_USE_X:BOOL=ON", "-DVTK_USE_COCOA:BOOL=OFF"])
|
|
|
|
compile_flags = []
|
|
|
|
if spec.satisfies("@:6.1.0"):
|
|
compile_flags.append("-DGLX_GLXEXT_LEGACY")
|
|
|
|
# VTK 6.1.0 (and possibly earlier) does not use
|
|
# NETCDF_CXX_ROOT to detect NetCDF C++ bindings, so
|
|
# NETCDF_CXX_INCLUDE_DIR and NETCDF_CXX_LIBRARY must be
|
|
# used instead to detect these bindings
|
|
netcdf_cxx_lib = spec["netcdf-cxx"].libs.joined()
|
|
cmake_args.extend(
|
|
[
|
|
"-DNETCDF_CXX_INCLUDE_DIR={0}".format(spec["netcdf-cxx"].prefix.include),
|
|
"-DNETCDF_CXX_LIBRARY={0}".format(netcdf_cxx_lib),
|
|
]
|
|
)
|
|
|
|
# Garbage collection is unsupported in Xcode starting with
|
|
# version 5.1; if the Apple clang version of the compiler
|
|
# is 5.1.0 or later, unset the required Objective-C flags
|
|
# to remove the garbage collection flags. Versions of VTK
|
|
# after 6.1.0 set VTK_REQUIRED_OBJCXX_FLAGS to the empty
|
|
# string. This fix was recommended on the VTK mailing list
|
|
# in March 2014 (see
|
|
# https://public.kitware.com/pipermail/vtkusers/2014-March/083368.html)
|
|
if self.spec.satisfies("%apple-clang@5.1.0:"):
|
|
cmake_args.extend(["-DVTK_REQUIRED_OBJCXX_FLAGS="])
|
|
|
|
# A bug in tao pegtl causes build failures with intel compilers
|
|
if "%intel" in spec and spec.version >= Version("8.2"):
|
|
cmake_args.append("-DVTK_MODULE_ENABLE_VTK_IOMotionFX:BOOL=OFF")
|
|
|
|
# -no-ipo prevents an internal compiler error from multi-file
|
|
# optimization (https://github.com/spack/spack/issues/20471)
|
|
if "%intel" in spec:
|
|
compile_flags.append("-no-ipo")
|
|
|
|
if compile_flags:
|
|
compile_flags = " ".join(compile_flags)
|
|
cmake_args.extend(
|
|
[
|
|
"-DCMAKE_C_FLAGS={0}".format(compile_flags),
|
|
"-DCMAKE_CXX_FLAGS={0}".format(compile_flags),
|
|
]
|
|
)
|
|
if spec.satisfies("@:8"):
|
|
vtk_example_arg = "BUILD_EXAMPLES"
|
|
else:
|
|
vtk_example_arg = "VTK_BUILD_EXAMPLES"
|
|
cmake_args.append(self.define_from_variant(f"{vtk_example_arg}", "examples"))
|
|
|
|
return cmake_args
|
|
|
|
@when("+examples")
|
|
def install(self, spec, prefix):
|
|
super().install(spec, prefix)
|
|
with working_dir(self.build_directory):
|
|
examples = glob.glob("bin\\*.exe")
|
|
for example in examples:
|
|
install(example, prefix.bin)
|