Blame view

scripts/checkincludes.pl 1.94 KB
cb77f0d62   Kamil Rytarowski   scripts: Switch t...
1
  #!/usr/bin/env perl
b24413180   Greg Kroah-Hartman   License cleanup: ...
2
  # SPDX-License-Identifier: GPL-2.0
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
  #
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
4
5
  # checkincludes: find/remove files included more than once
  #
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
6
  # Copyright abandoned, 2000, Niels Kristian Bech Jensen <nkbj@image.dk>.
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
7
8
9
10
11
12
13
  # Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
  #
  # This script checks for duplicate includes. It also has support
  # to remove them in place. Note that this will not take into
  # consideration macros so you should run this only if you know
  # you do have real dups and do not have them under #ifdef's. You
  # could also just review the results.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
14

3da271573   Stephen Hemminger   checkincludes: fi...
15
  use strict;
f9d490ab3   Luis R. Rodriguez   checkincludes.pl:...
16
  sub usage {
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
17
18
19
20
21
22
  	print "Usage: checkincludes.pl [-r]
  ";
  	print "By default we just warn of duplicates
  ";
  	print "To remove duplicated includes in place use -r
  ";
f9d490ab3   Luis R. Rodriguez   checkincludes.pl:...
23
24
  	exit 1;
  }
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
25
  my $remove = 0;
f9d490ab3   Luis R. Rodriguez   checkincludes.pl:...
26
  if ($#ARGV < 0) {
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
27
28
29
30
31
32
33
34
35
36
37
38
  	usage();
  }
  
  if ($#ARGV >= 1) {
  	if ($ARGV[0] =~ /^-/) {
  		if ($ARGV[0] eq "-r") {
  			$remove = 1;
  			shift;
  		} else {
  			usage();
  		}
  	}
f9d490ab3   Luis R. Rodriguez   checkincludes.pl:...
39
  }
8087a5609   Cheah Kok Cheong   scripts/checkincl...
40
  my $dup_counter = 0;
3da271573   Stephen Hemminger   checkincludes: fi...
41
42
43
44
  foreach my $file (@ARGV) {
  	open(my $f, '<', $file)
  	    or die "Cannot open $file: $!.
  ";
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
45
46
  
  	my %includedfiles = ();
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
47
  	my @file_lines = ();
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
48

3da271573   Stephen Hemminger   checkincludes: fi...
49
  	while (<$f>) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
50
51
52
  		if (m/^\s*#\s*include\s*[<"](\S*)[>"]/o) {
  			++$includedfiles{$1};
  		}
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
53
  		push(@file_lines, $_);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
54
  	}
d9a7a2bd0   Luis R. Rodriguez   checkincludes.pl:...
55

3da271573   Stephen Hemminger   checkincludes: fi...
56
  	close($f);
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
57
58
  
  	if (!$remove) {
3da271573   Stephen Hemminger   checkincludes: fi...
59
  		foreach my $filename (keys %includedfiles) {
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
60
61
62
  			if ($includedfiles{$filename} > 1) {
  				print "$file: $filename is included more than once.
  ";
8087a5609   Cheah Kok Cheong   scripts/checkincl...
63
  				++$dup_counter;
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
64
  			}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
65
  		}
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
66
  		next;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
  	}
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
68

3da271573   Stephen Hemminger   checkincludes: fi...
69
70
  	open($f, '>', $file)
  	    or die("Cannot write to $file: $!");
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
71
72
73
74
  
  	my $dups = 0;
  	foreach (@file_lines) {
  		if (m/^\s*#\s*include\s*[<"](\S*)[>"]/o) {
3da271573   Stephen Hemminger   checkincludes: fi...
75
  			foreach my $filename (keys %includedfiles) {
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
76
77
78
79
  				if ($1 eq $filename) {
  					if ($includedfiles{$filename} > 1) {
  						$includedfiles{$filename}--;
  						$dups++;
8087a5609   Cheah Kok Cheong   scripts/checkincl...
80
  						++$dup_counter;
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
81
  					} else {
3da271573   Stephen Hemminger   checkincludes: fi...
82
  						print {$f} $_;
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
83
84
85
86
  					}
  				}
  			}
  		} else {
3da271573   Stephen Hemminger   checkincludes: fi...
87
  			print {$f} $_;
92f3f19c5   Luis R. Rodriguez   checkincludes.pl:...
88
89
90
91
92
93
  		}
  	}
  	if ($dups > 0) {
  		print "$file: removed $dups duplicate includes
  ";
  	}
3da271573   Stephen Hemminger   checkincludes: fi...
94
  	close($f);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
95
  }
8087a5609   Cheah Kok Cheong   scripts/checkincl...
96
97
98
99
100
  
  if ($dup_counter == 0) {
  	print "No duplicate includes found.
  ";
  }