Program: bbtk
Module: $RCSfile: bbtkConfigurationFile.cxx,v $
Language: C++
- Date: $Date: 2008/10/17 08:18:13 $
- Version: $Revision: 1.18 $
+ Date: $Date: 2009/01/28 13:20:32 $
+ Version: $Revision: 1.28 $
=========================================================================*/
/* ---------------------------------------------------------------------
#include "bbtkUtilities.h"
#if defined(WIN32)
-#include <direct.h> // for getcwd
+# include <direct.h> // for getcwd
+# include <windows.h>
#endif
+
namespace bbtk
{
ConfigurationFile::ConfigurationFile()
{
- mFile_separator = VALID_FILE_SEPARATOR;
+ mFile_separator = VALID_FILE_SEPARATOR;
// ==> Set system paths
- mBin_path = GetExecutablePath();
-//EED mInstall_path = mBin_path + mFile_separator + "..";
+ mBin_path = Utilities::GetExecutablePath();
+
+#ifdef MACOSX
+ mInstall_path = mBin_path + "/../../../..";
+#else
mInstall_path = mBin_path + "/..";
+#endif
+
+
// 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);
-
+
+ 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);
// 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 <<
}
//=========================================================================
+ //=========================================================================
+ 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);
- bbtkMessage("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, "<!DOCTYPE config SYSTEM \"/mnt/windows/bbtk/bbtk_config.xml>\n");
fprintf(fp, "<config>\n");
- fprintf(fp, " <description> </description>\n");
- // fprintf(fp, " <url> http://www.creatis.insa-lyon.fr/software/bbtk </url>\n");
- // fprintf(fp, " <install_path> </install_path>\n");
fprintf(fp, " <bbs_path> </bbs_path>\n");
- // fprintf(fp, " <ext_dll_path> </ext_dll_path>\n");
fprintf(fp, " <package_path> </package_path>\n");
- fprintf(fp, " <data_path> </data_path>\n");//, BBTK_DATA_PATH);
- /// \todo find a decent default value !
- ///fprintf(fp, " <default_temp_dir> %s </default_temp_dir>\n", " ");
- // when $ will be found, default_temp_dir value will be replaced
- fprintf(fp, " <default_temp_dir>$</default_temp_dir>\n");
- fprintf(fp, "</config>\n");
- fclose(fp);
+ fprintf(fp, "</config>\n");
+ fclose(fp);
}
//=========================================================================
-
- //=========================================================================
- 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;
}
// 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);
}
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());