# Copyright 2013-2023 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 sys
from spack.package import *
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["szip"].prefix))
if "zlib" in self.spec:
extra_args.append("--with-zlib={0}".format(self.spec["zlib"].prefix))
return extra_args