ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/BootStrapProject.pm
Revision: 1.1
Committed: Mon Mar 1 10:37:52 1999 UTC (26 years, 2 months ago) by williamc
Content type: text/plain
Branch: MAIN
Log Message:
Initial setup

File Contents

# Content
1 #!/usr/local/bin/perl5
2 # Bootstrap file parser
3
4 package BootStrapProject;
5 require Exporter;
6 @ISA=qw(Exporter);
7 @EXPORT=qw(BootStrapProject);
8
9 sub BootStrapProject($) {
10 my $url=shift;
11 # my $outputfile=shift;
12
13 use urlhandler;
14 use Switcher;
15
16 my $filename;
17 $BootHash={
18 'config_starttag' => \&config_starttag,
19 'config' => 'none',
20 'base' => 'none',
21 'base_starttag' => \&base_start,
22 'base_endtag' => \&base_end,
23 'project' => 'none',
24 'project_starttag' => \&project_start,
25 'project_endtag' => \&project_finish,
26 'install' => \&install,
27 'install_starttag' => \&install_start,
28 'install_endtag' => \&install_finish,
29 'requirements' => 'none',
30 'requirements_starttag' => \&reqs_start,
31 'file' => 'none',
32 'file_starttag' => \&file_start
33 };
34 $filename=urlhandler($url);
35 $switch=Switcher->new($BootHash, $filename);
36 $switch->parse();
37 }
38
39 sub Bootlocaltop($hashref) {
40 my $hashref=shift;
41 use Cwd;
42 use AddDir;
43
44 checkparam($hashref, $name, "name");
45 checkparam($hashref, $name, "version");
46 $ENV{LOCALTOP}=&cwd."/".$$hashref{'name'}."_".$$hashref{'version'};
47 $scramdir=$ENV{LOCALTOP}."/.SCRAM";
48 &adddir($scramdir);
49 }
50
51 sub project_start {
52 my $name=shift;
53 my @vars=@_;
54 my $hashref;
55
56 $hashref=$switch->SetupValueHash( \@vars );
57 Bootlocaltop($hashref);
58 open ( ENVIRONMENT , ">$scramdir/Environment" ) || die "Unable to open ".
59 "Environment file : $!\n";
60 print ENVIRONMENT 'SCRAM_PROJECTNAME='.$$hashref{'name'}."\n";
61 print ENVIRONMENT 'SCRAM_PROJVERSION='.$$hashref{'version'}."\n";
62 $ENV{SCRAM_BootStrapFiles}=$scramdir;
63 open INSTALLFILE, ">$scramdir/InstallFile";
64 print INSTALLFILE "<install name=$$hashref{name} ".
65 "version=$$hashref{version}>\n";
66 print INSTALLFILE "<base urltype=file value=$scramdir>\n";
67 print INSTALLFILE "<file name=Environment>\n";
68 }
69
70 sub project_finish {
71 print ENVIRONMENT "SCRAM_BootStrapFiles=".$ENV{SCRAM_BootStrapFiles}."\n";
72 print ENVIRONMENT "RELEASETOP=$ENV{LOCALTOP}\n";
73 close ENVIRONMENT;
74 print INSTALLFILE "</install>\n";
75 close INSTALLFILE
76 }
77
78 # Set where the project specific configuration files live for the project
79 sub config_starttag {
80 my $name=shift;
81 my @vars=@_;
82 my $hashref;
83
84 $hashref=$switch->SetupValueHash( \@vars );
85 checkparam($hashref, $name, "dir");
86 print ENVIRONMENT 'projconfigdir='.$$hashref{'dir'}."\n";
87 $ENV{SCRAM_BootStrapFiles}=$ENV{SCRAM_BootStrapFiles}.":".
88 $ENV{LOCALTOP}."/".$$hashref{'dir'};
89 }
90
91 sub file_start {
92 my $name=shift;
93 my @vars=@_;
94 my $hashref;
95
96 $hashref=$switch->SetupValueHash( \@vars );
97 checkparam($hashref, $name, "name");
98 # now download the file
99 print "Downloading File .... $$hashref{'name'}\n";
100 &urlhandler(&geturlbase."/".$$hashref{'name'},
101 $scramdir."/".$$hashref{'name'}) ;
102 if ( $switch->context('project') ) {
103 print INSTALLFILE "<$name name=$$hashref{name}>\n";
104 }
105 }
106
107 sub reqs_start {
108 my $name=shift;
109 my @vars=@_;
110 my $hashref;
111
112 $hashref=$switch->SetupValueHash( \@vars );
113 checkparam($hashref, $name, "name");
114 use clientfile;
115 $ENV{SCRAM_ProjReqsDoc}=
116 &urlhandler(&geturlbase."/".$$hashref{'name'},
117 $scramdir."/".$$hashref{'name'}) ;
118 if ( $switch->context("project") ) {
119 print INSTALLFILE "<$name name=$$hashref{name}>\n";
120 }
121 }
122
123 sub base_start {
124 my $name=shift;
125 my @vars=@_;
126 my $hashref;
127
128 $hashref=$switch->SetupValueHash( \@vars );
129 checkparam($hashref, $name, 'urltype');
130 checkparam($hashref, $name, 'value');
131 push @{ $basehash{ $$hashref{'urltype'} }}, $$hashref{'value'};
132 $lastbasekey=$$hashref{'urltype'};
133 #print $lastbasekey." lastbasekey \n";
134 }
135
136 sub base_end {
137 pop @{ $basehash{$lastbasekey} };
138 }
139
140 sub checkparam($hash, $name, $key) {
141 my $hashref=shift;
142 my $name=shift;
143 my $key=shift;
144
145 if ( ! defined $$hashref{$key} ) {
146 print "BootParser: Badly formed $name tag -".
147 " undefined $key parameter\n";
148 exit 1;
149 }
150 $$hashref{$key}=~s/["']//;
151 }
152
153 #Just a file for now!
154 #Will eventually cross ref with access checker to get types available.
155 sub geturlbase {
156 return "file:".@{$basehash{'file'}}[$#{$basehash{'file'}}];
157 }
158
159
160 #
161 # Now deal with an already intalled release base
162 #
163
164 sub install_start {
165 my $name=shift;
166 my @vars=@_;
167 my $hashref;
168
169 $hashref=$switch->SetupValueHash( \@vars );
170 Bootlocaltop($hashref);
171
172 }
173
174 # Can use this to print out a project specific message
175 sub install {
176 my $name=shift;
177 my $vars=shift;
178
179 print @$vars;
180 }
181
182 sub install_finish {
183 my $name=shift;
184 my @vars=@_;
185 my $hashref;
186 }