.TH runtest 1 "29 Jul 2003"
.SH NAME
runtest \- the DejaGnu test driver program
.SH SYNOPSIS
.B runtest
[ options ]
.SH DESCRIPTION
.I DejaGnu
is a framework for running test suites on GNU tools. It is written in
expect, which uses Tcl (Tool command language).
.B runtest
is the test driver program; use it to control what tests to run,
and variations on how to run them.

You can find a comprehensive description of DejaGnu and \fBruntest\fR in
.I
The DejaGnu Testing Framework
or its Info version,
.BR dejagnu.info .
.SH OPTIONS
.TP
.B --all
Print all test output to screen. By default, only unexpected results are
displayed.
.TP
.BI --baud \ rate
Set the baud rate for a serial line connection. Some serial interface
programs (like \fBtip\fR) don't use this value but instead use a separate
initialization file.
.TP
.BI --connect \ type
The type of connection to use.  The choices are
.BR rlogin ,
.BR telnet ,
.BR rsh ,
.BR kermit ,
.BR tip
and
.BR mondfe .
.TP
.B --debug
Turn on
.B expect
internal debugging output. All output is logged to
a file called \fBdbg.out\fR.
The output of the \fB--strace\fR also goes into this file.
.TP
.B --help
Prints out a help screen and then exits.
.TP
.BI --host \ type
The configuration string for the host.
.TP
.BI --ignore \ test1.exp\ test2.exp\ ...
Do not run the specified tests.
.TP
.BI --mail \ \'name1\ name2\ ...\'
Electronic mail addresses to receive test results.
.TP
.BI --name \ hostname
The network hostname of the target board.
.TP
.BI --objdir \ path
\fIpath\fR is a directory containing compiled test code.
.TP
.BI --outdir \ directory
The name of a directory for test log output.
.TP
.B --reboot
Reboot the target board when \fBruntest\fR initializes
(if supported).
.TP
.BI --srcdir \ path
\fIpath\fR is a directory containing test directories.
.TP
.BI --strace \ N
Turns on
.B expect
internal tracing to \fIN\fR levels deep.
.TP
.BI --target \ type
The configuration string for the target.
.TP
.BI --tool \ toolname
Specify the tool to be tested.  \fItoolname\fR controls the test suite
applied, and the associated initialization module.
.TP
.B --verbose,\ -v
Turns on more debugging output from test cases and DejaGnu utility code.
Use more than once to increase output further.
.TP
.B --version,\ -V
Prints out the versions of DejaGnu, expect and Tcl.
.TP
.B -D[number]
Activate the Tcl debugger.\fBnumber\fR can be either 1 or 0. If it is
1, then the expect shell will break when it starts to run. All ^C's
drop DejaGnu back to the debugger prompt. A 0 starts DejaGnu like
normal, but a ^C drops to the debugger prompt.
.TP 0
Any file name on the command line is assumed to be a subset
of the test names to run.  Usually these are the names of the
expect test driver, ie... special.exp.

Makefile style variables are used to specify tool names and their
flags; these and other configuration dependent values are saved in the
file \fBsite.exp\fR, created during configuration.
.SH EXIT CODES
.B runtest
sets the exit code to 1 if any of the tests failed, or
sets it to 0 if all the tests passed.
.SH SEE ALSO
.I The DejaGnu Testing Framework
.RB ( dejagnu.info ).
This is the DejaGnu manual; its source is the SGML files
.B
doc/*.sgml.
in the DejaGnu distribution.
.SH AUTHOR
Rob Savoye (rob@welcomehome.org)
