95 lines
3.9 KiB
Python
95 lines
3.9 KiB
Python
# Copyright 2013-2024 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.package import *
|
|
|
|
|
|
class Uqtk(CMakePackage):
|
|
"""Sandia Uncertainty Quantification Toolkit. The UQ Toolkit (UQTk) is a
|
|
collection of libraries and tools for the quantification of uncertainty
|
|
in numerical model predictions"""
|
|
|
|
homepage = "https://www.sandia.gov/UQToolkit/"
|
|
url = "https://github.com/sandialabs/UQTk/archive/v3.0.4.tar.gz"
|
|
git = "https://github.com/sandialabs/UQTk.git"
|
|
|
|
maintainers("omsai", "bjdebus")
|
|
|
|
version("master", branch="master")
|
|
version("3.1.3", sha256="37840630357c4f407191d7a4276dfe219df35d54d288d68fea1746dfcbc3c5c1")
|
|
version("3.1.2", sha256="57ce0cea709777cbefb46f3bd86a0996a0ed5f50fc54cc297599df6e4bb9ab83")
|
|
version("3.1.0", sha256="56ecd3d13bdd908d568e9560dc52cc0f66d7bdcdbe64ab2dd0147a7cf1734f97")
|
|
version("3.0.4", sha256="0a72856438134bb571fd328d1d30ce3d0d7aead32eda9b7fb6e436a27d546d2e")
|
|
|
|
variant(
|
|
"python", default=True, description="Compile Python scripts and interface to C++ libraries"
|
|
)
|
|
|
|
depends_on("expat")
|
|
depends_on("sundials@6:", when="@3.1.3:")
|
|
depends_on("sundials@:5", when="@3.1.0:3.1.2")
|
|
depends_on("blas", when="@3.1.0:")
|
|
depends_on("lapack", when="@3.1.0:")
|
|
|
|
extends("python", when="+python")
|
|
depends_on("py-numpy", type=("build", "run"), when="+python")
|
|
depends_on("py-scipy", type=("build", "run"), when="+python")
|
|
depends_on("py-matplotlib", type=("build", "run"), when="+python")
|
|
depends_on("py-pymc3", type=("build", "run"), when="+python")
|
|
depends_on("swig", type="build", when="@:3.1.0 +python")
|
|
|
|
# The two patches for 3.1.0 fail with 3.1.2, therefore convert the patches
|
|
# to more versatile and reliable sed-like filter_file substitutions.
|
|
def patch(self):
|
|
# These patches affect many CMakeLists.txt files.
|
|
cmakelists = find(".", "CMakeLists.txt")
|
|
|
|
# All patched lines start with "target_link_libraries";
|
|
# case-insensitive.
|
|
tll = (
|
|
r"(.*[tT][aA][rR][gG][eE][tT]_[lL][iI][nN][kK]_"
|
|
r"[lL][iI][bB][rR][aA][rR][iI][eE][sS].+)"
|
|
)
|
|
|
|
# Modify the process of directly specifying blas/lapack as the library
|
|
# name.
|
|
if "@3.1.0:3.1.2" in self.spec:
|
|
lp = r"\${LAPACK_LIBRARIES}"
|
|
bl = r"\${BLAS_LIBRARIES}"
|
|
# Replace duplicate entries.
|
|
filter_file(rf"{tll}lapack ({lp}.+)", r"\1 \2", *cmakelists)
|
|
filter_file(rf"{tll}blas ({lp}.+)", r"\1 \2", *cmakelists)
|
|
# Replace with the variable.
|
|
filter_file(rf"{tll}lapack(.+)", rf"\1{lp}\2", *cmakelists)
|
|
filter_file(rf"{tll}blas(.+)", rf"\1{bl}\2", *cmakelists)
|
|
|
|
# Do not link the gfortran library for the Fujitsu compiler.
|
|
if "@3.1.0:%fj" in self.spec:
|
|
filter_file(rf"{tll} gfortran(.+stdc[+][+].+)", r"\1\2", *cmakelists)
|
|
|
|
@when("@3.1.0:")
|
|
def cmake_args(self):
|
|
spec = self.spec
|
|
|
|
# Make sure we use Spack's blas/lapack:
|
|
lapack_libs = spec["lapack"].libs.joined(";")
|
|
blas_libs = spec["blas"].libs.joined(";")
|
|
|
|
args = [
|
|
self.define("CMAKE_SUNDIALS_DIR", spec["sundials"].prefix),
|
|
self.define("LAPACK_LIBRARIES", lapack_libs),
|
|
self.define("BLAS_LIBRARIES", blas_libs),
|
|
self.define_from_variant("PyUQTk", "python"),
|
|
]
|
|
|
|
return args
|
|
|
|
def setup_run_environment(self, env):
|
|
if "+python" in self.spec:
|
|
env.prepend_path("PYTHONPATH", self.prefix)
|
|
env.prepend_path("PYTHONPATH", "{0}/PyUQTk".format(self.prefix))
|
|
env.prepend_path("LD_LIBRARY_PATH", "{0}/PyUQTk/".format(self.prefix))
|
|
env.set("UQTK_SRC", self.prefix)
|
|
env.set("UQTK_INS", self.prefix)
|