blob: 924e9533de603de4b51911eb4870625811ad6aef [file] [log] [blame] [edit]
#!/usr/bin/perl
use warnings;
use strict;
use Getopt::Long;
use vars qw /$opt_verbose/;
# A script to scan PCRE2's man pages to check for values that might need to
# be updated to match the code.
#
# It updates numerical values after \" DEFINE <name> or errors if name is
# not found.
my $file;
my %defs;
foreach $file ("../src/config.h.generic")
{
open (INCLUDE, $file) or die "Failed to open include $file\n";
while (<INCLUDE>)
{
next unless /^#define ([[:upper:]_\d]+)\s+(\d+)/a;
$defs{$1} = $2;
}
close(INCLUDE);
}
GetOptions("verbose");
while (scalar(@ARGV) > 0)
{
$file = shift @ARGV;
open my $fh, "+<", $file or die "Failed to open $file\n";
my @lines = <$fh>;
my $updated = 0;
foreach my $index (0 .. $#lines)
{
if ($lines[$index] =~ /^\.\\"\sDEFINE\s([[:upper:]_\d]+)$/a)
{
my $l = $index + 1;
die "Invalid DEFINE line $l of $file\n" unless defined $lines[$l];
my $key = $1;
die "Bad DEFINE key $key line $l of $file\n" unless exists $defs{$key};
my $value = $defs{$key};
if ($lines[$index + 1] !~ /^$value\b/)
{
$updated += $lines[$index + 1] =~ s/^\d+/$value/a;
print "Updated $key in $file to $value\n" if $opt_verbose;
}
}
}
if ($updated > 0)
{
seek($fh, 0, 0);
print $fh @lines;
truncate($fh, tell($fh));
}
close($fh);
}