summaryrefslogtreecommitdiff
path: root/help2man.texi
diff options
context:
space:
mode:
Diffstat (limited to 'help2man.texi')
-rw-r--r--help2man.texi587
1 files changed, 587 insertions, 0 deletions
diff --git a/help2man.texi b/help2man.texi
new file mode 100644
index 0000000..b849e22
--- /dev/null
+++ b/help2man.texi
@@ -0,0 +1,587 @@
+\input texinfo @c -*-texinfo-*-
+@setfilename help2man.info
+@settitle @command{help2man} Reference Manual
+@finalout
+
+@dircategory Software development
+@direntry
+* help2man: (help2man). Automatic manual page generation.
+@end direntry
+
+@copying
+This file documents the GNU @command{help2man} command which produces
+simple manual pages from the @samp{--help} and @samp{--version} output
+of other commands.
+
+Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009, 2010, 2011
+Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+@ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
+@end copying
+
+@titlepage
+@title help2man
+@subtitle A utility for generating simple manual pages
+@author Brendan O'Dea @email{bod@@debian.org}
+
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009, 2010, 2011
+Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
+@end titlepage
+
+@ifnottex
+@node Top
+@top @command{help2man}
+
+@command{help2man} produces simple manual pages from the @samp{--help}
+and @samp{--version} output of other commands.
+
+@menu
+* Overview:: Overview of @command{help2man}.
+* Invoking help2man:: How to run @command{help2man}.
+* --help recommendations:: Recommended formatting for --help output.
+* Including text:: Including additional text in the output.
+* Makefile usage:: Using @command{help2man} with @command{make}.
+* Localised man pages:: Producing native language manual pages.
+* Example:: Example @command{help2man} output.
+* Reports:: Reporting bugs or suggestions.
+* Availability:: Obtaining @command{help2man}.
+@end menu
+@end ifnottex
+
+@node Overview
+@chapter Overview of @command{help2man}
+
+@command{help2man} is a tool for automatically generating simple
+manual pages from program output.
+
+Although manual pages are optional for GNU programs other projects,
+such as Debian require them (@pxref{Man Pages, , , standards, GNU
+Coding Standards})
+
+This program is intended to provide an easy way for software authors
+to include a manual page in their distribution without having to
+maintain that document.
+
+Given a program which produces reasonably standard @samp{--help} and
+@samp{--version} outputs, @command{help2man} can re-arrange that
+output into something which resembles a manual page.
+
+@node Invoking help2man
+@chapter How to Run @command{help2man}
+
+The format for running the @command{help2man} program is:
+
+@example
+@command{help2man} [@var{option}]@dots{} @var{executable}
+@end example
+
+@command{help2man} supports the following options:
+
+@table @samp
+@item -n @var{string}
+@itemx --name=@var{string}
+Use @var{string} as the description for the @samp{NAME} paragraph of
+the manual page.
+
+By default (for want of anything better) this paragraph contains
+@samp{manual page for @var{program} @var{version}}.
+
+This option overrides an include file @samp{[name]} section
+(@pxref{Including text}).
+
+@item -s @var{section}
+@itemx --section @var{section}
+Use @var{section} as the section for the man page. The default
+section is 1.
+
+@item -m @var{manual}
+@itemx --manual=@var{manual}
+Set the name of the manual section to @var{section}, used as a centred
+heading for the manual page. By default @samp{User Commands} is used
+for pages in section 1, @samp{Games} for section 6 and @samp{System
+Administration Utilities} for sections 8 and 1M.
+
+@item -S @var{source}
+@itemx --source=@var{source}
+The program source is used as a page footer, and often contains the name
+of the organisation or a suite of which the program is part. By default
+the value is the package name and version.
+
+@item -L @var{locale}
+@itemx --locale=@var{locale}
+Select output locale (default @samp{C}). Both the program and
+@command{help2man} must support the given @var{locale}
+(@pxref{Localised man pages}).
+
+@item -i @var{file}
+@itemx --include=@var{file}
+Include material from @var{file} (@pxref{Including text}).
+
+@item -I @var{file}
+@itemx --opt-include=@var{file}
+A variant of @samp{--include} for use in Makefile pattern rules which
+does not require @var{file} to exist.
+
+@item -o @var{file}
+@itemx --output=@var{file}
+Send output to @var{file} rather than @code{stdout}.
+
+@item -p @var{text}
+@itemx --info-page=@var{text}
+Name of Texinfo manual.
+
+@item -N
+@itemx --no-info
+Suppress inclusion of a @samp{SEE ALSO} paragraph directing the reader
+to the Texinfo documentation.
+
+@item -l
+@itemx --libtool
+Drop @file{lt-} prefix from instances of the program name in the
+synopsis (@command{libtool} creates wrapper scripts in the build
+directory which invoke @command{foo} as @command{.libs/lt-foo}).
+
+@item --help
+@itemx --version
+Show help or version information.
+@end table
+
+By default @command{help2man} passes the standard @samp{--help} and
+@samp{--version} options to the executable although alternatives may
+be specified using:
+
+@table @samp
+@item -h @var{option}
+@itemx --help-option=@var{option}
+Help option string.
+
+@item -v @var{option}
+@itemx --version-option=@var{option}
+Version option string.
+
+@item --version-string=@var{string}
+Version string.
+
+@item --no-discard-stderr
+Include stderr when parsing option output.
+@end table
+
+@node --help recommendations
+@chapter @option{--help} Recommendations
+
+Here are some recommendations for what to include in your
+@option{--help} output. Including these gives @command{help2man} the
+best chance at generating a respectable man page, as well as
+benefitting users directly.
+
+@xref{Command-Line Interfaces, , , standards, GNU Coding Standards},
+and @ref{Man Pages, , , standards, GNU Coding Standards}, for the
+official GNU standards relating to @option{--help} and man pages.
+
+@itemize @bullet
+@item
+A synopsis of how to invoke the program. If different usages of the
+program have different invocations, then list them all. For example
+(edited for brevity):
+
+@smallexample
+Usage: cp [OPTION]... SOURCE DEST
+ or: cp [OPTION]... SOURCE... DIRECTORY
+@dots{}
+@end smallexample
+
+Use @code{argv[0]} for the program name in these synopses, just as it
+is, with no directory stripping. This is in contrast to the canonical
+(constant) name of the program which is used in @option{--version}.
+
+@item
+A very brief explanation of what the program does, including default
+and/or typical behaviour. For example, here is @command{cp}'s:
+
+@example
+Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
+@end example
+
+@item
+A list of options, indented to column 2. If the program supports
+one-character options, put those first, then the equivalent long option
+(if any). If the option takes an argument, include that too, giving it
+a meaningful name. Align the descriptions in a convenient column, if
+desired. Note that to be correctly recognised by @command{help2man}
+the description must be separated from the options by at least two
+spaces and descriptions continued on subsequent lines must start at
+the same column.
+
+Here again is an (edited) excerpt from @command{cp}, showing a short
+option with an equivalent long option, a long option only, and a short
+option only:
+
+@smallexample
+ -a, --archive same as -dpR
+ --backup[=CONTROL] make a backup of each ...
+ -b like --backup but ...
+@end smallexample
+
+For programs that take many options, it may be desirable to split the
+option list into sections such as `Global', `Output control', or
+whatever makes sense in the particular case. It is usually best to
+alphabetise (by short option name first, then long) within each section,
+or the entire list if there are no sections.
+
+@item
+Any useful additional information about program behaviour, such as
+influential environment variables, further explanation of options, etc.
+For example, @command{cp} discusses @env{VERSION_CONTROL} and sparse
+files.
+
+@item
+A few examples of typical usage, at your discretion. One good example
+is usually worth a thousand words of description, so this is
+highly recommended.
+
+@item
+@cindex address for bug reports
+@cindex bug reports
+In closing, a line stating how to email bug reports. Typically,
+@var{mailing-address} will be @samp{bug-@var{program}@@gnu.org}; please
+use this form for GNU programs whenever possible. It's also good to
+mention the home page of the program, other mailing lists, etc.
+
+@end itemize
+
+The @code{argp} and @code{popt} programming interfaces let you specify
+option descriptions for @option{--help} in the same structure as the
+rest of the option definition; you may wish to consider using these
+routines for option parsing instead of @code{getopt}.
+
+@node Including text
+@chapter Including Additional Text in the Output
+
+Additional static text may be included in the generated manual page by
+using the @samp{--include} and @samp{--opt-include} options
+(@pxref{Invoking help2man}). While these files can be named anything,
+for consistency we suggest to use the extension @code{.h2m} for
+help2man include files.
+
+The format for files included with these option is simple:
+
+@example
+[section]
+text
+
+/pattern/
+text
+@end example
+
+Blocks of verbatim *roff text are inserted into the output either at
+the start of the given @samp{[section]} (case insensitive), or after a
+paragraph matching @samp{/pattern/}.
+
+Patterns use the Perl regular expression syntax and may be followed by
+the @samp{i}, @samp{s} or @samp{m} modifiers (@pxref{perlre, ,
+perlre(1), *manpages*, The @code{perlre(1)} manual page})
+
+Lines before the first section or pattern which begin with @samp{-}
+are processed as options. Anything else is silently ignored and may
+be used for comments, RCS keywords and the like.
+
+The section output order (for those included) is:
+
+@example
+NAME
+SYNOPSIS
+DESCRIPTION
+OPTIONS
+ENVIRONMENT
+FILES
+EXAMPLES
+@emph{other}
+AUTHOR
+REPORTING BUGS
+COPYRIGHT
+SEE ALSO
+@end example
+
+Any @samp{[name]} or @samp{[synopsis]} sections appearing in the
+include file will replace what would have automatically been produced
+(although you can still override the former with @samp{--name} if
+required).
+
+Other sections are prepended to the automatically produced output for
+the standard sections given above, or included at @emph{other} (above)
+in the order they were encountered in the include file.
+
+@node Makefile usage
+@chapter Using @command{help2man} With @command{make}
+
+A suggested use of @command{help2man} in Makefiles is to have the
+manual page depend not on the binary, but on the source file(s) in
+which the @samp{--help} and @samp{--version} output are defined.
+
+This usage allows a manual page to be generated by the maintainer and
+included in the distribution without requiring the end-user to have
+@command{help2man} installed.
+
+An example rule for the program @code{prog} could be:
+
+@example
+@group
+prog.1: $(srcdir)/main.c
+ -$(HELP2MAN) --output=$@@ --name='an example program' ./prog
+@end group
+@end example
+
+The value of @code{HELP2MAN} may be set in @code{configure.in} using
+either of:
+
+@example
+AM_MISSING_PROG(HELP2MAN, help2man, $missing_dir)
+@end example
+
+for @command{automake}, or something like:
+
+@example
+AC_PATH_PROG(HELP2MAN, help2man, false // No help2man //)
+@end example
+
+for @command{autoconf} alone.
+
+@node Localised man pages
+@chapter Producing Native Language Manual Pages
+
+Manual pages may be produced for any locale supported by both the
+program and @command{help2man} with the @samp{--locale} (@samp{-L})
+option.
+
+@example
+help2man -L fr_FR@@euro -o cp.fr.1 cp
+@end example
+
+See @url{http://translationproject.org/domain/help2man.html} for the
+languages currently supported by @command{help2man}, and
+@pxref{Reports} for how to submit other translations.
+
+@section Changing the Location of Message Catalogs
+
+When creating localised manual pages from a program's build directory it
+is probable that the translations installed in the standard location
+will not be (if installed at all) correct for the version of the
+program being built.
+
+A preloadable library is provided with @command{help2man} which will
+intercept @code{bindtextdomain} calls configuring the location of message
+catalogs for the domain given by @env{$TEXTDOMAIN} and override the
+location to the path given by @env{$LOCALEDIR}.
+
+So for example:
+
+@example
+mkdir -p tmp/fr/LC_MESSAGES
+cp po/fr.gmo tmp/fr/LC_MESSAGES/@var{prog}.mo
+LD_PRELOAD="/usr/lib/help2man/bindtextdomain.so" \
+ LOCALEDIR=tmp \
+ TEXTDOMAIN=@var{prog} \
+ help2man -L fr_FR@@euro -i @var{prog}.fr.h2m -o @var{prog}.fr.1 @var{prog}
+rm -rf tmp
+@end example
+
+will cause @var{prog} to load the message catalog from @samp{tmp}
+rather than @samp{/usr/share/locale}.
+
+Notes:
+@itemize @bullet
+@item
+The generalisation of @samp{fr_FR@@euro} to @samp{fr} in the example
+above is done by @code{gettext}, if a more specific match were available
+it would also have been re-mapped.
+
+@item
+This preload has only been tested against @command{eglibc} 2.11.2 and
+@command{gettext} 0.18.1.1 on a GNU/Linux system; let me know if it
+does (or doesn't) work for you (@pxref{Reports}).
+@end itemize
+
+@node Example
+@chapter Example @command{help2man} Output
+
+Given a hypothetical program @command{foo} which produces the following output:
+
+@c Default values strong/em to be used in Examples, these are
+@c overridden for info, which doesn't have real bold/italic.
+@macro exstrong{text}
+@strong{\text\}
+@end macro
+@macro exemph{text}
+@emph{\text\}
+@end macro
+
+@c No-op version for info:
+@ifinfo
+@unmacro exstrong
+@macro exstrong{text}
+\text\
+@end macro
+@unmacro exemph
+@macro exemph{text}
+\text\
+@end macro
+@end ifinfo
+
+@example
+@exstrong{$ foo --version}
+GNU foo 1.1
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Written by A. Programmer.
+@exstrong{$ foo --help}
+GNU `foo' does nothing interesting except serve as an example for
+`help2man'.
+
+Usage: foo [OPTION]...
+
+Options:
+ -a, --option an option
+ -b, --another-option[=VALUE]
+ another option
+
+ --help display this help and exit
+ --version output version information and exit
+
+Examples:
+ foo do nothing
+ foo --option the same thing, giving `--option'
+
+Report bugs to <bug-gnu-utils@@gnu.org>.
+@end example
+
+@command{help2man} will produce @command{nroff} input for a manual
+page which will be formatted something like this:
+
+@example
+FOO(1) User Commands FOO(1)
+
+
+@exstrong{NAME}
+ foo - manual page for foo 1.1
+
+@exstrong{SYNOPSIS}
+ foo [OPTION]...
+
+@exstrong{DESCRIPTION}
+ GNU `foo' does nothing interesting except serve as an example for
+ `help2man'.
+
+@exstrong{OPTIONS}
+ @exstrong{-a}, @exstrong{--option}
+ an option
+
+ @exstrong{-b}, @exstrong{--another-option}[=@exemph{VALUE}]
+ another option
+
+ @exstrong{--help} display this help and exit
+
+ @exstrong{--version}
+ output version information and exit
+
+@exstrong{EXAMPLES}
+ foo do nothing
+
+ foo @exstrong{--option}
+ the same thing, giving `--option'
+
+@exstrong{AUTHOR}
+ Written by A. Programmer.
+
+@exstrong{REPORTING BUGS}
+ Report bugs to <bug-gnu-utils@@gnu.org>.
+
+@exstrong{COPYRIGHT}
+ Copyright @copyright{} 2011 Free Software Foundation, Inc.
+ This is free software; see the source for copying conditions.
+ There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
+ PARTICULAR PURPOSE.
+
+@exstrong{SEE ALSO}
+ The full documentation for @exstrong{foo} is maintained as a Texinfo manual.
+ If the @exstrong{info} and @exstrong{foo} programs are properly installed at your site,
+ the command
+
+ @exstrong{info foo}
+
+ should give you access to the complete manual.
+
+
+foo 1.1 May 2011 FOO(1)
+@end example
+
+@node Reports
+@chapter Reporting Bugs or Suggestions
+
+If you find problems or have suggestions about this program or
+manual, please report them to @email{bug-help2man@@gnu.org}.
+
+Note to translators: Translations are handled though the
+@uref{http://translationproject.org/, Translation Project} see
+@url{http://translationproject.org/html/translators.html} for details.
+
+@node Availability
+@chapter Obtaining @command{help2man}
+
+The latest version of this distribution is available online from GNU
+mirrors:
+
+@example
+@url{http://ftpmirror.gnu.org/help2man/}
+@end example
+
+If automatic redirection fails, the list of mirrors is at:
+
+@example
+@url{http://www.gnu.org/order/ftp.html}
+@end example
+
+Or if need be you can use the main GNU ftp server:
+@example
+@url{http://ftp.gnu.org/gnu/help2man/}
+@end example
+
+@contents
+@bye