Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

cmt_include.cxx

Go to the documentation of this file.
00001 //-----------------------------------------------------------
00002 // Copyright Christian Arnault LAL-Orsay CNRS
00003 // arnault@lal.in2p3.fr
00004 // See the complete license in cmt_license.txt "http://www.cecill.info". 
00005 //-----------------------------------------------------------
00006 
00007 #include <stdio.h>
00008 #include <stdlib.h>
00009 #include <string.h>
00010 #include <ctype.h>
00011 
00012 #include "cmt_include.h"
00013 #include "cmt_use.h"
00014 
00015 /*----------------------------------------------------------*/
00016 /*                                                          */
00017 /*  Operations on Include                                   */
00018 /*                                                          */
00019 /*----------------------------------------------------------*/
00020 
00021 /*----------------------------------------------------------*/
00022 void Include::action (const CmtSystem::cmt_string_vector& words, Use* use)
00023 {
00024   cmt_string name;
00025 
00026   if (use == 0) use = &(Use::current());
00027 
00028   for (int i = 1; i < words.size (); i++)
00029     {
00030       name = words[i];
00031       if (name == "") return;
00032       add (name, use);
00033     }
00034 }
00035 
00036 /*----------------------------------------------------------*/
00037 Include* Include::find (const cmt_string& name, Use* use)
00038 {
00039   int include_index;
00040 
00041   if (use == 0) use = &(Use::current());
00042 
00043   if (use->includes.size () == 0) return (0);
00044 
00045   for (include_index = 0;
00046        include_index < use->includes.size ();
00047        include_index++)
00048     {
00049       Include& incl = use->includes[include_index];
00050 
00051       if (incl.use != use) continue;
00052 
00053       if (incl.name == name)
00054         {
00055           return (&incl);
00056         }
00057     }
00058 
00059   return (0);
00060 }
00061 
00062 /*----------------------------------------------------------*/
00063 Include* Include::add (const cmt_string& name, Use* use)
00064 {
00065   if (name == "") return (0);
00066 
00067   if (use == 0) use = &(Use::current());
00068 
00069   {
00070     Include* incl;
00071 
00072     incl = find (name, use);
00073     if (incl != 0) return (incl);
00074   }
00075 
00076   Include& incl = use->includes.add ();
00077 
00078   incl.name = name;
00079   incl.use = use;
00080 
00081   return (&incl);
00082 }
00083 
00084 /*----------------------------------------------------------*/
00085 void Include::print_all (PrintMode mode)
00086 {
00087   int number;
00088   int include_number;
00089   Use::UsePtrVector& uses = Use::get_ordered_uses ();
00090 
00091   if (uses.size () > 0)
00092     {
00093       for (number = 0; number < uses.size (); number++)
00094         {
00095           const Use* use = uses[number];
00096 
00097           Package* p = use->get_package ();
00098           if (p->is_cmt ()) continue;
00099 
00100           cout << "-I${" << use->prefix << "ROOT}/src ";
00101 
00102           for (include_number = 0;
00103                include_number < use->includes.size ();
00104                include_number++)
00105             {
00106               const Include& incl = use->includes[include_number];
00107 
00108               cout << "-I" << incl.name << " ";
00109             }
00110         }
00111     }
00112 
00113   for (include_number = 0;
00114        include_number < (Use::current()).includes.size ();
00115        include_number++)
00116     {
00117       const Include& incl = (Use::current()).includes[include_number];
00118 
00119       cout << "-I" << incl.name << " ";
00120     }
00121 }
00122 
00123 /*----------------------------------------------------------*/
00124 void Include::print_filters (PrintMode mode)
00125 {
00126   int number;
00127   int include_number;
00128   Use::UsePtrVector& uses = Use::get_ordered_uses ();
00129 
00130   if (uses.size () > 0)
00131     {
00132       for (number = 0; number < uses.size (); number++)
00133         {
00134           Use* use = uses[number];
00135 
00136           cout << "s#" <<
00137               ".*" << SLASH <<
00138               use->get_package_name () << SLASH <<
00139               use->version << SLASH <<
00140               "#$(" << use->prefix << "ROOT)" << SLASH <<
00141               "#g" << endl;
00142 
00143           for (include_number = 0;
00144                include_number < use->includes.size ();
00145                include_number++)
00146             {
00147               Include& incl = use->includes[include_number];
00148 
00149               const cmt_string& d = Cmt::filter_dir (incl.name);
00150 
00151               if (d.size () > 0)
00152                 {
00153                   cout << "s#" << d << "#" <<
00154                       incl.name << "#g" << endl;
00155                 }
00156             }
00157         }
00158     }
00159 
00160   {
00161     const Use* use = &(Use::current());
00162 
00163     cout << "s#" << ".*" << SLASH <<
00164         use->get_package_name () << SLASH <<
00165         use->version << SLASH <<
00166         "#$(" << use->prefix << "ROOT)" << SLASH <<
00167         "#g" << endl;
00168 
00169     for (include_number = 0;
00170          include_number < use->includes.size ();
00171          include_number++)
00172       {
00173         const Include& incl = use->includes[include_number];
00174 
00175         const cmt_string& d = Cmt::filter_dir (incl.name);
00176 
00177         if (d.size () > 0)
00178           {
00179             cout << "s#" << d << "#" <<
00180                 incl.name << "#g" << endl;
00181           }
00182       }
00183   }
00184 }
00185 
00186 /*----------------------------------------------------------*/
00187 void Include::clear_all ()
00188 {
00189 }
00190 
00191 /*----------------------------------------------------------*/
00192 Include::Include ()
00193 {
00194   use = 0;
00195 }
00196 
00197 /*----------------------------------------------------------*/
00198 Include::~Include ()
00199 {
00200   use = 0;
00201 }
00202 

Generated on Mon May 2 10:25:05 2005 for CMT by doxygen 1.3.5