diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/vtk/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/vtk/package.py | 264 |
1 files changed, 211 insertions, 53 deletions
diff --git a/var/spack/repos/builtin/packages/vtk/package.py b/var/spack/repos/builtin/packages/vtk/package.py index 0ab9a1a131..9cc75f3a8b 100644 --- a/var/spack/repos/builtin/packages/vtk/package.py +++ b/var/spack/repos/builtin/packages/vtk/package.py @@ -1,28 +1,10 @@ -############################################################################## -# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC. -# Produced at the Lawrence Livermore National Laboratory. +# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. # -# This file is part of Spack. -# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. -# LLNL-CODE-647188 -# -# For details, see https://github.com/spack/spack -# Please also see the NOTICE and LICENSE files for our notice and the LGPL. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License (as -# published by the Free Software Foundation) version 2.1, February 1999. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and -# conditions of the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -############################################################################## +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +import os from spack import * @@ -32,74 +14,250 @@ class Vtk(CMakePackage): processing and visualization. """ homepage = "http://www.vtk.org" - url = "http://www.vtk.org/files/release/7.1/VTK-7.1.0.tar.gz" + url = "http://www.vtk.org/files/release/8.0/VTK-8.0.1.tar.gz" list_url = "http://www.vtk.org/download/" + version('8.1.1', sha256='71a09b4340f0a9c58559fe946dc745ab68a866cf20636a41d97b6046cb736324') + version('8.0.1', '692d09ae8fadc97b59d35cab429b261a') version('7.1.0', 'a7e814c1db503d896af72458c2d0228f') version('7.0.0', '5fe35312db5fb2341139b8e4955c367d') version('6.3.0', '0231ca4840408e9dd60af48b314c5b6d') version('6.1.0', '25e4dfb3bad778722dcaec80cd5dab7d') # VTK7 defaults to OpenGL2 rendering backend - variant('opengl2', default=True, description='Build with OpenGL2 instead of OpenGL as rendering backend') - variant('python', default=False, description='Build the python modules') + variant('opengl2', default=True, description='Enable OpenGL2 backend') + variant('osmesa', default=False, description='Enable OSMesa support') + variant('python', default=False, description='Enable Python support') + 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') + + # Haru causes trouble on Fedora and Ubuntu in v8.1.1 + # See https://bugzilla.redhat.com/show_bug.cgi?id=1460059#c13 + variant('haru', default=True, description='Enable libharu') patch('gcc.patch', when='@6.1.0') - depends_on('qt') + # At the moment, we cannot build with both osmesa and qt, but as of + # VTK 8.1, that should change + conflicts('+osmesa', when='+qt') + + depends_on('python', when='+python') + depends_on('py-mpi4py', when='+mpi +python', type='run') + extends('python', when='+python') + # python3.7 compatibility patch backported from upstream + # https://gitlab.kitware.com/vtk/vtk/commit/706f1b397df09a27ab8981ab9464547028d0c322 + patch('python3.7-const-char.patch', when='@:8.1.1 ^python@3.7:') + + # The use of the OpenGL2 backend requires at least OpenGL Core Profile + # version 3.2 or higher. + depends_on('gl@3.2:', when='+opengl2') + + # If you didn't ask for osmesa, then hw rendering using vendor-specific + # drivers is faster, but it must be done externally. + depends_on('opengl', when='~osmesa') + + # Note: it is recommended to use mesa+llvm, if possible. + # mesa default is software rendering, llvm makes it faster + depends_on('mesa', when='+osmesa') + + # VTK will need Qt5OpenGL, and qt needs '-opengl' for that + depends_on('qt+opengl', when='+qt') + + depends_on('mpi', when='+mpi') + + depends_on('libharu', when='+haru') + + depends_on('boost', when='+xdmf') + depends_on('boost+mpi', when='+xdmf +mpi') + + depends_on('mpi', when='+mpi') + + depends_on('ffmpeg', when='+ffmpeg') + + depends_on('expat') + depends_on('freetype') + depends_on('glew') depends_on('hdf5') + depends_on('libjpeg') + depends_on('jsoncpp') + depends_on('libxml2') + depends_on('lz4') depends_on('netcdf') depends_on('netcdf-cxx') - - extends('python', when='+python') + depends_on('libpng') + depends_on('libtiff') + depends_on('zlib') 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_environment(self, spack_env, run_env): + # VTK has some trouble finding freetype unless it is set in + # the environment + spack_env.set('FREETYPE_DIR', self.spec['freetype'].prefix) + def cmake_args(self): spec = self.spec opengl_ver = 'OpenGL{0}'.format('2' if '+opengl2' in spec else '') - qt_ver = spec['qt'].version.up_to(1) - qt_bin = spec['qt'].prefix.bin - cmake_args = std_cmake_args[:] - cmake_args.extend([ + cmake_args = [ '-DBUILD_SHARED_LIBS=ON', '-DVTK_RENDERING_BACKEND:STRING={0}'.format(opengl_ver), - '-DVTK_USE_SYSTEM_HDF5=ON', - '-DVTK_USE_SYSTEM_NETCDF=ON', + + '-DVTK_USE_SYSTEM_LIBHARU=%s' % ( + 'ON' if '+haru' in spec else 'OFF'), + + # In general, we disable use of VTK "ThirdParty" libs, preferring + # spack-built versions whenever possible + '-DVTK_USE_SYSTEM_LIBRARIES:BOOL=ON', + + # However, in a few cases we can't do without them yet + '-DVTK_USE_SYSTEM_GL2PS:BOOL=OFF', + '-DVTK_USE_SYSTEM_LIBPROJ4:BOOL=OFF', + '-DVTK_USE_SYSTEM_OGGTHEORA:BOOL=OFF', + '-DNETCDF_DIR={0}'.format(spec['netcdf'].prefix), '-DNETCDF_C_ROOT={0}'.format(spec['netcdf'].prefix), '-DNETCDF_CXX_ROOT={0}'.format(spec['netcdf-cxx'].prefix), - # Enable/Disable wrappers for Python. - '-DVTK_WRAP_PYTHON={0}'.format( - 'ON' if '+python' in spec else 'OFF'), - # Disable wrappers for other languages. '-DVTK_WRAP_JAVA=OFF', '-DVTK_WRAP_TCL=OFF', + ] + + if '+mpi' in spec: + cmake_args.extend([ + '-DVTK_Group_MPI:BOOL=ON', + '-DVTK_USE_SYSTEM_DIY2:BOOL=OFF', + ]) - # Enable Qt support here. - '-DVTK_QT_VERSION:STRING={0}'.format(qt_ver), - '-DQT_QMAKE_EXECUTABLE:PATH={0}/qmake'.format(qt_bin), - '-DVTK_Group_Qt:BOOL=ON', - ]) + if '+ffmpeg' in spec: + cmake_args.extend(['-DModule_vtkIOFFMPEG:BOOL=ON']) - # 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']: + # Enable/Disable wrappers for Python. + if '+python' in spec: cmake_args.extend([ - '-DVTK_Group_Qt:BOOL=OFF', - '-DModule_vtkGUISupportQt:BOOL=ON', - '-DModule_vtkGUISupportQtOpenGL:BOOL=ON', + '-DVTK_WRAP_PYTHON=ON', + '-DPYTHON_EXECUTABLE={0}'.format(spec['python'].command.path), + '-DVTK_USE_SYSTEM_MPI4PY:BOOL=ON' + ]) + 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') + + cmake_args.extend([ + # Enable Qt support here. + '-DVTK_QT_VERSION:STRING={0}'.format(qt_ver), + '-DQT_QMAKE_EXECUTABLE:PATH={0}'.format(qmake_exe), + '-DVTK_Group_Qt:BOOL=ON', + ]) + + # 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']: + cmake_args.extend([ + '-DVTK_Group_Qt:BOOL=OFF', + '-DModule_vtkGUISupportQt:BOOL=ON', + '-DModule_vtkGUISupportQtOpenGL:BOOL=ON', + ]) + + 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"]) + + 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", + "-DHDF5_ROOT={0}".format(spec['hdf5'].prefix), + # The xdmf project does not export any CMake file... + "-DVTK_USE_SYSTEM_XDMF3:BOOL=OFF", + "-DVTK_USE_SYSTEM_XDMF2:BOOL=OFF" + ]) + + if '+mpi' in spec: + cmake_args.extend(["-DModule_vtkIOParallelXdmf3:BOOL=ON"]) + + if '+osmesa' in spec: + prefix = spec['mesa'].prefix + osmesa_include_dir = prefix.include + osmesa_library = os.path.join(prefix.lib, 'libOSMesa.so') + + use_param = 'VTK_USE_X' + if 'darwin' in spec.architecture: + use_param = 'VTK_USE_COCOA' + + cmake_args.extend([ + '-D{0}:BOOL=OFF'.format(use_param), + '-DVTK_OPENGL_HAS_OSMESA:BOOL=ON', + '-DOSMESA_INCLUDE_DIR:PATH={0}'.format(osmesa_include_dir), + '-DOSMESA_LIBRARY:FILEPATH={0}'.format(osmesa_library), + ]) + else: + prefix = spec['opengl'].prefix + + opengl_include_dir = prefix.include + opengl_library = os.path.join(prefix.lib, 'libGL.so') + if 'darwin' in spec.architecture: + opengl_include_dir = prefix + opengl_library = prefix + + cmake_args.extend([ + '-DOPENGL_INCLUDE_DIR:PATH={0}'.format(opengl_include_dir), + '-DOPENGL_gl_LIBRARY:FILEPATH={0}'.format(opengl_library) ]) if spec.satisfies('@:6.1.0'): - cmake_args.append('-DCMAKE_C_FLAGS=-DGLX_GLXEXT_LEGACY') - cmake_args.append('-DCMAKE_CXX_FLAGS=-DGLX_GLXEXT_LEGACY') + cmake_args.extend([ + '-DCMAKE_C_FLAGS=-DGLX_GLXEXT_LEGACY', + '-DCMAKE_CXX_FLAGS=-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('%clang') and + self.compiler.is_apple and + self.compiler.version >= Version('5.1.0')): + cmake_args.extend(['-DVTK_REQUIRED_OBJCXX_FLAGS=""']) return cmake_args |