X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FConfig%2FConfig_ModuleReader.cpp;h=8c4119975c5bc78d1e7bd5e4f8a2acbad72a88b6;hb=dff2e776460fc98e6b234181479ec680a91e9623;hp=9e8549cdb43bd7d7aea303add9f452ed95bf922c;hpb=d36a44bebc13ef15510f2e7693deea86418bad1c;p=modules%2Fshaper.git diff --git a/src/Config/Config_ModuleReader.cpp b/src/Config/Config_ModuleReader.cpp index 9e8549cdb..8c4119975 100644 --- a/src/Config/Config_ModuleReader.cpp +++ b/src/Config/Config_ModuleReader.cpp @@ -1,11 +1,21 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -/* - * Config_ModuleReader.cpp - * - * Created on: Mar 20, 2014 - * Author: sbh - */ +// 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 +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// 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 +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include @@ -13,6 +23,7 @@ #include #include #include +#include #include #include @@ -91,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 aMess(new Config_PluginMessage( + Events_Loop::loop()->eventByName(Config_PluginMessage::EVENT_ID()), aPluginName)); + aMess->setUses(aUsesPlugin); + Events_Loop::loop()->send(aMess); + } std::list aFeatures = importPlugin(aPluginName, aPluginConf); std::list::iterator it = aFeatures.begin(); @@ -156,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 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); @@ -186,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; } @@ -210,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 } }