teach sync-with-cpan how to update Maintainers.pl
[perl.git] / Porting / perlhist_calculate.pl
1 #!perl
2 # Generates info for perlhist from this perl tree
3 # run this from the root of a perl tree
4 #
5 # Data is on STDOUT.
6
7 use 5.010000;
8 use File::Find;
9 use warnings;
10 use strict;
11
12 sub calc_core {
13
14         my @core;
15         push @core, glob '*.h';
16         push @core, glob '*.c';
17         push @core, glob '*.y';
18         my $coresize = 0;
19
20         foreach my $corefile (@core) {
21                 $coresize += (-s $corefile) / 1000;
22         }
23
24         my $corenumber = scalar @core;
25         $coresize = int $coresize;
26
27         say "core: $coresize $corenumber";
28 }
29
30 sub calc_lib {
31
32         our $libsize = 0;
33         our $libnumber = 0;
34         sub wanted_lib {
35                 $File::Find::name =~ /[.] (?:pm|pl)\z/msx or return;
36                 $libsize += (-s $_) / 1000;
37                 $libnumber++;
38         }
39
40         find(\&wanted_lib, 'lib');
41         $libsize = int $libsize;
42
43         say "lib: $libsize $libnumber";
44 }
45
46 sub calc_ext {
47
48         our $extsize = 0;
49         our $extnumber = 0;
50         sub wanted_ext {
51                 $File::Find::name =~ /[.] (?:h|c|y|t|xs|pm)\z/msx or return;
52                 $extsize += (-s $_) / 1000;
53                 $extnumber++;
54         }
55
56         if (-d 'dist') {
57                 find(\&wanted_ext, 'ext', 'dist', 'cpan');
58         } else {
59                 find(\&wanted_ext, 'ext');
60         }
61
62         $extsize = int $extsize;
63
64         say "ext: $extsize $extnumber";
65 }
66
67 sub calc_t {
68
69         our $tsize = 0;
70         our $tnumber = 0;
71         sub wanted_t {
72                 $File::Find::name =~ /[.] t\z/msx or return;
73                 $tsize += (-s $_) / 1000;
74                 $tnumber++;
75         }
76
77         find(\&wanted_t, '.');
78
79         $tsize = int $tsize;
80
81         say "t: $tsize $tnumber";
82 }
83
84 sub calc_doc {
85
86         my @doc;
87         push @doc, 'INSTALL';
88         push @doc, 'README';
89         push @doc, glob 'README.*';
90         our $docsize = 0;
91
92         foreach my $docfile (@doc) {
93                 $docsize += (-s $docfile) / 1000;
94         }
95
96         our $docnumber = scalar @doc;
97
98         sub wanted_doc {
99                 $File::Find::name =~ /[.] pod\z/msx or return;
100                 $docsize += (-s $_) / 1000;
101                 $docnumber++;
102         }
103
104         find(\&wanted_doc, 'pod');
105
106         $docsize = int $docsize;
107
108         say "doc: $docsize $docnumber";
109 }
110
111 sub calc_dir {
112         my $dir = shift;
113
114         return if ! -d $dir;
115
116         our $dirnumber = 0;
117         our $dirsize = 0;
118
119         sub wanted_dir {
120                 $dirsize += (-s $_) / 1000;
121                 $dirnumber++;
122         }
123
124         find(\&wanted_dir, $dir);
125
126         $dirsize = int $dirsize;
127
128         say "$dir: $dirsize $dirnumber";
129 }
130
131
132 sub calc_longtable {
133
134         print "\n\nTable\n";
135
136         foreach my $dir (qw(beos)) {
137                 calc_dir($dir);
138         }
139
140         my $configure_size = int ((-s 'Configure') / 1000);
141
142         say "Configure: $configure_size 1";
143
144         foreach my $dir (qw(Cross djgpp emacs epoc h2pl hints mad mint mpeix NetWare os2 plan9 Porting qnx symbian utils uts vmesa vms vos win32 x2p)) {
145                 calc_dir($dir);
146         }
147 }
148
149 say "Selected release sizes for perl tarball:";
150 print "\n";
151
152 calc_core();
153 calc_lib();
154 calc_ext();
155 calc_t();
156 calc_doc();
157 calc_longtable();
158
159 exit;