From a37e6a091420ca90db7229dbf92c242984a68df8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Mon, 9 Nov 2020 14:03:56 +0100
Subject: [PATCH] Add 'utils' module

It provides getPugsVersion() and getPugsBuildInfo() functions which
return string
---
 src/language/modules/CMakeLists.txt       |  1 +
 src/language/modules/ModuleRepository.cpp |  6 ++++--
 src/language/modules/UtilsModule.cpp      | 19 +++++++++++++++++++
 src/language/modules/UtilsModule.hpp      | 19 +++++++++++++++++++
 4 files changed, 43 insertions(+), 2 deletions(-)
 create mode 100644 src/language/modules/UtilsModule.cpp
 create mode 100644 src/language/modules/UtilsModule.hpp

diff --git a/src/language/modules/CMakeLists.txt b/src/language/modules/CMakeLists.txt
index 0a996fd67..cd4c99bd8 100644
--- a/src/language/modules/CMakeLists.txt
+++ b/src/language/modules/CMakeLists.txt
@@ -7,6 +7,7 @@ add_library(PugsLanguageModules
   MeshModule.cpp
   ModuleRepository.cpp
   SchemeModule.cpp
+  UtilsModule.cpp
   VTKModule.cpp
 )
 
diff --git a/src/language/modules/ModuleRepository.cpp b/src/language/modules/ModuleRepository.cpp
index df403fa87..83d44b23e 100644
--- a/src/language/modules/ModuleRepository.cpp
+++ b/src/language/modules/ModuleRepository.cpp
@@ -5,6 +5,7 @@
 #include <language/modules/MathModule.hpp>
 #include <language/modules/MeshModule.hpp>
 #include <language/modules/SchemeModule.hpp>
+#include <language/modules/UtilsModule.hpp>
 #include <language/modules/VTKModule.hpp>
 #include <language/utils/BuiltinFunctionEmbedder.hpp>
 #include <language/utils/ParseError.hpp>
@@ -20,11 +21,12 @@ ModuleRepository::_subscribe(std::unique_ptr<IModule> m)
 
 ModuleRepository::ModuleRepository()
 {
+  this->_subscribe(std::make_unique<LinearSolverModule>());
   this->_subscribe(std::make_unique<MathModule>());
   this->_subscribe(std::make_unique<MeshModule>());
-  this->_subscribe(std::make_unique<VTKModule>());
   this->_subscribe(std::make_unique<SchemeModule>());
-  this->_subscribe(std::make_unique<LinearSolverModule>());
+  this->_subscribe(std::make_unique<UtilsModule>());
+  this->_subscribe(std::make_unique<VTKModule>());
 }
 
 template <typename NameEmbedderMapT, typename EmbedderTableT>
diff --git a/src/language/modules/UtilsModule.cpp b/src/language/modules/UtilsModule.cpp
new file mode 100644
index 000000000..ff5b2a0df
--- /dev/null
+++ b/src/language/modules/UtilsModule.cpp
@@ -0,0 +1,19 @@
+#include <language/modules/UtilsModule.hpp>
+
+#include <language/utils/BuiltinFunctionEmbedder.hpp>
+#include <utils/PugsUtils.hpp>
+
+UtilsModule::UtilsModule()
+{
+  this->_addBuiltinFunction("getPugsVersion", std::make_shared<BuiltinFunctionEmbedder<std::string(void)>>(
+
+                                                []() -> std::string { return pugsVersion(); }
+
+                                                ));
+
+  this->_addBuiltinFunction("getPugsBuildInfo", std::make_shared<BuiltinFunctionEmbedder<std::string(void)>>(
+
+                                                  []() -> std::string { return pugsBuildInfo(); }
+
+                                                  ));
+}
diff --git a/src/language/modules/UtilsModule.hpp b/src/language/modules/UtilsModule.hpp
new file mode 100644
index 000000000..f7580a042
--- /dev/null
+++ b/src/language/modules/UtilsModule.hpp
@@ -0,0 +1,19 @@
+#ifndef UTILS_MODULE_HPP
+#define UTILS_MODULE_HPP
+
+#include <language/modules/BuiltinModule.hpp>
+
+class UtilsModule : public BuiltinModule
+{
+ public:
+  std::string_view
+  name() const final
+  {
+    return "utils";
+  }
+
+  UtilsModule();
+  ~UtilsModule() = default;
+};
+
+#endif   // UTILS_MODULE_HPP
-- 
GitLab