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

# User Rev Content
1 williamc 1.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     }