ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/BuildSystem/ToolBox.pm
Revision: 1.1.2.9
Committed: Thu Apr 20 13:49:54 2000 UTC (25 years ago) by williamc
Content type: text/plain
Branch: V0_9branch
CVS Tags: V0_12_0
Changes since 1.1.2.8: +19 -24 lines
Log Message:
Use requirements doc to determine version defaults

File Contents

# Content
1 #
2 # ToolBox.pm
3 #
4 # Originally Written by Christopher Williams
5 #
6 # Description
7 # -----------
8 # tools and interface to access them
9 #
10 # Interface
11 # ---------
12 # new() : A new toolbox object
13 # tools() : return a list of tools (name,version) pairs
14 # defaultversion(tool) : return the default version of the specified tool
15 # gettool(name[,version]) : get the tool object with the given name
16 # returns the default version if version not spec.
17 # returns undef if no setup tool is available
18 # toolsetup(name,version[,doc]) : setup the named tool from the specified doc
19 # if doc not specified try and use previous
20 # document; returns 0=OK 1=no version
21 # interactive(0|1) : set the setup mode
22
23 package BuildSystem::ToolBox;
24 use FileHandle;
25 use BuildSystem::Tool;
26 use Utilities::Verbose;
27
28 @ISA=qw(Utilities::Verbose);
29 require 5.004;
30
31 sub new {
32 my $class=shift;
33 $self={};
34 bless $self, $class;
35 $self->init();
36 return $self;
37 }
38
39 sub init {
40 my $self=shift;
41 $self->{urlcache}="$ENV{LOCALTOP}/.SCRAM/ToolFiles";
42 $self->{datastore}=$ENV{LOCALTOP}."/.SCRAM/".$ENV{SCRAM_ARCH};
43 AddDir::adddir($self->{datastore});
44 AddDir::adddir($self->{urlcache});
45 $self->_readdefaultsfile($ENV{LOCALTOP}."/".$ENV{projconfigdir}.
46 "/External_Dependencies");
47 }
48
49 sub interactive {
50 my $self=shift;
51
52 @_?$self->{interactive}=shift
53 :((defined $self->{interactive})?$self->{interactive}:0);
54 }
55
56 sub tools {
57 my $self=shift;
58 return @{$self->{toollist}};
59 }
60
61 sub toolsetup {
62 my $self=shift;
63 my $name=shift;
64
65 my $rv=0;
66 # -- get version
67 my $version;
68 if ( @_ ) {
69 $version=shift;
70 }
71 else {
72 $version=$self->defaultversion($name);
73 if ( ! defined $version ) { $rv=1; return $rv; }
74 }
75
76 my $url;
77
78 # -- get a tool object
79 my ($tool)=$self->_toolobject($name,$version);
80
81 # -- get the url
82 if ( @_ ) {
83 $url=shift;
84 }
85 else {
86 # no url specified - try to get it from the tool
87 $url=$tool->url();
88 if ( ! defined $url ) {
89 $self->error("Unable to determine document for tool ".
90 $name." ".$version);
91 }
92 }
93 $url=$self->_download($url);
94
95 require BuildSystem::ToolDoc;
96 my $doc=BuildSystem::ToolDoc->new();
97 $doc->tool($tool);
98 $doc->interactive($self->interactive());
99 $tool->reset();
100 if ( ! $doc->setup($url,$name,$version) ) {
101 $tool->store($self->_toolfile($name,$version));
102 }
103 else {
104 $self->error("Unable to find $name $version in $url");
105 }
106 undef $doc;
107 return $rv;
108 }
109
110
111 sub gettool {
112 my $self=shift;
113 my $product=shift;
114 my $version;
115
116 if ( @_ ) { $version=shift; }
117 else {
118 # lookup the default version
119 $version=$self->defaultversion($product);
120 return undef, if ( ! defined $version );
121 }
122 my ($tool,$rv)=$self->_toolobject($product,$version);
123 return ( $rv==0?$tool:undef ); # only return if already set up
124 }
125
126 sub defaultversion {
127 my $self=shift;
128 my $product=shift;
129
130 return $self->{defaults}{$product};
131 }
132
133 sub _toolfile {
134 my $self=shift;
135 my $name=shift;
136 my $version=shift;
137
138 return $self->{datastore}."/$name_$version.dat";
139 }
140
141 sub _download {
142 my $self=shift;
143 my $url=shift;
144
145 $url=~s/$self->{urlcache}\///;
146 # -- make sure we have a copy of the file
147 if ( ! -e $self->{urlcache}."/".$url ) {
148 &urlhandler::urlhandler("file:$ENV{SCRAM_HOME}/toolbox/"
149 .$url, $self->{urlcache}."/$url") ;
150 }
151 return $self->{urlcache}."/".$url;
152 }
153
154 sub _readdefaultsfile {
155 my $self=shift;
156 my $file=shift;
157
158 # -- Get defaults from the RequirementsDoc
159 my $req=$self->_requirements();
160 my $tool;
161 foreach $tool ( $req->tools()) {
162 if ( ! defined $self->{defaults}{$tool} ) {
163 $self->{defaults}{$tool}=$req->version($tool);
164 }
165 }
166
167 # -- Read the default override file
168 my $fh=FileHandle->new();
169 $fh->open("<".$file);
170 while ( <$fh> ) {
171 chomp;
172 next if /^#/;
173 next if /^\s*$/;
174 ($product, $version)=split /:/;
175 $product=~tr[A-Z][a-z];
176 $self->{defaults}{$product}=$version;
177 }
178 undef $fh;
179 }
180
181 sub _requirements {
182 if ( ! defined $reqsobj ) {
183 require BuildSystem::Requirements;
184 $reqsobj=BuildSystem::Requirements->new($ENV{SCRAM_ProjReqsDoc});
185 }
186 return $reqsobj;
187 }
188
189 sub _toolobject {
190 my $self=shift;
191 my $product=shift;
192 my $version=shift;
193
194 my $rv=0;
195
196 if ( ! exists $self->{tools}{$product}{$version} ) {
197 $self->verbose("$product $version being Intitialised");
198 $self->{tools}{$product}{$version}=BuildSystem::Tool->new();
199 my $file=$self->_toolfile($product,$version);
200 if ( -f $file ) { # restore it from disk
201 $self->verbose("Recovering $product $version from $file");
202 $self->{tools}{$product}{$version}->restore($file);
203 }
204 else {
205 $rv=1;
206 $self->verbose("Tool $product $version needs set up");
207 }
208 push @{$self->{toollist}}, [$product, $version];
209 }
210 return ($self->{tools}{$product}{$version}, $rv);
211 }