From 779fef7d41779fcddfc78fba9ab7e895f970b00c Mon Sep 17 00:00:00 2001
From: jmlapre <110123055+jmlapre@users.noreply.github.com>
Date: Thu, 30 Nov 2023 16:08:58 -0500
Subject: trilinos: new pytrilinos2 variant (#40615)

---
 var/spack/repos/builtin/packages/binder/package.py   |  2 +-
 var/spack/repos/builtin/packages/trilinos/package.py | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/var/spack/repos/builtin/packages/binder/package.py b/var/spack/repos/builtin/packages/binder/package.py
index 7ae8fe7f51..6072a8400f 100644
--- a/var/spack/repos/builtin/packages/binder/package.py
+++ b/var/spack/repos/builtin/packages/binder/package.py
@@ -49,6 +49,6 @@ class Binder(CMakePackage):
     def setup_dependent_package(self, module, dependent_spec):
         llvm_dir = self.spec["llvm"].prefix
         self.spec.clang_include_dirs = llvm_dir.include
-        self.spec.LibClang_include_dir = llvm_dir.lib.clang.join(
+        self.spec.libclang_include_dir = llvm_dir.lib.clang.join(
             format(self.spec["llvm"].version)
         ).include
diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py
index 1681ac35d2..e18bc88358 100644
--- a/var/spack/repos/builtin/packages/trilinos/package.py
+++ b/var/spack/repos/builtin/packages/trilinos/package.py
@@ -137,6 +137,8 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
     variant("nox", default=False, description="Compile with NOX")
     variant("panzer", default=False, description="Compile with Panzer")
     variant("piro", default=False, description="Compile with Piro")
+    variant("pytrilinos2", default=False, when="@develop", description="Compile with PyTrilinos2")
+    extends("python", when="+pytrilinos2")
     variant("phalanx", default=False, description="Compile with Phalanx")
     variant("rol", default=False, description="Compile with ROL")
     variant("rythmos", default=False, description="Compile with Rythmos")
@@ -289,6 +291,9 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
         conflicts("~ifpack")
         conflicts("~aztec")
 
+    # Don't disable python when building pytrilinos2
+    conflicts("~python", when="+pytrilinos2")
+
     # Known requirements from tribits dependencies
     conflicts("~thyra", when="+stratimikos")
     conflicts("+adelus", when="~kokkos")
@@ -401,6 +406,7 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
         depends_on(kokkos_spec, when="@14.4.0 +kokkos {0}".format(arch_str))
 
     depends_on("adios2", when="+adios2")
+    depends_on("binder@1.3:", when="+pytrilinos2", type="build")
     depends_on("blas")
     depends_on("boost+graph+math+exception+stacktrace", when="+boost")
     # Need to revisit the requirement of STK
@@ -420,12 +426,16 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
     depends_on("matio", when="+exodus")
     depends_on("metis", when="+zoltan")
     depends_on("mpi", when="+mpi")
+    depends_on("mpi", when="+pytrilinos2")
     depends_on("netcdf-c", when="+exodus")
     depends_on("parallel-netcdf", when="+exodus+mpi")
     depends_on("parmetis", when="+mpi +zoltan")
     depends_on("parmetis", when="+scorec")
     depends_on("py-mpi4py", when="+mpi+python", type=("build", "run"))
+    depends_on("py-mpi4py", when="+pytrilinos2", type=("build", "run"))
     depends_on("py-numpy", when="+python", type=("build", "run"))
+    depends_on("py-numpy", when="+pytrilinos2", type=("build", "run"))
+    depends_on("py-pybind11", when="+pytrilinos2", type=("build", "link"))
     depends_on("python", when="+python")
     depends_on("python", when="@13.2: +ifpack +hypre", type="build")
     depends_on("python", when="@13.2: +ifpack2 +hypre", type="build")
@@ -671,6 +681,7 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
                 define_trilinos_enable("Piro"),
                 define_trilinos_enable("Phalanx"),
                 define_trilinos_enable("PyTrilinos", "python"),
+                define_trilinos_enable("PyTrilinos2"),
                 define_trilinos_enable("ROL"),
                 define_trilinos_enable("Rythmos"),
                 define_trilinos_enable("Sacado"),
@@ -743,6 +754,15 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
                 ]
             )
 
+        if "+pytrilinos2" in spec:
+            binder = spec["binder"].prefix.bin.binder
+            clang_include_dirs = spec["binder"].clang_include_dirs
+            libclang_include_dir = spec["binder"].libclang_include_dir
+            options.append(define("PyTrilinos2_BINDER_EXECUTABLE", binder))
+            options.append(define("PyTrilinos2_BINDER_clang_include_dirs", clang_include_dirs))
+            options.append(define("PyTrilinos2_BINDER_LibClang_include_dir", libclang_include_dir))
+            options.append(define_from_variant("PyTrilinos2_ENABLE_TESTS", "test"))
+
         if "+stratimikos" in spec:
             # Explicitly enable Thyra (ThyraCore is required). If you don't do
             # this, then you get "NOT setting ${pkg}_ENABLE_Thyra=ON since
-- 
cgit v1.2.3-70-g09d2