-
- bbtkDebugMessageInc("Core",7,"Factory::LoadPackage(\""<<name<<"\")"<<std::endl);
- bbtkMessage("Debug",1,"Factory::LoadPackage(\""<<name<<"\")"<<std::endl);
- bbtkMessage("Debug",1,"use_configuration_file ["
- << use_configuration_file << "]" << 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, verbose);
- std::string path = Utilities::ExpandLibName(name, verbose); // 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.
- if (verbose)
- std::cout <<" [" <<libname <<"] : doesn't exist" <<std::endl;
- }
- else
- {
- ok = DoLoadPackage( libname, pkgname, path, verbose);
- }
- }
- 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.
- if (verbose)
- std::cout <<" [" <<libname <<"] : doesn't exist" <<std::endl;
- continue; // try next path
- }
- foundFile = true;
-
- // Try to Load the library
-
- ok = DoLoadPackage( libname, pkgname, path, verbose);
- if (ok)
- {
- bbtkMessage("Debug",2," OK"<<std::endl);
- break; // a package was found; we stop iterating
- }
- } //------------------ // 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 << " " << dlerror());
-#elif defined(_WIN32)
- bbtkError("could not load package ["<<pkgname
- <<"] : " << std::endl << " " <<libname<<" not found");
-
- // 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(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);
+
+//EED Debuging message
+// std::cout << "EED Factory::LoadPackage " << std::endl;
+// PackageMapType::iterator it;
+// for ( it=mPackageMap.begin() ; it != mPackageMap.end(); it++ )
+// std::cout << (*it).first << " ";
+// std::cout << std::endl;
+
+ 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
+ //==================================================
+
+ 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() )
+ }
+
+ 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);
+ }