ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/BuildSystem/BuildFile.pm
Revision: 1.26
Committed: Fri Dec 10 13:41:37 2004 UTC (20 years, 4 months ago) by sashby
Content type: text/plain
Branch: MAIN
CVS Tags: V1_0_0
Changes since 1.25: +283 -1299 lines
Log Message:
Merged V1_0 branch to HEAD

File Contents

# User Rev Content
1 sashby 1.26 #____________________________________________________________________
2     # File: BuildFile.pm
3     #____________________________________________________________________
4     #
5     # Author: Shaun Ashby <Shaun.Ashby@cern.ch>
6     # Update: 2003-12-03 19:03:15+0100
7     # Revision: $Id: BuildFile.pm,v 1.25.2.13 2004/11/18 17:38:47 sashby Exp $
8 williamc 1.1 #
9 sashby 1.26 # Copyright: 2003 (C) Shaun Ashby
10     #
11     #--------------------------------------------------------------------
12 williamc 1.1 package BuildSystem::BuildFile;
13 sashby 1.26 require 5.004;
14     use Exporter;
15     use BuildSystem::TagUtils;
16     use BuildSystem::BuildDataUtils;
17 williamc 1.2 use ActiveDoc::SimpleDoc;
18    
19 sashby 1.26 @ISA=qw(Exporter BuildSystem::BuildDataUtils);
20     @EXPORT_OK=qw( );
21    
22     #
23     sub new()
24     ###############################################################
25     # new #
26     ###############################################################
27     # modified : Wed Dec 3 19:03:22 2003 / SFA #
28     # params : #
29     # : #
30     # function : #
31     # : #
32     ###############################################################
33     {
34     my $proto=shift;
35     my $class=ref($proto) || $proto;
36     my $self={};
37    
38     bless $self,$class;
39    
40     $self->{DEPENDENCIES} = {};
41     $self->{content} = {};
42     return $self;
43     }
44    
45     sub _initparser()
46     {
47     my $self=shift;
48    
49     $self->{simpledoc}=ActiveDoc::SimpleDoc->new();
50     $self->{simpledoc}->newparse("builder");
51     $self->{simpledoc}->addignoretags("builder");
52    
53     # For blank lines do nothing:
54     $self->{simpledoc}->addtag("builder","none",
55     "", $self,
56     "", $self,
57     "", $self);
58    
59     # Define the tags to be used in this class:
60     $self->{simpledoc}->addtag("builder","classpath",
61     \&BuildSystem::TagUtils::classpathtagOpen, $self,
62     "", $self,
63     "", $self);
64    
65     $self->{simpledoc}->addtag("builder","productstore",
66     \&BuildSystem::TagUtils::productstoretagOpen, $self,
67     "", $self,
68     "", $self);
69    
70     $self->{simpledoc}->addtag("builder","architecture",
71     \&BuildSystem::TagUtils::archtagOpen, $self,
72     "", $self,
73     \&BuildSystem::TagUtils::archtagClose, $self);
74    
75     $self->{simpledoc}->addtag("builder","include_path",
76     \&BuildSystem::TagUtils::includetagOpen, $self,
77     "", $self,
78     "", $self);
79    
80     $self->{simpledoc}->addtag("builder","define_group",
81     \&BuildSystem::TagUtils::groupdeftagOpen, $self,
82     "", $self,
83     \&BuildSystem::TagUtils::groupdeftagClose, $self);
84    
85     $self->{simpledoc}->addtag("builder","group",
86     \&BuildSystem::TagUtils::grouptagOpen, $self,
87     "", $self,
88     "", $self);
89    
90     $self->{simpledoc}->addtag("builder","lib",
91     \&BuildSystem::TagUtils::libtagOpen, $self,
92     "", $self,
93     "", $self);
94    
95     $self->{simpledoc}->addtag("builder","export",
96     \&BuildSystem::TagUtils::exporttagOpen, $self,
97     "", $self,
98     \&BuildSystem::TagUtils::exporttagClose, $self);
99    
100     $self->{simpledoc}->addtag("builder","use",
101     \&BuildSystem::TagUtils::usetagOpen, $self,
102     "", $self,
103     "", $self);
104    
105     $self->{simpledoc}->addtag("builder","libtype",
106     \&BuildSystem::TagUtils::libtypetagOpen, $self,
107     "", $self,
108     "", $self);
109    
110     $self->{simpledoc}->addtag("builder","makefile",
111     \&BuildSystem::TagUtils::makefiletagOpen, $self,
112     \&BuildSystem::TagUtils::makefiletagContent, $self,
113     \&BuildSystem::TagUtils::makefiletagClose, $self);
114    
115     $self->{simpledoc}->addtag("builder","flags",
116     \&BuildSystem::TagUtils::flagstagOpen, $self,
117     "", $self,
118     "", $self);
119    
120     $self->{simpledoc}->addtag("builder","bin",
121     \&BuildSystem::TagUtils::binarytagOpen, $self,
122     "", $self,
123     \&BuildSystem::TagUtils::binarytagClose, $self);
124    
125     $self->{simpledoc}->addtag("builder","module",
126     \&BuildSystem::TagUtils::moduletagOpen, $self,
127     "", $self,
128     \&BuildSystem::TagUtils::moduletagClose, $self);
129    
130     $self->{simpledoc}->addtag("builder","application",
131     \&BuildSystem::TagUtils::applicationtagOpen, $self,
132     "", $self,
133     \&BuildSystem::TagUtils::applicationtagClose, $self);
134    
135     $self->{simpledoc}->addtag("builder","library",
136     \&BuildSystem::TagUtils::librarytagOpen, $self,
137     "", $self,
138     \&BuildSystem::TagUtils::librarytagClose, $self);
139    
140     # $self->{simpledoc}->addtag("builder"," ",
141     # \&BuildSystem::TagUtils:: ,$self,
142     # \&BuildSystem::TagUtils:: ,$self,
143     # \&BuildSystem::TagUtils:: ,$self);
144    
145     return $self->{simpledoc};
146     }
147 williamc 1.2
148 sashby 1.26 sub parse()
149 sashby 1.19 {
150     my $self=shift;
151 sashby 1.26 my ($filename)=@_;
152    
153     $self->{simpledoc}=$self->_initparser();
154     $self->{simpledoc}->filetoparse($filename);
155     $self->{simpledoc}->parse("builder");
156 sashby 1.19
157 sashby 1.26 # We're done with the SimpleDoc object so delete it:
158     delete $self->{simpledoc};
159 sashby 1.19 }
160 williamc 1.2
161 sashby 1.26 sub _initbranchparser()
162 sashby 1.17 {
163     my $self=shift;
164 sashby 1.26
165     $self->{simpledoc}=ActiveDoc::SimpleDoc->new();
166     $self->{simpledoc}->newparse("branchbuilder");
167     $self->{simpledoc}->addignoretags("branchbuilder");
168    
169     # For blank lines do nothing:
170     $self->{simpledoc}->addtag("branchbuilder","none",
171     "", $self,
172     "", $self,
173     "", $self);
174    
175     # Define the tags to be used in this class:
176     $self->{simpledoc}->addtag("branchbuilder","productstore",
177     \&BuildSystem::TagUtils::productstoretagOpen, $self,
178     "", $self,
179     "", $self);
180    
181     $self->{simpledoc}->addtag("branchbuilder","architecture",
182     \&BuildSystem::TagUtils::archtagOpen, $self,
183     "", $self,
184     \&BuildSystem::TagUtils::archtagClose, $self);
185    
186     $self->{simpledoc}->addtag("branchbuilder","include_path",
187     \&BuildSystem::TagUtils::includetagOpen, $self,
188     "", $self,
189     "", $self);
190    
191     $self->{simpledoc}->addtag("branchbuilder","export",
192     \&BuildSystem::TagUtils::exporttagOpen, $self,
193     "", $self,
194     \&BuildSystem::TagUtils::exporttagClose, $self);
195    
196     $self->{simpledoc}->addtag("branchbuilder","define_group",
197     \&BuildSystem::TagUtils::groupdeftagOpen, $self,
198     "", $self,
199     \&BuildSystem::TagUtils::groupdeftagClose, $self);
200    
201     $self->{simpledoc}->addtag("branchbuilder","group",
202     \&BuildSystem::TagUtils::grouptagOpen, $self,
203     "", $self,
204     "", $self);
205    
206     $self->{simpledoc}->addtag("branchbuilder","lib",
207     \&BuildSystem::TagUtils::libtagOpen, $self,
208     "", $self,
209     "", $self);
210    
211     $self->{simpledoc}->addtag("branchbuilder","use",
212     \&BuildSystem::TagUtils::usetagOpen, $self,
213     "", $self,
214     "", $self);
215    
216     $self->{simpledoc}->addtag("branchbuilder","libtype",
217     \&BuildSystem::TagUtils::libtypetagOpen, $self,
218     "", $self,
219     "", $self);
220    
221     $self->{simpledoc}->addtag("branchbuilder","makefile",
222     \&BuildSystem::TagUtils::makefiletagOpen, $self,
223     \&BuildSystem::TagUtils::makefiletagContent, $self,
224     \&BuildSystem::TagUtils::makefiletagClose, $self);
225    
226     $self->{simpledoc}->addtag("branchbuilder","flags",
227     \&BuildSystem::TagUtils::flagstagOpen, $self,
228     "", $self,
229     "", $self);
230    
231     $self->{simpledoc}->addtag("branchbuilder","bin",
232     \&BuildSystem::TagUtils::binarytagOpen, $self,
233     "", $self,
234     \&BuildSystem::TagUtils::binarytagClose, $self);
235    
236     $self->{simpledoc}->addtag("branchbuilder","module",
237     \&BuildSystem::TagUtils::moduletagOpen, $self,
238     "", $self,
239     \&BuildSystem::TagUtils::moduletagClose, $self);
240    
241     $self->{simpledoc}->addtag("branchbuilder","application",
242     \&BuildSystem::TagUtils::applicationtagOpen, $self,
243     "", $self,
244     \&BuildSystem::TagUtils::applicationtagClose, $self);
245    
246     $self->{simpledoc}->addtag("branchbuilder","library",
247     \&BuildSystem::TagUtils::librarytagOpen, $self,
248     "", $self,
249     \&BuildSystem::TagUtils::librarytagClose, $self);
250 sashby 1.17
251 sashby 1.26 return $self->{simpledoc};
252 sashby 1.17 }
253 williamc 1.2
254 sashby 1.26 sub parsebranchfiles()
255 sashby 1.15 {
256     my $self=shift;
257 sashby 1.26 my ($filenames)=@_; # array ref
258     # List of buildfiles:
259     $self->{localpaths}=$filenames;
260     $self->{simpledoc}=$self->_initbranchparser();
261     # We iterate over an array of files to be read in turn: all
262     # build data will be stored in the same BuildFile object:
263     $self->{simpledoc}->parsefilelist("branchbuilder",$filenames);
264     # We're done with the SimpleDoc object so delete it:
265     delete $self->{simpledoc};
266 sashby 1.15 }
267 williamc 1.1
268 sashby 1.26 sub productcollector()
269 sashby 1.23 {
270     my $self=shift;
271 sashby 1.26 my ($name,$typeshort,$typefull)=@_;
272     # Create a new Product object for storage of data:
273     use BuildSystem::Product;
274     my $product = BuildSystem::Product->new();
275     # Store the name:
276     $product->name($name);
277     $product->type($typeshort);
278     # Store the files:
279     $product->_files($self->{id}->{'file'},$self->{localpaths});
280     # Store the data content:
281     $product->_data($self->{tagcontent});
282     # And store in a hash (all build products in same place):
283     $self->{content}->{BUILDPRODUCTS}->{$typefull}->{$name} = $product;
284 sashby 1.23 }
285 williamc 1.1
286 sashby 1.26 sub pushlevel
287 sashby 1.17 {
288 sashby 1.26 my $self = shift;
289     my ($info)=@_;
290 sashby 1.17
291 sashby 1.26 $self->{id} = $info if (defined $info);
292     $self->{nested} = 1;
293     $self->{tagcontent}={};
294     }
295 sashby 1.15
296 sashby 1.26 sub poplevel
297     {
298     my $self = shift;
299     delete $self->{id};
300     delete $self->{nested};
301     delete $self->{tagcontent};
302 sashby 1.17 }
303 williamc 1.2
304 sashby 1.26 sub dependencies()
305 sashby 1.19 {
306     my $self=shift;
307 sashby 1.26 # Make a copy of the variable so that
308     # we don't have a DEPENDENCIES entry in RAWDATA:
309     my %DEPS=%{$self->{DEPENDENCIES}};
310     delete $self->{DEPENDENCIES};
311     return \%DEPS;
312 sashby 1.19 }
313    
314 williamc 1.2 #
315 sashby 1.26 # All data access methods are inherited from BuildDataUtils.
316 williamc 1.2 #
317 sashby 1.26 1;