]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/Config/Config_ModuleReader.cpp
Salome HOME
Update copyrights
[modules/shaper.git] / src / Config / Config_ModuleReader.cpp
index 168983a5eb2d7a28c7c1f0bb2848f69a41c6c6d9..8c4119975c5bc78d1e7bd5e4f8a2acbad72a88b6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2019  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 //
 // You should have received a copy of the GNU Lesser General Public
 // License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or
-// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 #include <pyconfig.h>
@@ -24,6 +23,7 @@
 #include <Config_Common.h>
 #include <Config_ModuleReader.h>
 #include <Config_FeatureReader.h>
+#include <Config_PluginMessage.h>
 #include <Events_InfoMessage.h>
 
 #include <libxml/parser.h>
@@ -102,6 +102,13 @@ void Config_ModuleReader::processNode(xmlNodePtr theNode)
     std::string aPluginLibrary = getProperty(theNode, PLUGIN_LIBRARY);
     std::string aPluginScript = getProperty(theNode, PLUGIN_SCRIPT);
     std::string aPluginName = addPlugin(aPluginLibrary, aPluginScript, aPluginConf);
+    std::string aUsesPlugin = getProperty(theNode, PLUGIN_USES);
+    if (!aUsesPlugin.empty()) { // send information about the plugin dependencies
+      std::shared_ptr<Config_PluginMessage> aMess(new Config_PluginMessage(
+        Events_Loop::loop()->eventByName(Config_PluginMessage::EVENT_ID()), aPluginName));
+      aMess->setUses(aUsesPlugin);
+      Events_Loop::loop()->send(aMess);
+    }
 
     std::list<std::string> aFeatures = importPlugin(aPluginName, aPluginConf);
     std::list<std::string>::iterator it = aFeatures.begin();
@@ -167,6 +174,12 @@ std::string Config_ModuleReader::addPlugin(const std::string& aPluginLibrary,
 
 void Config_ModuleReader::loadPlugin(const std::string& thePluginName)
 {
+  // informs model that plugin loading is started
+  static const Events_ID kEVENT_ID =
+    Events_Loop::loop()->eventByName(Config_PluginMessage::EVENT_ID());
+  std::shared_ptr<Config_PluginMessage> aMess(new Config_PluginMessage(kEVENT_ID, thePluginName));
+  Events_Loop::loop()->send(aMess);
+
   PluginType aType = Config_ModuleReader::Binary;
   if(myPluginTypes.find(thePluginName) != myPluginTypes.end()) {
     aType = myPluginTypes.at(thePluginName);
@@ -197,7 +210,7 @@ void Config_ModuleReader::loadScript(const std::string& theFileName, bool theSen
       PyErr_Fetch(&ptype, &pvalue, &ptraceback);
       PyErr_NormalizeException(&ptype, &pvalue, &ptraceback);
       pstr = PyObject_Str(pvalue);
-      std::string aPyError = std::string(PyString_AsString(pstr));
+      std::string aPyError = std::string(PyUnicode_AsUTF8(pstr));
       if (!aPyError.empty()) {
         anErrorMsg += ":\n" + aPyError;
       }
@@ -221,28 +234,30 @@ void Config_ModuleReader::loadLibrary(const std::string& theLibName)
     return;
 
   #ifdef WIN32
-  HINSTANCE aModLib = ::LoadLibrary(aFileName.c_str());
+  HINSTANCE aModLib = ::LoadLibraryA(aFileName.c_str());
   #else
   void* aModLib = dlopen( aFileName.c_str(), RTLD_LAZY | RTLD_GLOBAL );
   #endif
   if(!aModLib && theLibName != "DFBrowser") { // don't show error for internal debugging tool
+// LCOV_EXCL_START
     std::string anErrorMsg = "Failed to load " + aFileName;
     #ifdef WIN32
     DWORD   dwLastError = ::GetLastError();
     LPSTR messageBuffer = NULL;
     size_t size = ::FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
-                                 FORMAT_MESSAGE_FROM_SYSTEM |
-                                 FORMAT_MESSAGE_IGNORE_INSERTS,
-                                 NULL,
-                                 dwLastError,
-                                 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-                                 (LPSTR)&messageBuffer, 0, NULL);
+                                   FORMAT_MESSAGE_FROM_SYSTEM |
+                                   FORMAT_MESSAGE_IGNORE_INSERTS,
+                                   NULL,
+                                   dwLastError,
+                                   MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+                                   (LPSTR)&messageBuffer, 0, NULL);
     anErrorMsg += ": " +  std::string(messageBuffer, size);
     #else
     anErrorMsg += ": " + std::string(dlerror());
     #endif
     std::cerr << anErrorMsg << std::endl;
     Events_InfoMessage("Config_ModuleReader", anErrorMsg).send();
+// LCOV_EXCL_STOP
   }
 }