This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Create inversion list for Assigned code points
[perl5.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 emit {
13   my $H = '%-9s:';
14   my $D = '%6d';
15   printf "$H $D $D\n", @_;
16 }
17
18 sub calc_core {
19
20         my @core;
21         push @core, glob '*.h';
22         push @core, glob '*.c';
23         push @core, glob '*.y';
24         my $coresize = 0;
25
26         foreach my $corefile (@core) {
27                 $coresize += (-s $corefile) / 1000;
28         }
29
30         my $corenumber = scalar @core;
31         $coresize = int $coresize;
32
33   return $coresize, $corenumber;
34 }
35
36 sub calc_lib {
37
38         our $libsize = 0;
39         our $libnumber = 0;
40         sub wanted_lib {
41                 $File::Find::name =~ /[.] (?:pm|pl)\z/msx or return;
42                 $libsize += (-s $_) / 1000;
43                 $libnumber++;
44         }
45
46         find(\&wanted_lib, 'lib');
47         $libsize = int $libsize;
48
49   return $libsize, $libnumber;
50 }
51
52 sub calc_ext {
53
54         our $extsize = 0;
55         our $extnumber = 0;
56         sub wanted_ext {
57                 $File::Find::name =~ /[.] (?:h|c|y|t|xs|pm)\z/msx or return;
58                 $extsize += (-s $_) / 1000;
59                 $extnumber++;
60         }
61
62         if (-d 'dist') {
63                 find(\&wanted_ext, 'ext', 'dist', 'cpan');
64         } else {
65                 find(\&wanted_ext, 'ext');
66         }
67
68         $extsize = int $extsize;
69
70   return $extsize, $extnumber;
71 }
72
73 sub calc_t {
74
75         our $tsize = 0;
76         our $tnumber = 0;
77         sub wanted_t {
78                 $File::Find::name =~ /[.] t\z/msx or return;
79                 $tsize += (-s $_) / 1000;
80                 $tnumber++;
81         }
82
83         find(\&wanted_t, '.');
84
85         $tsize = int $tsize;
86
87   return $tsize, $tnumber;
88 }
89
90 sub calc_doc {
91
92         my @doc;
93         push @doc, 'INSTALL';
94         push @doc, 'README';
95         push @doc, glob 'README.*';
96         our $docsize = 0;
97
98         foreach my $docfile (@doc) {
99                 $docsize += (-s $docfile) / 1000;
100         }
101
102         our $docnumber = scalar @doc;
103
104         sub wanted_doc {
105                 $File::Find::name =~ /[.] pod\z/msx or return;
106                 $docsize += (-s $_) / 1000;
107                 $docnumber++;
108         }
109
110         find(\&wanted_doc, 'pod');
111
112         $docsize = int $docsize;
113
114   return $docsize, $docnumber;
115 }
116
117 sub calc_dir {
118         my $dir = shift;
119
120         return if ! -d $dir;
121
122         our $dirnumber = 0;
123         our $dirsize = 0;
124
125         sub wanted_dir {
126                 $dirsize += (-s $_) / 1000;
127                 $dirnumber++;
128         }
129
130         find(\&wanted_dir, $dir);
131
132         $dirsize = int $dirsize;
133
134   emit $dir => $dirsize, $dirnumber;
135 }
136
137
138 sub calc_longtable {
139
140         print "\n\nTable:\n";
141
142         my $configure_size = int ((-s 'Configure') / 1000);
143
144         emit Configure => $configure_size, 1;
145
146         foreach my $dir (qw(Cross djgpp emacs h2pl hints NetWare os2 plan9 Porting qnx symbian utils vms vos win32)) {
147                 calc_dir($dir);
148         }
149 }
150
151 say "Selected release sizes for perl tarball:";
152 print "\n";
153
154  #5.16.0         5562 109   1077  80  20504 2702   8750 2375   4815 152
155
156 sub calc_line {
157   printf " %-12s %6s %3s %6s %3s %6s %4s %6s %4s %6s %3s\n",
158     '5.xx.0', calc_core(), calc_lib(), calc_ext(), calc_t(), calc_doc();
159 }
160
161 calc_line();
162
163 calc_longtable();
164
165 exit;