ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/BuildSystem/ToolBox.pm
Revision: 1.1.2.6
Committed: Thu Apr 20 11:32:55 2000 UTC (25 years ago) by williamc
Content type: text/plain
Branch: V0_9branch
Changes since 1.1.2.5: +1 -0 lines
Log Message:
reset tool before setup

File Contents

# User Rev Content
1 williamc 1.1.2.1 #
2     # ToolBox.pm
3     #
4     # Originally Written by Christopher Williams
5     #
6     # Description
7     # -----------
8     # create tools from clientsettings 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 williamc 1.1.2.3 # 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
21 williamc 1.1.2.1
22     package BuildSystem::ToolBox;
23     use FileHandle;
24     use BuildSystem::Tool;
25 williamc 1.1.2.3 use Utilities::Verbose;
26    
27     @ISA=qw(Utilities::Verbose);
28 williamc 1.1.2.1 require 5.004;
29    
30     sub new {
31     my $class=shift;
32     $self={};
33     bless $self, $class;
34     $self->init();
35     return $self;
36     }
37    
38     sub init {
39     my $self=shift;
40 williamc 1.1.2.3 $self->{urlcache}="$ENV{LOCALTOP}/.SCRAM/ToolFiles";
41     $self->{datastore}=$ENV{LOCALTOP}."/.SCRAM/".$ENV{SCRAM_ARCH};
42     AddDir::adddir($self->{datastore});
43     AddDir::adddir($self->{urlcache});
44 williamc 1.1.2.1 $self->_readdefaultsfile($ENV{LOCALTOP}."/".$ENV{projconfigdir}.
45     "/External_Dependencies");
46     }
47    
48     sub tools {
49     my $self=shift;
50     return @{$self->{toollist}};
51     }
52    
53 williamc 1.1.2.3 sub toolsetup {
54     my $self=shift;
55     my $name=shift;
56    
57     my $rv=0;
58     # -- get version
59     my $version;
60     if ( @_ ) {
61     $version=shift;
62     }
63     else {
64     $version=$self->defaultversion($name);
65     if ( ! defined $version ) { $rv=1; return $rv; }
66     }
67    
68     my $url;
69    
70     # -- get a tool object
71     my ($tool)=$self->_toolobject($name,$version);
72    
73     # -- get the url
74     if ( @_ ) {
75     $url=shift;
76     }
77     else {
78     # no url specified - try to get it from the tool
79     $url=$tool->url();
80     if ( ! defined $url ) {
81     $self->error("Unable to determine document for tool ".
82     $name." ".$version);
83     }
84     }
85     $url=$self->_download($url);
86    
87     require BuildSystem::ToolDoc;
88     my $doc=BuildSystem::ToolDoc->new();
89     $doc->tool($tool);
90 williamc 1.1.2.6 $tool->reset();
91 williamc 1.1.2.3 if ( ! $doc->setup($url,$name,$version) ) {
92     $tool->store($self->_toolfile($name,$version));
93     }
94     undef $doc;
95     return $rv;
96     }
97    
98    
99 williamc 1.1.2.1 sub gettool {
100     my $self=shift;
101     my $product=shift;
102     my $version;
103    
104     if ( @_ ) { $version=shift; }
105     else {
106     # lookup the default version
107     $version=$self->defaultversion($product);
108     return undef, if ( ! defined $version );
109     }
110 williamc 1.1.2.3 my ($tool,$rv)=$self->_toolobject($product,$version);
111     return ( $rv==0?$tool:undef ); # only return if already set up
112 williamc 1.1.2.1 }
113    
114     sub defaultversion {
115     my $self=shift;
116     my $product=shift;
117    
118     return $self->{defaults}{$product};
119     }
120    
121 williamc 1.1.2.3 sub _toolfile {
122     my $self=shift;
123     my $name=shift;
124     my $version=shift;
125    
126     return $self->{datastore}."/$name_$version.dat";
127     }
128    
129     sub _download {
130     my $self=shift;
131     my $url=shift;
132    
133     $url=~s/$self->{urlcache}\///;
134     # -- make sure we have a copy of the file
135     if ( ! -e $self->{urlcache}."/".$url ) {
136     &urlhandler::urlhandler("file:$ENV{SCRAM_HOME}/toolbox/"
137     .$url, $self->{urlcache}."/$url") ;
138     }
139     return $self->{urlcache}."/".$url;
140     }
141    
142 williamc 1.1.2.1 sub _readclientsettings {
143     my $self=shift;
144     my $clientfile=shift;
145    
146     my $fh=FileHandle->new();
147     $fh->open("<".$clientfile) or die "Unable to open $clientfile\n";
148     my ($tool,$product,$type,$version,$variable,$value);
149     while ( <$fh> ) {
150     chomp;
151     next if /^#/;
152     next if /^\s*$/;
153     ($product, $version, $type, $variable, $value)=split /:/;
154     next if ( $variable=~/\&/ );
155     $product=~tr[A-Z][a-z];
156 williamc 1.1.2.3 ($tool,$rv)=$self->_toolobject($product,$version);
157 williamc 1.1.2.1 $tool->addfeature($variable,$value);
158 williamc 1.1.2.2 $type=~tr[A-Z][a-z];
159     $tool->type($variable,$type);
160 williamc 1.1.2.1 }
161     undef $fh;
162     }
163    
164     sub _readdefaultsfile {
165     my $self=shift;
166     my $file=shift;
167    
168     my $fh=FileHandle->new();
169     $fh->open("<".$file) or die "Unable to open $file $!\n";
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 williamc 1.1.2.3
182 williamc 1.1.2.1 sub _toolobject {
183     my $self=shift;
184     my $product=shift;
185     my $version=shift;
186    
187 williamc 1.1.2.5 my $rv=0;
188 williamc 1.1.2.3
189 williamc 1.1.2.1 if ( ! exists $self->{tools}{$product}{$version} ) {
190 williamc 1.1.2.3 $self->verbose("$product $version being Intitialised");
191 williamc 1.1.2.1 $self->{tools}{$product}{$version}=BuildSystem::Tool->new();
192 williamc 1.1.2.3 my $file=$self->_toolfile($product,$version);
193     if ( -f $file ) { # restore it from disk
194     $self->verbose("Recovering $product $version from $file");
195     $self->{tools}{$product}{$version}->restore($file);
196     }
197     else {
198 williamc 1.1.2.5 $rv=1;
199 williamc 1.1.2.3 $self->verbose("Tool $product $version needs set up");
200     }
201 williamc 1.1.2.1 push @{$self->{toollist}}, [$product, $version];
202     }
203 williamc 1.1.2.3 return ($self->{tools}{$product}{$version}, $rv);
204 williamc 1.1.2.1 }