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
7use 5.010000;
8use File::Find;
9use warnings;
10use strict;
11
12sub emit {
13  my $H = '%-9s:';
14  my $D = '%6d';
15  printf "$H $D $D\n", @_;
16}
17
18sub 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
36sub 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
52sub 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
73sub 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
90sub 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
117sub 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
138sub 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
151say "Selected release sizes for perl tarball:";
152print "\n";
153
154 #5.16.0         5562 109   1077  80  20504 2702   8750 2375   4815 152
155
156sub 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
161calc_line();
162
163calc_longtable();
164
165exit;
166