Version:  2.0.40 2.2.26 2.4.37 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10

Linux/scripts/checkincludes.pl

  1 #!/usr/bin/perl
  2 #
  3 # checkincludes: find/remove files included more than once
  4 #
  5 # Copyright abandoned, 2000, Niels Kristian Bech Jensen <nkbj@image.dk>.
  6 # Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
  7 #
  8 # This script checks for duplicate includes. It also has support
  9 # to remove them in place. Note that this will not take into
 10 # consideration macros so you should run this only if you know
 11 # you do have real dups and do not have them under #ifdef's. You
 12 # could also just review the results.
 13 
 14 use strict;
 15 
 16 sub usage {
 17         print "Usage: checkincludes.pl [-r]\n";
 18         print "By default we just warn of duplicates\n";
 19         print "To remove duplicated includes in place use -r\n";
 20         exit 1;
 21 }
 22 
 23 my $remove = 0;
 24 
 25 if ($#ARGV < 0) {
 26         usage();
 27 }
 28 
 29 if ($#ARGV >= 1) {
 30         if ($ARGV[0] =~ /^-/) {
 31                 if ($ARGV[0] eq "-r") {
 32                         $remove = 1;
 33                         shift;
 34                 } else {
 35                         usage();
 36                 }
 37         }
 38 }
 39 
 40 foreach my $file (@ARGV) {
 41         open(my $f, '<', $file)
 42             or die "Cannot open $file: $!.\n";
 43 
 44         my %includedfiles = ();
 45         my @file_lines = ();
 46 
 47         while (<$f>) {
 48                 if (m/^\s*#\s*include\s*[<"](\S*)[>"]/o) {
 49                         ++$includedfiles{$1};
 50                 }
 51                 push(@file_lines, $_);
 52         }
 53 
 54         close($f);
 55 
 56         if (!$remove) {
 57                 foreach my $filename (keys %includedfiles) {
 58                         if ($includedfiles{$filename} > 1) {
 59                                 print "$file: $filename is included more than once.\n";
 60                         }
 61                 }
 62                 next;
 63         }
 64 
 65         open($f, '>', $file)
 66             or die("Cannot write to $file: $!");
 67 
 68         my $dups = 0;
 69         foreach (@file_lines) {
 70                 if (m/^\s*#\s*include\s*[<"](\S*)[>"]/o) {
 71                         foreach my $filename (keys %includedfiles) {
 72                                 if ($1 eq $filename) {
 73                                         if ($includedfiles{$filename} > 1) {
 74                                                 $includedfiles{$filename}--;
 75                                                 $dups++;
 76                                         } else {
 77                                                 print {$f} $_;
 78                                         }
 79                                 }
 80                         }
 81                 } else {
 82                         print {$f} $_;
 83                 }
 84         }
 85         if ($dups > 0) {
 86                 print "$file: removed $dups duplicate includes\n";
 87         }
 88         close($f);
 89 }

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us