From 28cb01ff748efa3aa2e0a1476b97aa60df2a38d9 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Wed, 22 May 2024 01:42:15 +0200
Subject: [PATCH] Fix compilation if HDF5 is not installed

---
 src/language/modules/CoreModule.cpp         |  3 +++
 src/language/modules/MeshModule.cpp         |  4 ++++
 src/language/modules/SchemeModule.cpp       |  4 ++++
 src/language/modules/WriterModule.cpp       |  4 ++++
 src/utils/HighFivePugsUtils.hpp             |  8 +++++++
 src/utils/checkpointing/CMakeLists.txt      | 24 +++++++++++++++------
 src/utils/checkpointing/CheckpointUtils.hpp |  4 ++++
 src/utils/checkpointing/ResumeUtils.hpp     |  4 ++++
 8 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/src/language/modules/CoreModule.cpp b/src/language/modules/CoreModule.cpp
index a21ad4130..d031a75bc 100644
--- a/src/language/modules/CoreModule.cpp
+++ b/src/language/modules/CoreModule.cpp
@@ -199,6 +199,7 @@ CoreModule::registerOperators() const
 void
 CoreModule::registerCheckpointResume() const
 {
+#ifdef PUGS_HAS_HDF5
   CheckpointResumeRepository::instance()
     .addCheckpointResume(ast_node_data_type_from<std::shared_ptr<const OStream>>,
                          std::function([](const std::string& symbol_name, const EmbeddedData& embedded_data,
@@ -208,4 +209,6 @@ CoreModule::registerCheckpointResume() const
                          }),
                          std::function([](const std::string& symbol_name, const HighFive::Group& symbol_table_group)
                                          -> EmbeddedData { return readOStream(symbol_name, symbol_table_group); }));
+
+#endif   // PUGS_HAS_HDF5
 }
diff --git a/src/language/modules/MeshModule.cpp b/src/language/modules/MeshModule.cpp
index cab959a73..80865761c 100644
--- a/src/language/modules/MeshModule.cpp
+++ b/src/language/modules/MeshModule.cpp
@@ -307,6 +307,8 @@ MeshModule::registerOperators() const
 void
 MeshModule::registerCheckpointResume() const
 {
+#ifdef PUGS_HAS_HDF5
+
   CheckpointResumeRepository::instance()
     .addCheckpointResume(ast_node_data_type_from<std::shared_ptr<const MeshVariant>>,
                          std::function([](const std::string& symbol_name, const EmbeddedData& embedded_data,
@@ -390,4 +392,6 @@ MeshModule::registerCheckpointResume() const
                                           const HighFive::Group& symbol_table_group) -> EmbeddedData {
                            return readItemValueVariant(symbol_name, symbol_table_group);
                          }));
+
+#endif   // PUGS_HAS_HDF5
 }
diff --git a/src/language/modules/SchemeModule.cpp b/src/language/modules/SchemeModule.cpp
index 71e36183f..a43b2942a 100644
--- a/src/language/modules/SchemeModule.cpp
+++ b/src/language/modules/SchemeModule.cpp
@@ -689,6 +689,8 @@ SchemeModule::registerOperators() const
 void
 SchemeModule::registerCheckpointResume() const
 {
+#ifdef PUGS_HAS_HDF5
+
   CheckpointResumeRepository::instance()
     .addCheckpointResume(ast_node_data_type_from<std::shared_ptr<const DiscreteFunctionVariant>>,
                          std::function([](const std::string& symbol_name, const EmbeddedData& embedded_data,
@@ -753,4 +755,6 @@ SchemeModule::registerCheckpointResume() const
                                           const HighFive::Group& symbol_table_group) -> EmbeddedData {
                            return readVariableBCDescriptor(symbol_name, symbol_table_group);
                          }));
+
+#endif   // PUGS_HAS_HDF5
 }
diff --git a/src/language/modules/WriterModule.cpp b/src/language/modules/WriterModule.cpp
index 00095779b..b5c3f020f 100644
--- a/src/language/modules/WriterModule.cpp
+++ b/src/language/modules/WriterModule.cpp
@@ -191,6 +191,8 @@ WriterModule::registerOperators() const
 void
 WriterModule::registerCheckpointResume() const
 {
+#ifdef PUGS_HAS_HDF5
+
   CheckpointResumeRepository::instance()
     .addCheckpointResume(ast_node_data_type_from<std::shared_ptr<const INamedDiscreteData>>,
                          std::function([](const std::string& symbol_name, const EmbeddedData& embedded_data,
@@ -213,4 +215,6 @@ WriterModule::registerCheckpointResume() const
                          }),
                          std::function([](const std::string& symbol_name, const HighFive::Group& symbol_table_group)
                                          -> EmbeddedData { return readIWriter(symbol_name, symbol_table_group); }));
+
+#endif   // PUGS_HAS_HDF5
 }
