1 |
sashby |
1.2 |
#____________________________________________________________________
|
2 |
|
|
# File: BuildDataUtils.pm
|
3 |
|
|
#____________________________________________________________________
|
4 |
|
|
#
|
5 |
|
|
# Author: Shaun Ashby <Shaun.Ashby@cern.ch>
|
6 |
|
|
# Update: 2003-12-03 19:18:46+0100
|
7 |
sashby |
1.4 |
# Revision: $Id: BuildDataUtils.pm,v 1.3 2005/02/16 18:02:59 sashby Exp $
|
8 |
sashby |
1.2 |
#
|
9 |
|
|
# Copyright: 2003 (C) Shaun Ashby
|
10 |
|
|
#
|
11 |
|
|
#--------------------------------------------------------------------
|
12 |
|
|
package BuildSystem::BuildDataUtils;
|
13 |
|
|
require 5.004;
|
14 |
|
|
|
15 |
|
|
use Exporter;
|
16 |
|
|
@ISA=qw(Exporter);
|
17 |
|
|
@EXPORT_OK=qw( );
|
18 |
|
|
|
19 |
|
|
|
20 |
|
|
sub new()
|
21 |
|
|
###############################################################
|
22 |
|
|
# new #
|
23 |
|
|
###############################################################
|
24 |
|
|
# modified : Wed Dec 3 19:18:50 2003 / SFA #
|
25 |
|
|
# params : #
|
26 |
|
|
# : #
|
27 |
|
|
# function : #
|
28 |
|
|
# : #
|
29 |
|
|
###############################################################
|
30 |
|
|
{
|
31 |
|
|
my $proto=shift;
|
32 |
|
|
my $class=ref($proto) || $proto;
|
33 |
|
|
my $self={};
|
34 |
|
|
|
35 |
|
|
bless $self,$class;
|
36 |
|
|
return $self;
|
37 |
|
|
}
|
38 |
|
|
|
39 |
|
|
#
|
40 |
|
|
sub classpath
|
41 |
|
|
{
|
42 |
|
|
my $self=shift;
|
43 |
|
|
# Return array of ClassPaths:
|
44 |
|
|
return $self->{content}->{CLASSPATH};
|
45 |
|
|
}
|
46 |
|
|
|
47 |
|
|
sub productstore
|
48 |
|
|
{
|
49 |
|
|
my $self=shift;
|
50 |
|
|
# Return an array of ProductStore hashes:
|
51 |
|
|
return $self->{content}->{PRODUCTSTORE};
|
52 |
|
|
}
|
53 |
|
|
|
54 |
|
|
sub lib
|
55 |
|
|
{
|
56 |
|
|
my $self=shift;
|
57 |
|
|
# Return an array of required libs:
|
58 |
|
|
return $self->{content}->{LIB};
|
59 |
|
|
}
|
60 |
|
|
|
61 |
|
|
sub include
|
62 |
|
|
{
|
63 |
|
|
my $self=shift;
|
64 |
|
|
# Return an array of required includes:
|
65 |
|
|
return $self->{content}->{INCLUDE};
|
66 |
|
|
}
|
67 |
|
|
|
68 |
|
|
sub libtype
|
69 |
|
|
{
|
70 |
|
|
my $self=shift;
|
71 |
|
|
# Return an array of required lib types:
|
72 |
|
|
return $self->{content}->{LIBTYPE};
|
73 |
|
|
}
|
74 |
|
|
|
75 |
|
|
sub flags
|
76 |
|
|
{
|
77 |
|
|
my $self=shift;
|
78 |
|
|
# Return hash data for flags:
|
79 |
|
|
return $self->{content}->{FLAGS};
|
80 |
|
|
}
|
81 |
|
|
|
82 |
|
|
sub allflags
|
83 |
|
|
{
|
84 |
|
|
my $self=shift;
|
85 |
|
|
# Return hash data for flags:
|
86 |
|
|
return $self->{content}->{FLAGS};
|
87 |
|
|
}
|
88 |
|
|
|
89 |
|
|
sub makefile
|
90 |
|
|
{
|
91 |
|
|
my $self=shift;
|
92 |
|
|
# Return an array of makefile stubs:
|
93 |
|
|
return $self->{content}->{MAKEFILE};
|
94 |
|
|
}
|
95 |
|
|
|
96 |
|
|
sub archspecific
|
97 |
|
|
{
|
98 |
|
|
my $self=shift;
|
99 |
|
|
|
100 |
|
|
# Check to see if there is arch-dependent data. If so, return it:
|
101 |
|
|
if ((my $nkeys=keys %{$self->{content}->{ARCH}}) > 0)
|
102 |
|
|
{
|
103 |
|
|
while (my ($k,$v) = each %{$self->{content}->{ARCH}})
|
104 |
|
|
{
|
105 |
|
|
if ( $ENV{SCRAM_ARCH} =~ /$k.*/ )
|
106 |
|
|
{
|
107 |
|
|
return $self->{content}->{ARCH}->{$k};
|
108 |
|
|
}
|
109 |
|
|
}
|
110 |
|
|
}
|
111 |
|
|
return "";
|
112 |
|
|
}
|
113 |
|
|
|
114 |
|
|
#
|
115 |
|
|
# The routines below are used when processing the build data:
|
116 |
|
|
#
|
117 |
|
|
sub use
|
118 |
|
|
{
|
119 |
|
|
my $self=shift;
|
120 |
|
|
# Add or return uses (package deps):
|
121 |
|
|
@_ ? push(@{$self->{content}->{USE}},@_)
|
122 |
|
|
: @{$self->{content}->{USE}};
|
123 |
|
|
}
|
124 |
|
|
|
125 |
|
|
sub group
|
126 |
|
|
{
|
127 |
|
|
my $self=shift;
|
128 |
|
|
# Add or return groups:
|
129 |
|
|
@_ ? push(@{$self->{content}->{GROUP}},@_)
|
130 |
|
|
: @{$self->{content}->{GROUP}};
|
131 |
|
|
}
|
132 |
|
|
|
133 |
|
|
sub hasexport
|
134 |
|
|
{
|
135 |
|
|
my $self=shift;
|
136 |
|
|
# Check to see if there is a valid export block:
|
137 |
|
|
my $nkeys = $self->exporteddatatypes();
|
138 |
|
|
$nkeys > 0 ? return 1 : return 0;
|
139 |
|
|
}
|
140 |
|
|
|
141 |
|
|
sub has
|
142 |
|
|
{
|
143 |
|
|
my $self=shift;
|
144 |
|
|
my ($datatype)=@_;
|
145 |
|
|
(exists ($self->{content}->{$datatype})) ? return 1 : return 0;
|
146 |
|
|
}
|
147 |
|
|
|
148 |
|
|
sub exported
|
149 |
|
|
{
|
150 |
|
|
my $self=shift;
|
151 |
|
|
# Return a hash. Keys are type of data provided:
|
152 |
|
|
return ($self->{content}->{EXPORT});
|
153 |
|
|
}
|
154 |
|
|
|
155 |
|
|
sub exporteddatatypes
|
156 |
|
|
{
|
157 |
|
|
my $self=shift;
|
158 |
|
|
# Return exported data types:
|
159 |
|
|
return keys %{$self->{content}->{EXPORT}};
|
160 |
|
|
}
|
161 |
|
|
|
162 |
|
|
sub defined_group
|
163 |
|
|
{
|
164 |
|
|
my $self=shift;
|
165 |
sashby |
1.4 |
|
166 |
|
|
if (exists($self->{content}->{DEFINED_GROUP}))
|
167 |
|
|
{
|
168 |
|
|
# Return a list of keys (group names) for defined groups:
|
169 |
|
|
return [ keys %{$self->{content}->{DEFINED_GROUP}} ];
|
170 |
|
|
}
|
171 |
|
|
else
|
172 |
|
|
{
|
173 |
|
|
return 0;
|
174 |
|
|
}
|
175 |
sashby |
1.2 |
}
|
176 |
|
|
|
177 |
|
|
sub dataforgroup
|
178 |
|
|
{
|
179 |
|
|
my $self=shift;
|
180 |
|
|
my ($groupname)=@_;
|
181 |
|
|
# Return hash containing data for defined group
|
182 |
|
|
# $groupname or return undef:
|
183 |
|
|
return $self->{content}->{DEFINED_GROUP}->{$groupname};
|
184 |
|
|
}
|
185 |
|
|
|
186 |
|
|
sub buildproducts
|
187 |
|
|
{
|
188 |
|
|
my $self=shift;
|
189 |
|
|
# Returns hash of build products and their data:
|
190 |
|
|
return $self->{content}->{BUILDPRODUCTS};
|
191 |
|
|
}
|
192 |
|
|
|
193 |
|
|
sub values
|
194 |
|
|
{
|
195 |
|
|
my $self=shift;
|
196 |
|
|
my ($type)=@_;
|
197 |
|
|
# Get a list of values from known types
|
198 |
|
|
return $self->{content}->{BUILDPRODUCTS}->{$type};
|
199 |
|
|
}
|
200 |
|
|
|
201 |
|
|
sub basic_tags()
|
202 |
|
|
{
|
203 |
|
|
my $self=shift;
|
204 |
|
|
my $datatags=[];
|
205 |
|
|
my $buildtags=[ qw(BIN LIBRARY APPLICATION MODULE BUILDPRODUCTS) ];
|
206 |
|
|
my $skiptags=[ qw(DEFINED_GROUP ARCH EXPORT GROUP USE CLASSPATH) ];
|
207 |
sashby |
1.4 |
my $otherskiptags=[ qw( SKIPPEDDIRS ) ];
|
208 |
sashby |
1.2 |
my @all_skip_tags;
|
209 |
|
|
|
210 |
sashby |
1.4 |
push(@all_skip_tags,@$skiptags,@$buildtags,@$otherskiptags);
|
211 |
sashby |
1.2 |
|
212 |
|
|
foreach my $t (keys %{$self->{content}})
|
213 |
|
|
{
|
214 |
|
|
push(@$datatags,$t),if (! grep($t eq $_, @all_skip_tags));
|
215 |
|
|
}
|
216 |
|
|
return @{$datatags};
|
217 |
|
|
}
|
218 |
|
|
|
219 |
|
|
sub clean()
|
220 |
|
|
{
|
221 |
|
|
my $self=shift;
|
222 |
|
|
my (@tags) = @_;
|
223 |
sashby |
1.4 |
|
224 |
sashby |
1.2 |
# Delete some useless entries:
|
225 |
|
|
delete $self->{makefilecontent};
|
226 |
|
|
delete $self->{simpledoc};
|
227 |
|
|
delete $self->{id};
|
228 |
|
|
delete $self->{tagcontent};
|
229 |
|
|
delete $self->{nested};
|
230 |
sashby |
1.4 |
|
231 |
|
|
delete $self->{DEPENDENCIES};
|
232 |
sashby |
1.2 |
|
233 |
|
|
map
|
234 |
|
|
{
|
235 |
|
|
delete $self->{content}->{$_} if (exists($self->{content}->{$_}));
|
236 |
|
|
} @tags;
|
237 |
|
|
|
238 |
|
|
return $self;
|
239 |
|
|
}
|
240 |
|
|
|
241 |
|
|
1;
|