ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/scram
(Generate patch)

Comparing COMP/SCRAM/src/scram (file contents):
Revision 1.4 by williamc, Tue Mar 2 10:58:08 1999 UTC vs.
Revision 1.24 by williamc, Fri Jun 4 16:56:10 1999 UTC

# Line 1 | Line 1
1 < #!/usr/local/bin/perl5 -I$SCRAM_HOME/src -I/afs/cern.ch/user/w/williamc/public/SCRAM/src
2 <
1 > #!/usr/local/bin/perl5
2   #
3   # User Interface
4   #
5  
6   $inputcmd=shift;
7   $found='false';
8 < @allowed_commands=qw(project build env install version list arch);
9 <
10 < foreach $command ( @allowed_commands ) {
11 <         do { &$command; $found='true'; last;} if ( $inputcmd=~/^$command\Z/i);
8 > $bold  = "\033[1m";
9 > $normal = "\033[0m";
10 > @allowed_commands=qw(project build install version list arch setup runtime devtest);
11 >
12 > if ( $inputcmd ne "" ) {
13 > foreach $command ( @allowed_commands ) {
14 >         if ( $command=~/^$inputcmd/i) {
15 >                # Deal with a help request
16 >                do{ &helpheader($command);
17 >                        &{"help_".$command}; exit; } if $ARGV[0]=~/help/i;
18 >                &$command; $found='true';
19 >                last;
20 >         }
21 > }
22   }
23  
24   if ( ! ( $found=~/true/ ) ) {
25 <        print "scram help\n--------\n";
17 <        print "Recognised Commands: \n";
25 >        helpheader('Recognised Commands');
26          foreach $command ( @allowed_commands ) {
27 <        print "       ".$command."\n";  
27 >        print "      $bold scram ".$command.$normal."\n";      
28 >        }
29 >        print "\n";
30 >        print "Help on individual commands available through\n\n";
31 >        print "$bold       scram".$normal." command$bold help $normal\n\n";
32 > }
33 >
34 > sub devtest {
35 >        use Utilities::testclass;
36 >        my $class;
37 >        my $tester;
38 >
39 >        $class=shift @ARGV;
40 >        $tester=testclass->new($class);
41 >        $tester->dotest(@ARGV);
42 > }
43 >
44 > sub test_setup {
45 >        my $tool;
46 >        my $toolversion;
47 >        my $interactive=0;
48 >        my $listonly=0;
49 >
50 >        # process options
51 >        while ( $ARGV[0]=~"^-" ) { # turn on interactive setup mode
52 >         if ( $ARGV[0]=~/-i/ ) {
53 >           shift @ARGV;
54 >           $interactive=1;
55 >           print "Entering Interactive Setup Mode\n";
56 >           next;
57 >         }
58 >         if ( $ARGV[0]=~/-r/ ) {
59 >           shift @ARGV;
60 >           $listonly=1;
61 >           print "---------------- Project Requirements List -----------\n";
62 >           next;
63 >         }
64 >         print "Error : Unknown Option $ARGV[0]\n";
65 >         help_setup();
66 >         exit 1;
67 >        }
68 >        my $toolname=shift @ARGV;
69 >        my $version=shift @ARGV;
70 >
71 >        &FullEnvInit();
72 >        &RequirementsInit;
73 >
74 >        if ( $toolname ne "" ) {
75 >          _setuptool($interactive, $toolname, $version);
76 >        }
77 >        else {
78 >          $reqobj->IteratorReset;
79 >          while ( ( $toolname=$reqobj->IteratorNext() ) ne "" ) {
80 >            if ( $listonly ) {
81 >                print $bold.$toolname.$normal.
82 >                        " version ".$reqobj->Version($toolname)."\n";
83 >            }
84 >            else {
85 >              _setuptool
86 >                 ($interactive, $toolname, $reqobj->Version("$toolname"));
87 >            }
88 >          }
89          }
90   }
91  
92 + sub _setuptool {
93 +        my $tool;
94 +        my $toolversion;
95 +        my $interactive=shift;
96 +        my $toolname=shift;
97 +        my $version=shift;
98 +
99 +
100 +        if ( ( $version eq "" ) && ( $interactive == 0 )) {
101 +          #if not specified set to that of req. doc
102 +          $version=$reqobj->Version($toolname);
103 +        }
104 +
105 +        # ideally try and download it if not already in .SCRAM
106 +        # Only scram toolbox files supported so far
107 +          if ( ! -e "$ENV{LOCALTOP}/.SCRAM/$toolname" ) {
108 +                &urlhandler::urlhandler("file:$ENV{SCRAM_HOME}/toolbox/"
109 +                        .$toolname, "$ENV{LOCALTOP}/.SCRAM/$toolname") ;
110 +          }
111 +        use ToolSetup;
112 +        $tool=ToolSetup->new("$ENV{LOCALTOP}/.SCRAM/$toolname");
113 +
114 +        # check we have a version
115 +        if ( $interactive == 0 ) {
116 +         $tool->UnSetInteractive();
117 +        }
118 +        else {
119 +          $tool->SetInteractive();
120 +        }
121 +        $tool->Setup($toolname, $version);
122 +        
123 + }
124 +
125 + sub help_build {
126 +        &build;
127 + }
128   sub build {
129          # is this a based or free release?
130          FullEnvInit();
131          use BuildSetup;
132 +        $ENV{MAKETARGETS}=join ' ',@ARGV;
133          BuildSetup($ENV{THISDIR},@ARGV);
134   #       system("$ENV{TOOL_HOME}/BuildSetup",$ENV{THISDIR},@ARGV);
135   }
136  
137   sub project {
138 +        # process options
139 +        while ( $ARGV[0]=~"^-" ) {
140 +         if ( $ARGV[0]=~/-n/ ) {
141 +           shift @ARGV;
142 +           $ENV{devareaname}=shift @ARGV;
143 +         }
144 +         if ( $ARGV[0]=~/-d/ ) {  #installation area directory
145 +          shift @ARGV;
146 +          chdir $ARGV[0];
147 +          shift @ARGV;
148 +         }
149 +        }
150          my $project=shift @ARGV;
151          my $version=shift @ARGV;
152          environmentinit();
153          use File::Copy;
154          use Utilities::AddDir;
155          
156 <           print "Warning : - you are entering a development zone.".
39 <                " Don't complain if it don't work\n";
40 <           use BootStrapProject;
156 >           use BootStrapProject2;
157             # get the bootstrap files downloaded
158 <           BootStrapProject("$project\?\?$version");
158 > #          BootStrapProject("$project\?\?$version");
159 >           $bootstrapper->BootStrap("$project\?\?$version");
160             # Go setup the rest of the environement, now we can
161             chdir $ENV{LOCALTOP};
162 <           &localtop;
162 >           &localtop;
163             LoadEnvFile();
164             #
165             # Now create the directories specified in the interface
166             #
167             foreach $key ( keys %ENV ) {
168                  if ( $key=~/^INT/ ) {
169 <                        adddir($ENV{$key});
169 >                        AddDir::adddir($ENV{$key});
170                  }
171             }
172 +           if ( ! -e "$ENV{LOCALTOP}/$ENV{projconfigdir}" ) {
173 +                system("cp", "-r", "$ENV{RELEASETOP}/$ENV{projconfigdir}",
174 +                                "$ENV{LOCALTOP}/$ENV{projconfigdir}");
175 +           }
176             use clientfile;
177             BuildClientFile( $ENV{SCRAM_ProjReqsDoc} );
178 +           use Cwd;
179 +           print "\nInstallation Procedure Complete. \n".
180 +                        "Installation Located at:\n".cwd()."\n";
181 + }
182 +
183 + sub runtime {
184 +        my $shell;
185 +        environmentinit();
186 +        localtop();
187 +
188 +        # process options
189 +        while ( $ARGV[0]=~"^-" ) {
190 +         if ( $ARGV[0]=~/-sh/ ) {
191 +           shift @ARGV;
192 +           $shell="sh";
193 +           next;
194 +         }
195 +         if ( $ARGV[0]=~/-csh/ ) {  #installation area directory
196 +          shift @ARGV;
197 +          $shell="csh";
198 +          next;
199 +         }
200 +         print "Unknown Option $ARGV[0]\n";
201 +         exit 1;
202 +        }
203 +        open (file, "$ENV{LOCALTOP}/.SCRAM/$ENV{SCRAM_ARCH}/clientsettings" )
204 +                or die "Unable to open file ".
205 +                "$ENV{LOCALTOP}/.SCRAM/$ENV{SCRAM_ARCH}/clientsettings $!";
206 +        while( <file> ) {
207 +           chomp;
208 +           next if /^#/;
209 +           next if /^\s*$/;
210 +           ($product, $version, $type, $variable, $value, @junk)=split /:/;
211 +           next if ( $variable=~/\&/ );
212 +           if ( $type=~/^R/ ) {
213 +                if ( ( $type=~/path/ ) ) { #type Rtype
214 +                   addvar($variable,$value,":"); # Colon seperated
215 +                }
216 +                else {                   #type R
217 +                   addvar($variable,$value," "); # Add with spaces
218 +                }
219 +           }
220 +        }
221 +        close file;
222 +        addvar("LD_LIBRARY_PATH","$ENV{LOCALTOP}/lib/$ENV{SCRAM_ARCH}",":");
223 +        addvar("PATH","$ENV{LOCALTOP}/bin/$ENV{SCRAM_ARCH}",":");
224 +        # We have to clean up from the last runtime cmd - use env history
225 +        foreach $variable ( %ENV ) {
226 +          if ( $variable=~/^SCRAMRT_(.*)/ ) { #SCRAMRT are history retaining
227 +            $ENV{$1}=~s/\Q$ENV{$variable}\N\:*//;
228 +            delete $ENV{$variable};
229 +          }
230 +        }
231 +        # create new SCRAMRT history vars.
232 +        foreach $variable ( keys %EnvRuntime ) {
233 +          addvar("SCRAMRT_$variable", $EnvRuntime{$variable}, "");
234 +        }
235 +        # Now adapt as necessary - include base environment as well
236 +        addvar("LD_LIBRARY_PATH","$ENV{LD_LIBRARY_PATH}",":");
237 +        addvar("PATH","$ENV{PATH}",":");
238 +        # Print out as reqd
239 +        foreach $variable ( keys %EnvRuntime ) {
240 +         if ( $shell eq "csh" ) {
241 +           print "setenv $variable \"$EnvRuntime{$variable}\";\n";
242 +         }
243 +         elsif ( $shell eq "sh" ) {
244 +           print "export $variable=$EnvRuntime{$variable};\n";
245 +         }
246 +        }
247 + }
248 +
249 + # Support rt for runtime
250 + sub addvar {
251 +        my $name=shift;
252 +        my $val=shift;
253 +        my $sep=shift;
254 +
255 +        if ( $val ne "" ) {
256 +        if ( defined $EnvRuntime{$name} ) {
257 +         $EnvRuntime{$name}=$EnvRuntime{$name}.$sep.$val;
258 +        }
259 +        else {  
260 +         $EnvRuntime{$name}=$val;
261 +        }
262 +        }
263   }
264 +
265   sub FullEnvInit {
266      environmentinit();
267      localtop();
# Line 75 | Line 282 | sub environmentinit {
282          $ENV{INTlog}="logs";
283  
284          if ( ! ( exists $ENV{SCRAM_HOME}) ){
285 <         $ENV{SCRAM_HOME}="/afs/cern.ch/user/w/williamc/public/ConfigMan";
285 >         $ENV{SCRAM_HOME}="/afs/cern.ch/cms/Releases";
286           print "Warning : Environment Variable SCRAM_HOME not set.\n";
287           print "Defaulting to $ENV{SCRAM_HOME}\n";
288          }
# Line 103 | Line 310 | sub localtop {
310          } while ( ( $thispath=~s/(.*)\/.*/$1/ )=~/./  );
311          if ( ! (defined $ENV{LOCALTOP}) ) {
312           print "Unable to locate the top of local release. Exiting\n";
313 <         exit 1
313 >         exit 1;
314          }
315          } #end block
316 <        ($ENV{THISDIR}=cwd)=~s/^$ENV{LOCALTOP}//;
316 >        ($ENV{THISDIR}=cwd)=~s/^\Q$ENV{LOCALTOP}\L//;
317          $ENV{THISDIR}=~s/^\///;
318          $ENV{SCRAM_WORKDIR}="$ENV{LOCALTOP}/.SCRAM";
319   }
# Line 128 | Line 335 | sub env {
335     print "Sorry - Not yet\n";
336   }
337  
338 + sub RequirementsInit {
339 +        use Requirements;
340 +        $reqobj=Requirements->new($ENV{SCRAM_ProjReqsDoc});
341 + }
342 +
343   #
344   # Create a lookup tag in the site database
345   #
# Line 136 | Line 348 | sub install ( $tagname, $version ) {
348          my $version=shift @ARGV;
349  
350          # create database entry
139        do { &help_install; } if $tagname=~/help/i;
351          &FullEnvInit;
352          if ( $version eq "" ) {
353             $version=$ENV{SCRAM_PROJVERSION};
# Line 147 | Line 358 | sub install ( $tagname, $version ) {
358          my $filename="$ENV{SCRAM_CONFIG}/project.lookup";
359          my $outfile="$ENV{SCRAM_CONFIG}/project.lookup.tmp";
360          open ( LOCALLOOKUPDB, "<$filename" );
361 <        open ( OUTFILE , ">$outfile" );
361 >        open ( OUTFILE , ">$outfile" ) or die "Unable to open $outfile $!\n";
362          while ( <LOCALLOOKUPDB> ) {
363              if ( /^$tagname/ ) {
364                  print "Related tag :".$_."\n";
# Line 179 | Line 390 | sub install ( $tagname, $version ) {
390  
391   sub help_install()  {
392  
182 helpheader("install");
393   print <<ENDTEXT;
394   Associates a label with the current release in the SCRAM database.
395   This allows other users to refer to a centrally installed project by
# Line 207 | Line 417 | ENDTEXT
417   }
418  
419   sub version {
420 <        print "Scram version : prototype\n";
420 >        my $version=shift @ARGV;
421 >        my $thisversion;
422 >        my $scram_top;
423 >        my $cvsobject;
424 >
425 >        ($thisversion=$ENV{SCRAM_HOME})=~s/(.*)\///;
426 >        $scram_top=$1;
427 >        if ( $version eq "" ) {
428 >          print "$thisversion\n";
429 >        }
430 >        else {
431 >          if ( -d $scram_top."/".$version ) {
432 >                print "Version $version exists\n";
433 >          }
434 >          else {
435 >              print "Version $version not available locally\n";
436 >              print "Attempting download from the SCRAM repository";
437 >              # set up and configure the cvs module for SCRAM
438 >              use Utilities::cvsmodule;
439 >              $cvsobject=cvsmodule->new();
440 >              $cvsobject->set_base(
441 >                "cmscvs.cern.ch:/cvs_server/repositories/SCRAM");
442 >              $cvsobject->set_auth("pserver");
443 >              $cvsobject->set_user("anonymous");
444 >              $cvsobject->set_passkey("AA_:yZZ3e");
445 >              # Now check it out in the right place
446 >              chdir $scram_top or die "Unable to change to $scram_top $!\n";
447 >              $cvsobject->invokecvs( ( split / /,
448 >                        "co -d $version -r $version SCRAM" ));
449 >                
450 >              # Get rid of cvs object now weve finished
451 >              $cvsobject=undef;
452 >              print "\n";
453 >          }
454 >        }
455   }
456  
457   sub list {
# Line 231 | Line 475 | sub arch {
475          &environmentinit();
476          print "$ENV{SCRAM_ARCH}\n";
477   }
478 +
479 +
480 + #
481 + # Setup a new tool
482 + #
483 +
484 + sub setup {
485 +        my $toolname=shift @ARGV;
486 +        my $insert=0;
487 +
488 +        &FullEnvInit;
489 +        if ( $ENV{SCRAM_BootStrapFiles}!~/\Q$ENV{LOCALTOP}\N\/\.SCRAM/ ) {
490 +          $ENV{SCRAM_BootStrapFiles}="$ENV{LOCALTOP}/.SCRAM:".
491 +                        $ENV{SCRAM_BootStrapFiles};
492 +        }
493 +        my $filebase="$ENV{LOCALTOP}/.SCRAM/$ENV{SCRAM_ARCH}";
494 +        rename "$filebase/clientsettings", "$filebase/clientsettings.old";
495 +        chdir $ENV{LOCALTOP}; # make sure we do this from the top dir
496 +        # If no toolname specified then its a full setup
497 +        if ( $toolname eq "" ) {
498 +           rename "$filebase/clientsettings_reqs",
499 +                                "$filebase/clientsettings_reqs.old";
500 +           use clientfile;
501 +           BuildClientFile( $ENV{SCRAM_ProjReqsDoc} );
502 +           # Work-around for Broken ARCH directories
503 +           use Utilities::AddDir;
504 +           AddDir::adddir("$ENV{LOCALTOP}/lib/$ENV{SCRAM_ARCH}");
505 +           AddDir::adddir("$ENV{LOCALTOP}/bin/$ENV{SCRAM_ARCH}");
506 +        }
507 +        else {
508 +          # Check for the correct toolfile
509 +          # ideally try and download it if not already in .SCRAM
510 +          # Only scram toolbox files supported so far
511 +          if ( ! -e "$ENV{LOCALTOP}/.SCRAM/$toolname" ) {
512 +                &urlhandler::urlhandler("file:$ENV{SCRAM_HOME}/toolbox/"
513 +                        .$toolname, "$ENV{LOCALTOP}/.SCRAM/$toolname") ;
514 +          }
515 +          # Parse the toolfile and update the clientsettings file
516 +          # currently just append to the end
517 +          use clientfile;
518 +          #create a new clientfile containing just the tool
519 +          clientfile::openclientfile('add');
520 +          clientfile::_tool("file:$toolname");
521 +          clientfile::closeclientfile();
522 +          #Now splice it in to the original - replacing the previous one if
523 +          #necessary - a bit of a hack to say the least -fortunately is
524 +          # already rewrittten for the next release!
525 +        
526 +          open FILEIN, "$filebase/clientsettings" or die "$!\n";
527 +          while ( <FILEIN> ) {
528 +            push @filelines, $_;
529 +            next, if /^\s*#/;
530 +            chomp;
531 +            ($toolkey=$_)=~s/(.*?:).*/$1/;
532 +          }
533 +          close FILEIN;
534 +          open FILEIN, "<$filebase/clientsettings.old";
535 +          open FILEOUT, ">$filebase/clientsettings.tmp";
536 +          while ( <FILEIN> ) {
537 +           if ( ( $_=~/^$toolkey/ ) ) {
538 +            if ( $insert==0 ) {
539 +             foreach $line ( @filelines ) {
540 +                print FILEOUT $line;
541 +             }
542 +             $insert=1;
543 +            }
544 +            next;
545 +           }
546 +           else {
547 +                print FILEOUT $_;
548 +           }
549 +         }
550 +         if ( $insert==0 ) {
551 +          foreach $line ( @filelines ) {
552 +                print FILEOUT $line;
553 +          }
554 +         }
555 +         close FILEOUT;
556 +         close FILE;
557 +         rename "$filebase/clientsettings.tmp", "$filebase/clientsettings";
558 +        }
559 +        
560 + }
561 +
562 + sub help_setup {
563 +
564 + print <<ENDTEXT;
565 + Allows installation/re-installation of a new tool/external package into an
566 + already existing development area. If not toolname is specified,
567 + the complete installation process is initiated.
568 +
569 + Usage:
570 +
571 +                 $bold scram setup $normal [toolname]
572 +
573 + toolname : The name of the tool setup file required.
574 + ENDTEXT
575 + exit;
576 + }
577 +
578 + sub help_list {
579 + print <<ENDTEXT;
580 + Create an entry in the SCRAM database so that an installed project can be
581 + referenced in the 'project' command by a tag/version combination.
582 + Usage: (command to be issued from inside an installed project)
583 +
584 +        $bold   scram install $normal [project_tag [version_tag]]
585 +
586 + If not specified the project_tag and version_tag default to the project
587 + name and version of the installation.
588 + ENDTEXT
589 + exit;
590 + }
591 + sub help_project {
592 + print <<ENDTEXT;
593 + Setup a new project development area. The new area will appear in the current
594 + working directory.
595 + Usage:
596 +
597 +        $bold scram project [-d install_area] [-n directory_name]$normal project_url [project_version]
598 +
599 + Options:
600 +
601 + project_url: The url of a scram bootstrap file.
602 +             Currently supported types are:
603 +                $bold Database label $normal
604 +                        Labels can be assigned to bootstrap files for easy
605 +                        access (See "scram install" command). If you
606 +                        specify a label you must also specify a project_version.
607 +                        e.g.
608 +
609 +                           scram project SCRAM V1_0
610 +                                
611 +                           scram project ORCA ORCA_1_1_1
612 +
613 +                        To see the list of installed projects use the
614 +                        "scram list" command.
615 +
616 +                $bold file: $normal A regular file on an accessable file system
617 +                        e.g.
618 +
619 +                           file:~/myprojects/projecta/config/BootStrapFile
620 +
621 + project_version:
622 +                 Only for use with a database label
623 +
624 + -d install_area:
625 +                 Indicate a project installation area into which the new
626 +                 project area should appear. Default is the current working
627 +                 directory.
628 +
629 + -n directory_name:
630 +                 Specify the name of the SCRAM development area you wish to
631 +                 create.
632 +        
633 + -n dir_name     :
634 +                 Specify name of the new development area directory
635 + ENDTEXT
636 + }
637 +
638 + sub help_version {
639 + print <<ENDTEXT;
640 + With now $bold[version] $normal argument given, this command will simply
641 + print to standard output the current version number.
642 +
643 + Providing a version argument will cause that version to be downloaded and
644 + installed, if not already locally available.
645 + [Coming soon: When available locally, your current development area will
646 + then be associated with the specified scram version rather than the default]
647 +
648 +
649 + Usage:
650 +                $bold scram version [version]$normal
651 +
652 + ENDTEXT
653 + }
654 +
655 + sub help_arch {
656 + print <<ENDTEXT;
657 + Print out the architecture flag for the current machine.
658 +
659 + Usage:
660 +        $bold   scram arch $normal
661 + ENDTEXT
662 + }
663 +
664 + sub help_devtest {
665 + print <<ENDTEXT;
666 + For SCRAM development only. Allows testing of new features.
667 +
668 + Usage:
669 +        $bold   scram devtest
670 + ENDTEXT
671 + }
672 +
673 + sub help_runtime {
674 + print <<ENDTEXT;
675 + Echo to Standard Output the Runtime Environment for the current development area
676 + Output available in csh or sh flavours
677 +
678 + Usage:
679 +        $bold   scram runtime [-csh|-sh] $normal
680 +
681 + Examples:
682 +
683 + Setup the current environment to include the project Runtime Environment
684 + in a csh environment
685 +
686 +       $bold  eval `scram runtime -csh` $normal
687 +
688 + Setup the current environment to include the project Runtime Environment in a
689 + sh environment
690 +
691 +       $bold  `scram runtime -sh` $normal
692 +
693 + ENDTEXT
694 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines