HDF5: supports external detection (#34940)

This commit is contained in:
Brian Van Essen 2023-01-19 10:44:00 -06:00 committed by GitHub
parent 80db7a8a52
commit 939b749726
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4,6 +4,7 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
import re
import shutil
import llnl.util.tty as tty
@ -32,6 +33,7 @@ class Hdf5(CMakePackage):
]
tags = ["e4s"]
executables = ["^h5cc$", "^h5pcc$"]
test_requires_compiler = True
@ -454,6 +456,79 @@ def libs(self):
return find_libraries(libraries, root=self.prefix, shared=shared, recursive=True)
@classmethod
def determine_version(cls, exe):
output = Executable(exe)("-showconfig", output=str, error=str)
match = re.search(r"HDF5 Version: (\d+\.\d+\.\d+)(\D*\S*)", output)
return match.group(1) if match else None
@classmethod
def determine_variants(cls, exes, version):
def is_enabled(text):
if text in set(["t", "true", "enabled", "yes", "1"]):
return True
return False
results = []
for exe in exes:
variants = []
output = Executable(exe)("-showconfig", output=str, error=os.devnull)
match = re.search(r"High-level library: (\S+)", output)
if match and is_enabled(match.group(1)):
variants.append("+hl")
else:
variants.append("~hl")
match = re.search(r"Parallel HDF5: (\S+)", output)
if match and is_enabled(match.group(1)):
variants.append("+mpi")
else:
variants.append("~mpi")
match = re.search(r"C\+\+: (\S+)", output)
if match and is_enabled(match.group(1)):
variants.append("+cxx")
else:
variants.append("~cxx")
match = re.search(r"Fortran: (\S+)", output)
if match and is_enabled(match.group(1)):
variants.append("+fortran")
else:
variants.append("~fortran")
match = re.search(r"Java: (\S+)", output)
if match and is_enabled(match.group(1)):
variants.append("+java")
else:
variants.append("~java")
match = re.search(r"Threadsafety: (\S+)", output)
if match and is_enabled(match.group(1)):
variants.append("+threadsafe")
else:
variants.append("~threadsafe")
match = re.search(r"Build HDF5 Tools: (\S+)", output)
if match and is_enabled(match.group(1)):
variants.append("+tools")
else:
variants.append("~tools")
match = re.search(r"I/O filters \(external\): \S*(szip\(encoder\))\S*", output)
if match:
variants.append("+szip")
else:
variants.append("~szip")
match = re.search(r"Default API mapping: (\S+)", output)
if match and match.group(1) in set(["v114", "v112", "v110", "v18", "v16"]):
variants.append("api={0}".format(match.group(1)))
results.append(" ".join(variants))
return results
@when("@:1.8.21,1.10.0:1.10.5+szip")
def setup_build_environment(self, env):
env.set("SZIP_INSTALL", self.spec["szip"].prefix)