| #!/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); |
| } |