]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkConfigurationFile.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkConfigurationFile.cxx
index ef03aa2f4a234b381906e187b508a62ca233b240..4fab8d8ec74d841fe00f47ab0a283afb827b69a9 100644 (file)
@@ -2,8 +2,8 @@
   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
 {
 
@@ -52,39 +54,49 @@ 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);
@@ -96,7 +108,7 @@ namespace bbtk
     
     // 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 
@@ -116,32 +128,32 @@ namespace bbtk
     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);
@@ -154,11 +166,11 @@ namespace bbtk
        // 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 << 
@@ -190,71 +202,95 @@ namespace bbtk
   }
   //=========================================================================
   
+  //=========================================================================
+  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 ()
@@ -293,10 +329,6 @@ namespace bbtk
     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);
@@ -306,23 +338,12 @@ namespace bbtk
     
     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);
@@ -362,11 +383,6 @@ namespace bbtk
     
     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;
@@ -469,6 +485,7 @@ namespace bbtk
       }
     
     // default_temp_dir
+    /*
     if( BB.nChildNode((XMLCSTR)"default_temp_dir") ) 
       GetTextOrClear(BB.getChildNode((XMLCSTR)"default_temp_dir"),mDefault_temp_dir);
     
@@ -477,6 +494,7 @@ namespace bbtk
        size_t pos = mConfig_xml_full_path.find("bbtk_config.xml");
        mDefault_temp_dir = mConfig_xml_full_path.substr (0,pos); 
       }    
+    */
 
     GetHelp(2);
   }
@@ -524,6 +542,11 @@ namespace bbtk
     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());