Commit | Line | Data |
23b3bd7f |
1 | #!/usr/bin/perl -w |
a1529941 |
2 | use Data::Dumper; |
3 | |
4 | my $targ = (@ARGV) ? join(' ',@ARGV) : 'miniperl' ; |
5 | |
6 | my $work = 1; |
7 | while ($work) |
8 | { |
9 | open(PIPE,"make $targ 2>&1 |") || die "Cannot open pipe to make:$!"; |
10 | my %fix; |
11 | while (<PIPE>) |
12 | { |
13 | if (/^(.*):(\d+):\s+\`(\w+)'\s+undeclared/ && -f $1 ) |
14 | { |
15 | my ($file,$line,$var) = ($1,$2,$3); |
16 | $fix{$file} = [] unless exists $fix{$file}; |
17 | push(@{$fix{$file}},[$line => $var]) unless ($var =~ /^PL_/ || $file =~ /\.h$/); |
18 | } |
19 | print; |
20 | } |
21 | close(PIPE); |
22 | warn "Make retured $?\n"; |
23 | last unless $?; |
24 | my $changed = 0; |
25 | foreach my $file (keys %fix) |
26 | { |
27 | my @ar = sort( { $a->[0] <=> $b->[0] } @{delete $fix{$file}}); |
28 | my @miss; |
29 | my $fixed = 0; |
30 | unless (-w $file) |
31 | { |
32 | system("d4","edit",$file); |
33 | } |
34 | @ARGV = ($file); |
35 | $. = 0; |
36 | local $^I = '.sav'; |
37 | while (<>) |
38 | { |
39 | while (@ar && $. == $ar[0][0]) |
40 | { |
41 | my ($line,$var) = @{shift(@ar)}; |
42 | if (s/\b$var\b/PL_$var/) |
43 | { |
44 | warn "$file:$line: FIX $var\n"; |
45 | $fixed++; |
46 | $changed++; |
47 | } |
48 | else |
49 | { |
50 | push(@miss,[$line,$var,$_]); |
51 | } |
52 | } |
53 | print; |
54 | } |
55 | unless ($fixed) |
56 | { |
57 | rename("$file$^I",$file); |
58 | if (@miss) |
59 | { |
60 | while (@miss) |
61 | { |
62 | my ($line,$var,$txt) = @{shift(@miss)}; |
63 | warn "$file:$line:$var | $txt"; |
64 | } |
65 | } |
66 | } |
67 | } |
68 | last unless $changed; |
69 | } |