From 4641080b6e9063b60ac8098a57f634829c69a5f1 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 29 Apr 2026 05:26:44 -0600 Subject: [PATCH 01/16] Pin openssl for hercules / orion to a version matching system libs (#2009) Co-authored-by: Rick Grubin --- configs/sites/tier1/hercules/packages.yaml | 7 +++++++ configs/sites/tier1/orion/packages.yaml | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/configs/sites/tier1/hercules/packages.yaml b/configs/sites/tier1/hercules/packages.yaml index 7c438842b..f2e6478a8 100644 --- a/configs/sites/tier1/hercules/packages.yaml +++ b/configs/sites/tier1/hercules/packages.yaml @@ -13,6 +13,13 @@ packages: prefix: /apps/spack-managed/gcc-11.3.1/zlib-1.2.13-ltp4c3zzde3zi3gf7x4b7c7nj5ww4i4g modules: - zlib/1.2.13 + + # https://github.com/JCSDA/spack-stack/issues/1892 + openssl: + require: + - +shared + - '@3.0.16' + autoconf: externals: - spec: autoconf@2.69 diff --git a/configs/sites/tier1/orion/packages.yaml b/configs/sites/tier1/orion/packages.yaml index 99675d2a4..6b179915b 100644 --- a/configs/sites/tier1/orion/packages.yaml +++ b/configs/sites/tier1/orion/packages.yaml @@ -13,6 +13,13 @@ packages: prefix: /apps/spack-managed/gcc-11.3.1/zlib-1.2.13-ltp4c3zzde3zi3gf7x4b7c7nj5ww4i4g modules: - zlib/1.2.13 + + # https://github.com/JCSDA/spack-stack/issues/1892 + openssl: + require: + - +shared + - '@3.0.16' + autoconf: externals: - spec: autoconf@2.69 From aad1dac623c819a3bf1782ae8ac2160efa3a0b7e Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 13 May 2026 19:36:53 -0600 Subject: [PATCH 02/16] [release/2.1] Update netcdf-c from spack develop to fix missing plugins (#2010) * Update submodule pointer for repos/builtin --- repos/builtin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/builtin b/repos/builtin index 4a3312cc2..8620f5f06 160000 --- a/repos/builtin +++ b/repos/builtin @@ -1 +1 @@ -Subproject commit 4a3312cc241c0da954ab450cbdd223122a62355f +Subproject commit 8620f5f0628f93750096109865a6c3e91e6940e7 From c4b1371e8e45010edb94922e77302b1a982c999d Mon Sep 17 00:00:00 2001 From: Alex Richert Date: Mon, 1 Jun 2026 21:19:43 -0400 Subject: [PATCH 03/16] gsi-ncdiag & bufr updates (#2030) * set gsi-ncdiag@1.1.3 * Update bufr package version from 12.1.0 to 12.3.0 * update repos/builtin/ submodule --- .gitmodules | 2 +- configs/common/packages.yaml | 4 ++-- repos/builtin | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 04514feb5..4cf9c4d5c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,4 +5,4 @@ [submodule "repos/builtin"] path = repos/builtin url = https://github.com/jcsda/spack-packages - branch = spack-stack-2.1.0 + branch = release/2.1 diff --git a/configs/common/packages.yaml b/configs/common/packages.yaml index 201956b09..c5bae8c79 100644 --- a/configs/common/packages.yaml +++ b/configs/common/packages.yaml @@ -52,7 +52,7 @@ packages: - visibility=hidden bufr: require: - - '@12.1.0' + - '@12.3.0' - +python bufr-query: require: @@ -201,7 +201,7 @@ packages: - '@1.4.2' gsi-ncdiag: require: - - '@1.1.2' + - '@1.1.3' harfbuzz: # cmake-based harfbuzz fails during build require: diff --git a/repos/builtin b/repos/builtin index 8620f5f06..8e0d1ef36 160000 --- a/repos/builtin +++ b/repos/builtin @@ -1 +1 @@ -Subproject commit 8620f5f0628f93750096109865a6c3e91e6940e7 +Subproject commit 8e0d1ef360ec5923d93e151ab64a98900d181cc9 From 37c009d4b870e1f4eeb12de59b98094b002e9256 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 2 Jun 2026 15:27:15 -0600 Subject: [PATCH 04/16] .gitmodules: spack-stack-2.1.1 (#2033) --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 4cf9c4d5c..85942066a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,8 +1,8 @@ [submodule "spack"] path = spack url = https://github.com/jcsda/spack - branch = spack-stack-2.1.0 + branch = spack-stack-2.1.1 [submodule "repos/builtin"] path = repos/builtin url = https://github.com/jcsda/spack-packages - branch = release/2.1 + branch = spack-stack-2.1.1 From 32d0224a3511595bb5119101a9900206d3aea948 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 25 Jun 2026 09:18:34 -0600 Subject: [PATCH 05/16] Update submodule pointer for repos/builtin (#2046) --- repos/builtin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/builtin b/repos/builtin index 8e0d1ef36..05553f750 160000 --- a/repos/builtin +++ b/repos/builtin @@ -1 +1 @@ -Subproject commit 8e0d1ef360ec5923d93e151ab64a98900d181cc9 +Subproject commit 05553f750553659cfd2c30d0e130ea1ed7165d25 From ac6b2c21e2aa3dce424c32f1e18faa6871a46b5b Mon Sep 17 00:00:00 2001 From: Ryan Honeyager Date: Wed, 1 Jul 2026 13:26:01 -0500 Subject: [PATCH 06/16] Macos build patches --- .../packages/ioda/ioda_yaml_root.patch | 13 +++++++ .../spack_stack/packages/ioda/package.py | 17 +++++----- .../spack_stack/packages/oops/package.py | 1 + .../oops/patch-1.10.0.atlas.mac.patch | 34 +++++++++++++++++++ 4 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch create mode 100644 repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch new file mode 100644 index 000000000..e8cba60c9 --- /dev/null +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch @@ -0,0 +1,13 @@ +diff --git a/cmake/ioda-import.cmake.in b/cmake/ioda-import.cmake.in +index 907fce15..0d7ae528 100644 +--- a/cmake/ioda-import.cmake.in ++++ b/cmake/ioda-import.cmake.in +@@ -96,7 +96,7 @@ else() + # in the ioda-post-import.cmake file, even if it is never again used. Some + # tools (like Spack) will complain about this path and may indicate that ioda + # is a non-relocatable package, even though it is completely relocatable. +- set( IODA_YAML_ROOT "@IODA_YAML_ROOT@" ) ++ set( IODA_YAML_ROOT "${CMAKE_CURRENT_LIST_FILE}/share/test/testinput/" ) + endif() + endif() + diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py index b22856ae2..1c61359f1 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py @@ -20,6 +20,7 @@ class Ioda(CMakePackage): version("2.9.0.20250826", commit="6e76616001067384f7d0ca4341ad78e81527af8b") patch("ioda_cmake_import.patch", when="@2.9.0.20250826") + patch("ioda_yaml_root.patch", when="@2.9.0.20250826") variant("doc", default=False, description="Build IODA documentation") # Let's always assume IODA_BUILD_LANGUAGE_FORTRAN=on. @@ -101,11 +102,11 @@ def check(self): else: ctest("--timeout", "120") - @run_after("install") - def fix_ioda_yaml_root_path(self): - with when("@2.9.0.20250826"): - filter_file( - join_path(self.build_directory, "share/test/testinput/"), - join_path(self.prefix, "share/ioda/yaml"), - join_path(self.prefix, "lib64/cmake/ioda/ioda-import.cmake"), - ) + #@run_after("install") + #def fix_ioda_yaml_root_path(self): + # with when("@2.9.0.20250826"): + # filter_file( + # join_path(self.build_directory, "share/test/testinput/"), + # join_path(self.prefix, "share/ioda/yaml"), + # join_path(self.prefix, "lib64/cmake/ioda/ioda-import.cmake"), + # ) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py index ad1710471..ac522e46b 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py @@ -22,6 +22,7 @@ class Oops(CMakePackage): version("1.10.0.20250827", commit="91889ad09d3789f14a1184701dd80a4913d3ce3e") patch("include_algorithm.patch", when="@1.10.0.20250827") + patch("patch-1.10.0.atlas.mac.patch", when="@1.10.0.20250827") variant("l95", default=True, description="Build LORENZ95 toy model") variant("mkl", default=False, description="Use MKL for LAPACK implementation (if available)") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch b/repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch new file mode 100644 index 000000000..7b54487ba --- /dev/null +++ b/repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch @@ -0,0 +1,34 @@ +diff --git a/src/oops/util/ParallelFieldSetIO.cc b/src/oops/util/ParallelFieldSetIO.cc +index 04e4c55c..0a07a9ba 100644 +--- a/src/oops/util/ParallelFieldSetIO.cc ++++ b/src/oops/util/ParallelFieldSetIO.cc +@@ -80,9 +80,6 @@ atlas::FieldSet ParallelFieldSetIO::ioFieldSet(const atlas::FieldSet& nativeFiel + case atlas::array::DataType::KIND_INT32: + ioFieldSet.add(functionSpace_.createField(fieldSetConfig)); + break; +- case atlas::array::DataType::KIND_INT64: +- ioFieldSet.add(functionSpace_.createField(fieldSetConfig)); +- break; + case atlas::array::DataType::KIND_REAL32: + ioFieldSet.add(functionSpace_.createField(fieldSetConfig)); + break; +@@ -105,9 +102,6 @@ void ParallelFieldSetIO::writeFieldByTypeAndRank(const atlas::Field& field, + case atlas::array::DataType::KIND_INT32: + dispatchWriteField(field, netcdfGeneralIDs, netcdfVarID); + break; +- case atlas::array::DataType::KIND_INT64: +- dispatchWriteField(field, netcdfGeneralIDs, netcdfVarID); +- break; + case atlas::array::DataType::KIND_REAL32: + dispatchWriteField(field, netcdfGeneralIDs, netcdfVarID); + break; +@@ -129,9 +123,6 @@ void ParallelFieldSetIO::readFieldByTypeAndRank(atlas::Field& field, + case atlas::array::DataType::KIND_INT32: + dispatchReadField(field, netcdfGeneralIDs, netcdfVarID); + break; +- case atlas::array::DataType::KIND_INT64: +- dispatchReadField(field, netcdfGeneralIDs, netcdfVarID); +- break; + case atlas::array::DataType::KIND_REAL32: + dispatchReadField(field, netcdfGeneralIDs, netcdfVarID); + break; From f169831f72285db60cd7c0fa525d676441af514b Mon Sep 17 00:00:00 2001 From: Ryan Honeyager Date: Wed, 1 Jul 2026 13:58:34 -0500 Subject: [PATCH 07/16] . --- .../spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch index e8cba60c9..ae3ed8a1c 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch @@ -7,7 +7,7 @@ index 907fce15..0d7ae528 100644 # tools (like Spack) will complain about this path and may indicate that ioda # is a non-relocatable package, even though it is completely relocatable. - set( IODA_YAML_ROOT "@IODA_YAML_ROOT@" ) -+ set( IODA_YAML_ROOT "${CMAKE_CURRENT_LIST_FILE}/share/test/testinput/" ) ++ set( IODA_YAML_ROOT "${CMAKE_CURRENT_LIST_DIR}/share/test/testinput/" ) endif() endif() From 97b17ebcfd2d65db8ee878f2cba0a32ba018e460 Mon Sep 17 00:00:00 2001 From: Ryan Honeyager Date: Wed, 1 Jul 2026 13:26:01 -0500 Subject: [PATCH 08/16] Macos build patches --- .../packages/ioda/ioda_yaml_root.patch | 13 +++++++ .../spack_stack/packages/ioda/package.py | 17 +++++----- .../spack_stack/packages/oops/package.py | 1 + .../oops/patch-1.10.0.atlas.mac.patch | 34 +++++++++++++++++++ 4 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch create mode 100644 repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch new file mode 100644 index 000000000..e8cba60c9 --- /dev/null +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch @@ -0,0 +1,13 @@ +diff --git a/cmake/ioda-import.cmake.in b/cmake/ioda-import.cmake.in +index 907fce15..0d7ae528 100644 +--- a/cmake/ioda-import.cmake.in ++++ b/cmake/ioda-import.cmake.in +@@ -96,7 +96,7 @@ else() + # in the ioda-post-import.cmake file, even if it is never again used. Some + # tools (like Spack) will complain about this path and may indicate that ioda + # is a non-relocatable package, even though it is completely relocatable. +- set( IODA_YAML_ROOT "@IODA_YAML_ROOT@" ) ++ set( IODA_YAML_ROOT "${CMAKE_CURRENT_LIST_FILE}/share/test/testinput/" ) + endif() + endif() + diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py index b22856ae2..1c61359f1 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py @@ -20,6 +20,7 @@ class Ioda(CMakePackage): version("2.9.0.20250826", commit="6e76616001067384f7d0ca4341ad78e81527af8b") patch("ioda_cmake_import.patch", when="@2.9.0.20250826") + patch("ioda_yaml_root.patch", when="@2.9.0.20250826") variant("doc", default=False, description="Build IODA documentation") # Let's always assume IODA_BUILD_LANGUAGE_FORTRAN=on. @@ -101,11 +102,11 @@ def check(self): else: ctest("--timeout", "120") - @run_after("install") - def fix_ioda_yaml_root_path(self): - with when("@2.9.0.20250826"): - filter_file( - join_path(self.build_directory, "share/test/testinput/"), - join_path(self.prefix, "share/ioda/yaml"), - join_path(self.prefix, "lib64/cmake/ioda/ioda-import.cmake"), - ) + #@run_after("install") + #def fix_ioda_yaml_root_path(self): + # with when("@2.9.0.20250826"): + # filter_file( + # join_path(self.build_directory, "share/test/testinput/"), + # join_path(self.prefix, "share/ioda/yaml"), + # join_path(self.prefix, "lib64/cmake/ioda/ioda-import.cmake"), + # ) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py index ad1710471..ac522e46b 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py @@ -22,6 +22,7 @@ class Oops(CMakePackage): version("1.10.0.20250827", commit="91889ad09d3789f14a1184701dd80a4913d3ce3e") patch("include_algorithm.patch", when="@1.10.0.20250827") + patch("patch-1.10.0.atlas.mac.patch", when="@1.10.0.20250827") variant("l95", default=True, description="Build LORENZ95 toy model") variant("mkl", default=False, description="Use MKL for LAPACK implementation (if available)") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch b/repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch new file mode 100644 index 000000000..7b54487ba --- /dev/null +++ b/repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch @@ -0,0 +1,34 @@ +diff --git a/src/oops/util/ParallelFieldSetIO.cc b/src/oops/util/ParallelFieldSetIO.cc +index 04e4c55c..0a07a9ba 100644 +--- a/src/oops/util/ParallelFieldSetIO.cc ++++ b/src/oops/util/ParallelFieldSetIO.cc +@@ -80,9 +80,6 @@ atlas::FieldSet ParallelFieldSetIO::ioFieldSet(const atlas::FieldSet& nativeFiel + case atlas::array::DataType::KIND_INT32: + ioFieldSet.add(functionSpace_.createField(fieldSetConfig)); + break; +- case atlas::array::DataType::KIND_INT64: +- ioFieldSet.add(functionSpace_.createField(fieldSetConfig)); +- break; + case atlas::array::DataType::KIND_REAL32: + ioFieldSet.add(functionSpace_.createField(fieldSetConfig)); + break; +@@ -105,9 +102,6 @@ void ParallelFieldSetIO::writeFieldByTypeAndRank(const atlas::Field& field, + case atlas::array::DataType::KIND_INT32: + dispatchWriteField(field, netcdfGeneralIDs, netcdfVarID); + break; +- case atlas::array::DataType::KIND_INT64: +- dispatchWriteField(field, netcdfGeneralIDs, netcdfVarID); +- break; + case atlas::array::DataType::KIND_REAL32: + dispatchWriteField(field, netcdfGeneralIDs, netcdfVarID); + break; +@@ -129,9 +123,6 @@ void ParallelFieldSetIO::readFieldByTypeAndRank(atlas::Field& field, + case atlas::array::DataType::KIND_INT32: + dispatchReadField(field, netcdfGeneralIDs, netcdfVarID); + break; +- case atlas::array::DataType::KIND_INT64: +- dispatchReadField(field, netcdfGeneralIDs, netcdfVarID); +- break; + case atlas::array::DataType::KIND_REAL32: + dispatchReadField(field, netcdfGeneralIDs, netcdfVarID); + break; From 417a3f640bf21ec2b8b4de50ff0fb166005ba798 Mon Sep 17 00:00:00 2001 From: Ryan Honeyager Date: Wed, 1 Jul 2026 13:58:34 -0500 Subject: [PATCH 09/16] . --- .../spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch index e8cba60c9..ae3ed8a1c 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch @@ -7,7 +7,7 @@ index 907fce15..0d7ae528 100644 # tools (like Spack) will complain about this path and may indicate that ioda # is a non-relocatable package, even though it is completely relocatable. - set( IODA_YAML_ROOT "@IODA_YAML_ROOT@" ) -+ set( IODA_YAML_ROOT "${CMAKE_CURRENT_LIST_FILE}/share/test/testinput/" ) ++ set( IODA_YAML_ROOT "${CMAKE_CURRENT_LIST_DIR}/share/test/testinput/" ) endif() endif() From d32607373db5d4cec04f56fcd91e52efd5f55249 Mon Sep 17 00:00:00 2001 From: Ryan Honeyager Date: Thu, 9 Jul 2026 15:07:49 -0400 Subject: [PATCH 10/16] Further changes / tests in bundle and spack modes --- .../packages/ioda/ioda_yaml_root.patch | 68 ++++++++++++++++--- 1 file changed, 60 insertions(+), 8 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch index ae3ed8a1c..954854cb3 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch @@ -1,13 +1,65 @@ diff --git a/cmake/ioda-import.cmake.in b/cmake/ioda-import.cmake.in -index 907fce15..0d7ae528 100644 +index 907fce15..c049b2c6 100644 --- a/cmake/ioda-import.cmake.in +++ b/cmake/ioda-import.cmake.in -@@ -96,7 +96,7 @@ else() - # in the ioda-post-import.cmake file, even if it is never again used. Some - # tools (like Spack) will complain about this path and may indicate that ioda - # is a non-relocatable package, even though it is completely relocatable. -- set( IODA_YAML_ROOT "@IODA_YAML_ROOT@" ) -+ set( IODA_YAML_ROOT "${CMAKE_CURRENT_LIST_DIR}/share/test/testinput/" ) - endif() +@@ -6,7 +6,6 @@ + + include(CMakeFindDependencyMacro) + +- + # These instructions parallel ioda's top-level CMakeLists.txt dependencies + + # Required packages +@@ -80,24 +79,3 @@ if(NOT @PROJECT_NAME@_MODULES_Fortran_COMPILER_ID STREQUAL CMAKE_Fortran_COMPILE + "but this build for ${PROJECT_NAME} uses incompatible compiler ${CMAKE_Fortran_COMPILER_ID}-${CMAKE_Fortran_COMPILER_VERSION}") endif() +-# Export ioda YAML validation files directory +-if( IS_ABSOLUTE "@CMAKE_INSTALL_DATADIR@") +- set( IODA_YAML_ROOT "@CMAKE_INSTALL_DATADIR@/ioda/yaml" ) +-else() +- if ( DEFINED _IMPORT_PREFIX ) +- # We are in a CMake install tree +- set( IODA_YAML_ROOT "${_IMPORT_PREFIX}/@CMAKE_INSTALL_DATADIR@/ioda/yaml" ) +- else() +- # We are in a CMake build tree. Ergo, we can use the variable set in +- # IODA's top-level CMakeLists.txt that points to the YAML root path +- # in the source tree. +- # +- # Note: a small downside of this approach is that a source tree path is hardcoded +- # in the ioda-post-import.cmake file, even if it is never again used. Some +- # tools (like Spack) will complain about this path and may indicate that ioda +- # is a non-relocatable package, even though it is completely relocatable. +- set( IODA_YAML_ROOT "@IODA_YAML_ROOT@" ) +- endif() +-endif() +- +- +diff --git a/cmake/ioda-post-import.cmake.in b/cmake/ioda-post-import.cmake.in +index d5fe93a8..9de02495 100644 +--- a/cmake/ioda-post-import.cmake.in ++++ b/cmake/ioda-post-import.cmake.in +@@ -13,3 +13,23 @@ endif() + if( (TARGET _ioda_python) AND NOT (TARGET ioda::Python) ) + add_library( ioda::Python ALIAS _ioda_python ) + endif() ++ ++# Export ioda YAML validation files directory ++ ++# ioda_BINARY_DIR is only set if we are in a build tree somewhere ++# (either in a bundle or a standalone build). ++if( DEFINED ioda_BINARY_DIR ) ++ # We are in the build tree. ++ # CMAKE_CURRENT_LIST_DIR is the old var ++ set( IODA_YAML_ROOT "${ioda_BINARY_DIR}/share/test/testinput" ) ++else() ++ # We are outside of ioda's build tree. ++ if( IS_ABSOLUTE "@CMAKE_INSTALL_DATADIR@") ++ set( IODA_YAML_ROOT "@CMAKE_INSTALL_DATADIR@/ioda/yaml" ) ++ else() ++ # ioda_BASE_DIR is defined by the ecbuild-generated ioda-config.cmake. ++ # See https://github.com/ecmwf/ecbuild/blob/develop/cmake/project-config.cmake.in ++ set( IODA_YAML_ROOT "${ioda_BASE_DIR}/@CMAKE_INSTALL_DATADIR@/ioda/yaml" ) ++ endif() ++endif() ++ From 615795aecf6f76cdbdeb38781ca3e9e0663959f7 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 17 Jul 2026 05:49:40 -0600 Subject: [PATCH 11/16] repos/spack_stack/spack_repo/spack_stack/packages/ioda_converters/package.py: disable test iodaconv_gsi_ncdiag_coding_norms --- .../spack_stack/packages/ioda_converters/package.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda_converters/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ioda_converters/package.py index 6ee9249e0..19681e374 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda_converters/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda_converters/package.py @@ -80,6 +80,14 @@ def check(self): # >> 2169 The following tests FAILED: # 52 - test_iodaconv_mrms (Timeout) iodaconv "test_iodaconv_mrms", + #2: ./gsi_ncdiag.py:80:77: E502 the backslash is redundant between brackets + #2: ./gsi_ncdiag.py:81:53: E502 the backslash is redundant between brackets + #2: checking ./ncdiag_to_feedback.py + #2: checking ./proc_gsi_ncdiag.py + #2: checking ./test_gsidiag.py + #2: 2 E502 the backslash is redundant between brackets + #1/1 Test #2: iodaconv_gsi_ncdiag_coding_norms ...***Failed 0.30 sec + "iodaconv_gsi_ncdiag_coding_norms", ] ctest = Executable(self.spec["cmake"].prefix.bin.ctest) From a5c374a43f188fb92c89ca95341532ef60ea3b40 Mon Sep 17 00:00:00 2001 From: Ryan Honeyager Date: Wed, 1 Jul 2026 13:26:01 -0500 Subject: [PATCH 12/16] Macos build patches --- .../packages/ioda/ioda_yaml_root.patch | 13 +++++++ .../spack_stack/packages/ioda/package.py | 17 +++++----- .../spack_stack/packages/oops/package.py | 1 + .../oops/patch-1.10.0.atlas.mac.patch | 34 +++++++++++++++++++ 4 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch create mode 100644 repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch new file mode 100644 index 000000000..e8cba60c9 --- /dev/null +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch @@ -0,0 +1,13 @@ +diff --git a/cmake/ioda-import.cmake.in b/cmake/ioda-import.cmake.in +index 907fce15..0d7ae528 100644 +--- a/cmake/ioda-import.cmake.in ++++ b/cmake/ioda-import.cmake.in +@@ -96,7 +96,7 @@ else() + # in the ioda-post-import.cmake file, even if it is never again used. Some + # tools (like Spack) will complain about this path and may indicate that ioda + # is a non-relocatable package, even though it is completely relocatable. +- set( IODA_YAML_ROOT "@IODA_YAML_ROOT@" ) ++ set( IODA_YAML_ROOT "${CMAKE_CURRENT_LIST_FILE}/share/test/testinput/" ) + endif() + endif() + diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py index b22856ae2..1c61359f1 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py @@ -20,6 +20,7 @@ class Ioda(CMakePackage): version("2.9.0.20250826", commit="6e76616001067384f7d0ca4341ad78e81527af8b") patch("ioda_cmake_import.patch", when="@2.9.0.20250826") + patch("ioda_yaml_root.patch", when="@2.9.0.20250826") variant("doc", default=False, description="Build IODA documentation") # Let's always assume IODA_BUILD_LANGUAGE_FORTRAN=on. @@ -101,11 +102,11 @@ def check(self): else: ctest("--timeout", "120") - @run_after("install") - def fix_ioda_yaml_root_path(self): - with when("@2.9.0.20250826"): - filter_file( - join_path(self.build_directory, "share/test/testinput/"), - join_path(self.prefix, "share/ioda/yaml"), - join_path(self.prefix, "lib64/cmake/ioda/ioda-import.cmake"), - ) + #@run_after("install") + #def fix_ioda_yaml_root_path(self): + # with when("@2.9.0.20250826"): + # filter_file( + # join_path(self.build_directory, "share/test/testinput/"), + # join_path(self.prefix, "share/ioda/yaml"), + # join_path(self.prefix, "lib64/cmake/ioda/ioda-import.cmake"), + # ) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py index ad1710471..ac522e46b 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py @@ -22,6 +22,7 @@ class Oops(CMakePackage): version("1.10.0.20250827", commit="91889ad09d3789f14a1184701dd80a4913d3ce3e") patch("include_algorithm.patch", when="@1.10.0.20250827") + patch("patch-1.10.0.atlas.mac.patch", when="@1.10.0.20250827") variant("l95", default=True, description="Build LORENZ95 toy model") variant("mkl", default=False, description="Use MKL for LAPACK implementation (if available)") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch b/repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch new file mode 100644 index 000000000..7b54487ba --- /dev/null +++ b/repos/spack_stack/spack_repo/spack_stack/packages/oops/patch-1.10.0.atlas.mac.patch @@ -0,0 +1,34 @@ +diff --git a/src/oops/util/ParallelFieldSetIO.cc b/src/oops/util/ParallelFieldSetIO.cc +index 04e4c55c..0a07a9ba 100644 +--- a/src/oops/util/ParallelFieldSetIO.cc ++++ b/src/oops/util/ParallelFieldSetIO.cc +@@ -80,9 +80,6 @@ atlas::FieldSet ParallelFieldSetIO::ioFieldSet(const atlas::FieldSet& nativeFiel + case atlas::array::DataType::KIND_INT32: + ioFieldSet.add(functionSpace_.createField(fieldSetConfig)); + break; +- case atlas::array::DataType::KIND_INT64: +- ioFieldSet.add(functionSpace_.createField(fieldSetConfig)); +- break; + case atlas::array::DataType::KIND_REAL32: + ioFieldSet.add(functionSpace_.createField(fieldSetConfig)); + break; +@@ -105,9 +102,6 @@ void ParallelFieldSetIO::writeFieldByTypeAndRank(const atlas::Field& field, + case atlas::array::DataType::KIND_INT32: + dispatchWriteField(field, netcdfGeneralIDs, netcdfVarID); + break; +- case atlas::array::DataType::KIND_INT64: +- dispatchWriteField(field, netcdfGeneralIDs, netcdfVarID); +- break; + case atlas::array::DataType::KIND_REAL32: + dispatchWriteField(field, netcdfGeneralIDs, netcdfVarID); + break; +@@ -129,9 +123,6 @@ void ParallelFieldSetIO::readFieldByTypeAndRank(atlas::Field& field, + case atlas::array::DataType::KIND_INT32: + dispatchReadField(field, netcdfGeneralIDs, netcdfVarID); + break; +- case atlas::array::DataType::KIND_INT64: +- dispatchReadField(field, netcdfGeneralIDs, netcdfVarID); +- break; + case atlas::array::DataType::KIND_REAL32: + dispatchReadField(field, netcdfGeneralIDs, netcdfVarID); + break; From 00a5338a5202391a27d2d45c275e8e2b0fcf97aa Mon Sep 17 00:00:00 2001 From: Ryan Honeyager Date: Wed, 1 Jul 2026 13:58:34 -0500 Subject: [PATCH 13/16] . --- .../spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch index e8cba60c9..ae3ed8a1c 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch @@ -7,7 +7,7 @@ index 907fce15..0d7ae528 100644 # tools (like Spack) will complain about this path and may indicate that ioda # is a non-relocatable package, even though it is completely relocatable. - set( IODA_YAML_ROOT "@IODA_YAML_ROOT@" ) -+ set( IODA_YAML_ROOT "${CMAKE_CURRENT_LIST_FILE}/share/test/testinput/" ) ++ set( IODA_YAML_ROOT "${CMAKE_CURRENT_LIST_DIR}/share/test/testinput/" ) endif() endif() From b47ce199d7448b8027f2b6bff2b15e485e0650dc Mon Sep 17 00:00:00 2001 From: Ryan Honeyager Date: Thu, 9 Jul 2026 15:07:49 -0400 Subject: [PATCH 14/16] Further changes / tests in bundle and spack modes --- .../packages/ioda/ioda_yaml_root.patch | 68 ++++++++++++++++--- 1 file changed, 60 insertions(+), 8 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch index ae3ed8a1c..954854cb3 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/ioda_yaml_root.patch @@ -1,13 +1,65 @@ diff --git a/cmake/ioda-import.cmake.in b/cmake/ioda-import.cmake.in -index 907fce15..0d7ae528 100644 +index 907fce15..c049b2c6 100644 --- a/cmake/ioda-import.cmake.in +++ b/cmake/ioda-import.cmake.in -@@ -96,7 +96,7 @@ else() - # in the ioda-post-import.cmake file, even if it is never again used. Some - # tools (like Spack) will complain about this path and may indicate that ioda - # is a non-relocatable package, even though it is completely relocatable. -- set( IODA_YAML_ROOT "@IODA_YAML_ROOT@" ) -+ set( IODA_YAML_ROOT "${CMAKE_CURRENT_LIST_DIR}/share/test/testinput/" ) - endif() +@@ -6,7 +6,6 @@ + + include(CMakeFindDependencyMacro) + +- + # These instructions parallel ioda's top-level CMakeLists.txt dependencies + + # Required packages +@@ -80,24 +79,3 @@ if(NOT @PROJECT_NAME@_MODULES_Fortran_COMPILER_ID STREQUAL CMAKE_Fortran_COMPILE + "but this build for ${PROJECT_NAME} uses incompatible compiler ${CMAKE_Fortran_COMPILER_ID}-${CMAKE_Fortran_COMPILER_VERSION}") endif() +-# Export ioda YAML validation files directory +-if( IS_ABSOLUTE "@CMAKE_INSTALL_DATADIR@") +- set( IODA_YAML_ROOT "@CMAKE_INSTALL_DATADIR@/ioda/yaml" ) +-else() +- if ( DEFINED _IMPORT_PREFIX ) +- # We are in a CMake install tree +- set( IODA_YAML_ROOT "${_IMPORT_PREFIX}/@CMAKE_INSTALL_DATADIR@/ioda/yaml" ) +- else() +- # We are in a CMake build tree. Ergo, we can use the variable set in +- # IODA's top-level CMakeLists.txt that points to the YAML root path +- # in the source tree. +- # +- # Note: a small downside of this approach is that a source tree path is hardcoded +- # in the ioda-post-import.cmake file, even if it is never again used. Some +- # tools (like Spack) will complain about this path and may indicate that ioda +- # is a non-relocatable package, even though it is completely relocatable. +- set( IODA_YAML_ROOT "@IODA_YAML_ROOT@" ) +- endif() +-endif() +- +- +diff --git a/cmake/ioda-post-import.cmake.in b/cmake/ioda-post-import.cmake.in +index d5fe93a8..9de02495 100644 +--- a/cmake/ioda-post-import.cmake.in ++++ b/cmake/ioda-post-import.cmake.in +@@ -13,3 +13,23 @@ endif() + if( (TARGET _ioda_python) AND NOT (TARGET ioda::Python) ) + add_library( ioda::Python ALIAS _ioda_python ) + endif() ++ ++# Export ioda YAML validation files directory ++ ++# ioda_BINARY_DIR is only set if we are in a build tree somewhere ++# (either in a bundle or a standalone build). ++if( DEFINED ioda_BINARY_DIR ) ++ # We are in the build tree. ++ # CMAKE_CURRENT_LIST_DIR is the old var ++ set( IODA_YAML_ROOT "${ioda_BINARY_DIR}/share/test/testinput" ) ++else() ++ # We are outside of ioda's build tree. ++ if( IS_ABSOLUTE "@CMAKE_INSTALL_DATADIR@") ++ set( IODA_YAML_ROOT "@CMAKE_INSTALL_DATADIR@/ioda/yaml" ) ++ else() ++ # ioda_BASE_DIR is defined by the ecbuild-generated ioda-config.cmake. ++ # See https://github.com/ecmwf/ecbuild/blob/develop/cmake/project-config.cmake.in ++ set( IODA_YAML_ROOT "${ioda_BASE_DIR}/@CMAKE_INSTALL_DATADIR@/ioda/yaml" ) ++ endif() ++endif() ++ From 178aec47e9d7b09c234a683b572bfc2bfcc0a675 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 17 Jul 2026 21:13:35 -0600 Subject: [PATCH 15/16] Update JEDI components for neptune-bundle 2026/07/17 --- .../spack_stack/packages/ioda/package.py | 27 ++--- .../spack_stack/packages/ioda_data/package.py | 12 +-- .../packages/jedi_neptune_env/package.py | 12 ++- .../spack_stack/packages/oops/package.py | 23 +++- .../spack_stack/packages/ufo/package.py | 100 +++++++++++++++++- .../spack_stack/packages/ufo_data/package.py | 1 + 6 files changed, 144 insertions(+), 31 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py index 1c61359f1..de10750d3 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py @@ -17,10 +17,11 @@ class Ioda(CMakePackage): maintainers("climbfuji") version("develop", branch="develop", no_cache=True) + version("2.9.0.20260326", commit="9e0eb39fb87ae66667ef966cf27b62d5a804cc54") version("2.9.0.20250826", commit="6e76616001067384f7d0ca4341ad78e81527af8b") patch("ioda_cmake_import.patch", when="@2.9.0.20250826") - patch("ioda_yaml_root.patch", when="@2.9.0.20250826") + patch("ioda_yaml_root.patch", when="@2.9.0.20250826:") variant("doc", default=False, description="Build IODA documentation") # Let's always assume IODA_BUILD_LANGUAGE_FORTRAN=on. @@ -43,7 +44,8 @@ class Ioda(CMakePackage): depends_on("bufr@12.0.1:", when="@2.9:") depends_on("bufr-query@0.0.4:", when="@2.9:") depends_on("cmake", type=("build")) - depends_on("cmake@3.14:", type=("build"), when="@2.9:") + depends_on("cmake@3.15:", type=("build"), when="@2.9.0.20260326") + depends_on("cmake@3.14:", type=("build"), when="@2.9.0.20250826") depends_on("ecbuild", type=("build")) depends_on("ecbuild@3.3.2:", type=("build"), when="@2.9:") depends_on("eckit") @@ -55,7 +57,8 @@ class Ioda(CMakePackage): depends_on("hdf5@1.12.0: +mpi") depends_on("hdf5@1.14.0: +mpi", when="@2.9:") depends_on("ioda-data", type=("build", "test")) - depends_on("ioda-data@2.9.0.20250805", type=("build", "test"), when="@2.9:") + depends_on("ioda-data@2.9.0.20260319", type=("build", "test"), when="@2.9.0.20260326") + depends_on("ioda-data@2.9.0.20250805", type=("build", "test"), when="@2.9.0.20250826") depends_on("jedi-cmake", type=("build")) depends_on("llvm-openmp", when="+openmp %apple-clang", type=("build", "link", "run")) depends_on("mpi") @@ -65,7 +68,8 @@ class Ioda(CMakePackage): depends_on("odc@1.4.6:", when="@2.9: +odc") depends_on("oops+openmp", when="+openmp") depends_on("oops~openmp", when="~openmp") - depends_on("oops@1.10", when="@2.9:") + depends_on("oops@1.10.0.20260331", when="@2.9.0.20260326") + depends_on("oops@1.10.0.20250827", when="@2.9.0.20250826") depends_on("python") depends_on("python@3.9:3.11", when="@2.9:") depends_on("py-pybind11") @@ -94,6 +98,12 @@ def check(self): "test_ioda_bufr_python_encoder", "test_ioda_bufr_python_parallel", ] + with when("@2.9.0.20260326"): + # No time to deal with the bufr Python dependency + skipped_tests = [ + "ioda_bufr_python_encoder", + "ioda_bufr_python_parallel", + ] ctest = Executable(self.spec["cmake"].prefix.bin.ctest) with working_dir(self.build_directory): @@ -101,12 +111,3 @@ def check(self): ctest("--timeout", "120", "-E", "|".join(skipped_tests)) else: ctest("--timeout", "120") - - #@run_after("install") - #def fix_ioda_yaml_root_path(self): - # with when("@2.9.0.20250826"): - # filter_file( - # join_path(self.build_directory, "share/test/testinput/"), - # join_path(self.prefix, "share/ioda/yaml"), - # join_path(self.prefix, "lib64/cmake/ioda/ioda-import.cmake"), - # ) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda_data/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ioda_data/package.py index c9ccae82f..170c7c564 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda_data/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda_data/package.py @@ -17,19 +17,9 @@ class IodaData(CMakePackage): maintainers("climbfuji") version("develop", branch="develop", no_cache=True) + version("2.9.0.20260319", commit="2886c75398b4b3bdd3a4235298af188370727c2e") version("2.9.0.20250805", commit="c6f8842648ea473eebc9f66d7c27e2204e5220d6") -# patch("ioda_cmake_import.patch", when="@2.9.0.20250826") -# -# variant("doc", default=False, description="Build IODA documentation") -# # Let's always assume IODA_BUILD_LANGUAGE_FORTRAN=on. -# # variant('fortran', default=True, description='Build the ioda Fortran interface') -# variant("odc", default=True, description="Build ODC bindings") -# # ioda has no explicit OpenMP calls, but header files from Eigen and oops do use openmp. -# variant("openmp", default=True, description="Build with OpenMP support") -# # Let's always BUILD_PYTHON_BINDINGS. -# # variant('python', default=True, description='Build the ioda Python interface') - generator("make") depends_on("c", type=("build")) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_neptune_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_neptune_env/package.py index 708c8776f..0075d3df6 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_neptune_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_neptune_env/package.py @@ -17,6 +17,7 @@ class JediNeptuneEnv(BundlePackage): maintainers("climbfuji", "areineke") + version("1.1.0") version("1.0.0") variant("adp", default=False, description="Build ADP preprocessors") @@ -30,7 +31,7 @@ class JediNeptuneEnv(BundlePackage): with when("+adp"): depends_on("adp-preprocessors", type="run") - with when("+jedi"): + with when("@1.0.0 +jedi"): # https://github.com/JCSDA/spack-stack/issues/2015 # Changed type from "run" to "build" so that # the modules don't get loaded automatically @@ -40,3 +41,12 @@ class JediNeptuneEnv(BundlePackage): depends_on("ioda-converters@0.0.1.20250830", type="build") depends_on("ropp-ufo@11.0.20251022", type="build") depends_on("ufo@1.10.0.20250821 +ropp", type="build") + + with when("@1.1.0 +jedi"): + depends_on("oops@1.10.0.20260331", type="build") + depends_on("crtm@3.1.3", type="build") + depends_on("ioda@2.9.0.20260326", type="build") + # Same ioda-converters and ropp-ufo as for 1.0.0 + depends_on("ioda-converters@0.0.1.20250830", type="build") + depends_on("ropp-ufo@11.0.20251022", type="build") + depends_on("ufo@1.10.0.20260331 +ropp", type="build") \ No newline at end of file diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py index ac522e46b..98e1cbae9 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/oops/package.py @@ -17,6 +17,7 @@ class Oops(CMakePackage): maintainers("climbfuji") version("develop", branch="develop", no_cache=True) + version("1.10.0.20260331", commit="0f7849866a74d17344215db8e742ba18c30a1ba5") # This commit plus the patch below accounts for commit # 2340e9b664f82de9fa01c136c3a31d87e4a0bec9 in NRL GitHub version("1.10.0.20250827", commit="91889ad09d3789f14a1184701dd80a4913d3ce3e") @@ -39,13 +40,15 @@ class Oops(CMakePackage): depends_on("boost@1.64:") depends_on("cmake", type=("build")) - depends_on("cmake@3.12:", type=("build"), when="@1.10:") + depends_on("cmake@3.23:", type=("build"), when="@1.10.0.20260331:") + depends_on("cmake@3.12:", type=("build"), when="@1.10.0.20250827") depends_on("ecbuild", type=("build")) depends_on("ecbuild@3.3.2:", type=("build"), when="@1.10:") depends_on("eckit") depends_on("eckit@1.24.4:", when="@1.10:") depends_on("ecmwf-atlas") depends_on("ecmwf-atlas@0.35.0:", when="@1.10:") + # hic dependency if ecmwf-atlas@0.39: ? depends_on("eigen") depends_on("fckit") depends_on("fckit@0.11.0:", when="@1.10:") @@ -62,7 +65,10 @@ class Oops(CMakePackage): def cmake_args(self): res = [ - self.define("BUILD_TESTING", self.run_tests), + # Need to build so that header files for downstream + # testing are installed (e.g. ioda needs them) + #self.define("BUILD_TESTING", self.run_tests), + self.define("BUILD_TESTING", "ON"), self.define_from_variant("ENABLE_LORENZ95_MODEL", "l95"), self.define_from_variant("ENABLE_QG_MODEL", "qg"), self.define_from_variant("ENABLE_MKL", "mkl"), @@ -84,6 +90,19 @@ def check(self): "test_qg_verticallocev", "test_qg_verticallocev_io", ] + with when("@1.10.0.20260331"): + skipped_tests = [ + "oops_qg_increment", + "oops_qg_verticallocev", + "oops_qg_verticallocev_io", + "oops_qg_rescale_ens_perts", + "oops_qg_4densvar_single-obs_loc_4d_fast", + "oops_qg_4densvar_single-obs_loc_4d_aggressive", + "oops_qg_4densvar_single-obs_loc_4d_standard", + "oops_qg_4densvar_single-obs_loc_4d_time_decay_fast", + "oops_qg_4densvar_single-obs_loc_4d_time_decay_standard", + "oops_qg_4densvar_single-obs_no_loc", + ] ctest = Executable(self.spec["cmake"].prefix.bin.ctest) with working_dir(self.build_directory): diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py index 65a85ad32..460a88f73 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py @@ -17,6 +17,7 @@ class Ufo(CMakePackage): maintainers("climbfuji") version("develop", branch="develop", no_cache=True) + version("1.10.0.20260331", commit="0fa9567eb6d0b3ce079001b98f44f3f0853ee821") version("1.10.0.20250821", commit="1ca49e253caa6d6a507f41ffa6875e0db7cc0751") patch( @@ -25,7 +26,7 @@ class Ufo(CMakePackage): when="@1.10.0.20250821", ) - patch("ufo_crtm_testfiles.patch", when="@1.10.0.20250821") + patch("ufo_crtm_testfiles.patch", when="@1.10:") # JCSDA-internal repository needed. variant("geos-aero", default=False, description="Build GEOS-AERO AOD operator") @@ -51,6 +52,10 @@ class Ufo(CMakePackage): depends_on("fortran", type=("build")) depends_on("boost") + # Leaky inherited dependency from ioda in version 1.10.0.20260331 + depends_on("bufr@12.0.1:", when="@1.10.0.20260331") + depends_on("bufr-query@0.0.4:", when="@1.10.0.20260331") + # depends_on("cmake", type=("build")) depends_on("cmake@3.12:", type=("build"), when="@1.10:") depends_on("crtm@3") @@ -64,14 +69,17 @@ class Ufo(CMakePackage): depends_on("fckit@0.11.0:", when="@1.10:") depends_on("gsl-lite") depends_on("ioda") - depends_on("ioda@2.9", when="@1.10:") + depends_on("ioda@2.9.0.20260326", when="@1.10.0.20260331") + depends_on("ioda@2.9.0.20250826", when="@1.10.0.20250821") depends_on("jedi-cmake", type=("build")) depends_on("mpi") depends_on("netcdf-c+mpi") depends_on("netcdf-fortran") depends_on("oops") - depends_on("oops@1.10", when="@1.10") - depends_on("ufo-data@2.9.0.20250821", type=("build", "test"), when="@1.10") + depends_on("oops@1.10.0.20260331", when="@1.10.0.20260331") + depends_on("oops@1.10.0.20250827", when="@1.10.0.20250821") + depends_on("ufo-data@2.9.0.20260326", type=("build", "test"), when="@1.10.0.20260331") + depends_on("ufo-data@2.9.0.20250821", type=("build", "test"), when="@1.10.0.20250821") # depends_on('geos-aero', when='+geos-aero') # depends_on('geos-aero@0.0.0', when='@1.7.0 +geos-aero') @@ -168,6 +176,90 @@ def check(self): "ufo_test_tier1_instrument_sfcMarine_geos_qc", "ufo_test_tier1_test_ufo_opr_sfccorrected_pressure", ] + with when("@1.10.0.20260331"): + skipped_tests = [] + if self.spec.satisfies("%oneapi"): + skipped_tests += [ + "ufo_instrument_airs_aqua_gfs_HofX", + "ufo_instrument_airs_aqua_gfs_HofX_bc", + "ufo_instrument_airs_aqua_gfs_HofX_qc", + "ufo_instrument_airs_aqua_gfs_HofX_qc_obin", + "ufo_instrument_amsua_n18_gfs_HofX_bc", + "ufo_instrument_avhrr_metop-a_gfs_HofX", + "ufo_instrument_avhrr_n18_gfs_HofX", + "ufo_instrument_avhrr_metop-a_gfs_HofX_bc", + "ufo_instrument_avhrr_n18_gfs_HofX_bc", + "ufo_instrument_avhrr_metop-a_gfs_HofX_qc", + "ufo_instrument_avhrr_n18_gfs_HofX_qc", + "ufo_instrument_cris-fsr_n20_gfs_HofX", + "ufo_instrument_cris-fsr_npp_gfs_HofX", + "ufo_instrument_cris-fsr_n20_gfs_HofX_bc", + "ufo_instrument_cris-fsr_npp_gfs_HofX_bc", + "ufo_instrument_cris-fsr_n20_geos_HofX_qc", + "ufo_instrument_cris-fsr_n20_gfs_HofX_qc", + "ufo_instrument_cris-fsr_npp_gfs_HofX_qc", + "ufo_instrument_iasi_metop-a_gfs_HofX", + "ufo_instrument_iasi_metop-b_gfs_HofX", + "ufo_instrument_iasi_metop-a_gfs_HofX_bc", + "ufo_instrument_iasi_metop-b_gfs_HofX_bc", + "ufo_instrument_iasi_metop-a_gfs_HofX_qc", + "ufo_instrument_iasi_metop-b_gfs_HofX_qc", + "ufo_instrument_seviri_m11_gfs_HofX", + "ufo_instrument_seviri_m11_gfs_HofX_bc", + "ufo_instrument_seviri_m11_gfs_HofX_qc", + "ufo_instrument_abi_g16_gfs_HofX", + "ufo_instrument_abi_g16_gfs_HofX_bc", + "ufo_obserrorcrossvarcorr", + "ufo_obserrorwithingroupcorr", + "ufo_obserrordiagonal", + "ufo_obserrordiagonal_inv_gamma", + "ufo_gnssrobendmetoffice_qc", + "ufo_gnssrobendmetoffice_obserror", + "ufo_gnssro_super_refraction_check", + "ufo_airs_qc_filters", + "ufo_cris_qc", + "ufo_cris_qc_filters", + "ufo_cris_qc_land", + "ufo_iasi_qc_filters", + "ufo_qc_flags_true", + "ufo_opr_gnssrorefmetoffice", + "ufo_opr_gnssrorefmetoffice_refractivity_changes", + "ufo_opr_gnssrobendmetoffice", + "ufo_linopr_gnssrobendmetoffice", + "ufo_opr_gnssrobendmetoffice_nopseudo", + "ufo_linopr_gnssrobendmetoffice_nopseudo", + "ufo_opr_gnssrobendmetoffice_profile", + "ufo_opr_gnssrobendmetoffice_nosupercheck", + "ufo_linopr_gnssrobendmetoffice_nosupercheck", + "ufo_opr_gnssrobendmetoffice_refractivity_changes", + "ufo_linopr_gnssrobendmetoffice_refractivity_changes", + "ufo_opr_abi_ahi_crtm", + "ufo_linopr_abi_ahi_crtm", + "ufo_opr_airs_crtm", + "ufo_linopr_airs_crtm", + "ufo_opr_crtm_vis_albedo", + "ufo_opr_cris_crtm", + "ufo_linopr_cris_crtm", + "ufo_opr_cris_crtm_co2_options", + "ufo_linopr_cris_crtm_co2_options", + "ufo_opr_hirs4_crtm", + "ufo_linopr_hirs4_crtm", + "ufo_opr_iasi_crtm", + "ufo_iasi_crtmreconrad_linop_check", + "ufo_iasi_crtmreconrad_linop_tlad_check", + "ufo_linopr_iasi_crtm", + "ufo_opr_seviri_crtm", + "ufo_linopr_seviri_crtm", + "ufo_opr_sndrd1-4_crtm", + "ufo_linopr_sndrd1-4_crtm", + "ufo_obsdiag_crtm_airs_jacobian", + "ufo_obsdiag_crtm_airs_optics", + "ufo_obsdiag_crtm_cris_jacobian", + "ufo_obsdiag_crtm_cris_optics", + "ufo_obsdiag_crtm_iasi_jacobian", + "ufo_obsdiag_crtm_iasi_optics", + ] + ctest = Executable(self.spec["cmake"].prefix.bin.ctest) with working_dir(self.build_directory): if skipped_tests: diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ufo_data/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ufo_data/package.py index 2f00e39c7..98226c76d 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ufo_data/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ufo_data/package.py @@ -17,6 +17,7 @@ class UfoData(CMakePackage): maintainers("climbfuji") version("develop", branch="develop", no_cache=True) + version("2.9.0.20260326", commit="e61d7c0e601e3699062009be109212566aea7ba8") version("2.9.0.20250821", commit="9078290c2eb68050af9941113a311200bb06aba8") generator("make") From 0c591e1c8c4a3650778371c9c522aadc2048e48a Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Fri, 17 Jul 2026 21:52:24 -0600 Subject: [PATCH 16/16] Test excludes for gcc in ufo --- .../spack_repo/spack_stack/packages/ufo/package.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py index 460a88f73..e2a750870 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py @@ -178,6 +178,11 @@ def check(self): ] with when("@1.10.0.20260331"): skipped_tests = [] + if self.spec.satisfies("%gcc"): + skipped_tests += [ + "ufo_instrument_amsua_n18_gfs_HofX_bc", + "ufo_obserrordiffusion", + ] if self.spec.satisfies("%oneapi"): skipped_tests += [ "ufo_instrument_airs_aqua_gfs_HofX",