ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/BuildSystem/BuildFile.pm
Revision: 1.25.2.2
Committed: Fri Feb 27 15:34:54 2004 UTC (21 years, 2 months ago) by sashby
Content type: text/plain
Branch: SCRAM_V1_BRANCH
CVS Tags: SCRAM_V1, SCRAMV1_IMPORT
Changes since 1.25.2.1: +185 -1286 lines
Log Message:
First import of new SCRAM packages into CMS cvs repos.

File Contents

# Content
1 #____________________________________________________________________
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.4 2004/02/09 19:31:26 sashby Exp $
8 #
9 # Copyright: 2003 (C) Shaun Ashby
10 #
11 #--------------------------------------------------------------------
12 package BuildSystem::BuildFile;
13 require 5.004;
14 use Exporter;
15 use BuildSystem::TagUtils;
16 use BuildSystem::BuildDataUtils;
17 use ActiveDoc::SimpleDoc;
18
19 @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->{content} = {};
41 $self->{nested} = undef;
42
43 return $self;
44 }
45
46 sub _initparser()
47 {
48 my $self=shift;
49
50 $self->{simpledoc}=ActiveDoc::SimpleDoc->new();
51 $self->{simpledoc}->newparse("builder");
52 $self->{simpledoc}->addignoretags("builder");
53
54 # For blank lines do nothing:
55 $self->{simpledoc}->addtag("builder","none",
56 "", $self,
57 "", $self,
58 "", $self);
59
60 # Define the tags to be used in this class:
61 $self->{simpledoc}->addtag("builder","classpath",
62 \&BuildSystem::TagUtils::classpathtagOpen, $self,
63 "", $self,
64 "", $self);
65
66 $self->{simpledoc}->addtag("builder","productstore",
67 \&BuildSystem::TagUtils::productstoretagOpen, $self,
68 "", $self,
69 "", $self);
70
71 $self->{simpledoc}->addtag("builder","architecture",
72 \&BuildSystem::TagUtils::archtagOpen, $self,
73 "", $self,
74 \&BuildSystem::TagUtils::archtagClose, $self);
75
76 $self->{simpledoc}->addtag("builder","include_path",
77 \&BuildSystem::TagUtils::includetagOpen, $self,
78 "", $self,
79 "", $self);
80
81 $self->{simpledoc}->addtag("builder","define_group",
82 \&BuildSystem::TagUtils::groupdeftagOpen, $self,
83 "", $self,
84 \&BuildSystem::TagUtils::groupdeftagClose, $self);
85
86 $self->{simpledoc}->addtag("builder","group",
87 \&BuildSystem::TagUtils::grouptagOpen, $self,
88 "", $self,
89 "", $self);
90
91 $self->{simpledoc}->addtag("builder","lib",
92 \&BuildSystem::TagUtils::libtagOpen, $self,
93 "", $self,
94 "", $self);
95
96 $self->{simpledoc}->addtag("builder","export",
97 \&BuildSystem::TagUtils::exporttagOpen, $self,
98 "", $self,
99 \&BuildSystem::TagUtils::exporttagClose, $self);
100
101 $self->{simpledoc}->addtag("builder","use",
102 \&BuildSystem::TagUtils::usetagOpen, $self,
103 "", $self,
104 "", $self);
105
106 $self->{simpledoc}->addtag("builder","libtype",
107 \&BuildSystem::TagUtils::libtypetagOpen, $self,
108 "", $self,
109 "", $self);
110
111 $self->{simpledoc}->addtag("builder","makefile",
112 \&BuildSystem::TagUtils::makefiletagOpen, $self,
113 \&BuildSystem::TagUtils::makefiletagContent, $self,
114 \&BuildSystem::TagUtils::makefiletagClose, $self);
115
116 $self->{simpledoc}->addtag("builder","flags",
117 \&BuildSystem::TagUtils::flagstagOpen, $self,
118 "", $self,
119 "", $self);
120
121 $self->{simpledoc}->addtag("builder","bin",
122 \&BuildSystem::TagUtils::binarytagOpen, $self,
123 "", $self,
124 \&BuildSystem::TagUtils::binarytagClose, $self);
125
126 $self->{simpledoc}->addtag("builder","module",
127 \&BuildSystem::TagUtils::moduletagOpen, $self,
128 "", $self,
129 \&BuildSystem::TagUtils::moduletagClose, $self);
130
131 $self->{simpledoc}->addtag("builder","application",
132 \&BuildSystem::TagUtils::applicationtagOpen, $self,
133 "", $self,
134 \&BuildSystem::TagUtils::applicationtagClose, $self);
135
136 $self->{simpledoc}->addtag("builder","library",
137 \&BuildSystem::TagUtils::librarytagOpen, $self,
138 "", $self,
139 \&BuildSystem::TagUtils::librarytagClose, $self);
140
141 # $self->{simpledoc}->addtag("builder"," ",
142 # \&BuildSystem::TagUtils:: ,$self,
143 # \&BuildSystem::TagUtils:: , $self,
144 # \&BuildSystem::TagUtils:: ,$self);
145 #
146 return $self->{simpledoc};
147 }
148
149 sub parse()
150 {
151 my $self=shift;
152 my $filename=shift @_;
153
154
155 $self->{simpledoc}=$self->_initparser();
156 $self->{simpledoc}->filetoparse($filename);
157 $self->{simpledoc}->parse("builder");
158 # We're done with the SimpleDoc object so delete it:
159 undef $self->{simpledoc};
160 }
161
162 sub pushlevel
163 {
164 my $self = shift;
165 my ($info)=@_;
166
167 $self->{id} = $info if (defined $info);
168 $self->{nested} = 1;
169 $self->{tagcontent}={};
170 }
171
172 sub poplevel
173 {
174 my $self = shift;
175 $self->{id} = undef;
176 $self->{nested} = undef;
177 $self->{tagcontent} = undef;
178 }
179
180 sub buildsummary
181 {
182 my $self=shift;
183 return $self->{content}->{BUILDSUMMARY};
184 }
185
186 sub values
187 {
188 my $self=shift;
189 my ($type)=@_;
190 # Get a list of values from known types
191 return $self->{content}->{$type};
192 }
193
194 sub productnamesfortype
195 {
196 my $self=shift;
197 my ($producttype)=@_;
198 # Return the list of names of things to be built
199 # of a specific $producttype:
200 return keys %{$self->{content}->{$producttype}};
201 }
202
203 sub sourcesforbuildproduct
204 {
205 my $self=shift;
206 my ($producttype,$name)=@_;
207 # Return a list of source files for the type of
208 # thing to be built specified by $producttype:
209 return $self->{content}->{$producttype}->{$name}->{FILES};
210 }
211
212 sub basic_tags()
213 {
214 my $self=shift;
215 my $datatags=[];
216 my $buildtags=[ qw(BIN LIBRARY APPLICATION MODULE BUILDSUMMARY) ];
217 my $skiptags=[ qw(DEFINED_GROUP ARCH EXPORT USE CLASSPATH ) ];
218 my @all_skip_tags;
219
220 push(@all_skip_tags,@$skiptags,@$buildtags);
221
222 foreach my $t (keys %{$self->{content}})
223 {
224 push(@$datatags,$t),if (! grep($t eq $_, @all_skip_tags));
225 }
226 return @{$datatags};
227 }
228
229 #
230 # All data access methods are inherited from BuildDataUtils.
231 #
232 1;