mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-17 09:36:24 +00:00
147 lines
3 KiB
Text
147 lines
3 KiB
Text
|
#!/usr/local/bin/perl5
|
||
|
|
||
|
# Filename: mkpod
|
||
|
#
|
||
|
# Author: Paul Marquess
|
||
|
|
||
|
# File types
|
||
|
#
|
||
|
# Macro files end with .M
|
||
|
# Tagged source files end with .T
|
||
|
# Output from the code ends with .O
|
||
|
# Pre-Pod file ends with .P
|
||
|
#
|
||
|
# Tags
|
||
|
#
|
||
|
# ## BEGIN tagname
|
||
|
# ...
|
||
|
# ## END tagname
|
||
|
#
|
||
|
# ## 0
|
||
|
# ## 1
|
||
|
#
|
||
|
|
||
|
# Constants
|
||
|
|
||
|
$TOKEN = '##' ;
|
||
|
$Verbose = 1 if $ARGV[0] =~ /^-v/i ;
|
||
|
|
||
|
# Macros files first
|
||
|
foreach $file (glob("*.M"))
|
||
|
{
|
||
|
open (F, "<$file") or die "Cannot open '$file':$!\n" ;
|
||
|
print " Processing Macro file $file\n" ;
|
||
|
while (<F>)
|
||
|
{
|
||
|
# Skip blank & comment lines
|
||
|
next if /^\s*$/ || /^\s*#/ ;
|
||
|
|
||
|
#
|
||
|
($name, $expand) = split (/\t+/, $_, 2) ;
|
||
|
|
||
|
$expand =~ s/^\s*// ;
|
||
|
$expand =~ s/\s*$// ;
|
||
|
|
||
|
if ($expand =~ /\[#/ )
|
||
|
{
|
||
|
}
|
||
|
|
||
|
$Macros{$name} = $expand ;
|
||
|
}
|
||
|
close F ;
|
||
|
}
|
||
|
|
||
|
# Suck up all the code files
|
||
|
foreach $file (glob("t/*.T"))
|
||
|
{
|
||
|
($newfile = $file) =~ s/\.T$// ;
|
||
|
open (F, "<$file") or die "Cannot open '$file':$!\n" ;
|
||
|
open (N, ">$newfile") or die "Cannot open '$newfile':$!\n" ;
|
||
|
|
||
|
print " Processing $file -> $newfile\n" ;
|
||
|
|
||
|
while ($line = <F>)
|
||
|
{
|
||
|
if ($line =~ /^$TOKEN\s*BEGIN\s+(\w+)\s*$/ or
|
||
|
$line =~ m[\s*/\*$TOKEN\s*BEGIN\s+(\w+)\s*$] )
|
||
|
{
|
||
|
print " Section $1 begins\n" if $Verbose ;
|
||
|
$InSection{$1} ++ ;
|
||
|
$Section{$1} = '' unless $Section{$1} ;
|
||
|
}
|
||
|
elsif ($line =~ /^$TOKEN\s*END\s+(\w+)\s*$/ or
|
||
|
$line =~ m[^\s*/\*$TOKEN\s*END\s+(\w+)\s*$] )
|
||
|
{
|
||
|
warn "Encountered END without a begin [$line]\n"
|
||
|
unless $InSection{$1} ;
|
||
|
|
||
|
delete $InSection{$1} ;
|
||
|
print " Section $1 ends\n" if $Verbose ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
print N $line ;
|
||
|
chop $line ;
|
||
|
$line =~ s/\s*$// ;
|
||
|
|
||
|
# Save the current line in each of the sections
|
||
|
foreach( keys %InSection)
|
||
|
{
|
||
|
if ($line !~ /^\s*$/ )
|
||
|
#{ $Section{$_} .= " $line" }
|
||
|
{ $Section{$_} .= $line }
|
||
|
$Section{$_} .= "\n" ;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
if (%InSection)
|
||
|
{
|
||
|
# Check for unclosed sections
|
||
|
print "The following Sections are not terminated\n" ;
|
||
|
foreach (sort keys %InSection)
|
||
|
{ print "\t$_\n" }
|
||
|
exit 1 ;
|
||
|
}
|
||
|
|
||
|
close F ;
|
||
|
close N ;
|
||
|
}
|
||
|
|
||
|
print "\n\nCreating pod file(s)\n\n" if $Verbose ;
|
||
|
|
||
|
@ppods = glob('*.P') ;
|
||
|
#$ppod = $ARGV[0] ;
|
||
|
#$pod = $ARGV[1] ;
|
||
|
|
||
|
# Now process the pre-pod file
|
||
|
foreach $ppod (@ppods)
|
||
|
{
|
||
|
($pod = $ppod) =~ s/\.P$// ;
|
||
|
open (PPOD, "<$ppod") or die "Cannot open file '$ppod': $!\n" ;
|
||
|
open (POD, ">$pod") or die "Cannot open file '$pod': $!\n" ;
|
||
|
|
||
|
print " $ppod -> $pod\n" ;
|
||
|
|
||
|
while ($line = <PPOD>)
|
||
|
{
|
||
|
if ( $line =~ /^\s*$TOKEN\s*(\w+)\s*$/)
|
||
|
{
|
||
|
warn "No code insert '$1' available\n"
|
||
|
unless $Section{$1} ;
|
||
|
|
||
|
print "Expanding section $1\n" if $Verbose ;
|
||
|
print POD $Section{$1} ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
# $line =~ s/\[#([^\]])]/$Macros{$1}/ge ;
|
||
|
print POD $line ;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
close PPOD ;
|
||
|
close POD ;
|
||
|
}
|