From b894f996c0401b32ca12fcbf5362eee7d0c84652 Mon Sep 17 00:00:00 2001 From: Paul Kuberry Date: Thu, 16 May 2024 15:36:11 -0400 Subject: [PATCH] trilinos: catch kokkos inconsistency with trilinos (#44209) * trilinos: catch kokkos inconsistency with trilinos * trilinos: update kokkos version range --- .../builtin/packages/trilinos/package.py | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py index acdacddc6db..ee5bc5dcb7d 100644 --- a/var/spack/repos/builtin/packages/trilinos/package.py +++ b/var/spack/repos/builtin/packages/trilinos/package.py @@ -5,6 +5,7 @@ import os import pathlib +import re import sys from spack.build_environment import dso_suffix @@ -400,7 +401,7 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage): # ###################### Dependencies ########################## # External Kokkos - depends_on("kokkos@4.3.00", when="@master: +kokkos") + depends_on("kokkos@4.3.01", when="@master: +kokkos") depends_on("kokkos@4.2.01", when="@15.1.0:15.1.1 +kokkos") depends_on("kokkos@4.1.00", when="@14.4.0:15.0.0 +kokkos") @@ -605,6 +606,30 @@ def cmake_args(self): define = self.define define_from_variant = self.define_from_variant + if self.spec.satisfies("@master: +kokkos"): + with open( + os.path.join(self.stage.source_path, "packages", "kokkos", "CMakeLists.txt") + ) as f: + all_txt = f.read() + r = dict( + re.findall(r".*set\s?\(\s?Kokkos_VERSION_(MAJOR|MINOR|PATCH)\s?(\d+)", all_txt) + ) + kokkos_version_in_trilinos_source = Version( + ".".join([r["MAJOR"], r["MINOR"], r["PATCH"].zfill(2)]) + ) + kokkos_version_specified = spec["kokkos"].version + if kokkos_version_in_trilinos_source != kokkos_version_specified: + raise InstallError( + "For Trilinos@[master,develop], ^kokkos version in spec must " + "match version in Trilinos source code. Specify ^kokkos@{0} ".format( + kokkos_version_in_trilinos_source + ) + + "for trilinos@[master,develop] instead of ^kokkos@{0}.\n".format( + kokkos_version_specified + ) + + "Trilinos recipe maintainers, please update the ^kokkos version range" + ) + def _make_definer(prefix): def define_enable(suffix, value=None): key = prefix + suffix