perlmodinstall 2.01 from Jon Orwant.
[p5sagit/p5-mst-13.2.git] / pod / pod2man.PL
1 #!/usr/local/bin/perl
2
3 use Config;
4 use File::Basename qw(&basename &dirname);
5 use 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;
17 chdir dirname($0);
18 $file = basename($0, '.PL');
19 $file .= '.com' if $^O eq 'VMS';
20
21 open OUT,">$file" or die "Can't create $file: $!";
22
23 print "Extracting $file (with variable substitutions)\n";
24
25 # In this section, perl variables will be expanded during extraction.
26 # You can use $Config{...} to use Configure variables.
27
28 print OUT <<"!GROK!THIS!";
29 $Config{startperl}
30     eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
31         if \$running_under_some_shell;
32 !GROK!THIS!
33
34 # In the following, perl variables are not expanded during extraction.
35
36 print OUT <<'!NO!SUBS!';
37
38 # pod2man -- Convert POD data to formatted *roff input.
39 # $Id: pod2man.PL,v 1.8 2001/11/05 04:55:47 eagle Exp $
40 #
41 # Copyright 1999, 2000, 2001 by Russ Allbery <rra@stanford.edu>
42 #
43 # This program is free software; you may redistribute it and/or modify it
44 # under the same terms as Perl itself.
45
46 require 5.004;
47
48 use Getopt::Long qw(GetOptions);
49 use Pod::Man ();
50 use Pod::Usage qw(pod2usage);
51
52 use strict;
53
54 # Silence -w warnings.
55 use vars qw($running_under_some_shell);
56
57 # Insert -- into @ARGV before any single dash argument to hide it from
58 # Getopt::Long; we want to interpret it as meaning stdin (which Pod::Parser
59 # does correctly).
60 my $stdin;
61 @ARGV = map { $_ eq '-' && !$stdin++ ? ('--', $_) : $_ } @ARGV;
62
63 # Parse our options, trying to retain backwards compatibility with pod2man but
64 # allowing short forms as well.  --lax is currently ignored.
65 my %options;
66 Getopt::Long::config ('bundling_override');
67 GetOptions (\%options, 'section|s=s', 'release|r=s', 'center|c=s',
68             'date|d=s', 'fixed=s', 'fixedbold=s', 'fixeditalic=s',
69             'fixedbolditalic=s', 'name|n=s', 'official|o', 'quotes|q=s',
70             'lax|l', 'help|h', 'verbose|v') or exit 1;
71 pod2usage (0) if $options{help};
72
73 # Official sets --center, but don't override things explicitly set.
74 if ($options{official} && !defined $options{center}) {
75     $options{center} = 'Perl Programmers Reference Guide';
76 }
77
78 # Verbose is only our flag, not a Pod::Man flag.
79 my $verbose = $options{verbose};
80 delete $options{verbose};
81
82 # Initialize and run the formatter, pulling a pair of input and output off at
83 # a time.
84 my $parser = Pod::Man->new (%options);
85 my @files;
86 do {
87     @files = splice (@ARGV, 0, 2);
88     print "  $files[1]\n" if $verbose;
89     $parser->parse_from_file (@files);
90 } while (@ARGV);
91
92 __END__
93
94 =head1 NAME
95
96 pod2man - Convert POD data to formatted *roff input
97
98 =head1 SYNOPSIS
99
100 pod2man [B<--section>=I<manext>] [B<--release>=I<version>]
101 [B<--center>=I<string>] [B<--date>=I<string>] [B<--fixed>=I<font>]
102 [B<--fixedbold>=I<font>] [B<--fixeditalic>=I<font>]
103 [B<--fixedbolditalic>=I<font>] [B<--name>=I<name>] [B<--official>]
104 [B<--lax>] [B<--quotes>=I<quotes>] [B<--verbose>]
105 [I<input> [I<output>] ...]
106
107 pod2man B<--help>
108
109 =head1 DESCRIPTION
110
111 B<pod2man> is a front-end for Pod::Man, using it to generate *roff input
112 from POD source.  The resulting *roff code is suitable for display on a
113 terminal using nroff(1), normally via man(1), or printing using troff(1).
114
115 I<input> is the file to read for POD source (the POD can be embedded in
116 code).  If I<input> isn't given, it defaults to STDIN.  I<output>, if given,
117 is the file to which to write the formatted output.  If I<output> isn't
118 given, the formatted output is written to STDOUT.  Several POD files can be
119 processed in the same B<pod2man> invocation (saving module load and compile
120 times) by providing multiple pairs of I<input> and I<output> files on the
121 command line.
122
123 B<--section>, B<--release>, B<--center>, B<--date>, and B<--official> can be
124 used to set the headers and footers to use; if not given, Pod::Man will
125 assume various defaults.  See below or L<Pod::Man> for details.
126
127 B<pod2man> assumes that your *roff formatters have a fixed-width font named
128 CW.  If yours is called something else (like CR), use B<--fixed> to specify
129 it.  This generally only matters for troff output for printing.  Similarly,
130 you can set the fonts used for bold, italic, and bold italic fixed-width
131 output.
132
133 Besides the obvious pod conversions, Pod::Man, and therefore pod2man also
134 takes care of formatting func(), func(n), and simple variable references
135 like $foo or @bar so you don't have to use code escapes for them; complex
136 expressions like C<$fred{'stuff'}> will still need to be escaped, though.
137 It also translates dashes that aren't used as hyphens into en dashes, makes
138 long dashes--like this--into proper em dashes, fixes "paired quotes," and
139 takes care of several other troff-specific tweaks.  See L<Pod::Man> for
140 complete information.
141
142 =head1 OPTIONS
143
144 =over 4
145
146 =item B<-c> I<string>, B<--center>=I<string>
147
148 Sets the centered page header to I<string>.  The default is "User
149 Contributed Perl Documentation", but also see B<--official> below.
150
151 =item B<-d> I<string>, B<--date>=I<string>
152
153 Set the left-hand footer string to this value.  By default, the modification
154 date of the input file will be used, or the current date if input comes from
155 STDIN.
156
157 =item B<--fixed>=I<font>
158
159 The fixed-width font to use for vertabim text and code.  Defaults to CW.
160 Some systems may want CR instead.  Only matters for troff(1) output.
161
162 =item B<--fixedbold>=I<font>
163
164 Bold version of the fixed-width font.  Defaults to CB.  Only matters for
165 troff(1) output.
166
167 =item B<--fixeditalic>=I<font>
168
169 Italic version of the fixed-width font (actually, something of a misnomer,
170 since most fixed-width fonts only have an oblique version, not an italic
171 version).  Defaults to CI.  Only matters for troff(1) output.
172
173 =item B<--fixedbolditalic>=I<font>
174
175 Bold italic (probably actually oblique) version of the fixed-width font.
176 Pod::Man doesn't assume you have this, and defaults to CB.  Some systems
177 (such as Solaris) have this font available as CX.  Only matters for troff(1)
178 output.
179
180 =item B<-h>, B<--help>
181
182 Print out usage information.
183
184 =item B<-l>, B<--lax>
185
186 Don't complain when required sections are missing.  Not currently used, as
187 POD checking functionality is not yet implemented in Pod::Man.
188
189 =item B<-n> I<name>, B<--name>=I<name>
190
191 Set the name of the manual page to I<name>.  Without this option, the manual
192 name is set to the uppercased base name of the file being converted unless
193 the manual section is 3, in which case the path is parsed to see if it is a
194 Perl module path.  If it is, a path like C<.../lib/Pod/Man.pm> is converted
195 into a name like C<Pod::Man>.  This option, if given, overrides any
196 automatic determination of the name.
197
198 Note that this option is probably not useful when converting multiple POD
199 files at once.  The convention for Unix man pages for commands is for the
200 man page title to be in all-uppercase even if the command isn't.
201
202 =item B<-o>, B<--official>
203
204 Set the default header to indicate that this page is part of the standard
205 Perl release, if B<--center> is not also given.
206
207 =item B<-q> I<quotes>, B<--quotes>=I<quotes>
208
209 Sets the quote marks used to surround CE<lt>> text to I<quotes>.  If
210 I<quotes> is a single character, it is used as both the left and right
211 quote; if I<quotes> is two characters, the first character is used as the
212 left quote and the second as the right quoted; and if I<quotes> is four
213 characters, the first two are used as the left quote and the second two as
214 the right quote.
215
216 I<quotes> may also be set to the special value C<none>, in which case no
217 quote marks are added around CE<lt>> text (but the font is still changed for
218 troff output).
219
220 =item B<-r>, B<--release>
221
222 Set the centered footer.  By default, this is the version of Perl you run
223 B<pod2man> under.  Note that some system an macro sets assume that the
224 centered footer will be a modification date and will prepend something like
225 "Last modified: "; if this is the case, you may want to set B<--release> to
226 the last modified date and B<--date> to the version number.
227
228 =item B<-s>, B<--section>
229
230 Set the section for the C<.TH> macro.  The standard section numbering
231 convention is to use 1 for user commands, 2 for system calls, 3 for
232 functions, 4 for devices, 5 for file formats, 6 for games, 7 for
233 miscellaneous information, and 8 for administrator commands.  There is a lot
234 of variation here, however; some systems (like Solaris) use 4 for file
235 formats, 5 for miscellaneous information, and 7 for devices.  Still others
236 use 1m instead of 8, or some mix of both.  About the only section numbers
237 that are reliably consistent are 1, 2, and 3.
238
239 By default, section 1 will be used unless the file ends in .pm in which case
240 section 3 will be selected.
241
242 =item B<-v>, B<--verbose>
243
244 Print out the name of each output file as it is being generated.
245
246 =back
247
248 =head1 DIAGNOSTICS
249
250 If B<pod2man> fails with errors, see L<Pod::Man> and L<Pod::Parser> for
251 information about what those errors might mean.
252
253 =head1 EXAMPLES
254
255     pod2man program > program.1
256     pod2man SomeModule.pm /usr/perl/man/man3/SomeModule.3
257     pod2man --section=7 note.pod > note.7
258
259 If you would like to print out a lot of man page continuously, you probably
260 want to set the C and D registers to set contiguous page numbering and
261 even/odd paging, at least on some versions of man(7).
262
263     troff -man -rC1 -rD1 perl.1 perldata.1 perlsyn.1 ...
264
265 To get index entries on stderr, turn on the F register, as in:
266
267     troff -man -rF1 perl.1
268
269 The indexing merely outputs messages via C<.tm> for each major page,
270 section, subsection, item, and any C<XE<lt>E<gt>> directives.  See
271 L<Pod::Man> for more details.
272
273 =head1 BUGS
274
275 Lots of this documentation is duplicated from L<Pod::Man>.
276
277 POD checking and the corresponding B<--lax> option don't work yet.
278
279 =head1 NOTES
280
281 For those not sure of the proper layout of a man page, here are some notes
282 on writing a proper man page.
283
284 The name of the program being documented is conventionally written in bold
285 (using BE<lt>E<gt>) wherever it occurs, as are all program options.
286 Arguments should be written in italics (IE<lt>E<gt>).  Functions are
287 traditionally written in italics; if you write a function as function(),
288 Pod::Man will take care of this for you.  Literal code or commands should
289 be in CE<lt>E<gt>.  References to other man pages should be in the form
290 C<manpage(section)>, and Pod::Man will automatically format those
291 appropriately.  As an exception, it's traditional not to use this form when
292 referring to module documentation; use C<LE<lt>Module::NameE<gt>> instead.
293
294 References to other programs or functions are normally in the form of man
295 page references so that cross-referencing tools can provide the user with
296 links and the like.  It's possible to overdo this, though, so be careful not
297 to clutter your documentation with too much markup.
298
299 The major headers should be set out using a C<=head1> directive, and are
300 historically written in the rather startling ALL UPPER CASE format, although
301 this is not mandatory.  Minor headers may be included using C<=head2>, and
302 are typically in mixed case.
303
304 The standard sections of a manual page are:
305
306 =over 4
307
308 =item NAME
309
310 Mandatory section; should be a comma-separated list of programs or functions
311 documented by this podpage, such as:
312
313     foo, bar - programs to do something
314
315 Manual page indexers are often extremely picky about the format of this
316 section, so don't put anything in it except this line.  A single dash, and
317 only a single dash, should separate the list of programs or functions from
318 the description.  Functions should not be qualified with C<()> or the like.
319 The description should ideally fit on a single line, even if a man program
320 replaces the dash with a few tabs.
321
322 =item SYNOPSIS
323
324 A short usage summary for programs and functions.  This section is mandatory
325 for section 3 pages.
326
327 =item DESCRIPTION
328
329 Extended description and discussion of the program or functions, or the body
330 of the documentation for man pages that document something else.  If
331 particularly long, it's a good idea to break this up into subsections
332 C<=head2> directives like:
333
334     =head2 Normal Usage
335
336     =head2 Advanced Features
337
338     =head2 Writing Configuration Files
339
340 or whatever is appropriate for your documentation.
341
342 =item OPTIONS
343
344 Detailed description of each of the command-line options taken by the
345 program.  This should be separate from the description for the use of things
346 like L<Pod::Usage|Pod::Usage>.  This is normally presented as a list, with
347 each option as a separate C<=item>.  The specific option string should be
348 enclosed in BE<lt>E<gt>.  Any values that the option takes should be
349 enclosed in IE<lt>E<gt>.  For example, the section for the option
350 B<--section>=I<manext> would be introduced with:
351
352     =item B<--section>=I<manext>
353
354 Synonymous options (like both the short and long forms) are separated by a
355 comma and a space on the same C<=item> line, or optionally listed as their
356 own item with a reference to the canonical name.  For example, since
357 B<--section> can also be written as B<-s>, the above would be:
358
359     =item B<-s> I<manext>, B<--section>=I<manext>
360
361 (Writing the short option first is arguably easier to read, since the long
362 option is long enough to draw the eye to it anyway and the short option can
363 otherwise get lost in visual noise.)
364
365 =item RETURN VALUE
366
367 What the program or function returns, if successful.  This section can be
368 omitted for programs whose precise exit codes aren't important, provided
369 they return 0 on success as is standard.  It should always be present for
370 functions.
371
372 =item ERRORS
373
374 Exceptions, error return codes, exit statuses, and errno settings.
375 Typically used for function documentation; program documentation uses
376 DIAGNOSTICS instead.  The general rule of thumb is that errors printed to
377 STDOUT or STDERR and intended for the end user are documented in DIAGNOSTICS
378 while errors passed internal to the calling program and intended for other
379 programmers are documented in ERRORS.  When documenting a function that sets
380 errno, a full list of the possible errno values should be given here.
381
382 =item DIAGNOSTICS
383
384 All possible messages the program can print out--and what they mean.  You
385 may wish to follow the same documentation style as the Perl documentation;
386 see perldiag(1) for more details (and look at the POD source as well).
387
388 If applicable, please include details on what the user should do to correct
389 the error; documenting an error as indicating "the input buffer is too
390 small" without telling the user how to increase the size of the input buffer
391 (or at least telling them that it isn't possible) aren't very useful.
392
393 =item EXAMPLES
394
395 Give some example uses of the program or function.  Don't skimp; users often
396 find this the most useful part of the documentation.  The examples are
397 generally given as verbatim paragraphs.
398
399 Don't just present an example without explaining what it does.  Adding a
400 short paragraph saying what the example will do can increase the value of
401 the example immensely.
402
403 =item ENVIRONMENT
404
405 Environment variables that the program cares about, normally presented as a
406 list using C<=over>, C<=item>, and C<=back>.  For example:
407
408     =over 6
409
410     =item HOME
411
412     Used to determine the user's home directory.  F<.foorc> in this
413     directory is read for configuration details, if it exists.
414
415     =back
416
417 Since environment variables are normally in all uppercase, no additional
418 special formatting is generally needed; they're glaring enough as it is.
419
420 =item FILES
421
422 All files used by the program or function, normally presented as a list, and
423 what it uses them for.  File names should be enclosed in FE<lt>E<gt>.  It's
424 particularly important to document files that will be potentially modified.
425
426 =item CAVEATS
427
428 Things to take special care with, sometimes called WARNINGS.
429
430 =item BUGS
431
432 Things that are broken or just don't work quite right.
433
434 =item RESTRICTIONS
435
436 Bugs you don't plan to fix.  :-)
437
438 =item NOTES
439
440 Miscellaneous commentary.
441
442 =item SEE ALSO
443
444 Other man pages to check out, like man(1), man(7), makewhatis(8), or
445 catman(8).  Normally a simple list of man pages separated by commas, or a
446 paragraph giving the name of a reference work.  Man page references, if they
447 use the standard C<name(section)> form, don't have to be enclosed in
448 LE<lt>E<gt>, but other things in this section probably should be when
449 appropriate.  You may need to use the C<LE<lt>...|...E<gt>> syntax to keep
450 B<pod2man> and B<pod2text> from being too verbose; see perlpod(1).
451
452 If the package has a mailing list, include a URL or subscription
453 instructions here.
454
455 If the package has a web site, include a URL here.
456
457 =item AUTHOR
458
459 Who wrote it (use AUTHORS for multiple people).  Including your current
460 e-mail address (or some e-mail address to which bug reports should be sent)
461 so that users have a way of contacting you is a good idea.  Remember that
462 program documentation tends to roam the wild for far longer than you expect
463 and pick an e-mail address that's likely to last if possible.
464
465 =item COPYRIGHT AND LICENSE
466
467 For copyright
468
469     Copyright YEAR(s) by YOUR NAME(s)
470
471 (No, (C) is not needed.  No, "all rights reserved" is not needed.)
472
473 For licensing the easiest way is to use the same licensing as Perl itself:
474
475     This library is free software; you may redistribute it and/or modify
476     it under the same terms as Perl itself.
477
478 This makes it easy for people to use your module with Perl.  Note that
479 this licensing is neither an endorsement or a requirement, you are of
480 course free to choose any licensing.
481
482 =item HISTORY
483
484 Programs derived from other sources sometimes have this, or you might keep
485 a modification log here.  If the log gets overly long or detailed,
486 consider maintaining it in a separate file, though.
487
488 =back
489
490 In addition, some systems use CONFORMING TO to note conformance to relevant
491 standards and MT-LEVEL to note safeness for use in threaded programs or
492 signal handlers.  These headings are primarily useful when documenting parts
493 of a C library.  Documentation of object-oriented libraries or modules may
494 use CONSTRUCTORS and METHODS sections for detailed documentation of the
495 parts of the library and save the DESCRIPTION section for an overview; other
496 large modules may use FUNCTIONS for similar reasons.  Some people use
497 OVERVIEW to summarize the description if it's quite long.
498
499 Section ordering varies, although NAME should I<always> be the first section
500 (you'll break some man page systems otherwise), and NAME, SYNOPSIS,
501 DESCRIPTION, and OPTIONS generally always occur first and in that order if
502 present.  In general, SEE ALSO, AUTHOR, and similar material should be left
503 for last.  Some systems also move WARNINGS and NOTES to last.  The order
504 given above should be reasonable for most purposes.
505
506 Finally, as a general note, try not to use an excessive amount of markup.
507 As documented here and in L<Pod::Man>, you can safely leave Perl variables,
508 function names, man page references, and the like unadorned by markup and
509 the POD translators will figure it out for you.  This makes it much easier
510 to later edit the documentation.  Note that many existing translators
511 (including this one currently) will do the wrong thing with e-mail addresses
512 or URLs when wrapped in LE<lt>E<gt>, so don't do that.
513
514 For additional information that may be more accurate for your specific
515 system, see either man(5) or man(7) depending on your system manual section
516 numbering conventions.
517
518 =head1 SEE ALSO
519
520 L<Pod::Man|Pod::Man>, L<Pod::Parser|Pod::Parser>, man(1), nroff(1),
521 troff(1), man(7)
522
523 The man page documenting the an macro set may be man(5) instead of man(7) on
524 your system.
525
526 =head1 AUTHOR
527
528 Russ Allbery <rra@stanford.edu>, based I<very> heavily on the original
529 B<pod2man> by Larry Wall and Tom Christiansen.  Large portions of this
530 documentation, particularly the sections on the anatomy of a proper man
531 page, are taken from the B<pod2man> documentation by Tom.
532
533 =head1 COPYRIGHT AND LICENSE
534
535 Copyright 1999, 2000, 2001 by Russ Allbery <rra@stanford.edu>.
536
537 This program is free software; you may redistribute it and/or modify it
538 under the same terms as Perl itself.
539
540 =cut
541 !NO!SUBS!
542 #'# (cperl-mode)
543
544 close OUT or die "Can't close $file: $!";
545 chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
546 exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
547 chdir $origdir;