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