source: trunk/third/perl/pod/podchecker.PL @ 20075

Revision 20075, 4.9 KB checked in by zacheiss, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r20074, which included commits to RCS files with non-trunk default branches.
Line 
1#!/usr/local/bin/perl
2
3use Config;
4use File::Basename qw(&basename &dirname);
5use Cwd;
6
7# List explicitly here the variables you want Configure to
8# generate.  Metaconfig only looks for shell variables, so you
9# have to mention them as if they were shell variables, not
10# %Config entries.  Thus you write
11#  $startperl
12# to ensure Configure will look for $Config{startperl}.
13
14# This forces PL files to create target in same directory as PL file.
15# This is so that make depend always knows where to find PL derivatives.
16$origdir = cwd;
17chdir(dirname($0));
18($file = basename($0)) =~ s/\.PL$//;
19$file =~ s/\.pl$//
20        if ($^O eq 'VMS' or $^O eq 'os2' or $^O eq 'dos');  # "case-forgiving"
21$file .= '.com' if $^O eq 'VMS';
22
23open OUT,">$file" or die "Can't create $file: $!";
24
25print "Extracting $file (with variable substitutions)\n";
26
27# In this section, perl variables will be expanded during extraction.
28# You can use $Config{...} to use Configure variables.
29
30print OUT <<"!GROK!THIS!";
31$Config{'startperl'}
32    eval 'exec perl -S \$0 "\$@"'
33        if 0;
34!GROK!THIS!
35
36# In the following, perl variables are not expanded during extraction.
37
38print OUT <<'!NO!SUBS!';
39#############################################################################
40# podchecker -- command to invoke the podchecker function in Pod::Checker
41#
42# Copyright (c) 1998-2000 by Bradford Appleton. All rights reserved.
43# This file is part of "PodParser". PodParser is free software;
44# you can redistribute it and/or modify it under the same terms
45# as Perl itself.
46#############################################################################
47
48use strict;
49#use diagnostics;
50
51=head1 NAME
52
53podchecker - check the syntax of POD format documentation files
54
55=head1 SYNOPSIS
56
57B<podchecker> [B<-help>] [B<-man>] [B<-(no)warnings>] [I<file>S< >...]
58
59=head1 OPTIONS AND ARGUMENTS
60
61=over 8
62
63=item B<-help>
64
65Print a brief help message and exit.
66
67=item B<-man>
68
69Print the manual page and exit.
70
71=item B<-warnings> B<-nowarnings>
72
73Turn on/off printing of warnings. Repeating B<-warnings> increases the
74warning level, i.e. more warnings are printed. Currently increasing to
75level two causes flagging of unescaped "E<lt>,E<gt>" characters.
76
77=item I<file>
78
79The pathname of a POD file to syntax-check (defaults to standard input).
80
81=back
82
83=head1 DESCRIPTION
84
85B<podchecker> will read the given input files looking for POD
86syntax errors in the POD documentation and will print any errors
87it find to STDERR. At the end, it will print a status message
88indicating the number of errors found.
89
90Directories are ignored, an appropriate warning message is printed.
91
92B<podchecker> invokes the B<podchecker()> function exported by B<Pod::Checker>
93Please see L<Pod::Checker/podchecker()> for more details.
94
95=head1 RETURN VALUE
96
97B<podchecker> returns a 0 (zero) exit status if all specified
98POD files are ok.
99
100=head1 ERRORS
101
102B<podchecker> returns the exit status 1 if at least one of
103the given POD files has syntax errors.
104
105The status 2 indicates that at least one of the specified
106files does not contain I<any> POD commands.
107
108Status 1 overrides status 2. If you want unambigouus
109results, call B<podchecker> with one single argument only.
110
111=head1 SEE ALSO
112
113L<Pod::Parser> and L<Pod::Checker>
114
115=head1 AUTHORS
116
117Brad Appleton E<lt>bradapp@enteract.comE<gt>,
118Marek Rouchal E<lt>marek@saftsack.fs.uni-bayreuth.deE<gt>
119
120Based on code for B<Pod::Text::pod2text(1)> written by
121Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
122
123=cut
124
125
126use Pod::Checker;
127use Pod::Usage;
128use Getopt::Long;
129
130## Define options
131my %options;
132
133## Parse options
134GetOptions(\%options, qw(help man warnings+ nowarnings))  ||  pod2usage(2);
135pod2usage(1)  if ($options{help});
136pod2usage(-verbose => 2)  if ($options{man});
137
138if($options{nowarnings}) {
139  $options{warnings} = 0;
140}
141elsif(!defined $options{warnings}) {
142  $options{warnings} = 1; # default is warnings on
143}
144
145## Dont default to STDIN if connected to a terminal
146pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
147
148## Invoke podchecker()
149my $status = 0;
150@ARGV = qw(-) unless(@ARGV);
151for my $podfile (@ARGV) {
152    if($podfile eq '-') {
153      $podfile = "<&STDIN";
154    }
155    elsif(-d $podfile) {
156      warn "podchecker: Warning: Ignoring directory '$podfile'\n";
157      next;
158    }
159    my $errors =
160      podchecker($podfile, undef, '-warnings' => $options{warnings});
161    if($errors > 0) {
162        # errors occurred
163        $status = 1;
164        printf STDERR ("%s has %d pod syntax %s.\n",
165                       $podfile, $errors,
166                       ($errors == 1) ? "error" : "errors");
167    }
168    elsif($errors < 0) {
169        # no pod found
170        $status = 2 unless($status);
171        print STDERR "$podfile does not contain any pod commands.\n";
172    }
173    else {
174        print STDERR "$podfile pod syntax OK.\n";
175    }
176}
177exit $status;
178
179!NO!SUBS!
180
181close OUT or die "Can't close $file: $!";
182chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
183exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
184chdir $origdir;
Note: See TracBrowser for help on using the repository browser.