X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkFactory.cxx;h=61b7e3266a3f92b3d9ecbd2b0141d61177e072d4;hb=cadbc7f9439327013dfbefa9415ad7c8680fb351;hp=2accdca393e67717daa9060a1185a12e6e67bc6e;hpb=6990a8aeeaf98fc901ed193b95365b2eee2fb950;p=bbtk.git diff --git a/kernel/src/bbtkFactory.cxx b/kernel/src/bbtkFactory.cxx index 2accdca..61b7e32 100644 --- a/kernel/src/bbtkFactory.cxx +++ b/kernel/src/bbtkFactory.cxx @@ -4,8 +4,8 @@ Program: bbtk Module: $RCSfile: bbtkFactory.cxx,v $ Language: C++ -Date: $Date: 2008/01/22 16:55:04 $ -Version: $Revision: 1.2 $ +Date: $Date: 2008/01/29 10:12:45 $ +Version: $Revision: 1.4 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de @@ -102,25 +102,31 @@ namespace bbtk // =================================================================================== bool Factory::DoLoadPackage(std::string libname, - std::string pkgname, - std::string path, - bool verbose) + std::string pkgname, + std::string path, + bool verbose) { #if defined(__GNUC__) - void *handler; - handler = dlopen(libname.c_str(), + void *handler; + handler = dlopen(libname.c_str(), BBTK_RTLD_TIME | BBTK_RTLD_SCOPE ); if (!handler) { + // The following is *NOT* a debug time message : + // It's a user intended message. + // Please don't remove it. if (verbose) { std::cout <<"[" <[" <GetBBTKVersion()); UnLoadPackage(pkgname); bbtkError(" package build with bbtk version " - << v - << " whereas application build with version " - << bbtk::GetVersion()); + << v + << " whereas application build with version " + << bbtk::GetVersion()); } - std::string separator = - ConfigurationFile::GetInstance().Get_file_separator (); - //BBTK_STRINGIFY_SYMBOL(BBTK_DOC_REL_PATH) - std::string docreldoc = separator + "packages" + separator + pkgname - + separator + "bbdoc" + separator + "index.html"; - std::string reldoc = ".." + separator + ".." + separator - + ".." + docreldoc; - std::string doc = path + separator + ".." + separator - + BBTK_STRINGIFY_SYMBOL(BBTK_DOC_REL_PATH) - + docreldoc; - - //std::cout << "doc='"<SetDocURL(doc); - pack.mPackage->SetDocRelativeURL(reldoc); - + std::string separator = + ConfigurationFile::GetInstance().Get_file_separator (); + //BBTK_STRINGIFY_SYMBOL(BBTK_DOC_REL_PATH) + std::string docreldoc = separator + "packages" + separator + pkgname + + separator + "bbdoc" + separator + "index.html"; + std::string reldoc = ".." + separator + ".." + separator + + ".." + docreldoc; + std::string doc = path + separator + ".." + separator + + BBTK_STRINGIFY_SYMBOL(BBTK_DOC_REL_PATH) + + docreldoc; + + pack.mPackage->SetDocURL(doc); + pack.mPackage->SetDocRelativeURL(reldoc); + //=================================================================== bbtkMessage("Output",2,pack.mPackage->GetName()<<" " <GetVersion() <<" (bbtk " <GetBBTKVersion()<<") " - <GetAuthor() + <GetAuthor() <GetDescription()< package_paths; std::string libname; // full path library name std::string pkgname; // e.g. libbb.so - + std::string upath; pkgname = Utilities::ExtractPackageName(name,upath); @@ -283,47 +292,86 @@ namespace bbtk // no loading package if already loaded PackageMapType::iterator iUnload; iUnload = mPackageMap.find(pkgname); - if (iUnload != mPackageMap.end()) + if (iUnload != mPackageMap.end()) { - bbtkMessage("Output",2,"["<0) package_paths.push_back(upath); - // Add the path of config file - if (use_configuration_file) + +// ================================================= +// 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 { - std::vector::const_iterator pi; - for (pi =ConfigurationFile::GetInstance().Get_package_paths().begin(); - pi!=ConfigurationFile::GetInstance().Get_package_paths().end(); - ++pi) - package_paths.push_back(*pi); + if (name[0] != '.' && name[0] != '/' && name[1]!= ':') + { + bbtkError("Use absolute or relative path name! ["<::iterator i; for (i=package_paths.begin();i!=package_paths.end();++i) - { - foundFile = false; - std::string path = *i; - - // we *really* want '.' to be the current working directory - if (path == ".") { + { + 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); + std::string cwd(currentDir); path = currentDir; } - + libname = Utilities::MakeLibnameFromPath(path, pkgname); - - bbtkMessage("Debug",2,"-> Trying to load ["< Trying to load [" << libname << "]" <second.mDynamicLibraryHandler, + void *delf = GetProcAddress(i->second.mDynamicLibraryHandler, delfname.c_str()); - if (!delf) - { - bbtkError("could not close package \"" + if (!delf) + { + bbtkError("could not close package \"" <second.mPackage->GetName() <<"\" : "<first)->GetDocURL(); - fprintf(ff," %s [shape=ellipse, URL=\"%s\"]%s\n", - i->first.c_str(), - url.c_str(),";" ); + url=GetPackage(i->first)->GetDocURL(); + fprintf(ff," %s [shape=ellipse, URL=\"%s\"]%s\n",i->first.c_str(),url.c_str(),";" ); } fprintf( ff , "}\n\n"); bbtkDebugDecTab("Core",9); @@ -792,49 +837,49 @@ namespace bbtk //=================================================================== - void Factory::ShowGraphTypes(const std::string& name) const - { - bool found = false; - PackageMapType::const_iterator i; - for (i = mPackageMap.begin(); i!=mPackageMap.end(); ++i ) + void Factory::ShowGraphTypes(const std::string& name) const + { + bool found = false; + PackageMapType::const_iterator i; + for (i = mPackageMap.begin(); i!=mPackageMap.end(); ++i ) + { + if (i->second.mPackage->ContainsBlackBox(name)) { - if (i->second.mPackage->ContainsBlackBox(name)) - { - std::string separator = ConfigurationFile::GetInstance().Get_file_separator (); - + std::string separator = ConfigurationFile::GetInstance().Get_file_separator (); + // Don't pollute the file store with "doc_tmp" directories ... - std::string default_doc_dir = ConfigurationFile::GetInstance().Get_default_doc_tmp(); - std::string directory = "\"" + default_doc_dir + separator + "doc_tmp" +separator + "\""; - std::string filename2 = default_doc_dir + separator + "doc_tmp" + separator + "tmp.html"; - + std::string default_doc_dir = ConfigurationFile::GetInstance().Get_default_doc_tmp(); + std::string directory = "\"" + default_doc_dir + separator + "doc_tmp" +separator + "\""; + std::string filename2 = default_doc_dir + separator + "doc_tmp" + separator + "tmp.html"; + #if defined(_WIN32) - std::string command("start \"Titre\" /D "); + std::string command("start \"Titre\" /D "); #else - std::string command("gnome-open "); + std::string command("gnome-open "); #endif - command=command + directory +" tmp.html"; - FILE *ff; - ff=fopen(filename2.c_str(),"w"); - - fprintf(ff,"TMP \n"); - - - //fprintf(ff, "Link\n", i->second.mPackage->GetDocURL().c_str(),name.c_str() ); - fclose(ff); - system( command.c_str() ); - found = true; - } - } + command=command + directory +" tmp.html"; + FILE *ff; + ff=fopen(filename2.c_str(),"w"); + + fprintf(ff,"TMP \n"); + + + //fprintf(ff, "Link\n", i->second.mPackage->GetDocURL().c_str(),name.c_str() ); + fclose(ff); + system( command.c_str() ); + found = true; + } + } - bbtkDebugDecTab("Core",9); - if (!found) - { - bbtkError("No package of the factory contains any black box <" - <"); - } - } + bbtkDebugDecTab("Core",9); + if (!found) + { + bbtkError("No package of the factory contains any black box <" + <"); + } + } }