167 lines
6.2 KiB
Python
167 lines
6.2 KiB
Python
# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
|
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
#
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
from spack import *
|
|
|
|
|
|
class Glvis(MakefilePackage):
|
|
"""GLVis: an OpenGL tool for visualization of FEM meshes and functions"""
|
|
|
|
homepage = "http://glvis.org"
|
|
git = "https://github.com/glvis/glvis.git"
|
|
|
|
maintainers = ['goxberry', 'v-dobrev', 'tzanio', 'tomstitt']
|
|
|
|
# glvis (like mfem) is downloaded from a URL shortener at request
|
|
# of upstream author Tzanio Kolev <tzanio@llnl.gov>. See here:
|
|
# https://github.com/mfem/mfem/issues/53
|
|
#
|
|
# The following procedure should be used to verify security when a
|
|
# new version is added:
|
|
#
|
|
# 1. Verify that no checksums on old versions have changed.
|
|
#
|
|
# 2. Verify that the shortened URL for the new version is listed at:
|
|
# http://glvis.org/download/
|
|
#
|
|
# 3. Use http://getlinkinfo.com or similar to verify that the
|
|
# underling download link for the latest version comes has the
|
|
# prefix: http://glvis.github.io/releases
|
|
#
|
|
# If this quick verification procedure fails, additional discussion
|
|
# will be required to verify the new version.
|
|
#
|
|
# glvis does not need mfem+mpi but will build that by default, to just build
|
|
# a serial mfem: `spack install glvis ^mfem~mpi~metis'
|
|
|
|
version('develop', branch='master')
|
|
|
|
version('4.0',
|
|
sha256='68331eaea8b93968ed6bf395388c2730b27bbcb4b7809ce44277726edccd9f08',
|
|
url='https://bit.ly/glvis-4-0',
|
|
extension='.tar.gz')
|
|
|
|
version('3.4',
|
|
sha256='289fbd2e09d4456e5fee6162bdc3e0b4c8c8d54625f3547ad2a69fef319279e7',
|
|
url='https://bit.ly/glvis-3-4',
|
|
extension='.tar.gz')
|
|
|
|
version('3.3',
|
|
sha256='e24d7c5cb53f208b691c872fe82ea898242cfdc0fd68dd0579c739e070dcd800',
|
|
url='http://goo.gl/C0Oadw',
|
|
extension='.tar.gz')
|
|
|
|
version('3.2',
|
|
sha256='c82cb110396e63b6436a770c55eb6d578441eaeaf3f9cc20436c242392e44e80',
|
|
url='http://goo.gl/hzupg1',
|
|
extension='.tar.gz')
|
|
|
|
version('3.1',
|
|
sha256='793e984ddfbf825dcd13dfe1ca00eccd686cd40ad30c8789ba80ee175a1b488c',
|
|
url='http://goo.gl/gQZuu9',
|
|
extension='tar.gz')
|
|
|
|
variant('screenshots',
|
|
default='png',
|
|
values=('xwd', 'png', 'tiff'),
|
|
description='Backend used for screenshots')
|
|
variant('fonts', default=True,
|
|
description='Use antialiased fonts via freetype & fontconfig')
|
|
|
|
depends_on('mfem@develop', when='@develop')
|
|
depends_on('mfem@4.0.0:', when='@4.0')
|
|
depends_on('mfem@3.4.0', when='@3.4')
|
|
depends_on('mfem@3.3', when='@3.3')
|
|
depends_on('mfem@3.2', when='@3.2')
|
|
depends_on('mfem@3.1', when='@3.1')
|
|
|
|
depends_on('gl')
|
|
depends_on('glu')
|
|
depends_on('libx11', when='@:3.5')
|
|
|
|
depends_on('sdl2', when='@4.0:,develop')
|
|
depends_on('glm', when='@4.0:,develop')
|
|
depends_on('glew', when='@4.0:,develop')
|
|
|
|
depends_on('libpng', when='screenshots=png')
|
|
depends_on('libtiff', when='screenshots=tiff')
|
|
depends_on('freetype', when='+fonts')
|
|
depends_on('freetype', when='@4.0:,develop')
|
|
depends_on('fontconfig', when='+fonts')
|
|
depends_on('fontconfig', when='@4.0:,develop')
|
|
|
|
depends_on('uuid', when='platform=linux')
|
|
|
|
def edit(self, spec, prefix):
|
|
|
|
def yes_no(s):
|
|
return 'YES' if self.spec.satisfies(s) else 'NO'
|
|
|
|
mfem = spec['mfem']
|
|
config_mk = mfem.package.config_mk
|
|
|
|
args = ['CC={0}'.format(env['CC']),
|
|
'PREFIX={0}'.format(prefix.bin),
|
|
'MFEM_DIR={0}'.format(mfem.prefix),
|
|
'CONFIG_MK={0}'.format(config_mk)]
|
|
|
|
png_args = ['PNG_OPTS=-DGLVIS_USE_LIBPNG -I{0}'.format(
|
|
spec['libpng'].prefix.include),
|
|
'PNG_LIBS={0}'.format(
|
|
spec['libpng'].libs.ld_flags)] if 'screenshots=png' in spec else []
|
|
|
|
tiff_args = ['TIFF_OPTS=-DGLVIS_USE_LIBTIFF -I{0}'.format(
|
|
spec['libtiff'].prefix.include),
|
|
'TIFF_LIBS={0}'.format(
|
|
spec['libtiff'].libs.ld_flags)] if 'screenshots=tiff' in spec else []
|
|
|
|
if "@4.0:" in spec or "@develop" in spec:
|
|
# TODO: glu and fontconfig dirs
|
|
args += ['GLM_DIR={0}'.format(spec['glm'].prefix),
|
|
'SDL_DIR={0}'.format(spec['sdl2'].prefix),
|
|
'GLEW_DIR={0}'.format(spec['glew'].prefix),
|
|
'FREETYPE_DIR={0}'.format(spec['freetype'].prefix),
|
|
'OPENGL_DIR={0}'.format(spec['gl'].prefix)]
|
|
|
|
if 'screenshots=png' in spec:
|
|
args += ['GLVIS_USE_LIBPNG=YES', 'GLVIS_USE_LIBTIFF=NO']
|
|
args.extend(png_args)
|
|
elif 'screenshots=tiff' in spec:
|
|
args += ['GLVIS_USE_LIBPNG=NO', 'GLVIS_USE_LIBTIFF=YES']
|
|
args.extend(tiff_args)
|
|
else:
|
|
args += ['GLVIS_USE_LIBPNG=NO', 'GLVIS_USE_LIBTIFF=NO']
|
|
|
|
else:
|
|
gl_libs = spec['glu'].libs + spec['gl'].libs + spec['libx11'].libs
|
|
|
|
args += ['GL_OPTS=-I{0} -I{1} -I{2}'.format(
|
|
spec['libx11'].prefix.include,
|
|
spec['gl'].prefix.include,
|
|
spec['glu'].prefix.include),
|
|
'GL_LIBS={0}'.format(gl_libs.ld_flags)]
|
|
|
|
if 'screenshots=png' in spec:
|
|
args += ['USE_LIBPNG=YES', 'USE_LIBTIFF=NO']
|
|
args.extend(png_args)
|
|
elif 'screenshots=tiff' in spec:
|
|
args += ['USE_LIBPNG=NO', 'USE_LIBTIFF=YES']
|
|
args.extend(tiff_args)
|
|
else:
|
|
args += ['USE_LIBPNG=NO', 'USE_LIBTIFF=NO']
|
|
|
|
args.append('USE_FREETYPE={0}'.format(yes_no('+fonts')))
|
|
if '+fonts' in spec:
|
|
args += [
|
|
'FT_OPTS=-DGLVIS_USE_FREETYPE {0} -I{1}'.format(
|
|
spec['freetype'].headers.include_flags,
|
|
spec['fontconfig'].prefix.include),
|
|
'FT_LIBS={0} {1}'.format(
|
|
spec['freetype'].libs.ld_flags,
|
|
spec['fontconfig'].libs.ld_flags)]
|
|
|
|
self.build_targets = args
|
|
self.install_targets += args
|