source: CMT/v1r18p20041201/source/cmt_include.cxx @ 1

Last change on this file since 1 was 1, checked in by arnault, 19 years ago

Import all tags

File size: 5.0 KB
Line 
1//-----------------------------------------------------------
2// Copyright Christian Arnault LAL-Orsay CNRS
3// arnault@lal.in2p3.fr
4// See the complete license in cmt_license.txt "http://www.cecill.info".
5//-----------------------------------------------------------
6
7#include <stdio.h>
8#include <stdlib.h>
9#include <string.h>
10#include <ctype.h>
11
12#include "cmt_include.h"
13#include "cmt_use.h"
14
15/*----------------------------------------------------------*/
16/*                                                          */
17/*  Operations on Include                                   */
18/*                                                          */
19/*----------------------------------------------------------*/
20
21/*----------------------------------------------------------*/
22void Include::action (const CmtSystem::cmt_string_vector& words, Use* use)
23{
24  cmt_string name;
25
26  if (use == 0) use = &(Use::current());
27
28  for (int i = 1; i < words.size (); i++)
29    {
30      name = words[i];
31      if (name == "") return;
32      add (name, use);
33    }
34}
35
36/*----------------------------------------------------------*/
37Include* Include::find (const cmt_string& name, Use* use)
38{
39  int include_index;
40
41  if (use == 0) use = &(Use::current());
42
43  if (use->includes.size () == 0) return (0);
44
45  for (include_index = 0;
46       include_index < use->includes.size ();
47       include_index++)
48    {
49      Include& incl = use->includes[include_index];
50
51      if (incl.use != use) continue;
52
53      if (incl.name == name)
54        {
55          return (&incl);
56        }
57    }
58
59  return (0);
60}
61
62/*----------------------------------------------------------*/
63Include* Include::add (const cmt_string& name, Use* use)
64{
65  if (name == "") return (0);
66
67  if (use == 0) use = &(Use::current());
68
69  {
70    Include* incl;
71
72    incl = find (name, use);
73    if (incl != 0) return (incl);
74  }
75
76  Include& incl = use->includes.add ();
77
78  incl.name = name;
79  incl.use = use;
80
81  return (&incl);
82}
83
84/*----------------------------------------------------------*/
85void Include::print_all (PrintMode mode)
86{
87  int number;
88  int include_number;
89  Use::UsePtrVector& uses = Use::get_ordered_uses ();
90
91  if (uses.size () > 0)
92    {
93      for (number = 0; number < uses.size (); number++)
94        {
95          const Use* use = uses[number];
96
97          Package* p = use->get_package ();
98          if (p->is_cmt ()) continue;
99
100          cout << "-I${" << use->prefix << "ROOT}/src ";
101
102          for (include_number = 0;
103               include_number < use->includes.size ();
104               include_number++)
105            {
106              const Include& incl = use->includes[include_number];
107
108              cout << "-I" << incl.name << " ";
109            }
110        }
111    }
112
113  for (include_number = 0;
114       include_number < (Use::current()).includes.size ();
115       include_number++)
116    {
117      const Include& incl = (Use::current()).includes[include_number];
118
119      cout << "-I" << incl.name << " ";
120    }
121}
122
123/*----------------------------------------------------------*/
124void Include::print_filters (PrintMode mode)
125{
126  int number;
127  int include_number;
128  Use::UsePtrVector& uses = Use::get_ordered_uses ();
129
130  if (uses.size () > 0)
131    {
132      for (number = 0; number < uses.size (); number++)
133        {
134          Use* use = uses[number];
135
136          cout << "s#" <<
137              ".*" << SLASH <<
138              use->get_package_name () << SLASH <<
139              use->version << SLASH <<
140              "#$(" << use->prefix << "ROOT)" << SLASH <<
141              "#g" << endl;
142
143          for (include_number = 0;
144               include_number < use->includes.size ();
145               include_number++)
146            {
147              Include& incl = use->includes[include_number];
148
149              const cmt_string& d = Cmt::filter_dir (incl.name);
150
151              if (d.size () > 0)
152                {
153                  cout << "s#" << d << "#" <<
154                      incl.name << "#g" << endl;
155                }
156            }
157        }
158    }
159
160  {
161    const Use* use = &(Use::current());
162
163    cout << "s#" << ".*" << SLASH <<
164        use->get_package_name () << SLASH <<
165        use->version << SLASH <<
166        "#$(" << use->prefix << "ROOT)" << SLASH <<
167        "#g" << endl;
168
169    for (include_number = 0;
170         include_number < use->includes.size ();
171         include_number++)
172      {
173        const Include& incl = use->includes[include_number];
174
175        const cmt_string& d = Cmt::filter_dir (incl.name);
176
177        if (d.size () > 0)
178          {
179            cout << "s#" << d << "#" <<
180                incl.name << "#g" << endl;
181          }
182      }
183  }
184}
185
186/*----------------------------------------------------------*/
187void Include::clear_all ()
188{
189}
190
191/*----------------------------------------------------------*/
192Include::Include ()
193{
194  use = 0;
195}
196
197/*----------------------------------------------------------*/
198Include::~Include ()
199{
200  use = 0;
201}
202
Note: See TracBrowser for help on using the repository browser.