diff --git a/src/utils/HighFivePugsUtils.hpp b/src/utils/HighFivePugsUtils.hpp
index 8657e8aff..e8aa4ca37 100644
--- a/src/utils/HighFivePugsUtils.hpp
+++ b/src/utils/HighFivePugsUtils.hpp
@@ -39,6 +39,14 @@ class AtomicType<TinyMatrix<M, N, T>> : public HighFive::DataType
 
 }   // namespace HighFive
 
+#else
+
+namespace HighFive
+{
+class File;
+class Group;
+}   // namespace HighFive
+
 #endif   // PUGS_HAS_HDF5
 
 #endif   // HIGH_FIVE_PUGS_UTILS_HPP
diff --git a/src/utils/checkpointing/CMakeLists.txt b/src/utils/checkpointing/CMakeLists.txt
index aa95560ee..39429c954 100644
--- a/src/utils/checkpointing/CMakeLists.txt
+++ b/src/utils/checkpointing/CMakeLists.txt
@@ -1,15 +1,27 @@
 # ------------------- Source files --------------------
 
-add_library(
-  PugsCheckpointing
+set(checkpointing_SOURCES)
+
+list(APPEND checkpointing_SOURCES
   Checkpoint.cpp
-  CheckpointUtils.cpp
   PrintCheckpointInfo.cpp
   Resume.cpp
-  ResumeUtils.cpp
-  ResumingData.cpp
   ResumingManager.cpp
-  ResumingUtils.cpp)
+  ResumingUtils.cpp
+)
+
+if(PUGS_HAS_HDF5)
+  list(APPEND checkpointing_SOURCES
+    CheckpointUtils.cpp
+    ResumeUtils.cpp
+    ResumingData.cpp
+  )
+endif(PUGS_HAS_HDF5)
+
+add_library(
+  PugsCheckpointing
+  ${checkpointing_SOURCES}
+)
 
 # Additional dependencies
 add_dependencies(PugsCheckpointing
diff --git a/src/utils/checkpointing/CheckpointUtils.hpp b/src/utils/checkpointing/CheckpointUtils.hpp
index 50fa940dc..fb01fe674 100644
--- a/src/utils/checkpointing/CheckpointUtils.hpp
+++ b/src/utils/checkpointing/CheckpointUtils.hpp
@@ -3,6 +3,8 @@
 
 #include <utils/HighFivePugsUtils.hpp>
 
+#ifdef PUGS_HAS_HDF5
+
 #include <language/utils/SymbolTable.hpp>
 #include <mesh/CellType.hpp>
 #include <mesh/ItemArray.hpp>
@@ -103,6 +105,8 @@ write(HighFive::Group& group, const std::string& name, const Table<DataType>& ta
   dataset.createAttribute("number_of_columns", number_of_columns);
 }
 
+#endif   // PUGS_HAS_HDF5
+
 template <typename DataType, ItemType item_type, typename ConnectivityPtr>
 void write(HighFive::Group& group,
            const std::string& name,
diff --git a/src/utils/checkpointing/ResumeUtils.hpp b/src/utils/checkpointing/ResumeUtils.hpp
index f4ec5325d..99992cbb2 100644
--- a/src/utils/checkpointing/ResumeUtils.hpp
+++ b/src/utils/checkpointing/ResumeUtils.hpp
@@ -9,6 +9,8 @@
 #include <mesh/ItemValue.hpp>
 #include <utils/Messenger.hpp>
 
+#ifdef PUGS_HAS_HDF5
+
 template <typename DataType>
 PUGS_INLINE Array<DataType>
 readArray(const HighFive::Group& group, const std::string& name)
@@ -81,6 +83,8 @@ readTable(const HighFive::Group& group, const std::string& name)
   return table;
 }
 
+#endif   // PUGS_HAS_HDF5
+
 EmbeddedData readDiscreteFunctionVariant(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
 EmbeddedData readIBoundaryConditionDescriptor(const std::string& symbol_name,
                                               const HighFive::Group& symbol_table_group);
-- 
GitLab