X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fpodchecker.PL;h=1a903b50aa5194e124a05f3859dc31d5040a2751;hb=363c40c40eaf5d0cfd92f460a3f838c41f9756ad;hp=24dcfb88c28af4bbf2fa2a0a282ba706619fd437;hpb=b233458bd1d5037ce4bbbb41fb513e1b68522a4d;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/podchecker.PL b/pod/podchecker.PL index 24dcfb8..1a903b5 100644 --- a/pod/podchecker.PL +++ b/pod/podchecker.PL @@ -2,6 +2,7 @@ use Config; use File::Basename qw(&basename &dirname); +use Cwd; # List explicitly here the variables you want Configure to # generate. Metaconfig only looks for shell variables, so you @@ -10,11 +11,15 @@ use File::Basename qw(&basename &dirname); # $startperl # to ensure Configure will look for $Config{startperl}. -$file = basename($0); -$file =~ s/\.PL$//i; +# This forces PL files to create target in same directory as PL file. +# This is so that make depend always knows where to find PL derivatives. +$origdir = cwd; +chdir(dirname($0)); +($file = basename($0)) =~ s/\.PL$//; +$file =~ s/\.pl$// + if ($^O eq 'VMS' or $^O eq 'os2' or $^O eq 'dos'); # "case-forgiving" $file .= '.com' if $^O eq 'VMS'; -chdir("pod") or die "Can't chdir to pod: $!"; open OUT,">$file" or die "Can't create $file: $!"; print "Extracting $file (with variable substitutions)\n"; @@ -34,17 +39,14 @@ print OUT <<'!NO!SUBS!'; ############################################################################# # podchecker -- command to invoke the podchecker function in Pod::Checker # -# Derived from Tom Christiansen's pod2text script. -# (with extensive modifications) -# -# Copyright (c) 1998 Bradford Appleton. All rights reserved. +# Copyright (c) 1998-2000 by Bradford Appleton. All rights reserved. # This file is part of "PodParser". PodParser is free software; # you can redistribute it and/or modify it under the same terms # as Perl itself. ############################################################################# use strict; -use diagnostics; +#use diagnostics; =head1 NAME @@ -52,7 +54,7 @@ podchecker - check the syntax of POD format documentation files =head1 SYNOPSIS -B [B<-help>] [B<-man>] [IS< >...] +B [B<-help>] [B<-man>] [B<-(no)warnings>] [IS< >...] =head1 OPTIONS AND ARGUMENTS @@ -66,6 +68,12 @@ Print a brief help message and exit. Print the manual page and exit. +=item B<-warnings> B<-nowarnings> + +Turn on/off printing of warnings. Repeating B<-warnings> increases the +warning level, i.e. more warnings are printed. Currently increasing to +level two causes flagging of unescaped "E,E" characters. + =item I The pathname of a POD file to syntax-check (defaults to standard input). @@ -79,16 +87,35 @@ syntax errors in the POD documentation and will print any errors it find to STDERR. At the end, it will print a status message indicating the number of errors found. +Directories are ignored, an appropriate warning message is printed. + B invokes the B function exported by B Please see L for more details. +=head1 RETURN VALUE + +B returns a 0 (zero) exit status if all specified +POD files are ok. + +=head1 ERRORS + +B returns the exit status 1 if at least one of +the given POD files has syntax errors. + +The status 2 indicates that at least one of the specified +files does not contain I POD commands. + +Status 1 overrides status 2. If you want unambigouus +results, call B with one single argument only. + =head1 SEE ALSO L and L -=head1 AUTHOR +=head1 AUTHORS -Brad Appleton Ebradapp@enteract.comE +Brad Appleton Ebradapp@enteract.comE, +Marek Rouchal Emarek@saftsack.fs.uni-bayreuth.deE Based on code for B written by Tom Christiansen Etchrist@mox.perl.comE @@ -101,28 +128,55 @@ use Pod::Usage; use Getopt::Long; ## Define options -my %options = ( - "help" => 0, - "man" => 0, -); +my %options; ## Parse options -GetOptions(\%options, "help", "man") || pod2usage(2); +GetOptions(\%options, qw(help man warnings+ nowarnings)) || pod2usage(2); pod2usage(1) if ($options{help}); pod2usage(-verbose => 2) if ($options{man}); +if($options{nowarnings}) { + $options{warnings} = 0; +} +elsif(!defined $options{warnings}) { + $options{warnings} = 1; # default is warnings on +} + ## Dont default to STDIN if connected to a terminal pod2usage(2) if ((@ARGV == 0) && (-t STDIN)); ## Invoke podchecker() -if(@ARGV) { - for (@ARGV) { podchecker($_) }; -} else { - podchecker("<&STDIN"); +my $status = 0; +@ARGV = qw(-) unless(@ARGV); +for my $podfile (@ARGV) { + if($podfile eq '-') { + $podfile = "<&STDIN"; + } + elsif(-d $podfile) { + warn "podchecker: Warning: Ignoring directory '$podfile'\n"; + next; + } + my $errors = podchecker($podfile, undef, '-warnings' => $options{warnings}); + if($errors > 0) { + # errors occurred + printf STDERR ("%s has %d pod syntax %s.\n", + $podfile, $errors, ($errors == 1) ? "error" : "errors"); + $status = 1; + } + elsif($errors < 0) { + print STDERR "$podfile does not contain any pod commands.\n"; + # no pod found + $status = 2 unless($status); + } + else { + print STDERR "$podfile pod syntax OK.\n"; + } } +exit $status; !NO!SUBS! close OUT or die "Can't close $file: $!"; chmod 0755, $file or die "Can't reset permissions for $file: $!\n"; exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':'; +chdir $origdir;