771 lines
17 KiB
HTML
771 lines
17 KiB
HTML
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<HTML><HEAD><TITLE>Man page of PROVE</TITLE>
|
|
</HEAD><BODY>
|
|
<H1>PROVE</H1>
|
|
Section: Perl Programmers Reference Guide (1)<BR>Updated: 2020-10-19<BR><A HREF="#index">Index</A>
|
|
<A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<A NAME="lbAB"> </A>
|
|
<H2>NAME</H2>
|
|
|
|
prove - Run tests through a TAP harness.
|
|
<A NAME="lbAC"> </A>
|
|
<H2>USAGE</H2>
|
|
|
|
|
|
|
|
|
|
|
|
<PRE>
|
|
prove [options] [files or directories]
|
|
|
|
</PRE>
|
|
|
|
|
|
<A NAME="lbAD"> </A>
|
|
<H2>OPTIONS</H2>
|
|
|
|
|
|
|
|
Boolean options:
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
-v, --verbose Print all test lines.
|
|
-l, --lib Add 'lib' to the path for your tests (-Ilib).
|
|
-b, --blib Add 'blib/lib' and 'blib/arch' to the path for
|
|
your tests
|
|
-s, --shuffle Run the tests in random order.
|
|
-c, --color Colored test output (default).
|
|
--nocolor Do not color test output.
|
|
--count Show the X/Y test count when not verbose
|
|
(default)
|
|
--nocount Disable the X/Y test count.
|
|
-D --dry Dry run. Show test that would have run.
|
|
-f, --failures Show failed tests.
|
|
-o, --comments Show comments.
|
|
--ignore-exit Ignore exit status from test scripts.
|
|
-m, --merge Merge test scripts' STDERR with their STDOUT.
|
|
-r, --recurse Recursively descend into directories.
|
|
--reverse Run the tests in reverse order.
|
|
-q, --quiet Suppress some test output while running tests.
|
|
-Q, --QUIET Only print summary results.
|
|
-p, --parse Show full list of TAP parse errors, if any.
|
|
--directives Only show results with TODO or SKIP directives.
|
|
--timer Print elapsed time after each test.
|
|
--trap Trap Ctrl-C and print summary on interrupt.
|
|
--normalize Normalize TAP output in verbose output
|
|
-T Enable tainting checks.
|
|
-t Enable tainting warnings.
|
|
-W Enable fatal warnings.
|
|
-w Enable warnings.
|
|
-h, --help Display this help
|
|
-?, Display this help
|
|
-V, --version Display the version
|
|
-H, --man Longer manpage for prove
|
|
--norc Don't process default .proverc
|
|
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
Options that take arguments:
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
-I Library paths to include.
|
|
-P Load plugin (searches App::Prove::Plugin::*.)
|
|
-M Load a module.
|
|
-e, --exec Interpreter to run the tests ('' for compiled
|
|
tests.)
|
|
--ext Set the extension for tests (default '.t')
|
|
--harness Define test harness to use. See TAP::Harness.
|
|
--formatter Result formatter to use. See FORMATTERS.
|
|
--source Load and/or configure a SourceHandler. See
|
|
SOURCE HANDLERS.
|
|
-a, --archive out.tgz Store the resulting TAP in an archive file.
|
|
-j, --jobs N Run N test jobs in parallel (try 9.)
|
|
--state=opts Control prove's persistent state.
|
|
--statefile=file Use `file` instead of `.prove` for state
|
|
--rc=rcfile Process options from rcfile
|
|
--rules Rules for parallel vs sequential processing.
|
|
|
|
</PRE>
|
|
|
|
|
|
<A NAME="lbAE"> </A>
|
|
<H2>NOTES</H2>
|
|
|
|
|
|
|
|
<A NAME="lbAF"> </A>
|
|
<H3>.proverc</H3>
|
|
|
|
|
|
|
|
If <I>~/.proverc</I> or <I>./.proverc</I> exist they will be read and any
|
|
options they contain processed before the command line options. Options
|
|
in <I>.proverc</I> are specified in the same way as command line options:
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
# .proverc
|
|
--state=hot,fast,save
|
|
-j9
|
|
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
Additional option files may be specified with the <TT>"--rc"</TT> option.
|
|
Default option file processing is disabled by the <TT>"--norc"</TT> option.
|
|
<P>
|
|
|
|
Under Windows and <FONT SIZE="-1">VMS</FONT> the option file is named <I>_proverc</I> rather than
|
|
<I>.proverc</I> and is sought only in the current directory.
|
|
<A NAME="lbAG"> </A>
|
|
<H3>Reading from STDIN</H3>
|
|
|
|
|
|
|
|
|
|
|
|
If you have a list of tests (or URLs, or anything else you want to test) in a
|
|
file, you can add them to your tests by using a '-':
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
prove - < my_list_of_things_to_test.txt
|
|
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
See the <TT>"README"</TT> in the <TT>"examples"</TT> directory of this distribution.
|
|
<A NAME="lbAH"> </A>
|
|
<H3>Default Test Directory</H3>
|
|
|
|
|
|
|
|
If no files or directories are supplied, <TT>"prove"</TT> looks for all files
|
|
matching the pattern <TT>"t/*.t"</TT>.
|
|
<A NAME="lbAI"> </A>
|
|
<H3>Colored Test Output</H3>
|
|
|
|
|
|
|
|
Colored test output using TAP::Formatter::Color is the default, but
|
|
if output is not to a terminal, color is disabled. You can override this by
|
|
adding the <TT>"--color"</TT> switch.
|
|
<P>
|
|
|
|
Color support requires Term::ANSIColor and, on windows platforms, also
|
|
Win32::Console::ANSI. If the necessary module(s) are not installed
|
|
colored output will not be available.
|
|
<A NAME="lbAJ"> </A>
|
|
<H3>Exit Code</H3>
|
|
|
|
|
|
|
|
If the tests fail <TT>"prove"</TT> will exit with non-zero status.
|
|
<A NAME="lbAK"> </A>
|
|
<H3>Arguments to Tests</H3>
|
|
|
|
|
|
|
|
It is possible to supply arguments to tests. To do so separate them from
|
|
prove's own arguments with the arisdottle, '::'. For example
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
prove -v t/mytest.t :: --url <A HREF="http://example.com">http://example.com</A>
|
|
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
would run <I>t/mytest.t</I> with the options '--url <A HREF="http://example.com'.">http://example.com'.</A>
|
|
When running multiple tests they will each receive the same arguments.
|
|
<A NAME="lbAL"> </A>
|
|
<H3>--exec</H3>
|
|
|
|
|
|
|
|
|
|
|
|
Normally you can just pass a list of Perl tests and the harness will know how
|
|
to execute them. However, if your tests are not written in Perl or if you
|
|
want all tests invoked exactly the same way, use the <TT>"-e"</TT>, or <TT>"--exec"</TT>
|
|
switch:
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
prove --exec '/usr/bin/ruby -w' t/
|
|
prove --exec '/usr/bin/perl -Tw -mstrict -Ilib' t/
|
|
prove --exec '/path/to/my/customer/exec'
|
|
|
|
</PRE>
|
|
|
|
|
|
<A NAME="lbAM"> </A>
|
|
<H3>--merge</H3>
|
|
|
|
|
|
|
|
|
|
|
|
If you need to make sure your diagnostics are displayed in the correct
|
|
order relative to test results you can use the <TT>"--merge"</TT> option to
|
|
merge the test scripts' <FONT SIZE="-1">STDERR</FONT> into their <FONT SIZE="-1">STDOUT.</FONT>
|
|
<P>
|
|
|
|
This guarantees that <FONT SIZE="-1">STDOUT</FONT> (where the test results appear) and <FONT SIZE="-1">STDERR</FONT>
|
|
(where the diagnostics appear) will stay in sync. The harness will
|
|
display any diagnostics your tests emit on <FONT SIZE="-1">STDERR.</FONT>
|
|
<P>
|
|
|
|
Caveat: this is a bit of a kludge. In particular note that if anything
|
|
that appears on <FONT SIZE="-1">STDERR</FONT> looks like a test result the test harness will
|
|
get confused. Use this option only if you understand the consequences
|
|
and can live with the risk.
|
|
<A NAME="lbAN"> </A>
|
|
<H3>--trap</H3>
|
|
|
|
|
|
|
|
|
|
|
|
The <TT>"--trap"</TT> option will attempt to trap <FONT SIZE="-1">SIGINT</FONT> (Ctrl-C) during a test
|
|
run and display the test summary even if the run is interrupted
|
|
<A NAME="lbAO"> </A>
|
|
<H3>--state</H3>
|
|
|
|
|
|
|
|
|
|
|
|
You can ask <TT>"prove"</TT> to remember the state of previous test runs and
|
|
select and/or order the tests to be run based on that saved state.
|
|
<P>
|
|
|
|
The <TT>"--state"</TT> switch requires an argument which must be a comma
|
|
separated list of one or more of the following options.
|
|
<DL COMPACT>
|
|
<DT id="1">"last"<DD>
|
|
|
|
|
|
|
|
|
|
Run the same tests as the last time the state was saved. This makes it
|
|
possible, for example, to recreate the ordering of a shuffled test.
|
|
|
|
|
|
<P>
|
|
|
|
|
|
|
|
|
|
<PRE>
|
|
# Run all tests in random order
|
|
$ prove -b --state=save --shuffle
|
|
|
|
# Run them again in the same order
|
|
$ prove -b --state=last
|
|
|
|
</PRE>
|
|
|
|
|
|
<DT id="2">"failed"<DD>
|
|
|
|
|
|
|
|
|
|
Run only the tests that failed on the last run.
|
|
|
|
|
|
<P>
|
|
|
|
|
|
|
|
|
|
<PRE>
|
|
# Run all tests
|
|
$ prove -b --state=save
|
|
|
|
# Run failures
|
|
$ prove -b --state=failed
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
<P>
|
|
|
|
|
|
If you also specify the <TT>"save"</TT> option newly passing tests will be
|
|
excluded from subsequent runs.
|
|
|
|
|
|
<P>
|
|
|
|
|
|
|
|
|
|
<PRE>
|
|
# Repeat until no more failures
|
|
$ prove -b --state=failed,save
|
|
|
|
</PRE>
|
|
|
|
|
|
<DT id="3">"passed"<DD>
|
|
|
|
|
|
|
|
|
|
Run only the passed tests from last time. Useful to make sure that no
|
|
new problems have been introduced.
|
|
<DT id="4">"all"<DD>
|
|
|
|
|
|
|
|
|
|
Run all tests in normal order. Multple options may be specified, so to
|
|
run all tests with the failures from last time first:
|
|
|
|
|
|
<P>
|
|
|
|
|
|
|
|
|
|
<PRE>
|
|
$ prove -b --state=failed,all,save
|
|
|
|
</PRE>
|
|
|
|
|
|
<DT id="5">"hot"<DD>
|
|
|
|
|
|
|
|
|
|
Run the tests that most recently failed first. The last failure time of
|
|
each test is stored. The <TT>"hot"</TT> option causes tests to be run in most-recent-
|
|
failure order.
|
|
|
|
|
|
<P>
|
|
|
|
|
|
|
|
|
|
<PRE>
|
|
$ prove -b --state=hot,save
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
<P>
|
|
|
|
|
|
Tests that have never failed will not be selected. To run all tests with
|
|
the most recently failed first use
|
|
|
|
|
|
<P>
|
|
|
|
|
|
|
|
|
|
<PRE>
|
|
$ prove -b --state=hot,all,save
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
<P>
|
|
|
|
|
|
This combination of options may also be specified thus
|
|
|
|
|
|
<P>
|
|
|
|
|
|
|
|
|
|
<PRE>
|
|
$ prove -b --state=adrian
|
|
|
|
</PRE>
|
|
|
|
|
|
<DT id="6">"todo"<DD>
|
|
|
|
|
|
|
|
|
|
Run any tests with todos.
|
|
<DT id="7">"slow"<DD>
|
|
|
|
|
|
|
|
|
|
Run the tests in slowest to fastest order. This is useful in conjunction
|
|
with the <TT>"-j"</TT> parallel testing switch to ensure that your slowest tests
|
|
start running first.
|
|
|
|
|
|
<P>
|
|
|
|
|
|
|
|
|
|
<PRE>
|
|
$ prove -b --state=slow -j9
|
|
|
|
</PRE>
|
|
|
|
|
|
<DT id="8">"fast"<DD>
|
|
|
|
|
|
|
|
|
|
Run test tests in fastest to slowest order.
|
|
<DT id="9">"new"<DD>
|
|
|
|
|
|
|
|
|
|
Run the tests in newest to oldest order based on the modification times
|
|
of the test scripts.
|
|
<DT id="10">"old"<DD>
|
|
|
|
|
|
|
|
|
|
Run the tests in oldest to newest order.
|
|
<DT id="11">"fresh"<DD>
|
|
|
|
|
|
|
|
|
|
Run those test scripts that have been modified since the last test run.
|
|
<DT id="12">"save"<DD>
|
|
|
|
|
|
|
|
|
|
Save the state on exit. The state is stored in a file called <I>.prove</I>
|
|
(<I>_prove</I> on Windows and <FONT SIZE="-1">VMS</FONT>) in the current directory.
|
|
</DL>
|
|
<P>
|
|
|
|
The <TT>"--state"</TT> switch may be used more than once.
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
$ prove -b --state=hot --state=all,save
|
|
|
|
</PRE>
|
|
|
|
|
|
<A NAME="lbAP"> </A>
|
|
<H3>--rules</H3>
|
|
|
|
|
|
|
|
The <TT>"--rules"</TT> option is used to control which tests are run sequentially and
|
|
which are run in parallel, if the <TT>"--jobs"</TT> option is specified. The option may
|
|
be specified multiple times, and the order matters.
|
|
<P>
|
|
|
|
The most practical use is likely to specify that some tests are not
|
|
``parallel-ready''. Since mentioning a file with --rules doesn't cause it to
|
|
be selected to run as a test, you can ``set and forget'' some rules preferences in
|
|
your .proverc file. Then you'll be able to take maximum advantage of the
|
|
performance benefits of parallel testing, while some exceptions are still run
|
|
in parallel.
|
|
<P>
|
|
|
|
<I>--rules examples</I>
|
|
|
|
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
# All tests are allowed to run in parallel, except those starting with "p"
|
|
--rules='seq=t/p*.t' --rules='par=**'
|
|
|
|
# All tests must run in sequence except those starting with "p", which should be run parallel
|
|
--rules='par=t/p*.t'
|
|
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
<I>--rules resolution</I>
|
|
|
|
|
|
<DL COMPACT>
|
|
<DT id="13">•<DD>
|
|
By default, all tests are eligible to be run in parallel. Specifying any of your own rules removes this one.
|
|
<DT id="14">•<DD>
|
|
``First match wins''. The first rule that matches a test will be the one that applies.
|
|
<DT id="15">•<DD>
|
|
Any test which does not match a rule will be run in sequence at the end of the run.
|
|
<DT id="16">•<DD>
|
|
The existence of a rule does not imply selecting a test. You must still specify the tests to run.
|
|
<DT id="17">•<DD>
|
|
Specifying a rule to allow tests to run in parallel does not make them run in parallel. You still need specify the number of parallel <TT>"jobs"</TT> in your Harness object.
|
|
</DL>
|
|
<P>
|
|
|
|
<I>--rules Glob-style pattern matching</I>
|
|
|
|
|
|
<P>
|
|
|
|
We implement our own glob-style pattern matching for --rules. Here are the
|
|
supported patterns:
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
** is any number of characters, including /, within a pathname
|
|
* is zero or more characters within a filename/directory name
|
|
? is exactly one character within a filename/directory name
|
|
{foo,bar,baz} is any of foo, bar or baz.
|
|
\ is an escape character
|
|
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
<I>More advanced specifications for parallel vs sequence run rules</I>
|
|
|
|
|
|
<P>
|
|
|
|
If you need more advanced management of what runs in parallel vs in sequence, see
|
|
the associated 'rules' documentation in TAP::Harness and TAP::Parser::Scheduler.
|
|
If what's possible directly through <TT>"prove"</TT> is not sufficient, you can write your own
|
|
harness to access these features directly.
|
|
<A NAME="lbAQ"> </A>
|
|
<H3>@INC</H3>
|
|
|
|
|
|
|
|
|
|
|
|
prove introduces a separation between ``options passed to the perl which
|
|
runs prove'' and ``options passed to the perl which runs tests''; this
|
|
distinction is by design. Thus the perl which is running a test starts
|
|
with the default <TT>@INC</TT>. Additional library directories can be added
|
|
via the <TT>"PERL5LIB"</TT> environment variable, via -Ifoo in <TT>"PERL5OPT"</TT> or
|
|
via the <TT>"-Ilib"</TT> option to <I>prove</I>.
|
|
<A NAME="lbAR"> </A>
|
|
<H3>Taint Mode</H3>
|
|
|
|
|
|
|
|
Normally when a Perl program is run in taint mode the contents of the
|
|
<TT>"PERL5LIB"</TT> environment variable do not appear in <TT>@INC</TT>.
|
|
<P>
|
|
|
|
Because <TT>"PERL5LIB"</TT> is often used during testing to add build
|
|
directories to <TT>@INC</TT> prove passes the names of any directories found
|
|
in <TT>"PERL5LIB"</TT> as -I switches. The net effect of this is that
|
|
<TT>"PERL5LIB"</TT> is honoured even when prove is run in taint mode.
|
|
<A NAME="lbAS"> </A>
|
|
<H2>FORMATTERS</H2>
|
|
|
|
|
|
|
|
You can load a custom TAP::Parser::Formatter:
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
prove --formatter MyFormatter
|
|
|
|
</PRE>
|
|
|
|
|
|
<A NAME="lbAT"> </A>
|
|
<H2>SOURCE HANDLERS</H2>
|
|
|
|
|
|
|
|
You can load custom TAP::Parser::SourceHandlers, to change the way the
|
|
parser interprets particular <I>sources</I> of <FONT SIZE="-1">TAP.</FONT>
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
prove --source MyHandler --source YetAnother t
|
|
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
If you want to provide config to the source you can use:
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
prove --source MyCustom \
|
|
--source Perl --perl-option 'foo=bar baz' --perl-option avg=0.278 \
|
|
--source File --file-option extensions=.txt --file-option extensions=.tmp t
|
|
--source pgTAP --pgtap-option pset=format=html --pgtap-option pset=border=2
|
|
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
Each <TT>"--$source-option"</TT> option must specify a key/value pair separated by an
|
|
<TT>"="</TT>. If an option can take multiple values, just specify it multiple times,
|
|
as with the <TT>"extensions="</TT> examples above. If the option should be a hash
|
|
reference, specify the value as a second pair separated by a <TT>"="</TT>, as in the
|
|
<TT>"pset="</TT> examples above (escape <TT>"="</TT> with a backslash).
|
|
<P>
|
|
|
|
All <TT>"--sources"</TT> are combined into a hash, and passed to ``new'' in TAP::Harness's
|
|
<TT>"sources"</TT> parameter.
|
|
<P>
|
|
|
|
See TAP::Parser::IteratorFactory for more details on how configuration is
|
|
passed to <I>SourceHandlers</I>.
|
|
<A NAME="lbAU"> </A>
|
|
<H2>PLUGINS</H2>
|
|
|
|
|
|
|
|
Plugins can be loaded using the <TT>"-P</TT>plugin<TT>"</TT> syntax, eg:
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
prove -PMyPlugin
|
|
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
This will search for a module named <TT>"App::Prove::Plugin::MyPlugin"</TT>, or failing
|
|
that, <TT>"MyPlugin"</TT>. If the plugin can't be found, <TT>"prove"</TT> will complain & exit.
|
|
<P>
|
|
|
|
You can pass arguments to your plugin by appending <TT>"=arg1,arg2,etc"</TT> to the
|
|
plugin name:
|
|
<P>
|
|
|
|
|
|
|
|
<PRE>
|
|
prove -PMyPlugin=fou,du,fafa
|
|
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
|
|
Please check individual plugin documentation for more details.
|
|
<A NAME="lbAV"> </A>
|
|
<H3>Available Plugins</H3>
|
|
|
|
|
|
|
|
For an up-to-date list of plugins available, please check <FONT SIZE="-1">CPAN:</FONT>
|
|
<P>
|
|
|
|
<<A HREF="http://search.cpan.org/search?query=App%3A%3AProve+Plugin">http://search.cpan.org/search?query=App%3A%3AProve+Plugin</A>>
|
|
<A NAME="lbAW"> </A>
|
|
<H3>Writing Plugins</H3>
|
|
|
|
|
|
|
|
Please see ``<FONT SIZE="-1">PLUGINS''</FONT> in App::Prove.
|
|
<P>
|
|
|
|
<HR>
|
|
<A NAME="index"> </A><H2>Index</H2>
|
|
<DL>
|
|
<DT id="18"><A HREF="#lbAB">NAME</A><DD>
|
|
<DT id="19"><A HREF="#lbAC">USAGE</A><DD>
|
|
<DT id="20"><A HREF="#lbAD">OPTIONS</A><DD>
|
|
<DT id="21"><A HREF="#lbAE">NOTES</A><DD>
|
|
<DL>
|
|
<DT id="22"><A HREF="#lbAF">.proverc</A><DD>
|
|
<DT id="23"><A HREF="#lbAG">Reading from STDIN</A><DD>
|
|
<DT id="24"><A HREF="#lbAH">Default Test Directory</A><DD>
|
|
<DT id="25"><A HREF="#lbAI">Colored Test Output</A><DD>
|
|
<DT id="26"><A HREF="#lbAJ">Exit Code</A><DD>
|
|
<DT id="27"><A HREF="#lbAK">Arguments to Tests</A><DD>
|
|
<DT id="28"><A HREF="#lbAL">--exec</A><DD>
|
|
<DT id="29"><A HREF="#lbAM">--merge</A><DD>
|
|
<DT id="30"><A HREF="#lbAN">--trap</A><DD>
|
|
<DT id="31"><A HREF="#lbAO">--state</A><DD>
|
|
<DT id="32"><A HREF="#lbAP">--rules</A><DD>
|
|
<DT id="33"><A HREF="#lbAQ">@INC</A><DD>
|
|
<DT id="34"><A HREF="#lbAR">Taint Mode</A><DD>
|
|
</DL>
|
|
<DT id="35"><A HREF="#lbAS">FORMATTERS</A><DD>
|
|
<DT id="36"><A HREF="#lbAT">SOURCE HANDLERS</A><DD>
|
|
<DT id="37"><A HREF="#lbAU">PLUGINS</A><DD>
|
|
<DL>
|
|
<DT id="38"><A HREF="#lbAV">Available Plugins</A><DD>
|
|
<DT id="39"><A HREF="#lbAW">Writing Plugins</A><DD>
|
|
</DL>
|
|
</DL>
|
|
<HR>
|
|
This document was created by
|
|
<A HREF="/cgi-bin/man/man2html">man2html</A>,
|
|
using the manual pages.<BR>
|
|
Time: 00:05:25 GMT, March 31, 2021
|
|
</BODY>
|
|
</HTML>
|