Main Page ? Class Hierarchy ? Compound List ? File List ? Compound Members ? File Members ?

CmtInstallAreaMgr Class Reference

#include

Collaboration diagram for CmtInstallAreaMgr:

[legend]
List of all members.

Public Methods

void? setup ()
void? config () const
const cmt_string&? get_install_area () const

Static Public Methods

CmtInstallAreaMgr&? instance ()

Private Methods

cmt_string? build_current_install_area () const

Private Attributes

cmt_vector<CmtInstallPathPattern>? m_patterns
cmt_string? m_install_area

Member Function Documentation

cmt_string CmtInstallAreaMgr::build_current_install_area ( ) const [private]
?

Definition at line 162 of file cmt_install_area.cxx.

Referenced by config(), and setup().

00163 {
00164   cmt_string installarea;
00165 
00166   const CmtSystem::cmt_string_vector& paths = Cmt::get_cmt_path ();
00167   const CmtSystem::cmt_string_vector& path_sources = Cmt::get_cmt_path_sources ();
00168 
00169   const cmt_string pwd = CmtSystem::pwd ();
00170 
00171   for (int i = 0; i < paths.size (); i++)
00172     {
00173       const cmt_string& p = paths[i];
00174       const cmt_string& s = path_sources[i];
00175 
00176       if (s == "default path") continue;
00177 
00178       if (!CmtSystem::test_directory (p)) continue;
00179           
00180       CmtSystem::cd (p);
00181       const cmt_string fp = CmtSystem::pwd ();
00182       CmtSystem::cd (pwd);
00183 
00184         // To become the current area, a path must correspond to the current package
00185       if (pwd.find (fp) == cmt_string::npos) continue;
00186 
00187       return (p);
00188       break;
00189     }
00190 
00191   return (installarea);
00192 }

void CmtInstallAreaMgr::config ( ) const
?

Definition at line 53 of file cmt_install_area.cxx.

Referenced by Cmt::do_config(), and Cmt::do_setup().

00054 {
00055   cmt_string installarea = build_current_install_area ();
00056 
00057   if (installarea == "") return;
00058 
00059   // cout << "InstallArea installed in " << installarea << endl;
00060 
00061   if (!Cmt::get_quiet ())
00062     {
00063       cout << "# Doing cleanup in the installation area " << installarea << endl;
00064     }
00065 
00066   CmtPathPattern::apply_all ();
00067 
00068   Symbol* macro = Symbol::find ("cmt_installarea_paths");
00069   if (macro == 0) return;
00070   cmt_string installarea_paths = macro->build_macro_value ();
00071 
00072   CmtSystem::cmt_string_vector areapaths;
00073   CmtSystem::split (installarea_paths, " \t", areapaths);
00074 
00075     // Try a cleanup only in this selected install area
00076 
00077   for (int i = 0; i < areapaths.size (); i++)
00078     {
00079       const cmt_string& p = areapaths[i];
00080       
00081       cmt_string path = installarea;
00082       path += CmtSystem::file_separator ();
00083       path += p;
00084       
00085       Symbol::expand (path);
00086 
00087       path.replace_all ("/", CmtSystem::file_separator ());
00088       path.replace_all ("\\", CmtSystem::file_separator ());
00089       
00090       CmtSystem::cmt_string_vector refs;
00091       cmt_regexp expression (".*[.]cmtref$");
00092 
00093         // Look for all cmtref files in this PATH pattern
00094 
00095       CmtSystem::scan_dir (path, expression, refs);
00096       
00097       for (int j = 0; j < refs.size (); j++)
00098         {
00099           const cmt_string& ref_file = refs[j];
00100 
00101             // We get the absolute location of the installed file
00102 
00103           cmt_string ref;
00104           ref.read (ref_file);
00105           int pos;
00106 
00107           ref.replace_all ("\"", "");
00108 
00109           if (Cmt::get_debug ())
00110             {
00111               cout << "CmtInstallAreaMgr::config> " << ref_file << " " << ref << endl;
00112             }
00113 
00114           pos = ref.find ("\r\n");
00115           if (pos != cmt_string::npos) ref.erase (pos);
00116           pos = ref.find ('\n');
00117           if (pos != cmt_string::npos) ref.erase (pos);
00118           pos = ref.find ('\r');
00119           if (pos != cmt_string::npos) ref.erase (pos);
00120           pos = ref.find (' ');
00121           if (pos != cmt_string::npos) ref.erase (pos);
00122 
00123             //  If the referenced file cannot be reached we remove the 
00124             // corresponding installation
00125             //  (this happens if the referenced file has be removed, or 
00126             //   moved away)
00127           
00128           if (!CmtSystem::test_file (ref))
00129             {
00130               cmt_string ref_name;
00131 
00132                 // Get the name of the referenced file
00133               CmtSystem::basename (ref, ref_name);
00134 
00135                 // Get the installation directory
00136               CmtSystem::dirname (ref_file, ref);
00137 
00138               ref += CmtSystem::file_separator ();
00139               ref += ref_name;
00140               
00141                 // Remove both the installed file
00142                 // and the reference file
00143 
00144               if (!Cmt::get_quiet ())
00145                 {
00146                   cout << "# Removing obsolete installed file ["  << ref << "]";
00147                   cout << "  (and " << ref_file << ")" << endl;
00148                 }
00149 
00150               CmtSystem::remove_file (ref);
00151               CmtSystem::remove_file (ref_file);
00152             }
00153         }
00154     }
00155 }

