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