Program: bbtk
Module: $RCSfile: bbtkConfigurationFile.cxx,v $
Language: C++
- Date: $Date: 2008/10/21 08:37:04 $
- Version: $Revision: 1.19 $
+ Date: $Date: 2009/05/28 14:22:10 $
+ Version: $Revision: 1.31 $
=========================================================================*/
/* ---------------------------------------------------------------------
#include "bbtkUtilities.h"
#if defined(WIN32)
-#include <direct.h> // for getcwd
+# include <direct.h> // for getcwd
+# include <windows.h>
#endif
+
namespace bbtk
{
mFile_separator = VALID_FILE_SEPARATOR;
// ==> Set system paths
- mBin_path = GetExecutablePath();
-//EED mInstall_path = mBin_path + mFile_separator + "..";
+ mBin_path = Utilities::GetExecutablePath();
+
+
+
+
+/* EED 23 Mars 2009
+#ifdef MACOSX
+ mInstall_path = mBin_path + "/../../../..";
+#else
mInstall_path = mBin_path + "/..";
+#endif
+*/
+#ifdef MACOSX
+
+ std::string macPath("Contents/MacOS");
+ int sbp = mBin_path.length();
+ int smp = macPath.length();
+ if (mBin_path.compare( sbp-smp, smp, macPath )==0 )
+ {
+ mBin_path = mBin_path + "/../../..";
+ }
+
+
+#endif
+ mInstall_path = mBin_path + "/..";
+
+
+
// The relative path to the doc folder (=BBTK_DOC_REL_PATH)
- mDoc_rel_path = BBTK_STRINGIFY_SYMBOL(BBTK_DOC_REL_PATH);
+ // mDoc_rel_path = BBTK_STRINGIFY_SYMBOL(BBTK_DOC_REL_PATH);
// The path to the doc folder (=mInstall_path+"/"+mDoc_rel_path)
-//EED mDoc_path = mInstall_path + mFile_separator + mDoc_rel_path;
- mDoc_path = mInstall_path + "/" + mDoc_rel_path;
+ // mDoc_path = mInstall_path + "/" + mDoc_rel_path;
+ // Have to create bbtk user's dirs if needed
+
+ // LG 27/01/09 : doc is now user dependent
+ // and located in user's .bbtk dir /doc
+ // All dirs under .bbtk user's dir are set and created by:
+ InitializeDotBbtkStructure();
+
// The relative path to the doc folder (=BBTK_BBS_REL_PATH)
mBbs_rel_path = BBTK_STRINGIFY_SYMBOL(BBTK_BBS_REL_PATH);
// The path to the bbs folder (=mInstall_path+"/"+mBbs_rel_path)
-//EED mBbs_path = mInstall_path + mFile_separator + mBbs_rel_path;
mBbs_path = mInstall_path + "/" + mBbs_rel_path;
- // The relative path to the rsc folder (=BBTK_RSC_REL_PATH)
- // mRsc_rel_path = BBTK_STRINGIFY_SYMBOL(BBTK_RSC_REL_PATH);
- // The path to the rsc folder (=mInstall_path+"/"+mRsc_rel_path)
- // mRsc_path = mInstall_path + mFile_separator + mRsc_rel_path;
- // The path to the bbtk data folder
- // Initialized to mInstall_path+"/"+BBTK_DATA_REL_PATH
- // But can be overriden by value read from bbtk_config.xml
-//EED mData_path = mInstall_path + mFile_separator + BBTK_STRINGIFY_SYMBOL(BBTK_DATA_REL_PATH);
+
mData_path = mInstall_path + "/" + BBTK_STRINGIFY_SYMBOL(BBTK_DATA_REL_PATH);
-
- Utilities::replace( mBin_path , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
- Utilities::replace( mInstall_path , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
- Utilities::replace( mDoc_rel_path , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
- Utilities::replace( mDoc_path , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
- Utilities::replace( mBbs_path , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
- Utilities::replace( mData_path , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
-
- bbtkMessage("Config",1," ==> bin : '"<<mBin_path<<"'"<<std::endl);
- bbtkMessage("Config",1," ==> prefix : '"<<mInstall_path<<"'"<<std::endl);
- bbtkMessage("Config",1," ==> doc : '"<<mDoc_path<<"'"<<std::endl);
- bbtkMessage("Config",1," ==> bbs : '"<<mBbs_path<<"'"<<std::endl);
- bbtkMessage("Config",1," ==> data : '"<<mData_path<<"'"<<std::endl);
+
+ Utilities::replace( mBin_path,
+ INVALID_FILE_SEPARATOR,
+ VALID_FILE_SEPARATOR);
+ Utilities::replace( mInstall_path,
+ INVALID_FILE_SEPARATOR,
+ VALID_FILE_SEPARATOR);
+ Utilities::replace( mBbs_path,
+ INVALID_FILE_SEPARATOR,
+ VALID_FILE_SEPARATOR);
+ Utilities::replace( mData_path,
+ INVALID_FILE_SEPARATOR,
+ VALID_FILE_SEPARATOR);
+
+ bbtkMessage("config",1," ==> bin : '"<<mBin_path<<"'"<<std::endl);
+ bbtkMessage("config",1," ==> prefix : '"<<mInstall_path<<"'"<<std::endl);
+ bbtkMessage("config",1," ==> doc : '"<<mDoc_path<<"'"<<std::endl);
+ bbtkMessage("config",1," ==> bbs : '"<<mBbs_path<<"'"<<std::endl);
+ bbtkMessage("config",1," ==> data : '"<<mData_path<<"'"<<std::endl);
// bbs_paths
// always add "." (current working directory) at the begining
- mBbs_paths.push_back( "." );
+ mBbs_paths.push_back( "." );
// add system bbs path
mBbs_paths.push_back(mBbs_path);
// add toolsbbtk/appli
for (iStrVec=0;iStrVec<sizeStrVec;iStrVec++){
Utilities::replace( mBbs_paths[iStrVec] , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
}
-
+
// always add "." (current working directory) at the begining
mPackage_paths.push_back(".");
// add system bin path (for build tree / standalone folder install)
mPackage_paths.push_back(mBin_path);
// add system lib path (for install tree)
-//EED mPackage_paths.push_back(mInstall_path + mFile_separator + "lib");
+ //EED mPackage_paths.push_back(mInstall_path + mFile_separator + "lib");
mPackage_paths.push_back(mInstall_path + "/lib");
#ifdef WIN32
// add bin/Debug bin/Release paths (for build/install tree)
-//EED mPackage_paths.push_back(mBin_path + mFile_separator + "Debug");
+ //EED mPackage_paths.push_back(mBin_path + mFile_separator + "Debug");
mPackage_paths.push_back(mBin_path + "/Debug");
-//EED mPackage_paths.push_back(mBin_path + mFile_separator + "Release");
+ //EED mPackage_paths.push_back(mBin_path + mFile_separator + "Release");
mPackage_paths.push_back(mBin_path + "/Release");
#endif
-
- sizeStrVec = mPackage_paths.size();
- for (iStrVec=0;iStrVec<sizeStrVec;iStrVec++){
- Utilities::replace( mPackage_paths[iStrVec] , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
- }
-
-
-
+
+ sizeStrVec = mPackage_paths.size();
+ for (iStrVec=0;iStrVec<sizeStrVec;iStrVec++){
+ Utilities::replace( mPackage_paths[iStrVec] , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
+ }
+
+
+
GetHelp(2);
-
+
// ==> First we look for bbtk_config.xml in "."
char buf[2048];
const char *currentDir = getcwd(buf, 2048);
// LG : throw an exception
}
-// std::string configXmlFullPathName = currentDir + mFile_separator + "bbtk_config.xml";
+ // std::string configXmlFullPathName = currentDir + mFile_separator + "bbtk_config.xml";
std::string configXmlFullPathName = currentDir ;
- configXmlFullPathName += "/bbtk_config.xml";
- Utilities::replace( configXmlFullPathName , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
-
+ configXmlFullPathName += "/bbtk_config.xml";
+ Utilities::replace( configXmlFullPathName , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
+
if ( Utilities::FileExists( configXmlFullPathName ))
{
- bbtkMessage("Config",1, "ConfigurationFile : [" << configXmlFullPathName <<
+ bbtkMessage("config",1, "ConfigurationFile : [" << configXmlFullPathName <<
"] found in current directory" << std::endl);
//Read(configXmlFullPathName.c_str());
// traiter le fichier local
}
//=========================================================================
+ //=========================================================================
+ void ConfigurationFile::InitializeDotBbtkStructure()
+ {
+ mDot_bbtk_path = Utilities::GetUserSettingsDir();
+ mDot_bbtk_is_new = false;
+ if (!Utilities::FileExists(mDot_bbtk_path)) mDot_bbtk_is_new = true;
+ Utilities::CreateDirectoryIfNeeded(mDot_bbtk_path);
+
+ mDoc_path = Utilities::MakeUserSettingsFullFileName("doc");
+ Utilities::CreateDirectoryIfNeeded(mDoc_path);
+ std::string bbdoc_path =
+ Utilities::MakeUserSettingsFullFileName("doc/bbdoc");
+ Utilities::CreateDirectoryIfNeeded(bbdoc_path);
+
+ // Create help_contents.html if does not exist
+ std::string filename = Utilities::MakeUserSettingsFullFileName("doc/help_contents.html");
+ if (!Utilities::FileExists(filename))
+ {
+ bbtkDebugMessage("config",1,
+ "* Creating [" << filename << "]" << std::endl);
+ // The path to the doc folder (=mInstall_path+"/"+mDoc_rel_path)
+ std::string doc_path = mInstall_path + "/"
+ + BBTK_STRINGIFY_SYMBOL(BBTK_DOC_REL_PATH) + "/";
+ Utilities::MakeValidFileName(doc_path);
+ std::ofstream f;
+ f.open(filename.c_str(), std::ios::out );
+ f << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD "
+ << "HTML 4.01 Transitional//EN\">"
+ << "<html><head><title>Help Contents - bbtk "
+ << GetVersion() << "</title>"
+ << "<meta http-equiv=\"Content-Type\" content=\"text/html; "
+ << "charset=iso-8859-1\"></head><H1>Help Contents</H1>"
+ << "<a href=\"bbdoc/index-category.html#demo\" "
+ << "target=\"information\">Demos</a><br>"
+ << "<a href=\"bbdoc/index-category.html#example\" "
+ << "target=\"information\">Examples</a>"
+ << "<H2>Guides</H2>"
+ << "<a href=\""
+ << doc_path
+ << "bbtkUsersGuide/bbtkUsersGuide.html"
+ << "\" target=\"information\">User's Guide</a><br>"
+ << "<a href=\""
+ << doc_path
+ << "bbtkPackageDevelopersGuide/bbtkPackageDevelopersGuide.html"
+ << "\" target=\"information\">Package Developer's Guide</a><br>"
+ << "<a href=\""
+ << doc_path
+ << "doxygen/bbtk/main.html"
+ << "\" target=\"information\">bbtk library doxygen doc</a><br>"
+ << "<H2>Boxes</H2>"
+ << "<a target=\"information\" href=\"bbdoc/index-alpha.html\">"
+ << "Alphabetical list</a><br>"
+ << "<a target=\"information\" href=\"bbdoc/index-package.html\">"
+ << "List by package</a><br>"
+ << "<a target=\"information\" href=\"bbdoc/index-category.html\">"
+ << "List by category</a><br>"
+ << "<a target=\"information\" href=\"bbdoc/index-adaptors.html\">"
+ << "List of adaptors</a><br>"
+ << "</body>"
+ << "</html>";
+ }
+ mTemp_path = Utilities::MakeUserSettingsFullFileName("tmp");
+ Utilities::CreateDirectoryIfNeeded(mTemp_path);
+
+ }
+ //=========================================================================
+
//=========================================================================
void ConfigurationFile::CreateConfigXML( char *rootDirectory )
{
FILE *fp;
char configXml[250];
sprintf (configXml , "%s/bbtk_config.xml", rootDirectory);
- bbtkDebugMessage("Config",1, "in CreateConfigXML[" << configXml << "]" << std::endl);
+ bbtkDebugMessage("config",1, "in CreateConfigXML[" << configXml << "]" << std::endl);
fp = fopen (configXml, "w");
fprintf(fp, "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
fprintf(fp, "<config>\n");
}
//=========================================================================
-
- //=========================================================================
- std::string ConfigurationFile::GetExecutablePath()
- {
- /// \todo : Think to delete it!
- char *buf = (char *)malloc(512);
- char *slash;
-
-#if defined(WIN32)
- GetModuleFileName(NULL, buf, 511);
- slash = strrchr(buf, '\\');
- if (slash)
- {
- *slash = 0;
- }
-#elif defined(__GNUC__)
- int res;
- res = readlink("/proc/self/exe", buf, 512);
- if (res == -1)
- return "";
- buf[res] = 0;
- slash = strrchr(buf, '/');
- if (slash)
- {
- *slash = 0;
- }
-#else
- return "";
-#endif
- std::string ret(buf);
- free(buf);
- return ret;
- }
- //=========================================================================
-
+
+
//=========================================================================
void ConfigurationFile::InstallPath ()
char configPath[200];
sprintf(configPath, "%s/bbtk_config.xml",rootDirectory);
- // makeDir
- char makeDir[250];
- sprintf( makeDir, "mkdir \"%s\" ", rootDirectory);
-
// configXmlTmp
char configXmlTmp[250];
sprintf(configXmlTmp, "%s/bbtk_config.xml.tmp", bbtk_path);
if (!Utilities::FileExists(configXmlTmp)) // bbtk_config.xml.tmp not found (not installed)
{
- if (!Utilities::FileExists(rootDirectory)) // .bbtk not found
- {
- system(makeDir); // create .bbtk
- }
-
// if "bbtk_path/bbtk_config.xml.tmp" doesn't exist, hard-create a minimum version in .bbtk
CreateConfigXML( rootDirectory );// create .bbtk
}
else
{
sprintf(copyFile,"cp %s %s/bbtk_config.xml ",configXmlTmp,rootDirectory );
- if (!Utilities::FileExists(rootDirectory))
- {
- //std::cout << "makeDir[" << makeDir << "]" << std::endl;
- system(makeDir);
- }
-
if (!Utilities::FileExists(configPath))
{
system(copyFile);
if (!Utilities::FileExists(configXmlTmp)) // bbtk_config.xml.tmp not found
{
- if (!Utilities::FileExists(rootDirectory)) // .bbtk not found
- {
- system(makeDir); // create .bbtk
- }
-
// if "bbtk_path/bbtk_config.xml.tmp" doesn't exist, hard-create a minimum version in .bbtk
CreateConfigXML( rootDirectory );// create .bbtk
return;
sprintf(copyFile,"copy %s\\bbtk_config.xml.tmp \"%s\"\\bbtk_config.xml ",bbtk_path,rootDirectory );
int attribs = GetFileAttributes (rootDirectory);
- bbtkMessage("Config",1,std::hex << attribs << " " << FILE_ATTRIBUTE_DIRECTORY << std::endl);
+ bbtkMessage("config",1,std::hex << attribs << " " << FILE_ATTRIBUTE_DIRECTORY << std::endl);
if ( attribs != 0xFFFFFFFF)
{
if ((attribs & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY ) /// \TODO : check !
void ConfigurationFile::Read(const std::string& filename)
{
- bbtkDebugMessage("Config",1,"ConfigurationFile::Read(" <<filename << ")" << std::endl);
+ bbtkDebugMessage("config",1,"ConfigurationFile::Read(" <<filename << ")" << std::endl);
mConfig_xml_full_path = filename;
XMLResults* res = new XMLResults;
{
std::string mess = GetErrorMessage(res,filename);
delete res;
- bbtkDebugMessage("Config",1,mess<< std::endl);
+ bbtkDebugMessage("config",1,mess<< std::endl);
bbtkError(mess);
}
delete res;
- bbtkDebugMessage("Config",1,"OK" << std::endl);
+ bbtkDebugMessage("config",1,"OK" << std::endl);
int i,j;
}
// default_temp_dir
+ /*
if( BB.nChildNode((XMLCSTR)"default_temp_dir") )
GetTextOrClear(BB.getChildNode((XMLCSTR)"default_temp_dir"),mDefault_temp_dir);
size_t pos = mConfig_xml_full_path.find("bbtk_config.xml");
mDefault_temp_dir = mConfig_xml_full_path.substr (0,pos);
}
+ */
GetHelp(2);
}
//=========================================================================
bool ConfigurationFile::AddPackagePathsAndWrite( const std::string& path )
{
- bbtkDebugMessageInc("Config",9,
+ bbtkDebugMessageInc("config",9,
"ConfigurationFile::AddPackagePathsAndWrite("
<<path<<")"<<std::endl);
{
std::string mess = GetErrorMessage(res,Get_config_xml_full_path());
delete res;
- bbtkDebugMessage("Config",1,mess<< std::endl);
+ bbtkDebugMessage("config",1,mess<< std::endl);
bbtkError(mess);
}
delete res;
mPackage_paths.push_back(pack_path);
#ifdef _WIN32
+ pack_path = path + "/RelWithDebInfo";
+ PACKPATH = BB.addChild((XMLCSTR)"package_path");
+ PACKPATH.addText((XMLCSTR)pack_path.c_str());
+ Utilities::replace(pack_path,INVALID_FILE_SEPARATOR,VALID_FILE_SEPARATOR);
+ mPackage_paths.push_back(pack_path);
pack_path = path + "/Debug";
PACKPATH = BB.addChild((XMLCSTR)"package_path");
PACKPATH.addText((XMLCSTR)pack_path.c_str());
if ( err != eXMLErrorNone )
{
std::string mess = GetErrorMessage(res,Get_config_xml_full_path());
- bbtkDebugMessage("Config",1,mess<< std::endl);
+ bbtkDebugMessage("config",1,mess<< std::endl);
bbtkError(mess);
}
//=========================================================================
void ConfigurationFile::GetHelp(int level) const
{
- bbtkDebugMessageInc("Config",9,"ConfigurationFile::GetHelp("<<level
+ bbtkDebugMessageInc("config",9,"ConfigurationFile::GetHelp("<<level
<<")"<<std::endl);
const std::string config_xml_full_path = Get_config_xml_full_path();
const std::vector<std::string>bbs_paths = Get_bbs_paths();
const std::vector<std::string>package_paths = Get_package_paths();
- bbtkMessage("Help",level, "=============" << std::endl);
- bbtkMessage("Help",level, "Configuration" << std::endl);
- bbtkMessage("Help",level, "=============" << std::endl);
- bbtkMessage("Help",level, "bbtk_config.xml : [" << config_xml_full_path << "]" << std::endl);
- bbtkMessage("Help",level, "Documentation Path : [" << url << "]" << std::endl);
- bbtkMessage("Help",level, "Data Path : [" << data_path << "]" << std::endl);
- bbtkMessage("Help",level, "Temp Directory : [" << default_temp_dir << "]" << std::endl);
- bbtkMessage("Help",level, "File Separator : [" << file_separator << "]" << std::endl);
+ bbtkMessage("help",level, "=============" << std::endl);
+ bbtkMessage("help",level, "Configuration" << std::endl);
+ bbtkMessage("help",level, "=============" << std::endl);
+ bbtkMessage("help",level, "bbtk_config.xml : [" << config_xml_full_path << "]" << std::endl);
+ bbtkMessage("help",level, "Documentation Path : [" << url << "]" << std::endl);
+ bbtkMessage("help",level, "Data Path : [" << data_path << "]" << std::endl);
+ bbtkMessage("help",level, "Temp Directory : [" << default_temp_dir << "]" << std::endl);
+ bbtkMessage("help",level, "File Separator : [" << file_separator << "]" << std::endl);
std::vector<std::string>::const_iterator i;
- bbtkMessage("Help",level, "BBS Paths " << std::endl);
+ bbtkMessage("help",level, "BBS Paths " << std::endl);
for (i = bbs_paths.begin(); i!=bbs_paths.end(); ++i )
{
- bbtkMessage("Help",level,"--- ["<<*i<<"]"<<std::endl);
+ bbtkMessage("help",level,"--- ["<<*i<<"]"<<std::endl);
}
- bbtkMessage("Help",level, "PACKAGE Paths : " << std::endl);
+ bbtkMessage("help",level, "PACKAGE Paths : " << std::endl);
for (i = package_paths.begin(); i!=package_paths.end(); ++i )
{
- bbtkMessage("Help",level,"--- ["<<*i<<"]"<<std::endl);
+ bbtkMessage("help",level,"--- ["<<*i<<"]"<<std::endl);
}
- bbtkDebugDecTab("Config",9);
+ bbtkDebugDecTab("config",9);
}
//=========================================================================