summaryrefslogblamecommitdiff
path: root/var/spack/repos/builtin/packages/hdf-eos5/package.py
blob: 4e10b79615707a87140de48f468859f230b6a3d5 (plain) (tree)
1
                                                                         














































                                                                                                                                                                                 

                             
                        
                         











































                                                                             



                                                        

                                                       

                         
# 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 *
import sys


class HdfEos5(AutotoolsPackage):
    """HDF-EOS (Hierarchical Data Format - Earth Observing System) is a
    self-describing file format based upon HDF for standard data products
    that are derived from EOS missions.  HDF-EOS5 is based upon HDF5.
    """

    homepage = "https://hdfeos.org"
    # The download URLs are messing, and include sha256 checksum.
    # This is just a template.  See version_list and url_for_version below
    # Template for url_for_version. 0 is sha256 checksum, 1 is filename
    url = "https://git.earthdata.nasa.gov/rest/git-lfs/storage/DAS/hdfeos5/{0}?response-content-disposition=attachment%3B%20filename%3D%22{1}%22%3B%20filename*%3Dutf-8%27%27{1}"

    # Crazy URL scheme, differing with each version, and including the
    # sha256 checksum in the URL.  Yuck
    # The data in version_list is used to generate versions and urls
    # In basename expansions, 0 is raw version,
    # 1 is for version with dots => underscores
    version_list = [
        {'version': '5.1.16',
            'sha256': '7054de24b90b6d9533329ef8dc89912c5227c83fb447792103279364e13dd452',
            'basename': 'HDF-EOS{0}.tar.Z'},
        {'version': '5.1.15',
            'sha256': 'fbf4d085f9bf6ffad259aee1e9f60cf060e7e99c447894ad8955df02de83c92c',
            'basename': 'hdfeos{1}.zip'}
    ]

    for vrec in version_list:
        ver = vrec['version']
        sha256 = vrec['sha256']
        version(ver, sha256=sha256)

    variant('shared', default=True,
            description='Build shared libraries (can be used with +static)')
    variant('static', default=True,
            description='Build shared libraries (can be used with +shared)')

    conflicts('~static', when='~shared',
              msg='At least one of +static or +shared must be set')

    maintainers = ['payerle']

    # Build dependencies
    depends_on('hdf5+hl')

    # The standard Makefile.am, etc. add a --single_module flag to LDFLAGS
    # to pass to the linker.
    # That appears to be only recognized by the Darwin linker, remove it
    # if we are not running on darwin/
    if sys.platform != "darwin":
        patch('hdf-eos5.nondarwin-no-single_module.patch')

    def url_for_version(self, version):
        vrec = [x for x in self.version_list
                if x['version'] == version.dotted.string]
        if vrec:
            fname = vrec[0]['basename'].format(version.dotted,
                                               version.underscored)
            sha256 = vrec[0]['sha256']
            myurl = self.url.format(sha256, fname)
            return myurl
        else:
            sys.exit('ERROR: cannot generate URL for version {0};'
                     'version/checksum not found in version_list'.format(
                         version))

    def configure_args(self):
        extra_args = []

        # Package really wants h5cc to be used
        if self.spec['mpi']:
            extra_args.append('CC={0}/bin/h5pcc -Df2cFortran'.format(
                self.spec['hdf5'].prefix))
        else:
            extra_args.append('CC={0}/bin/h5cc -Df2cFortran'.format(
                self.spec['hdf5'].prefix))

        # We always build PIC code
        extra_args.append('--with-pic')
        # We always enable installation of include directories
        extra_args.append('--enable-install-include')

        # Set shared/static appropriately
        extra_args.extend(self.enable_or_disable('shared'))
        extra_args.extend(self.enable_or_disable('static'))

        # Provide config args for dependencies
        extra_args.append('--with-hdf5={0}'.format(self.spec['hdf5'].prefix))
        if 'szip' in self.spec:
            extra_args.append('--with-szlib={0}'.format(
                self.spec['libszip'].prefix))
        if 'zlib' in self.spec:
            extra_args.append('--with-zlib={0}'.format(
                self.spec['zlib'].prefix))

        return extra_args