In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/5b5041827ebfe6db62c72e5b64d221d66772b47a?hp=0ec35138181526e90fadf67d412593db519edc42>
- Log ----------------------------------------------------------------- commit 5b5041827ebfe6db62c72e5b64d221d66772b47a Author: Nicholas Clark <[email protected]> Date: Sat Jun 13 21:43:30 2009 +0100 Bring the joy of strict (and warnings) to perlmodlib.PL. Tweak some indenting. M pod/perlmodlib.PL commit cf9cbb1fcbe6c43ec204ccc0203775f22364127c Author: Nicholas Clark <[email protected]> Date: Sat Jun 13 20:09:47 2009 +0100 Improve perlmodlib.PL. Reduce the amount of special case logic. Get the module name from the Pod, rather than using heuristics on the filename (sometimes wrong). Parse .pm_PL files too. Special cases now are only Config and 8 files that don't use their package name in =head NAME. M pod/perlmodlib.PL commit 439578a8cd045dc1dd600d7f556990d47292da14 Author: Nicholas Clark <[email protected]> Date: Sat Jun 13 19:29:58 2009 +0100 Correct the NAME in the Pod of ExtUtils::Constant::XS. M lib/ExtUtils/Constant/XS.pm ----------------------------------------------------------------------- Summary of changes: lib/ExtUtils/Constant/XS.pm | 4 +- pod/perlmodlib.PL | 148 ++++++++++++++++++------------------------- 2 files changed, 63 insertions(+), 89 deletions(-) diff --git a/lib/ExtUtils/Constant/XS.pm b/lib/ExtUtils/Constant/XS.pm index 010dfbd..14eb809 100644 --- a/lib/ExtUtils/Constant/XS.pm +++ b/lib/ExtUtils/Constant/XS.pm @@ -10,13 +10,13 @@ require ExtUtils::Constant::Base; @ISA = qw(ExtUtils::Constant::Base Exporter); @EXPORT_OK = qw(%XS_Constant %XS_TypeSet); -$VERSION = '0.02'; +$VERSION = '0.03'; $is_perl56 = ($] < 5.007 && $] > 5.005_50); =head1 NAME -ExtUtils::Constant::Base - base class for ExtUtils::Constant objects +ExtUtils::Constant::XS - generate C code for XS modules' constants. =head1 SYNOPSIS diff --git a/pod/perlmodlib.PL b/pod/perlmodlib.PL index 0a75208..a013d26 100644 --- a/pod/perlmodlib.PL +++ b/pod/perlmodlib.PL @@ -1,5 +1,8 @@ #!../miniperl +use strict; +use warnings; + $ENV{LC_ALL} = 'C'; use FindBin; @@ -8,111 +11,82 @@ chdir $FindBin::Bin or die "$0: Can't chdir $FindBin::Bin: $!"; my $Quiet = @ARGV && $ARGV[0] eq '-q'; open (OUT, ">perlmodlib.pod") or die $!; -my (@pragma, @mod, @MANIFEST); +my (@pragma, @mod, @files); # MANIFEST itself is Unix style filenames, so we have to assume that Unix style # filenames will work. open (MANIFEST, "../MANIFEST") or die $!; -...@manifest = grep !m</(?:t|demo)/>, <MANIFEST>; -push @MANIFEST, 'lib/Config.pod', 'lib/Errno.pm', 'lib/lib.pm', - 'lib/DynaLoader.pm', 'lib/XSLoader.pm'; - -# If run in a clean source tree, these will be missing because they are -# generated by the build. -my %generated = ( - 'encoding' => 'Allows you to write your script in non-ascii or non-utf8', - 'lib' => 'Manipulate @INC at compile time', - 'ops' => 'Restrict unsafe operations when compiling', - 'Config' => 'Access Perl configuration information', - 'DynaLoader' => 'Dynamically load C libraries into Perl code', - 'Errno' => 'System errno constants', - 'O' => 'Generic interface to Perl Compiler backends', - 'Safe' => 'Compile and execute code in restricted compartments', - 'XSLoader' => 'Dynamically load C libraries into Perl code', -); - -# If run in a clean source tree, these should not be reported. -# These are considered 'modules' by this script, but they really are not. -my %suppressed = map {$_ => 1} qw( - B::O - Encode::encoding - Opcode::Safe - Opcode::ops +...@files = grep m#(?:\.pm|\.pod|_pm\.PL)#, map {s/\s.*//s; $_} + grep {m#^lib# || m#^ext#} grep !m#/(?:t|demo)/#, <MANIFEST>; + +my %exceptions = ( + 'abbrev' => 'Text::Abbrev', + 'carp' => 'Carp', + 'getopt' => 'Getopt::Std', + 'B<CGI::Carp>' => 'CGI::Carp', + 'ModuleInfo' => 'Module::Build::ModuleInfo', + '$notes_name' => 'Module::Build::Notes', + 'Encode::MIME::NAME' => 'Encode::MIME::Name', + 'libnetFAQ' => 'Net::libnetFAQ', ); -for (@MANIFEST) { - my $filename; - next unless m|^lib/| or m|^ext/|; - my ($filename) = m|^(\S+)|; - next unless $filename =~ m!\.p(m|od)$!; +for my $filename (@files) { unless (open MOD, '<', "../$filename") { warn "Couldn't open ../$filename: $!"; next; } + my ($name, $thing); + my $foundit = 0; + { + local $/ = ""; + while (<MOD>) { + next unless /^=head1 NAME/; + $foundit++; + last; + } + } + unless ($foundit) { + warn "$filename missing =head1 NAME (OK if respective .pod exists)\n" + unless $Quiet; + next; + } + my $title = <MOD>; + chomp $title; + close MOD; + + ($name, $thing) = split / --? /, $title, 2; + + unless ($name and $thing) { + warn "$filename missing name\n" unless $name; + warn "$filename missing thing\n" unless $thing or $Quiet; + next; + } + + $name =~ s/[^A-Za-z0-9_:\$<>].*//; + $name = $exceptions{$name} || $name; + $thing =~ s/^perl pragma to //i; + $thing = ucfirst $thing; + $title = "=item $name\n\n$thing\n\n"; - my ($name, $thing); - my $foundit=0; - { - local $/=""; - while (<MOD>) { - next unless /^=head1 NAME/; - $foundit++; - last; - } - } - unless ($foundit) { - warn "$filename missing =head1 NAME (OK if respective .pod exists)\n" - unless $Quiet; - next; - } - my $title = <MOD>; - chomp($title); - close MOD; - - my $perlname = $filename; - $perlname =~ s!^.*\b(ext|lib)/!!; - $perlname =~ s!\.p(m|od)$!!; - $perlname =~ s!\b(\w+)/\1\b!$1!; - $perlname =~ s!/!::!g; - $perlname =~ s!-!::!g; - - # modules with non standard locations - $perlname =~ s{Base64::QuotedPrint}{QuotedPrint}; - - ($name, $thing) = split / --? /, $title, 2; - - unless ($name and $thing) { - warn "$filename missing name\n" unless $name; - warn "$filename missing thing\n" unless $thing or $Quiet; - next; - } - - next if $suppressed{$perlname}; - - $thing =~ s/^perl pragma to //i; - $thing = ucfirst($thing); - $title = "=item $perlname\n\n$thing\n\n"; - - if ($filename =~ /[A-Z]/) { - push @mod, $title; - } else { - push @pragma, $title; - } - - # if we find a generated one via the MANIFEST, no need to add later. - delete $generated{$perlname}; -} -while (my ($name,$desc) = each %generated) { - my $title = "=item $name\n\n$desc\n\n"; if ($name =~ /[A-Z]/) { - push @mod, $title; + push @mod, $title; } else { - push @pragma, $title; + push @pragma, $title; } } +# Much easier to special case it like this than special case the depending on +# and parsing lib/Config.pod, or special case opening configpm and finding its +# =head1 (which is not found with the $/="" above) +push @mod, <<'CONFIG'; +=item Config + +Access Perl configuration information + +CONFIG + print OUT <<'EOF'; =for maintainers Generated by perlmodlib.PL -- DO NOT EDIT! -- Perl5 Master Repository
