spack/var/spack/repos/builtin/packages/heasoft/package.py

144 lines
5.5 KiB
Python
Raw Normal View History

2022-04-11 16:47:38 +08:00
# Copyright 2013-2022 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)
import os
import llnl.util.tty as tty
from spack.package import *
2022-04-11 16:47:38 +08:00
from spack.util.environment import EnvironmentModifications
class Heasoft(AutotoolsPackage):
"""A Unified Release of the FTOOLS and XANADU Software Packages.
XANADU: High-level, multi-mission tasks for X-ray astronomical spectral,
timing, and imaging data analysis. FTOOLS: General and mission-specific
tools to manipulate FITS files. FITSIO: Core library responsible for reading
and writing FITS files. fv: General FITS file browser/editor/plotter with a
graphical user interface. XSTAR: Tool for calculating the physical
conditions and emission spectra of photoionized gases"""
homepage = "https://heasarc.gsfc.nasa.gov/docs/software/lheasoft/"
url = "https://heasarc.gsfc.nasa.gov/FTP/software/lheasoft/lheasoft6.29/heasoft-6.29src.tar.gz"
maintainers = ['glennpj']
version('6.30',
sha256='7f828f6050809653319f94d715c1b6815fbc09adfdcb61f2f0f1d7a6af10684a')
version('6.29',
sha256='534fec04baa2586326fd7240805f2606620f3b7d7078a80fdd95c9c1177c9e68')
variant('X', default=True, description='Enable X11 support')
depends_on('zlib')
depends_on('ncurses')
depends_on('curl')
depends_on('libxt', when='+X')
depends_on('libx11', when='+X')
depends_on('readline')
depends_on('libpng')
depends_on('perl-extutils-makemaker')
depends_on('py-numpy')
extends('python')
conflicts('%gcc@:4,10:')
# Do not create directory in $HOME during environment sourcing and use a
# predictable name for the file to be sourced.
patch('setup.patch')
# tcltk-configure: Remove redundant X11 header test because spack has X11
# headers in different directories
#
# xspec: The HEASOFT project provides a tarball of replacement files for
# Xspec, along with a TCL patch utility. This is meant for updating a
# source tree in place with minimal rebuilding. This does not fit Spack's
# model so convert those to patches. These are kept in sync with what is on
# https://heasarc.gsfc.nasa.gov/docs/software/lheasoft/xanadu/xspec/issues/issues.html
with when("@6.29"):
patch('heasoft-6.29_tcltk-configure.patch')
patch('heasoft-6.29_xspec-12.12.0a.patch')
patch('heasoft-6.29_xspec-12.12.0b.patch')
patch('heasoft-6.29_xspec-12.12.0c.patch')
patch('heasoft-6.29_xspec-12.12.0d.patch')
patch('heasoft-6.29_xspec-12.12.0e.patch')
patch('heasoft-6.29_xspec-12.12.0f.patch')
patch('heasoft-6.29_xspec-12.12.0g.patch')
patch('heasoft-6.29_xspec-12.12.0ver.patch')
with when("@6.30"):
patch('heasoft-6.30_tcltk-configure.patch')
configure_directory = 'BUILD_DIR'
parallel = False
def patch(self):
filter_file(r'(--with-readline-library=)\\\$READLINE_DIR',
r'\1{0}'.format(self.spec['readline'].libs.directories[0]),
join_path('tcltk', 'BUILD_DIR', 'hd_config_info'))
filter_file(r'(--with-readline-includes=)\\\$READLINE_DIR',
r'\1{0}'.format(
join_path(self.spec['readline'].headers.directories[0],
'readline')),
join_path('tcltk', 'BUILD_DIR', 'hd_config_info'))
if '+X' in self.spec:
filter_file(r'(\s+XDIR => ).*',
r"\1'{0}',".format(self.spec['libx11'].libs.directories[0]),
join_path('tcltk', 'PGPLOT-perl', 'Makefile.PL'))
def configure_args(self):
config_args = [
'--with-png={0}'.format(self.spec['libpng'].prefix),
'CPPFLAGS={0}'.format(self.spec['zlib'].headers.include_flags),
'LDFLAGS={0}'.format(self.spec['zlib'].libs.search_flags)
]
config_args += self.enable_or_disable('x', variant='X')
if '+X' in self.spec:
config_args.extend([
'--x-includes={0}'.format(self.spec['libx11'].headers.directories[0]),
'--x-libraries={0}'.format(self.spec['libx11'].libs.directories[0]),
])
return config_args
@run_after('install')
def generate_environment(self):
host_family = self.spec.target.family
host_platform = self.spec.platform
host_libc = os.confstr('CS_GNU_LIBC_VERSION').split()[1]
target = '{0}-pc-{1}-gnu-libc{2}'.format(host_family, host_platform,
host_libc)
headas_setup_file = join_path(self.spec.prefix, target, 'BUILD_DIR',
'headas-setup')
filter_file(r'(^headas_config=).*',
r'\1{0}'.format(join_path(self.prefix, 'headas-config_spack')),
headas_setup_file)
filter_file(r'(^flavor.*\n)',
r'\1HEADAS={0}'.format(join_path(self.spec.prefix, target))
+ "\n",
headas_setup_file)
headas_setup = Executable(headas_setup_file)
headas_setup('sh')
def setup_run_environment(self, env):
try:
env.extend(EnvironmentModifications.from_sourcing_file(
join_path(self.spec.prefix, 'headas-config_spack.sh'), clean=True
))
except Exception as e:
msg = 'unexpected error when sourcing HEASOFT setup [{0}]'
tty.warn(msg.format(str(e)))