]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkFactory.cxx
Works with visual studio 2009
[bbtk.git] / kernel / src / bbtkFactory.cxx
index 37563de8e3523386c3d7076837e0d32c0bf15a2c..627bc80881b1e99ac4b112dbf8244d543c8a9718 100644 (file)
@@ -2,8 +2,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkFactory.cxx,v $
   Language:  C++
-  Date:      $Date: 2009/06/08 14:50:03 $
-  Version:   $Revision: 1.45 $
+  Date:      $Date: 2009/10/05 22:44:48 $
+  Version:   $Revision: 1.46 $
 =========================================================================*/
 
 /* ---------------------------------------------------------------------
@@ -148,153 +148,158 @@ namespace bbtk
   //          same for Windows, with      c:, d: ...
   //
   // lastname : string before the last / (if any), or user supplied name
+         
+       if(name != ""){
+               bbtkDebugMessageInc("kernel",7,"Factory::LoadPackage(\""<<name<<"\")"<<std::endl);
+               bbtkMessage("debug",1,"Factory::LoadPackage(\""<<name<<"\")"<<std::endl);
+
+               std::vector<std::string> package_paths;
+               std::string libname;  // full path library name
+               std::string pkgname;  // e.g. libbb<pkgname>.so
+
+               std::string upath;
+               pkgname = Utilities::ExtractPackageName(name,upath);
+               bbtkMessage("debug",1,"Package name ["<<pkgname<<"]"<<std::endl);
+               bbtkMessage("debug",1,"Package path ["<<upath<<"]"<<std::endl);
+
+               // no loading package if already loaded
+               PackageMapType::iterator iUnload;
+               iUnload = mPackageMap.find(pkgname);
+
+               if (iUnload != mPackageMap.end())
+               {
+                 bbtkMessage("output",2,"["<< pkgname <<"] already loaded" << std::endl);
+                 return;
+               }
+
+       // =================================================
+       // The following structure was checked to work
+       // with any type of relative/absolute path.
+       // Please don't modify it without checking
+       // *all* the cases. JP
+       //==================================================
+
+       //std::cout << "upath [" << upath << "]" << std::endl;
+
+               bool ok = false;
+               bool foundFile = false;
+
+               // If path provided by user will be the first scanned :
+               // push it into vector of paths
+               if (upath.length()>0)   // ------------------------------------- check user supplied location
+               {
+                  if (name[0] != '.' && name[0] != '/' && name[1]!= ':')
+                  {
+                         bbtkError("Use absolute or relative path name! ["<<name<<"] is an illegal name");
+                         return;
+                  }
+
+                 // std::string path = Utilities::ExpandLibName(upath, false);
+
+                  std::string path = Utilities::ExpandLibName(name,false); // keep last item, here.
+                  if (path != "")
+                  {
+                         std::string p2;
+                         Utilities::ExtractPackageName(path,p2);
+                         //libname = Utilities::MakeLibnameFromPath(path, pkgname);
+                         libname = Utilities::MakeLibnameFromPath(p2, pkgname); // remove last item
+                         // Check if library exists
+                         if ( !Utilities::FileExists(libname) )
+                         {
+                         // The following is *NOT* a debug time message :
+                         // It's a user intended message.
+                         // Please don't remove it.
+                       bbtkMessage("output",3,"   [" <<libname 
+                               <<"] : doesn't exist" <<std::endl);
+                         }
+                         else
+                         {
+                                ok = DoLoadPackage( libname, pkgname, path);         
+                         }
+                  }
+                  else
+                  {
+                         bbtkError("Path ["<<upath<<"] doesn't exist");
+                         return;
+                  }
+               }
+               else     // ----------------------------------------------------- iterate on the paths  
+               {
+
+               std::string path = ".";
+               package_paths = ConfigurationFile::GetInstance().Get_package_paths();
+               std::vector<std::string>::iterator i;
+               for (i=package_paths.begin();i!=package_paths.end();++i)
+               {
+                       foundFile = false;
+                       path = *i;
+//std::cout<<"JCP bbtkFactory.cxx void Factory::LoadPackage = path "<<path<<std::endl;
+                       // we *really* want '.' to be the current working directory
+                       if (path == ".")
+                       {
+                         char buf[2048]; // for getcwd
+                         char * currentDir = getcwd(buf, 2048);
+                         std::string cwd(currentDir);
+//std::cout<<"JCP  bbtkFactory.cxx void Factory::LoadPackage = currentDir "<<currentDir<<std::endl;
+                         path = currentDir;
+                       }
+//std::cout<<"JCP bbtkFactory.cxx void Factory::LoadPackage = path "<<path<<" pkgnam="<<pkgname<<std::endl;             
+                       libname = Utilities::MakeLibnameFromPath(path, pkgname);
+
+                       bbtkMessage("debug",2,"-> Trying to load [" << libname << "]" <<std::endl);
+
+                 // Check if library exists           
+                       if ( !Utilities::FileExists(libname) )
+                       {
+                       // The following is *NOT* a debug time message :
+                       // It's a user intended message.
+                       // Please don't remove it.
+                         bbtkMessage("output",3,
+                                 "   [" <<libname <<"] : doesn't exist" <<std::endl);
+                          continue;  // try next path
+                       }
+                       foundFile = true; 
+
+                 // Try to Load the library
+
+                       ok = DoLoadPackage( libname, pkgname, path);
+                       if (ok)
+                       {
+                          bbtkMessage("debug",2,"   OK"<<std::endl);
+                       }
+               break; // we stop iterating even if error : have to signal it to user
+               } //------------------ // end for ( package_paths.begin();i!=package_paths.end() )
 
-    bbtkDebugMessageInc("kernel",7,"Factory::LoadPackage(\""<<name<<"\")"<<std::endl);
-    bbtkMessage("debug",1,"Factory::LoadPackage(\""<<name<<"\")"<<std::endl);
-
-    std::vector<std::string> package_paths;
-    std::string libname;  // full path library name
-    std::string pkgname;  // e.g. libbb<pkgname>.so
-
-    std::string upath;
-    pkgname = Utilities::ExtractPackageName(name,upath);
-
-    bbtkMessage("debug",1,"Package name ["<<pkgname<<"]"<<std::endl);
-    bbtkMessage("debug",1,"Package path ["<<upath<<"]"<<std::endl);
-
-    // no loading package if already loaded
-    PackageMapType::iterator iUnload;
-    iUnload = mPackageMap.find(pkgname);
-    if (iUnload != mPackageMap.end())
-    {
-      bbtkMessage("output",2,"["<< pkgname <<"] already loaded" << std::endl);
-      return;
-    }
-
-// =================================================
-// The following structure was checked to work
-// with any type of relative/absolute path.
-// Please don't modify it without checking
-// *all* the cases. JP
-//==================================================
-
-//std::cout << "upath [" << upath << "]" << std::endl;
-
-    bool ok = false;
-    bool foundFile = false;
-
-    // If path provided by user will be the first scanned :
-    // push it into vector of paths
-    if (upath.length()>0)   // ------------------------------------- check user supplied location
-    {
-       if (name[0] != '.' && name[0] != '/' && name[1]!= ':')
-       {
-          bbtkError("Use absolute or relative path name! ["<<name<<"] is an illegal name");
-          return;
-       }
-
-      // std::string path = Utilities::ExpandLibName(upath, false);
-       std::string path = Utilities::ExpandLibName(name,false); // keep last item, here.
-         
-       if (path != "")
-       {
-          std::string p2;
-          Utilities::ExtractPackageName(path,p2);
-          //libname = Utilities::MakeLibnameFromPath(path, pkgname);
-          libname = Utilities::MakeLibnameFromPath(p2, pkgname); // remove last item
-          // Check if library exists
-          if ( !Utilities::FileExists(libname) )
-          {
-          // The following is *NOT* a debug time message :
-          // It's a user intended message.
-          // Please don't remove it.
-           bbtkMessage("output",3,"   [" <<libname 
-                       <<"] : doesn't exist" <<std::endl);
-          }
-          else
-          {
-             ok = DoLoadPackage( libname, pkgname, path);         
-          }
-       }
-       else
-       {
-          bbtkError("Path ["<<upath<<"] doesn't exist");
-          return;
-       }
-    }
-    else     // ----------------------------------------------------- iterate on the paths  
-    {
-
-    std::string path;
-    package_paths = ConfigurationFile::GetInstance().Get_package_paths();
-    std::vector<std::string>::iterator i;
-    for (i=package_paths.begin();i!=package_paths.end();++i)
-    {
-        foundFile = false;
-        path = *i;
-
-        // we *really* want '.' to be the current working directory
-        if (path == ".")
-        {
-          char buf[2048]; // for getcwd
-          char * currentDir = getcwd(buf, 2048);
-          std::string cwd(currentDir);
-          path = currentDir;
-        }
-
-        libname = Utilities::MakeLibnameFromPath(path, pkgname);
-
-        bbtkMessage("debug",2,"-> Trying to load [" << libname << "]" <<std::endl);
-
-      // Check if library exists           
-        if ( !Utilities::FileExists(libname) )
-        {
-        // The following is *NOT* a debug time message :
-        // It's a user intended message.
-        // Please don't remove it.
-          bbtkMessage("output",3,
-                     "   [" <<libname <<"] : doesn't exist" <<std::endl);
-           continue;  // try next path
-        }
-        foundFile = true; 
-
-      // Try to Load the library
-
-        ok = DoLoadPackage( libname, pkgname, path);
-        if (ok)
-        {
-           bbtkMessage("debug",2,"   OK"<<std::endl);
-        }
-       break; // we stop iterating even if error : have to signal it to user
-    } //------------------ // end for ( package_paths.begin();i!=package_paths.end() )
+       }
 
-}
+               if( !ok )  // nothing was loaded
+               {
+                 if (!foundFile)
+                 {
+                       bbtkError("Could not find package ["<<pkgname<< "]");
+                 }
+                 else
+                 {
+       #if defined(__GNUC__)
+                       bbtkError("Could not load package ["<< pkgname
+                                         <<"] :" << std::endl 
+                         << "  Opening "<<libname<<" failed"
+                         << "  Reason: "<< dlerror());
+       #elif defined(_WIN32)
+                       bbtkError("Could not load package ["<<pkgname
+                         <<"] :"<< std::endl << "   Error loading " <<libname);
+
+               // look how to get the error message on win
+               //<<dlerror());
+               // it is the bordel !! (the bloody fucking bordel, you mean?)
+               // look : http://msdn2.microsoft.com/en-us/library/ms680582.aspx
+       #endif
+                 }
+               }       
+               bbtkMessage("output",2,"[" << libname << "] loaded" << std::endl);
+       }
 
-    if( !ok )  // nothing was loaded
-    {
-      if (!foundFile)
-      {
-        bbtkError("Could not find package ["<<pkgname<< "]");
-      }
-      else
-      {
-#if defined(__GNUC__)
-        bbtkError("Could not load package ["<< pkgname
-                  <<"] :" << std::endl 
-                 << "  Opening "<<libname<<" failed"
-                 << "  Reason: "<< dlerror());
-#elif defined(_WIN32)
-        bbtkError("Could not load package ["<<pkgname
-                 <<"] :"<< std::endl << "   Error loading " <<libname);
-
-    // look how to get the error message on win
-    //<<dlerror());
-    // it is the bordel !! (the bloody fucking bordel, you mean?)
-    // look : http://msdn2.microsoft.com/en-us/library/ms680582.aspx
-#endif
-      }
-    }
-    bbtkMessage("output",2,"[" << libname << "] loaded" << std::endl);
+    
 
   }