const cmt_string & CmtInstallAreaMgr::get_install_area ( ) const
?

Definition at line 157 of file cmt_install_area.cxx.

Referenced by Cmt::do_build_library_links(), Cmt::do_remove_library_links(), and Cmt::do_setup().

00158 {
00159   return (m_install_area);
00160 }

CmtInstallAreaMgr & CmtInstallAreaMgr::instance ( ) [static]
?

Definition at line 10 of file cmt_install_area.cxx.

Referenced by Cmt::do_build_library_links(), Cmt::do_config(), Cmt::do_remove_library_links(), Cmt::do_setup(), and Cmt::set_standard_macros().

00011 {
00012   static CmtInstallAreaMgr me;
00013 
00014   return (me);
00015 }

void CmtInstallAreaMgr::setup ( )
?

Definition at line 17 of file cmt_install_area.cxx.

Referenced by Cmt::set_standard_macros().

00018 {
00019   m_install_area = build_current_install_area ();
00020 
00021   if (m_install_area == "") return;
00022 
00023   CmtPathPattern::apply_all ();
00024 
00025   cmt_string installarea_prefix;
00026 
00027   Symbol* macro = Symbol::find ("cmt_installarea_prefix");
00028   if (macro != 0)
00029     {
00030       installarea_prefix = macro->build_macro_value ();
00031     }
00032 
00033   if (installarea_prefix != "")
00034     {
00035       m_install_area += CmtSystem::file_separator ();
00036       m_install_area += installarea_prefix;
00037     }
00038 
00039   Use& current_use = Use::current ();
00040   cmt_string buffer;
00041 
00042   if (!Symbol::is_selected ("CMTINSTALLAREA"))
00043     {
00044       buffer = "set CMTINSTALLAREA \"";
00045       buffer += m_install_area;
00046       buffer += "\"";
00047       
00048       SyntaxParser::parse_requirements_line (buffer, ¤t_use);
00049       buffer = "";
00050     }
00051 }

Member Data Documentation

cmt_string CmtInstallAreaMgr::m_install_area [private]
?

Definition at line 25 of file cmt_install_area.h.

cmt_vector< CmtInstallPathPattern > CmtInstallAreaMgr::m_patterns [private]
?

Definition at line 24 of file cmt_install_area.h.


The documentation for this class was generated from the following files:
Generated at Mon Aug 11 12:56:22 2003 for CMT by 1.2.3 written by , ??1997-2000