summaryrefslogtreecommitdiffstats
path: root/testsuite/stats.man
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/stats.man')
-rwxr-xr-xtestsuite/stats.man120
1 files changed, 120 insertions, 0 deletions
diff --git a/testsuite/stats.man b/testsuite/stats.man
new file mode 100755
index 0000000..4305452
--- /dev/null
+++ b/testsuite/stats.man
@@ -0,0 +1,120 @@
+#! /usr/bin/perl -w
+
+# This script looks all installed man page, and report some stats about them
+# (usefull only to guide reflexions to po-man implementation)
+
+use strict;
+
+use File::Find ();
+
+# for the convenience of &wanted calls, including -eval statements:
+#use vars qw/*name *dir *prune/;
+#*name = *File::Find::name;
+#*dir = *File::Find::dir;
+#*prune = *File::Find::prune;
+
+my %page;
+$page{'pod'}{'desc'} = "generated by Pod::Man";
+$page{'help2man'}{'desc'} = "generated by help2man";
+$page{'docbook-to-man'}{'desc'} = "generated by docbook-to-man";
+$page{'docbook2man'}{'desc'} = "generated by docbook2man";
+$page{'latex2man'}{'desc'} = "generated by latex2man";
+$page{'db2man.xsl'}{'desc'} = "generated by db2man.xsl";
+$page{'mtex2man'}{'desc'} = "generated by mtex2man(1)";
+$page{'auto'}{'desc'} = "contains 'THIS FILE HAS BEEN AUTOMATICALLY GENERATED. DO NOT EDIT.'";
+$page{'notedit'}{'desc'} = "contains 'DO NOT EDIT' or 'generated', but I dunno by who.";
+$page{'man'}{'desc'} = "seem to be a source file";
+
+my %used=(); # used macros
+my %defined=(); # self defined macros
+
+foreach my $type (keys %page) {
+ $page{$type}{'defcount'} = 0;
+}
+
+sub wanted {
+ my ($dev,$ino,$mode,$nlink,$uid,$gid);
+
+ if ((($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && -f $_) {
+ my $file = $File::Find::dir."/".$_;
+ return unless $file =~ m|/usr/share/man/man|; # pass translations
+ if ($file =~ /\.gz$/) {
+ open FILE,"zcat $file|" || die "Can't open $file\n";
+ } else {
+ open FILE,"<$file" || die "Can't open $file\n";
+ }
+
+ my $header="";
+ while ($_=<FILE>) {
+ last unless /^.."/;#"
+# chomp;
+ $header .= " $_";
+ }
+ $header = "\n$header" if (length $header);
+ my $define="";
+ while (<FILE>) {
+ if (m/^\.de (.*)$/) {
+ my $macro=$1;
+ $define .= $macro.",";
+ $defined{$macro} =(defined($defined{$macro}) ? $defined{$macro}+1 : 1);
+ next;
+ } elsif (m/^\.de/) {
+ print "DEF: $_";
+ } elsif (m/^\.([^ ]*)/) {
+ my $macro=$1;
+ chomp($macro);
+ $macro =~ s/\s*$//g;
+ $macro =~ s/^\s*//g;
+ $macro =~ s/.".*$/|"/;
+ next unless (length($macro));
+# unless ($define =~ m/$macro/) { # ignore self defined macro
+ $used{$macro} = (defined($used{$macro}) ? $used{$macro}+1 : 1);
+# }
+ }
+ }
+ close FILE;
+ my $type="man";
+ if ($header =~ /Pod::Man/) { $type="pod";
+ } elsif ($header =~ /generated by help2man/) { $type="help2man";
+ } elsif ($header =~ /with docbook-to-man/) { $type="docbook-to-man";
+ } elsif ($header =~ /generated by docbook2man/) { $type="docbook2man";
+ } elsif ($header =~ /created with latex2man/) { $type="latex2man";
+ } elsif ($header =~ /Generated by db2man.xsl/) { $type="db2man.xsl";
+ } elsif ($header =~ /generated automatically by mtex2man/) { $type="mtex2man";
+ } elsif ($header =~ /THIS FILE HAS BEEN AUTOMATICALLY GENERATED. DO NOT EDIT./) {
+ $type="auto";
+ } elsif ($header =~ /DO NOT EDIT/i || $header =~ /generated/i) {
+ $type="notedit";
+ }
+ if (length($define)) {
+ $page{$type}{'define'}{$file} = $define;
+ $page{$type}{'defcount'}++;
+ }
+ push @{$page{$type}{'files'}},$file;
+ push @{$page{$type}{'headers'}},"$file\n$header";
+ }
+}
+# Traverse desired filesystems
+File::Find::find({wanted => \&wanted}, '/usr/share/man');
+
+my $total=0;
+foreach my $type (sort keys %page) {
+ $page{$type}{'num'} = scalar @{$page{$type}{'files'}};
+ $total += $page{$type}{'num'};
+}
+print "Seen $total pages.\n";
+foreach my $type (sort {$page{$a}{'num'} <=> $page{$b}{'num'}} keys %page) {
+ print " ".$page{$type}{'num'}." ".$page{$type}{'desc'}.". ".
+ $page{$type}{'defcount'}." seem to define new macro.\n";
+}
+
+print "\nHere is a list of the (regular and self defined) macros used:\n";
+foreach my $macro (sort {$used{$a} <=> $used{$b}} keys %used) {
+ print " $macro (used ".$used{$macro}." times)\n";
+}
+
+#print "\nHere is the list of pages seeming to be source page, and defining new macros:\n";
+#foreach my $page(sort { $page{'man'}{'define'}{$a} cmp $page{'man'}{'define'}{$b}
+# } keys %{$page{'man'}{'define'}}) {
+# print $page{'man'}{'define'}{$page}.". in $page\n";
+#}