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

Comparing COMP/SCRAM/src/RuntimeFile.pm (file contents):
Revision 1.1 by sashby, Fri May 28 12:51:03 2004 UTC vs.
Revision 1.2 by sashby, Fri Dec 10 13:41:36 2004 UTC

# Line 0 | Line 1
1 + #____________________________________________________________________
2 + # File: RuntimeFile.pm
3 + #____________________________________________________________________
4 + #  
5 + # Author: Shaun Ashby <Shaun.Ashby@cern.ch>
6 + # Update: 2004-05-19 15:40:10+0200
7 + # Revision: $Id$
8 + #
9 + # Copyright: 2004 (C) Shaun Ashby
10 + #
11 + #--------------------------------------------------------------------
12 + package RuntimeFile;
13 + require 5.004;
14 + use ActiveDoc::SimpleDoc;
15 + use Exporter;
16 + @ISA=qw(Exporter);
17 + @EXPORT_OK=qw( );
18 +
19 + sub new()
20 +  ###############################################################
21 +  # new()                                                       #
22 +  ###############################################################
23 +  # modified : Wed May 19 15:40:33 2004 / SFA                   #
24 +  # params   :                                                  #
25 +  #          :                                                  #
26 +  # function :                                                  #
27 +  #          :                                                  #
28 +  ###############################################################
29 +  {
30 +  my $proto=shift;
31 +  my $class=ref($proto) || $proto;
32 +  my $self={};
33 +
34 +  $self->{runtimefile} = shift;
35 +  $self->{content} = {};
36 +  $self->{varstore} = {};
37 +  $self->{thisrtinfo} = [];
38 +  
39 +  bless $self,$class;
40 +  return $self;
41 +  }
42 +
43 + sub read()
44 +   {
45 +   my $self=shift;
46 +   use Cwd;
47 +  
48 +   # Check to see that the rt file exists:
49 +   if ( ! -f cwd()."/".$self->{runtimefile} )
50 +      {
51 +      $::scram->scramfatal("Runtime file \"".$self->{runtimefile}."\" does not exist or is not readable!.");
52 +      }
53 +   else
54 +      {
55 +      print "Reading RT environment from file ",$self->{runtimefile},"\n", if ($ENV{SCRAM_DEBUG});
56 +      }
57 +  
58 +   # A new SimpleDoc object to parse the file:
59 +   $self->{simpledoc} = ActiveDoc::SimpleDoc->new();
60 +  
61 +   $self->{simpledoc}->newparse("RUNTIME");
62 +   $self->{simpledoc}->filetoparse($self->{runtimefile});
63 +   $self->{simpledoc}->addtag("RUNTIME","Runtime",
64 +                              \&runtimetagOpen, $self,  
65 +                              \&runtimetagInfo, $self,
66 +                              \&runtimetagClose, $self);
67 +  
68 +   # Parse the file:
69 +   $self->{simpledoc}->parse("RUNTIME");
70 +   delete $self->{simpledoc};
71 +   }
72 +
73 + sub content()
74 +   {
75 +   my $self = shift;
76 +   return $self->{content};
77 +   }
78 +
79 + sub info()
80 +   {
81 +   my $self=shift;
82 +   my ($rtname) = @_;
83 +
84 +   if (exists ($self->{content}->{$rtname}))
85 +      {
86 +      if (exists ($self->{content}->{$rtname}->{'info'}))
87 +         {
88 +         print $rtname,":\n";
89 +         foreach my $iline (@{$self->{content}->{$rtname}->{'info'}})
90 +            {
91 +            print $iline,"\n";
92 +            }
93 +         }
94 +      else
95 +         {
96 +         print "No description for runtime variable \"",$rtname,"\" in file ".$self->{runtimefile}."!\n";
97 +         }
98 +      }
99 +   else
100 +      {
101 +      $::scram->scramerror("Runtime variable ".$rtname." is not defined in ".$self->{runtimefile}."!");
102 +      exit(1);
103 +      }
104 +   }
105 +
106 + sub runtimetagOpen()
107 +   {
108 +   my ($self, $name, $hashref) = @_;
109 +   $self->{simpledoc}->checktag($name, $hashref, "name");
110 +   $self->{thisrtname} = $hashref->{'name'};
111 +  
112 +   # Check for values (as value or default):
113 +   foreach my $t (qw(value)) # Only support "value"
114 +      {
115 +      if (exists ($hashref->{$t}))
116 +         {
117 +         # Try to expand the value:
118 +         my $thisvalue = $self->_expandvars($self->{varstore},$hashref->{$t});
119 +         # There were no dollar signs so we can assume
120 +         # that everything was evaluated properly:
121 +         if ($thisvalue !~ /\$/)
122 +            {
123 +            $self->{varstore}->{$hashref->{'name'}} = $thisvalue;
124 +            $self->{content}->{$hashref->{'name'}} = { value => $thisvalue };
125 +            }
126 +         }
127 +      }
128 +   }
129 +
130 + sub runtimetagInfo()
131 +   {
132 +   my ($self, $name, @infotext) = @_;
133 +   push(@{$self->{thisrtinfo}},@infotext);
134 +   }
135 +
136 + sub runtimetagClose()
137 +   {
138 +   my ($self, $name, $hashref) = @_;
139 +   $self->{content}->{$self->{thisrtname}}->{'info'} = $self->{thisrtinfo};
140 +   delete $self->{thisrtname};
141 +   $self->{thisrtinfo} = [];
142 +   }
143 +
144 + sub _expandvars
145 +   {
146 +   my $self=shift;
147 +   # $dataenvref is the store of tags already parsed (e.g., X_BASE, LIBDIR etc.):
148 +   my ($dataenvref,$string) = @_;
149 +  
150 +   return "" , if ( ! defined $string );
151 +   # To evaluate variables in brackets, like $(X):
152 +   $string =~ s{\$\((\w+)\)}
153 +      {
154 +      if (defined $dataenvref->{$1})
155 +         {
156 +         $self->_expandvars($dataenvref, $dataenvref->{$1});
157 +         }
158 +      elsif (defined $ENV{$1})
159 +         {
160 +         $self->_expandvars($dataenvref, $ENV{$1});
161 +         }
162 +      else
163 +         {
164 +         "\$$1";
165 +         }
166 +      }egx;
167 +  
168 +   # To evaluate variables like $X:
169 +   $string =~ s{\$(\w+)}
170 +      {
171 +      if (defined $dataenvref->{$1})
172 +         {
173 +         $self->_expandvars($dataenvref, $dataenvref->{$1});
174 +         }
175 +      elsif (defined $ENV{$1})
176 +         {
177 +         $self->_expandvars($dataenvref, $ENV{$1});
178 +         }
179 +      else
180 +         {
181 +         "\$$1";
182 +         }
183 +      }egx;
184 +
185 +   # Now return false if the string wasn't properly evaluated (i.e. some $ remain), otherwise
186 +   # return the expanded string:
187 +   ($string =~ /\$/) ? return undef : return $string;
188 +
189 +   }
190 +
191 + 1;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines