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

Comparing COMP/SCRAM/src/BuildFile.pm (file contents):
Revision 1.3 by williamc, Tue Mar 2 10:58:07 1999 UTC vs.
Revision 1.21.2.20 by williamc, Fri Sep 24 16:34:27 1999 UTC

# Line 7 | Line 7 | require Exporter;
7   BEGIN {
8   use ToolBox;
9   $buildfile="BuildFile";
10 < #$toolbox=ToolBox->new();
10 > $toolbox=ToolBox->new();
11 > $Arch=1;
12 > push @ARCHBLOCK, $Arch;
13   }
14  
15   #Parse the BuildFile
# Line 29 | Line 31 | sub ParseBuildFile {
31                  'ConfigurationClass' => \&OutToMakefile,
32                  'AssociateGroup' => \&AssociateGroup,
33                  'none' => \&OutToMakefile,
34 <                'Bin' => \&OutToMakefile,
34 >                'Bin' => 'none',
35                  'Bin_StartTag' => \&Bin_start,
36                  'ClassPath' => \&OutToMakefile,
37 <                'ClassPath_StartTag' => \&setBlockClassPath
37 >                'ClassPath_StartTag' => \&setBlockClassPath,
38 >                'lib' => 'none',
39 >                'lib_StartTag' => \&lib_start,
40 >                'lib_EndTag' => 'none',
41 >                'ignore' => 'none',
42 >                'ignore_EndTag' => \&ignoretag_end,
43 >                'ignore_StartTag' => \&ignoretag,
44 >                'Architecture_StartTag' => \&Arch_Start,
45 >                'Architecture_EndTag' => \&Arch_End,
46 >                'Architecture' => \&OutToMakefile,
47 >                'LibType_StartTag' => \&LibType_Start,
48 >                'LibType_EndTag' => 'none',
49 >                #'LibType' => \&OutToScreen
50 >                'LibType' => \&LibType_text
51          };
52          use Utilities::Switcher;
53          $switch=Switcher->new($SupportedTags, $fullfilename);
# Line 51 | Line 66 | sub ParseBuildFile {
66          close GNUmakefile;
67   }
68  
69 + sub ParseBuildFile_Export {
70 +        my $filename=shift;
71 +        use Tool;
72 +        # This hash defines which Document Elements we can use
73 +        my $SupportedTags={
74 +                'none' => 'none',
75 +                'export' => \&OutToMakefile,
76 +                'export_StartTag' => \&export_start,
77 +                'export_EndTag' => \&export_end,
78 +                'lib_StartTag' => \&lib_start_export,
79 +                'External_StartTag' => \&Ext_start_export,
80 +                'lib' => 'none'
81 +        };
82 +        use Utilities::Switcher;
83 +        $switchex=Switcher->new($SupportedTags, $filename);
84 +        $switchex->{Strict_no_cr}='no';
85 +        $switchex->parse(); # sort out supported tags
86 + }
87 +
88   sub initialterms() {
89          my $name=shift;
90          my @string=@_;
# Line 80 | Line 114 | sub Class_StartTag {
114          my @vars=@_;
115          
116          $hashref=$switch->SetupValueHash(\@vars);
117 +        if ( $Arch ) {
118          if ( defined $$hashref{'type'} ) {
119                  $ClassName=$$hashref{'type'};
120          }
121 +        }
122   }
123  
124   sub ClassPath_StartTag {
# Line 91 | Line 127 | sub ClassPath_StartTag {
127          my $hashref;
128  
129          $hashref=$switch->SetupValueHash(\@vars);
130 +        if ( $Arch ) {
131          if ( defined $$hashref{'defaultpath'} ) {
132          }
133 +        }
134   }
135  
136   sub Bin_start {
# Line 102 | Line 140 | sub Bin_start {
140          my $fileclass;
141          my @tools;
142          my $tool;
143 +        my $filename;
144 +        my $objectname;
145          
146          $hashref=$switch->SetupValueHash(\@vars);
147          $switch->checkparam($hashref, $name, 'file');
148 +        if ( $Arch ) {
149          if ( ! defined $$hashref{name} ) {
150                  ($$hashref{name}=$$hashref{file})=~s/\..*//;
151          }
152 <        $fileclass=getclass($file);
153 <        $toolbox->maketargets("exe",$fileclass, $$hashref{name}, $file );
154 <        print GNUmakefile "bin::$file\n\n";
152 >        # This stuff for later
153 >        #$fileclass=$toolbox->getclass($file);
154 >        #$toolbox->maketargets("exe",$fileclass, $$hashref{name}, $file );
155 >        ($filename=$$hashref{file})=~s/\..*//;
156 >        ($objectname_o=$$hashref{file})=~s/\..*/_o\.o/;
157 >        ($objectname_d=$$hashref{file})=~s/\..*/_d\.o/;
158 >        ($objectname_Insure=$$hashref{file})=~s/\..*/_Insure\.o/;
159 >        print GNUmakefile "bin:$$hashref{name}_o\n";
160 >        print GNUmakefile "bin_debug:$$hashref{name}_d\n";
161 >        print GNUmakefile "bin_debug_local:$$hashref{name}_l_d\n";
162 >        print GNUmakefile "bin_insure:$$hashref{name}_Insure\n";
163 >        print GNUmakefile "bin_Insure:$$hashref{name}_Insure\n";
164 > #       print GNUmakefile ".INTERMEDIATE::$$hashref{name}_d.exe\n";
165 > #       print GNUmakefile ".INTERMEDIATE::$$hashref{name}_Insure.exe\n";
166 >        print GNUmakefile ".INTERMEDIATE::$$hashref{name}.exe\n";
167 >        print GNUmakefile "$$hashref{name}_Insure:.psrc\n";
168 >        print GNUmakefile "$$hashref{name}_d.exe:$objectname_d\n";
169 >        print GNUmakefile "\t\$(CClinkCmdDebug)\n";
170 >        print GNUmakefile "$$hashref{name}_l_d.exe:$objectname_d\n";
171 >        print GNUmakefile "\t\$(CClinkCmdDebugLocal)\n";
172 >        print GNUmakefile "$$hashref{name}_Insure.exe:$objectname_Insure\n";
173 >        print GNUmakefile "\t\$(CClinkCmdInsure)\n";
174 >        print GNUmakefile "$$hashref{name}_o.exe:$objectname_o\n";
175 >        print GNUmakefile "\t\$(CClinkCmd)\n";
176 >        print GNUmakefile "$objectname_o:$$hashref{name}.dep\n";
177 >        print GNUmakefile "$objectname_d:$$hashref{name}.dep\n";
178 >        print GNUmakefile "$objectname_Insure:$$hashref{name}.dep\n";
179 >        print GNUmakefile "$$hashref{name}.dep:$$hashref{file}\n";
180 >        print GNUmakefile "-include $$hashref{name}.dep\n";
181 > #       print GNUmakefile "$$hashref{name}:$$hashref{file}\n";
182 > print GNUmakefile <<ENDTEXT;
183 > $$hashref{name}_d.exe:\$(libslocal_d)
184 > $$hashref{name}_o.exe:\$(libslocal)
185 > ifdef MCCABE_DATA_DIR
186 > $$hashref{name}_mccabe.exe: \$(libslocal_d) $(MCCABE_DATA_DIR)/mccabeinstr/instplus.cpp
187 > endif
188 > $$hashref{name}_Insure.exe:\$(libslocal_I)
189 > $$hashref{name}_d:$$hashref{name}_d.exe
190 >        \@cp $$hashref{name}_d.exe \$(binarystore)/$$hashref{name}
191 > $$hashref{name}_l_d:$$hashref{name}_l_d.exe
192 >        \@cp $$hashref{name}_l_d.exe \$(binarystore)/$$hashref{name}
193 > $$hashref{name}_Insure:$$hashref{name}_Insure.exe
194 >        \@cp $$hashref{name}_Insure.exe \$(binarystore)/$$hashref{name}_Insure
195 > $$hashref{name}:$$hashref{name}_d.exe
196 >        \@mv $$hashref{name}_d.exe \$(binarystore)/$$hashref{name}
197 > $$hashref{name}_o:$$hashref{name}_o.exe
198 >        \@mv $$hashref{name}_o.exe \$(binarystore)/$$hashref{name}
199 > binfiles+=$$hashref{file}
200 > bintargets+=$$hashref{name} $$hashref{name}_o $$hashref{name}_d $$hashref{name}_Insure
201 > ENDTEXT
202 >        }
203 > }
204 >
205 > sub Ext_start_export {
206 >        my $name=shift;
207 >        my @vars=@_;
208 >        my $hashref;
209 >        
210 >        $hashref=$switch->SetupValueHash(\@vars);
211 >        if ( $Arch ) {
212 >         if ( $switchex->context('export') ) {
213 >          $$hashref{'ref'}=~tr[A-Z][a-z];
214 >          print GNUmakefile $$hashref{'ref'};
215 >          if ( defined $$hashref{'version'} ) {
216 >                print GNUmakefile "_V_".$$hashref{'version'};
217 >          }
218 >          print GNUmakefile "=true\n";
219 >         }
220 >        }
221   }
222  
223   sub External_StartTag {
# Line 119 | Line 226 | sub External_StartTag {
226          my $hashref;
227          
228          $hashref=$switch->SetupValueHash(\@vars);
229 +        if ( $Arch ) {
230 +        $$hashref{'ref'}=~tr[A-Z][a-z];
231          print GNUmakefile $$hashref{'ref'};
232          if ( defined $$hashref{'version'} ) {
233                  print GNUmakefile "_V_".$$hashref{'version'};
234          }
235          print GNUmakefile "=true\n";
236 +        }
237          
238   }      
239  
# Line 134 | Line 244 | sub Group_start {
244          
245          $hashref=$switch->SetupValueHash(\@vars);
246          $switch->checkparam($hashref, $name, 'name');
247 +        if ( $Arch ) {
248          print GNUmakefile "GROUP_".$$hashref{'name'};
249          if ( defined $$hashref{'version'} ) {
250                  print GNUmakefile "_V_".$$hashref{'version'};
251          }
252          print GNUmakefile "=true\n";
253 +        }
254   }      
255  
256   sub External {
# Line 165 | Line 277 | sub Use_start {
277          
278          $hashref=$switch->SetupValueHash(\@vars);
279          $switch->checkparam($hashref, $name, "name");
280 <        if ( $filename=checkfile("$ENV{INTsrc}/$$hashref{name}/BuildFile")
281 <                                                 ne "" ) {
282 <          print GNUmakefile "ReqDependencies += $filename\n";
280 >        if ( $Arch ) {
281 >        $filename=SCRAMUtils::checkfile(
282 >                "$ENV{INTsrc}/$$hashref{name}/BuildFile");
283 >        if ( $filename ne "" ) {
284 >          ParseBuildFile_Export( $filename );
285 >        }
286          }
172        print GNUmakefile "local__$$hashref{name}=true\n";
287   }
288  
289 < sub CheckBuildFile($directory) {
289 > sub CheckBuildFile {
290           my $classdir=shift;
291           $ClassName="";
292           $thisfile="$classdir/$buildfile";
# Line 202 | Line 316 | sub AssociateGroup {
316          }
317   }
318  
319 + sub ignoretag {
320 +        my $name=shift;
321 +        my @vars=@_;
322 +        
323 +        $Arch=0;
324 +        push @ARCHBLOCK, $Arch;
325 + }
326 +
327 + sub ignoretag_end {
328 +        my $name=shift;
329 +        my @vars=@_;
330 +        
331 +        pop @ARCHBLOCK;
332 +        $Arch=$ARCHBLOCK[$#ARCHBLOCK];
333 + }
334 +
335 + sub Arch_Start {
336 +        my $name=shift;
337 +        my @vars=@_;
338 +        my $hashref;
339 +
340 +        $hashref=$toolswitch->SetupValueHash( \@vars );
341 +        $toolswitch->checkparam($hashref, $name, 'name');
342 +        #( ($$hashref{name}=~/$ENV{SCRAM_ARCH}/) )?$Arch=1:$Arch=0;
343 +        ( ($ENV{SCRAM_ARCH}=~/$$hashref{name}.*/) )? ($Arch=1) : ($Arch=0);
344 +        push @ARCHBLOCK, $Arch;
345 + }
346 + sub Arch_End {
347 +        my $name=shift;
348 +        my @vars=@_;
349 +
350 +        pop @ARCHBLOCK;
351 +        $Arch=$ARCHBLOCK[$#ARCHBLOCK];
352 + }
353 +
354   # Split up the Class Block String into a useable array
355 < sub _CutBlock($string) {
355 > sub _CutBlock {
356      my $string= shift @_;
357      @BlockClassA = split /\//, $string;
358   }
# Line 212 | Line 361 | sub OutToMakefile {
361          my $name=shift;
362          my @vars=@_;
363  
364 <        print GNUmakefile @vars;
364 >        if ( $Arch ) {
365 >          print GNUmakefile @vars;
366 >        }
367 > }
368 > sub OutToScreen {
369 >        my $name=shift;
370 >        my @vars=@_;
371 >
372 >        if ( $Arch ) {
373 >          print @vars;
374 >        }
375   }
376   sub setBlockClassPath {
377          my $name=shift;
# Line 224 | Line 383 | sub setBlockClassPath {
383          $BlockClassPath=$BlockClassPath.":".$$hashref{path};
384          _CutBlock($$hashref{path});
385   }
386 +
387 + sub export_start {
388 + #Set up a toolfile object
389 +        $exporttool=Tool->new();
390 + }
391 +
392 + sub export_end {
393 + #Write toolfile object to disk
394 +        $exporttool->envtomake(\*GNUmakefile);
395 + }
396 +
397 + #
398 + # Export Mode Lib Tag
399 + #
400 + sub lib_start_export {
401 +        my $name=shift;
402 +        my @vars=@_;
403 +        my $hashref;
404 +
405 +        $hashref=$switchex->SetupValueHash( \@vars );
406 +        $switchex->checkparam($hashref, $name, 'name');
407 +        if ( $Arch ) {
408 +         if ( $switchex->context('export') ) {
409 +                #If export mode then add this env to the export tool
410 +                $exporttool->addenv('lib',$$hashref{name});
411 +         }
412 +        }
413 + }
414 +
415 + #
416 + # Standard lib tag
417 + #
418 + sub lib_start {
419 +        my $name=shift;
420 +        my @vars=@_;
421 +        my $hashref;
422 +
423 +        $hashref=$switch->SetupValueHash( \@vars );
424 +        $switch->checkparam($hashref, $name, 'name');
425 +        if ( $Arch ) {
426 +           print GNUmakefile "lib+=$$hashref{name}\n";
427 +        }
428 + }
429 +
430 + #
431 + # libtype specification
432 + #
433 + sub LibType_Start {
434 +        my $name=shift;
435 +        my @vars=@_;
436 +        my $hashref;
437 +
438 +        if ( $Arch ) {
439 +        $hashref=$switch->SetupValueHash( \@vars );
440 +        $switch->checkparam($hashref, $name, 'type');
441 +        
442 +        print GNUmakefile "# Specify Library Type\n";
443 +        print GNUmakefile "DefaultLibsOff=yes\n";
444 +        if ( $$hashref{'type'}=~/^archive/i ) {
445 +          print GNUmakefile "LibArchive=true\n";
446 +        }
447 +        elsif ($$hashref{'type'}=~/debug_archive/i ) {
448 +          print GNUmakefile "LibDebugArchive=true\n";
449 +        }
450 +        elsif ($$hashref{'type'}=~/debug_shared/i ) {
451 +          print GNUmakefile "LibDebugShared=true\n";
452 +        }
453 +        elsif ($$hashref{'type'}=~/shared/i ) {
454 +          print GNUmakefile 'LibShared=true'."\n";
455 +        }
456 +        print GNUmakefile "\n";
457 +        }
458 + }
459 + sub LibType_text {
460 +        my $name=shift;
461 +        my @vars=@_;
462 +
463 +        if ( $Arch ) {
464 +          print GNUmakefile "libmsg::\n\t\@echo Library info: ";
465 +          print GNUmakefile @vars;
466 +          print GNUmakefile "\n";
467 +        }
468 + }
469 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines