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

# User Rev Content
1 sashby 1.25.2.2 #____________________________________________________________________
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 williamc 1.1 #
9 sashby 1.25.2.2 # Copyright: 2003 (C) Shaun Ashby
10     #
11     #--------------------------------------------------------------------
12 williamc 1.1 package BuildSystem::BuildFile;
13 williamc 1.2 require 5.004;
14 sashby 1.25.2.2 use Exporter;
15     use BuildSystem::TagUtils;
16     use BuildSystem::BuildDataUtils;
17     use ActiveDoc::SimpleDoc;
18 williamc 1.2
19 sashby 1.25.2.2 @ISA=qw(Exporter BuildSystem::BuildDataUtils);
20     @EXPORT_OK=qw( );
21 williamc 1.2
22 sashby 1.25.2.2 #
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 sashby 1.19 {
34 sashby 1.25.2.2 my $proto=shift;
35     my $class=ref($proto) || $proto;
36     my $self={};
37 sashby 1.19
38 sashby 1.25.2.2 bless $self,$class;
39 sashby 1.19
40 sashby 1.25.2.2 $self->{content} = {};
41     $self->{nested} = undef;
42    
43     return $self;
44 sashby 1.19 }
45 williamc 1.2
46 sashby 1.25.2.2 sub _initparser()
47 sashby 1.17 {
48     my $self=shift;
49 sashby 1.25.2.2
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 sashby 1.17
60 sashby 1.25.2.2 # 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 sashby 1.17
81 sashby 1.25.2.2 $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 williamc 1.2
96 sashby 1.25.2.2 $self->{simpledoc}->addtag("builder","export",
97     \&BuildSystem::TagUtils::exporttagOpen, $self,
98     "", $self,
99     \&BuildSystem::TagUtils::exporttagClose, $self);
100 sashby 1.18
101 sashby 1.25.2.2 $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 sashby 1.18
111 sashby 1.25.2.2 $self->{simpledoc}->addtag("builder","makefile",
112     \&BuildSystem::TagUtils::makefiletagOpen, $self,
113     \&BuildSystem::TagUtils::makefiletagContent, $self,
114     \&BuildSystem::TagUtils::makefiletagClose, $self);
115 sashby 1.18
116 sashby 1.25.2.2 $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 sashby 1.18
131 sashby 1.25.2.2 $self->{simpledoc}->addtag("builder","application",
132     \&BuildSystem::TagUtils::applicationtagOpen, $self,
133     "", $self,
134     \&BuildSystem::TagUtils::applicationtagClose, $self);
135 williamc 1.1
136 sashby 1.25.2.2 $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 sashby 1.15 {
151     my $self=shift;
152 sashby 1.25.2.2 my $filename=shift @_;
153 sashby 1.15
154    
155 sashby 1.25.2.2 $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 sashby 1.15 }
171 williamc 1.1
172 sashby 1.25.2.2 sub poplevel
173     {
174     my $self = shift;
175     $self->{id} = undef;
176     $self->{nested} = undef;
177     $self->{tagcontent} = undef;
178     }
179 williamc 1.2
180 sashby 1.25.2.2 sub buildsummary
181 sashby 1.23 {
182     my $self=shift;
183 sashby 1.25.2.2 return $self->{content}->{BUILDSUMMARY};
184 sashby 1.23 }
185 williamc 1.1
186 sashby 1.25.2.2 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 williamc 1.1
194 sashby 1.25.2.2 sub productnamesfortype
195 sashby 1.17 {
196     my $self=shift;
197 sashby 1.25.2.2 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 sashby 1.15
203 sashby 1.25.2.2 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 sashby 1.17 }
211 williamc 1.2
212 sashby 1.25.2.2 sub basic_tags()
213 sashby 1.19 {
214     my $self=shift;
215 sashby 1.25.2.2 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 sashby 1.19
220 sashby 1.25.2.2 push(@all_skip_tags,@$skiptags,@$buildtags);
221 sashby 1.19
222 sashby 1.25.2.2 foreach my $t (keys %{$self->{content}})
223 sashby 1.19 {
224 sashby 1.25.2.2 push(@$datatags,$t),if (! grep($t eq $_, @all_skip_tags));
225 sashby 1.19 }
226 sashby 1.25.2.2 return @{$datatags};
227 sashby 1.19 }
228    
229 williamc 1.2 #
230 sashby 1.25.2.2 # All data access methods are inherited from BuildDataUtils.
231 williamc 1.2 #
232 sashby 1.25.2.2 1;