ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/scram
Revision: 1.18
Committed: Tue Mar 30 08:53:35 1999 UTC (26 years, 1 month ago) by williamc
Branch: MAIN
Changes since 1.17: +1 -0 lines
Log Message:
Make sure exit if no localtop found

File Contents

# User Rev Content
1 williamc 1.8 #!/usr/local/bin/perl5
2 williamc 1.1 #
3     # User Interface
4     #
5    
6     $inputcmd=shift;
7     $found='false';
8 williamc 1.13 $bold = "\033[1m";
9     $normal = "\033[0m";
10 williamc 1.15 @allowed_commands=qw(project build install version list arch setup);
11 williamc 1.1
12     foreach $command ( @allowed_commands ) {
13 williamc 1.13 if ( $inputcmd=~/^$command\Z/i) {
14     # Deal with a help request
15     do{ helpheader($command);
16     &{"help_".$command}; exit; } if $ARGV[0]=~/help/i;
17     &$command; $found='true';
18     last;
19     }
20 williamc 1.1 }
21    
22     if ( ! ( $found=~/true/ ) ) {
23 williamc 1.15 helpheader('Recognised Commands');
24 williamc 1.1 foreach $command ( @allowed_commands ) {
25 williamc 1.15 print " $bold scram ".$command.$normal."\n";
26 williamc 1.1 }
27 williamc 1.15 print "\n";
28     print "Help on individual commands available through\n\n";
29     print "$bold scram".$normal." command$bold help $normal\n\n";
30 williamc 1.1 }
31    
32 williamc 1.14 sub help_build {
33     &build;
34     }
35 williamc 1.1 sub build {
36     # is this a based or free release?
37     FullEnvInit();
38     use BuildSetup;
39 williamc 1.10 $ENV{MAKETARGETS}=join ' ',@ARGV;
40 williamc 1.1 BuildSetup($ENV{THISDIR},@ARGV);
41     # system("$ENV{TOOL_HOME}/BuildSetup",$ENV{THISDIR},@ARGV);
42     }
43    
44     sub project {
45 williamc 1.7 # process options
46     while ( $ARGV[0]=~"^-" ) {
47     if ( (shift @ARGV)=~/-d/ ) { #installation area directory
48     chdir $ARGV[0];
49     shift @ARGV;
50     }
51     }
52 williamc 1.1 my $project=shift @ARGV;
53     my $version=shift @ARGV;
54     environmentinit();
55     use File::Copy;
56 williamc 1.2 use Utilities::AddDir;
57 williamc 1.1
58     use BootStrapProject;
59     # get the bootstrap files downloaded
60     BootStrapProject("$project\?\?$version");
61     # Go setup the rest of the environement, now we can
62     chdir $ENV{LOCALTOP};
63     &localtop;
64     LoadEnvFile();
65     #
66     # Now create the directories specified in the interface
67     #
68     foreach $key ( keys %ENV ) {
69     if ( $key=~/^INT/ ) {
70 williamc 1.5 AddDir::adddir($ENV{$key});
71 williamc 1.1 }
72     }
73 williamc 1.6 if ( ! -e "$ENV{LOCALTOP}/$ENV{projconfigdir}" ) {
74     system("cp", "-r", "$ENV{RELEASETOP}/$ENV{projconfigdir}",
75     "$ENV{LOCALTOP}/$ENV{projconfigdir}");
76     }
77 williamc 1.1 use clientfile;
78     BuildClientFile( $ENV{SCRAM_ProjReqsDoc} );
79 williamc 1.7 use Cwd;
80     print "Installation Located at:\n".cwd()."\n";
81 williamc 1.1 }
82 williamc 1.7
83 williamc 1.1 sub FullEnvInit {
84     environmentinit();
85     localtop();
86     LoadEnvFile();
87     }
88    
89     sub environmentinit {
90 williamc 1.2 use Utilities::setarchitecture;
91 williamc 1.1 my $name;
92     my $value;
93    
94     $ENV{LatestBuildFile}=""; # stop recursive behaviour in make
95 williamc 1.4 setarchitecture::setarch();
96 williamc 1.1 $ENV{INTwork}="tmp/$ENV{SCRAM_ARCH}";
97     $ENV{INTlib}="lib/$ENV{SCRAM_ARCH}";
98     $ENV{INTsrc}="src";
99     $ENV{INTbin}="bin/$ENV{SCRAM_ARCH}";
100     $ENV{INTlog}="logs";
101    
102     if ( ! ( exists $ENV{SCRAM_HOME}) ){
103 williamc 1.8 $ENV{SCRAM_HOME}="/afs/cern.ch/cms/Releases";
104 williamc 1.1 print "Warning : Environment Variable SCRAM_HOME not set.\n";
105     print "Defaulting to $ENV{SCRAM_HOME}\n";
106     }
107     if ( ! ( exists $ENV{SCRAM_CONFIG} ) ){
108 williamc 1.3 $ENV{SCRAM_CONFIG}="$ENV{SCRAM_HOME}/configuration";
109 williamc 1.1 }
110     if ( ! ( exists $ENV{TOOL_HOME} ) ){
111 williamc 1.4 $ENV{TOOL_HOME}="$ENV{SCRAM_HOME}/src";
112 williamc 1.1 }
113     if ( ! ( exists $ENV{SCRAM_LOOKUPDB} ) ){
114     $ENV{SCRAM_LOOKUPDB}="$ENV{SCRAM_CONFIG}/project.lookup";
115     }
116     }
117    
118     sub localtop {
119     # find localtop
120     use Cwd;
121     my $thispath=cwd;
122     block: {
123     do {
124     if ( -e "$thispath/.SCRAM" ) {
125     $ENV{LOCALTOP}=$thispath;
126     last block;
127     }
128     } while ( ( $thispath=~s/(.*)\/.*/$1/ )=~/./ );
129     if ( ! (defined $ENV{LOCALTOP}) ) {
130     print "Unable to locate the top of local release. Exiting\n";
131 williamc 1.18 exit 1;
132 williamc 1.1 }
133     } #end block
134     ($ENV{THISDIR}=cwd)=~s/^$ENV{LOCALTOP}//;
135     $ENV{THISDIR}=~s/^\///;
136     $ENV{SCRAM_WORKDIR}="$ENV{LOCALTOP}/.SCRAM";
137     }
138    
139     sub LoadEnvFile {
140     open ( SCRAMENV, "<$ENV{SCRAM_WORKDIR}/Environment" ) ||
141     die "Cant find Environment file $!\n";
142     while ( <SCRAMENV> ) {
143     chomp;
144     next if /^#/;
145     next if /^\s*$/ ;
146     ($name, $value)=split /=/;
147     eval "\$ENV{${name}}=\"$value\"";
148     }
149     close SCRAMENV;
150     }
151    
152     sub env {
153     print "Sorry - Not yet\n";
154     }
155    
156     #
157     # Create a lookup tag in the site database
158     #
159     sub install ( $tagname, $version ) {
160     my $tagname=shift @ARGV;
161     my $version=shift @ARGV;
162    
163     # create database entry
164     &FullEnvInit;
165     if ( $version eq "" ) {
166     $version=$ENV{SCRAM_PROJVERSION};
167     }
168     if ( $tagname eq "" ) {
169     $tagname=$ENV{SCRAM_PROJECTNAME};
170     }
171     my $filename="$ENV{SCRAM_CONFIG}/project.lookup";
172     my $outfile="$ENV{SCRAM_CONFIG}/project.lookup.tmp";
173     open ( LOCALLOOKUPDB, "<$filename" );
174 williamc 1.16 open ( OUTFILE , ">$outfile" ) or die "Unable to open $outfile $!\n";
175 williamc 1.1 while ( <LOCALLOOKUPDB> ) {
176     if ( /^$tagname/ ) {
177     print "Related tag :".$_."\n";
178     if ( /$version/) {
179     print "$tagname $version already exists. Overwrite (y/n)\n";
180     if ( ! (<STDIN>=~/y/i ) ) {
181     print "Aborting install ...\n";
182     close OUTFILE;
183     close LOCALLOOKUPDB;
184     exit 1;
185     }
186     }
187     else {
188     print OUTFILE $_;
189     }
190     }
191     else {
192     print OUTFILE $_;
193     }
194     }
195     print OUTFILE "$tagname:$version:file:$ENV{LOCALTOP}".
196     "/.SCRAM/InstallFile\n";
197     close OUTFILE;
198     close LOCALLOOKUPDB;
199     copy ( "$outfile", "$filename" )
200     || die "Unable to copy $! \n";
201    
202     }
203    
204     sub help_install() {
205    
206     print <<ENDTEXT;
207     Associates a label with the current release in the SCRAM database.
208     This allows other users to refer to a centrally installed project by
209     this label rather than a remote url reference.
210    
211     Usage:
212    
213     scram install [[label] [version]]
214    
215     label : override default label (the project name of the current release)
216     version : the version tag of the current release. If version is not
217     specified the base release version will be taken by default.
218    
219     ENDTEXT
220     exit;
221     }
222    
223     sub helpheader ($label) {
224     my $label=shift;
225     print <<ENDTEXT;
226     *************************************************************************
227     SCRAM HELP --------- $label
228     *************************************************************************
229     ENDTEXT
230     }
231    
232     sub version {
233     print "Scram version : prototype\n";
234     }
235    
236     sub list {
237     &environmentinit;
238     my $filename="$ENV{SCRAM_CONFIG}/project.lookup";
239     open ( LOCALLOOKUPDB, "<$filename" );
240     print "Installed Projects\n";
241     print "------------------\n";
242     print "|Project Name | Project Version |\n";
243     print "----------------------------------\n";
244     while ( <LOCALLOOKUPDB> ) {
245     ( $name, $version, $type, $url ) = split ":", $_;
246     printf "%1s",$name;
247     printf "%25s\n",$version;
248     printf "--> %25s\n",$type.":".$url;
249     }
250     close LOCALLOOKUPDB;
251     }
252    
253     sub arch {
254     &environmentinit();
255     print "$ENV{SCRAM_ARCH}\n";
256 williamc 1.11 }
257    
258 williamc 1.12
259     #
260     # Setup a new tool
261     #
262    
263     sub setup {
264     my $toolname=shift @ARGV;
265    
266     &FullEnvInit;
267     if ( $ENV{SCRAM_BootStrapFiles}!~/$ENV{LOCALTOP}\/\.SCRAM/ ) {
268     $ENV{SCRAM_BootStrapFiles}="$ENV{LOCALTOP}/.SCRAM:".
269     $ENV{SCRAM_BootStrapFiles};
270     }
271     # Check for the correct toolfile
272     # ideally try and download it if not already in .SCRAM
273     # Only scram toolbox files supported so far
274     if ( ! -e "$ENV{LOCALTOP}/.SCRAM/$toolname" ) {
275     &urlhandler::urlhandler("file:$ENV{SCRAM_HOME}/toolbox/"
276     .$toolname, "$ENV{LOCALTOP}/.SCRAM/$toolname") ;
277     }
278     # Parse the toolfile and update the clientsettings file
279     # currently just append to the end
280     use clientfile;
281     clientfile::openclientfile('add');
282     clientfile::_tool("file:$toolname");
283     closeclientfile;
284     }
285    
286 williamc 1.13 sub help_setup {
287 williamc 1.12
288     print <<ENDTEXT;
289 williamc 1.14 Allows installation of a new tool/external package into an already
290     existing area.
291 williamc 1.12
292     Usage:
293    
294 williamc 1.14 $bold scram setup $normal toolname
295 williamc 1.12
296     toolname : The name of the tool setup file required.
297     ENDTEXT
298     exit;
299 williamc 1.13 }
300    
301     sub help_list {
302     print <<ENDTEXT;
303     Create an entry in the SCRAM database so that an installed project can be
304     referenced in the 'project' command by a tag/version combination.
305     Usage: (command to be issued from inside an installed project)
306    
307 williamc 1.14 $bold scram install $normal [project_tag [version_tag]]
308 williamc 1.13
309     If not specified the project_tag and version_tag default to the project
310     name and version of the installation.
311     ENDTEXT
312     exit;
313     }
314     sub help_project {
315     print <<ENDTEXT;
316     Setup a new project development area. The new area will appear in the current
317     working directory.
318     Usage:
319    
320     $bold scram project [-d install_area] $normal project_url [project_version]
321    
322     Options:
323    
324     project_url: The url of a scram bootstrap file.
325     Currently supported types are:
326     $bold Database label $normal
327     Labels can be assigned to bootstrap files for easy
328     access (See "scram install" command). If you
329     specify a label you must also specify a project_version.
330     e.g.
331    
332     scram project SCRAM V1_0
333    
334     scram project ORCA ORCA_1_1_1
335    
336     To see the list of installed projects use the
337     "scram list" command.
338    
339     $bold file: $normal A regular file on an accessable file system
340     e.g.
341    
342     file:~/myprojects/projecta/config/BootStrapFile
343    
344     project_version:
345     Only for use with a database label
346    
347     -d install_area:
348     Indicate a project installation area into which the new
349     project area should appear. Default is the current working
350     directory.
351    
352 williamc 1.14 ENDTEXT
353     }
354    
355     sub help_version {
356     print <<ENDTEXT;
357     Print the version number of scram
358     Usage:
359     $bold scram version $normal
360    
361     ENDTEXT
362     }
363    
364     sub help_arch {
365     print <<ENDTEXT;
366     Print out the architecture flag for the current machine.
367    
368     Usage:
369     $bold scram arch $normal
370 williamc 1.13 ENDTEXT
371 williamc 1.1 }