From: Wayne Davison Date: Thu, 30 Apr 2020 04:24:26 +0000 (-0700) Subject: Convert another packaging script to python3. X-Git-Tag: v3.2.0pre1~149 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=96a6ea0f26886cfc427f852eca8321fbc9a7d055;p=thirdparty%2Frsync.git Convert another packaging script to python3. --- diff --git a/packaging/var-checker b/packaging/var-checker index 7c017252..6b472f71 100755 --- a/packaging/var-checker +++ b/packaging/var-checker @@ -1,83 +1,87 @@ -#!/usr/bin/perl +#!/usr/bin/python3 -B + # This script checks the *.c files for extraneous "extern" variables, # for vars that are defined but not used, and for inconsistent array # sizes. Run it from inside the main rsync directory. -use strict; -use warnings; - -my %add_syscall_c = map { $_ => 1 } qw( t_stub.c t_unsafe.c tls.c trimslash.c ); -my %add_compat_c = map { $_ => 1 } qw( t_stub.c tls.c trimslash.c wildtest.c ); -my %add_util_c = map { $_ => 1 } qw( t_stub.c t_unsafe.c ); -my %sizes; - -open(IN, '<', 'syscall.c') or die $!; -undef $/; my $syscall_c = ; $/ = "\n"; -close IN; -$syscall_c =~ s/^extern\s.*//mg; - -open(IN, '<', 'lib/compat.c') or die $!; -undef $/; my $compat_c = ; $/ = "\n"; -close IN; -$compat_c =~ s/^extern\s.*//mg; - -open(IN, '<', 'util.c') or die $!; -undef $/; my $util_c = ; $/ = "\n"; -close IN; -$util_c =~ s/^extern\s.*//mg; - -my @files = glob('*.c'); - -foreach my $fn (@files) { - open(IN, '<', $fn) or die $!; - undef $/; $_ = ; $/ = "\n"; - close IN; - - my @vars = /^(?!(?:extern|enum)\s)([a-zA-Z]\S*\s+.*);/mg; - my @externs = /^extern\s+(.*);/mg; - - $_ .= $syscall_c if $add_syscall_c{$fn}; - $_ .= $compat_c if $add_compat_c{$fn}; - $_ .= $util_c if $add_util_c{$fn}; - s/INFO_GTE/info_levels/g; - s/DEBUG_GTE/debug_levels/g; - - check_vars($fn, 'var', @vars); - check_vars($fn, 'extern', @externs); -} - -exit; - -# The file's contents are in $_. -sub check_vars -{ - my $fn = shift; - my $type = shift; - - foreach my $line (@_) { - $line =~ s/\s*\{.*\}//; - $line =~ s/\s*\(.*\)//; - foreach my $item (split(/\s*,\s*/, $line)) { - $item =~ s/\s*=.*//; - my $sz = $item =~ s/(\[.*?\])// ? $1 : ''; - my($var) = $item =~ /([^*\s]+)$/; - if (!defined $var) { - print "Bogus match? ($item)\n"; - next; - } - if ($sz) { - if (defined $sizes{$var}) { - if ($sizes{$var} ne $sz) { - print $fn, ' has inconsistent size for "', $var, - "\": $sizes{$var} vs $sz\n"; - } - } else { - $sizes{$var} = $sz; - } - } - my @matches = /(?\w+)(?P\[.*?\])?$', item) + if not m: + print(f"Bogus match? ({item})") + continue + if m['sz']: + if m['var'] in sizes: + if sizes[m['var']] != m['sz']: + var = m['var'] + print(fn, f'has inconsistent size for "{var}":', m['sz'], 'vs', sizes[var]) + else: + sizes[m['var']] = m['sz'] + ret.append(m['var']) + return ret + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Check the *.c files for extraneous extern vars.', add_help=False) + parser.add_argument("--help", "-h", action="help", help="Output this help message and exit.") + args = parser.parse_args() + main() + +# vim: sw=4 et