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
|
|
|
|
|
2022-05-29 00:55:44 +08:00
|
|
|
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)))
|