aboutsummaryrefslogtreecommitdiff
path: root/contrib/bluegnu2.0.3/doc/dejagnu.texi
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bluegnu2.0.3/doc/dejagnu.texi')
-rw-r--r--contrib/bluegnu2.0.3/doc/dejagnu.texi3503
1 files changed, 0 insertions, 3503 deletions
diff --git a/contrib/bluegnu2.0.3/doc/dejagnu.texi b/contrib/bluegnu2.0.3/doc/dejagnu.texi
deleted file mode 100644
index 0d787fa..0000000
--- a/contrib/bluegnu2.0.3/doc/dejagnu.texi
+++ /dev/null
@@ -1,3503 +0,0 @@
-o\input texinfo @c -*- Texinfo -*-
-@finalout
-@setfilename dejagnu.info
-@c
-@c This file documents the GNU Testing Framework ``DejaGnu''
-@c
-@c Copyright (C) 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
-@c
-@c This text may be freely distributed under the terms of the GNU
-@c General Public License.
-@c
-
-@c FIXME---MAIN TODO LIST!
-@c
-@c * Revisit organization.
-@c
-@c * discuss Tcl/expect basics---enough to get started (see seminar notes).
-@c Maybe this would permit abbreviating appendices.
-
-@ifinfo
-@format
-START-INFO-DIR-ENTRY
-* DejaGnu: (dejagnu). The GNU testing framework.
-END-INFO-DIR-ENTRY
-@end format
-@end ifinfo
-
-@syncodeindex ky cp
-@syncodeindex fn cp
-
-@setchapternewpage odd
-@settitle DejaGnu Testing Framework
-@titlepage
-@title The DejaGnu Testing Framework
-@subtitle for DejaGnu Version 1.3
-@sp 1
-@subtitle Jan 1996
-@author Rob Savoye
-@page
-
-@tex
-{\parskip=0pt \hfill Cygnus Support}
-@end tex
-
-@vskip 0pt plus 1filll
-Copyright @copyright{} 92, 93, 94, 95, 1996 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.
-
-@noindent
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also 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.
-@end titlepage
-
-@ifinfo
-Copyright @copyright{} 92, 93, 94, 95, 1996 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 a 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 also 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.
-
-@node Top
-@top DejaGnu
-
-DejaGnu is a framework for running test suites on software tools.
-
-This file describes version 1.3 of DejaGnu.
-
-@menu
-* Overview:: What is DejaGnu?
-* What is New:: What is new in this release.
-* Invoking runtest:: Using `runtest', the main test driver
-* Customizing:: Setting `runtest' defaults
-* Internals:: The DejaGnu implementation
-* Tests:: How to write a test case
-* Extending:: New tools, new targets, and new hosts
-* Installation:: Configuring and Installing DejaGnu
-* Index:: Index
-@end menu
-@end ifinfo
-
-@iftex
-@raggedbottom
-@end iftex
-
-@node Overview
-@chapter What is DejaGnu?
-@cindex overview
-
-DejaGnu is a framework for testing other programs. Its purpose is to
-provide a single front end for all tests. Beyond this, DejaGnu offers
-several advantages for testing:
-
-@enumerate
-@item
-The flexibility and consistency of the DejaGnu framework make it easy
-to write tests for any program.
-
-@item
-DejaGnu provides a layer of abstraction which allows you to write tests
-that are portable to any host or target where a program must be tested.
-For instance, a test for GDB can run (from any Unix based host) on any
-target architecture that DejaGnu supports. Currently DejaGnu runs tests
-on several single board computers, whose operating software ranges from
-just a boot monitor to a full-fledged, Unix-like realtime OS.
-
-@item
-All tests have the same output format. This makes it easy to integrate
-testing into other software development processes. DejaGnu's output is
-designed to be parsed by other filtering script, and it is also human
-readable.
-@end enumerate
-
-DejaGnu is written in @code{expect}, which in turn uses @dfn{Tcl}---Tool
-command language.
-
-@cindex @code{expect} script names
-@kindex .exp
-@cindex suffix, @code{expect} scripts
-Running tests requires two things: the testing framework, and the test
-suites themselves. Tests are usually written in @code{expect} using
-Tcl, but you can also use a Tcl script to run a test suite that is not
-based on @code{expect}. (@code{expect} script filenames conventionally
-use @samp{.exp} as a suffix; for example, the main implementation of the
-DejaGnu test driver is in the file @file{runtest.exp}.)
-
-
-@menu
-* Running Tests:: A first look at running DejaGnu tests
-* Sample Test:: What does a DejaGnu test case look like?
-* Design Goals:: Goals behind DejaGnu
-* Posix:: DejaGnu conforms to POSIX 1003.3
-* Future Directions:: Where is DejaGnu going?
-* Tcl and Expect:: Reading more about Tcl and Expect
-@end menu
-
-@node What is New
-@chapter What is new in this release ?
-@cindex What is New
-
-This release has a number of substantial changes over version 1.2. The
-most visible change is that the version of expect and Tcl included in
-the release are up-to-date with the current stable net releases. Other
-changes are:
-
-@enumerate
-@item
-@c FIXME: add a link to the config section
-The config sub-system in DejaGnu has been completely redesigned. It now
-supports testing on remote hosts as well as remote targets.
-
-@item
-More builtin support for building target binaries with the correct
-linker flags. Currently this only works with GCC, preferably with a
-target support by @code{libgloss}.
-
-@item
-Lots of little bug fixes from a year of heavy use here at Cygnus
-Support.
-
-@item
-DejaGnu now uses @code{autoconf} for configuration.
-
-@item
-New test cases for DejaGnu have been added for the new features, plus
-the "--tool" option bug in the 1.2 testsuite has been fixed.
-
-@item
-The @code{--tool} option is now optional.
-
-@item
-@code{runtest} when searching for test drivers ignores all directories
-named SCCS, RCS, and CVS.
-
-@item
-There is now a generic keyword based test harness that uses comments in
-source code to control how each test case gets built and run.
-
-@item
-There is now some support for running a testsuite with multiple passes.
-
-@end enumerate
-
-@node Running Tests
-@section Running existing tests
-@cindex existing tests, running
-@cindex running tests
-@cindex tests, running
-
-@kindex make check
-To run tests from an existing collection, first use @code{configure} as
-usual to set up the source directory containing the tests. Then try
-running
-
-@example
-make check
-@end example
-
-@cindex @code{check} makefile target
-If the @code{check} target exists, it usually saves you some
-trouble---for instance, it can set up any auxiliary programs or other
-files needed by the tests.
-
-@cindex auxiliary files, building
-Once you have run @samp{make check} to build any auxiliary files, you
-might want to call the test driver @code{runtest} directly to repeat the
-tests. You may also have to call @code{runtest} directly for test
-collections with no @code{check} target in the @file{Makefile}.
-
-@c force page break to avoid losing footnote to another page
-@page
-@cindex @code{runtest}, most common options
-@cindex options for @code{runtest}, common
-Typically, you must use two command-line options: @samp{--tool}, to
-specify which set of tests to run@footnote{@samp{--tool} selects a
-particular suite of tests, @emph{not} the name of the executable program
-to run. @xref{Config Values,,Configuration dependent values}, for
-information on the variables that you can use to specify the names of
-programs to run.}, and @samp{--srcdir}, to specify where to find test
-directories.
-
-For example, if the directory @file{gdb/testsuite} contains a collection
-of DejaGnu tests for @sc{gdb}, you can run them like this:
-
-@example
-eg$ cd gdb/testsuite
-eg$ runtest --tool gdb
-@exdent @emph{Test output follows, ending with:}
-
- === gdb Summary ===
-
-# of expected passes 508
-# of expected failures 103
-/usr/latest/bin/gdb version 4.14.4 -nx
-@end example
-
-You can use the option @samp{--srcdir} to point to some other directory
-containing a collection of tests:
-
-@smallexample
-eg$ runtest --tool gdb --srcdir /devo/gdb/testsuite
-@end smallexample
-
-@cindex native configuration
-@cindex cross configuration
-These examples assume a @dfn{native} configuration, where the same
-computer runs both @code{runtest} and the tests themselves. When you
-have a @dfn{cross} configuration, the tests run on a different computer,
-controlled by the host running @code{runtest}. In this situation, you
-need the option @samp{--name} to specify the network address for the
-other computer:
-
-@smallexample
-eg$ runtest --tool gdb --name vx9.munist.com
-@end smallexample
-
-If you always use the same option values, you can record them in a file
-called @file{site.exp}, rather than typing them each time. @xref{Config
-Values,,Setting defaults for @code{runtest} options}.
-
-By default, @code{runtest} prints only the names of the tests it runs,
-output from any tests that have unexpected results, and a summary
-showing how many tests passed and how many failed. To display output
-from all tests (whether or not they behave as expected), use the
-@samp{--all} option. For more verbose output about processes being run,
-communication, and so on, use @samp{--verbose}. To see even more output,
-use multiple @samp{--verbose} options. @xref{Invoking runtest,,Using
-@code{runtest}}, for a more detailed explanation of each @code{runtest}
-option.
-
-Test output goes into two files in your current directory: summary
-output in @file{@var{tool}.sum}, and detailed output in
-@file{@var{tool}.log}. (@var{tool} refers to the collection of tests;
-for example, after a run with @samp{--tool gdb}, look for output files
-@file{gdb.sum} and @file{gdb.log}.) @xref{Output Files,,The files
-DejaGnu writes}.
-
-@node Sample Test
-@section What does a DejaGnu test look like?
-
-@cindex example
-Each DejaGnu test is an @code{expect} script; the tests vary widely in
-complexity, depending on the nature of the tool and the feature tested.
-
-@kindex gdb.t00/echo.exp
-@kindex echo.exp
-Here is a very simple @sc{gdb} test---one of the simplest tests shipped
-with DejaGnu (extracted from @file{gdb.t00/echo.exp}):@footnote{More
-recent @sc{gdb} tests use the @samp{gdb_test} procedure.
-An equivalent test using that procedure is @samp{ gdb_test "echo Hello
-world!" "Hello world!" }}
-@c FIXME! include xref in footnote, when gdb_test documented in some manual.
-@c @xref{}.
-@c Extra spaces in @samp above avoid running end ' against " inside.
-
-@cartouche
-@smallexample
-# send a string to the GDB stdin:
-send "echo Hello world!\n"
-
-# inspect the GDB stdout for the correct reply,
-# and determine whether the test passes or fails:
-expect @{
- -re "Hello world.*$prompt $" @{ pass "Echo test" @}
- -re "$prompt $" @{ fail "Echo test" @}
- timeout @{ fail "(timeout) Echo test" @}
- @}
-@end smallexample
-@end cartouche
-
-Though brief, this example is a complete test. It illustrates some of
-the main features of DejaGnu test scripts:
-
-@itemize @bullet
-@item
-The test case does not start the tested program (@sc{gdb} in this case);
-all test scripts for interactive tools can assume the corresponding tool
-is running.
-
-@item
-Comments start with @samp{#}.
-
-@item
-The main commands you use to control a tested program are @code{send}
-(to give it commands) and @code{expect} (to analyze its responses).
-
-@item
-The @code{expect} command uses a list of pairs; a pattern (regular
-expression if @samp{-re} specified), followed by an action to run if the
-pattern matches output from the program. Only the action for the
-@emph{first} matching pattern will execute.
-
-@item
-Test cases use the commands @code{pass} and @code{fail} to record the
-test outcome.
-@end itemize
-
-@node Design Goals
-@section Design goals
-@cindex design goals
-
-DejaGnu grew out of the internal needs of Cygnus Support. Cygnus
-maintains and enhances a variety of free programs in many different
-environments, and we needed a testing tool that:
-
-@itemize @bullet
-@item
-is useful to developers while fixing bugs;
-
-@item
-automates running many tests during a software release process;
-
-@item
-is portable among a variety of host computers;
-
-@item
-supports cross-development testing;
-
-@item
-permits testing interactive programs, like @sc{gdb}; and
-
-@item
-permits testing batch oriented programs, like @sc{gcc}.
-@end itemize
-
-Some of the requirements proved challenging. For example, interactive
-programs do not lend themselves very well to automated testing. But all
-the requirements are important: for instance, it is imperative to make
-sure that @sc{gdb} works as well when cross-debugging as it does in a
-native configuration.
-
-Probably the greatest challenge was testing in a cross-development
-environment (which can be a real nightmare). Most cross-development
-environments are customized by each developer. Even when buying
-packaged boards from vendors there are many differences. The
-communication interfaces vary from a serial line to ethernet. DejaGnu
-was designed with a modular communication setup, so that each kind of
-communication can be added as required, and supported thereafter. Once
-a communication procedure is coded, any test can use it. Currently
-DejaGnu can use @code{rsh}, @code{rlogin}, @code{telnet}, @code{tip},
-@code{kermit}, and @code{mondfe} for remote communications.
-
-@cindex name ``DejaGnu''
-@cindex DejaGnu, the name
-@cindex Menapace, Julia
-Julia Menapace first coined the term ``Deja Gnu'' to describe an earlier
-testing framework at Cygnus Support. When we replaced it with the
-Expect-based framework, it was like DejaGnu all over again@dots{}
-
-@node Posix
-@section A POSIX conforming test framework
-
-@cindex POSIX conformance
-@cindex standard conformance: POSIX 1003.3
-DejaGnu conforms to the @sc{posix} standard for test frameworks.
-
-@cindex TET
-@sc{posix} standard 1003.3 defines what a testing framework needs to
-provide, in order to permit the creation of @sc{posix} conformance
-test suites. This standard is primarily oriented to running @sc{posix}
-conformance tests, but its requirements also support testing of features
-not related to @sc{posix} conformance. @sc{posix} 1003.3 does not
-specify a particular testing framework, but at this time there is only
-one other @sc{posix} conforming test framework:
-@sc{tet}.@footnote{@sc{tet} was created by Unisoft for a consortium
-comprised of X/Open, Unix International, and the Open Software
-Foundation.}
-
-The @sc{posix} documentation refers to @dfn{assertions}. An assertion
-is a description of behavior. For example, if a standard says ``The sun
-shall shine'', a corresponding assertion might be ``The sun is
-shining.'' A test based on this assertion would pass or fail depending
-on whether it is daytime or nighttime. It is important to note that the
-standard being tested is never 1003.3; the standard being tested is some
-other standard, for which the assertions were written.
-
-As there is no test suite to test @emph{testing frameworks} for
-@sc{posix} 1003.3 conformance, verifying conformance to this standard is
-done by repeatedly reading the standard and experimenting. One of the
-main things 1003.3 does specify is the set of allowed output messages,
-and their definitions. Four messages are supported for a required
-feature of @sc{posix} conforming systems, and a fifth for a conditional
-feature. DejaGnu supports the use of all five output messages; in this
-sense a test suite that uses exactly these messages can be considered
-@sc{posix} conforming. These definitions specify the output of a test
-case:
-
-@ftable @code
-@cindex success, POSIX definition
-@item PASS
-A test has succeeded. That is, it demonstrated that the assertion is true.
-
-@cindex XFAIL, avoiding for POSIX
-@item XFAIL
-@sc{posix} 1003.3 does not incorporate the notion of expected failures,
-so @code{PASS}, instead of @code{XPASS}, must also be returned for test
-cases which were expected to fail and did not. This means that
-@code{PASS} is in some sense more ambiguous than if @code{XPASS} is also
-used. For information on @code{XPASS} and @code{XFAIL}, see
-@ref{Invoking runtest,,Using @code{runtest}}.
-
-@item FAIL
-@cindex failure, POSIX definition
-A test @emph{has} produced the bug it was intended to capture. That is,
-it has demonstrated that the assertion is false. The @code{FAIL}
-message is based on the test case only. Other messages are used to
-indicate a failure of the framework.
-
-As with @code{PASS}, @sc{posix} tests must return @code{FAIL} rather
-than @code{XFAIL} even if a failure was expected.
-
-@item UNRESOLVED
-@cindex ambiguity, required for POSIX
-A test produced indeterminate results. Usually, this means the test
-executed in an unexpected fashion; this outcome requires that a human
-being go over results, to determine if the test should have passed or
-failed. This message is also used for any test that requires human
-intervention because it is beyond the abilities of the testing
-framework. Any unresolved test should resolved to @code{PASS} or
-@code{FAIL} before a test run can be considered finished.
-
-Note that for @sc{posix}, each assertion must produce a test result
-code. If the test isn't actually run, it must produce @code{UNRESOLVED}
-rather than just leaving that test out of the output. This means that
-you have to be careful when writing tests, to not carelessly use tcl
-statements like @code{return}---if you alter the flow of control of the
-tcl code you must insure that every test still produces some result code.
-
-Here are some of the ways a test may wind up @code{UNRESOLVED}:
-
-@itemize @bullet
-@item
-A test's execution is interrupted.
-
-@item
-A test does not produce a clear result. This is usually because there
-was an @code{ERROR} from DejaGnu while processing the test, or because there
-were three or more @code{WARNING} messages. Any @code{WARNING} or
-@code{ERROR} messages can invalidate the output of the test. This
-usually requires a human being to examine the output to
-determine what really happened---and to improve the test case.
-
-@item
-A test depends on a previous test, which fails.
-
-@item
-The test was set up incorrectly.
-@end itemize
-
-@item UNTESTED
-A test was not run. This is a placeholder, used when there is no
-real test case yet.
-@end ftable
-
-@noindent
-The only remaining output message left is intended to test features that
-are specified by the applicable @sc{posix} standard as conditional:
-
-@ftable @code
-@item UNSUPPORTED
-There is no support for the tested case. This may mean that a
-conditional feature of an operating system, or of a compiler, is not
-implemented. DejaGnu also uses this message when a testing environment
-(often a ``bare board'' target) lacks basic support for compiling or
-running the test case. For example, a test for the system subroutine
-@code{gethostname} would never work on a target board running only a
-boot monitor.
-@end ftable
-
-DejaGnu uses the same output procedures to produce these messages for
-all test suites, and these procedures are already known to conform to
-@sc{posix} 1003.3. For a DejaGnu test suite to conform to @sc{posix}
-1003.3, you must avoid the @code{setup_xfail} procedure as described in
-the @code{PASS} section above, and you must be careful to return
-@code{UNRESOLVED} where appropriate, as described in the
-@code{UNRESOLVED} section above.
-
-@node Future Directions
-@section Future directions
-@cindex future directions
-
-In the near future, there are two parallel directions for DejaGnu
-development. The first is to add support for more hosts and targets.
-
-The second would permit testing programs with a more complex interface,
-whether text based or GUI based. Two components already exist: a Tcl
-based X window toolkit, and a terminal package for @code{expect}. Both
-of these could be merged into DejaGnu in a way that permits testing
-programs that run in each environment.
-
-Meanwhile, we hope DejaGnu enables the creation of test suites for
-conformance to @sc{ansi} C and C++, to @sc{posix}, and to other
-standards. We encourage you to make any test suites you create freely
-available, under the same terms as DejaGnu itself.
-
-@node Tcl and Expect
-@section Tcl and Expect
-@cindex tool command language
-@cindex tcl
-@cindex Ousterhout, John K.
-Tcl was introduced in a paper by John K. Ousterhout at the 1990 Winter
-Usenix conference, @cite{Tcl: An Embeddable Command Language}. That
-paper is included in PostScript form in the @file{doc} subdirectory of
-the Tcl distribution. The version of Tcl included in DejaGnu at this time is
-Tcl 7.4p3.
-
-@cindex @code{expect} scripting language
-@cindex Libes, Don
-Don Libes introduced @code{expect} in his paper @cite{expect: Curing
-Those Uncontrollable Fits of Interaction} at the 1990 Summer Usenix
-conference. The paper is included in PostScript form in the
-@code{expect} distribution (as are several other papers about
-@code{expect}). The version of expect included in DejaGnu at this time
-is expect 5.18.0.
-
-@node Invoking runtest
-@chapter Using @code{runtest}
-@cindex invoking
-@cindex running
-@cindex command line options
-@cindex options
-
-@cindex @code{runtest} description
-@cindex DejaGnu test driver
-@code{runtest} is the executable test driver for DejaGnu. You can
-specify two kinds of things on the @code{runtest} command line: command
-line options, and Tcl variables for the test scripts. The options are
-listed alphabetically below.
-
-@cindex exit code from @code{runtest}
-@cindex @code{runtest} exit code
-@code{runtest} returns an exit code of @code{1} if any test
-has an unexpected result; otherwise (if all tests pass or fail as
-expected) it returns @code{0} as the exit code.
-
-@code{runtest} flags the outcome of each test as one of these cases.
-(@xref{Posix,,A POSIX conforming test framework}, for a discussion of
-how @sc{posix} specifies the meanings of these cases.)
-
-@table @code
-@item PASS
-@kindex PASS
-@cindex successful test
-@cindex test, successful
-The most desirable outcome: the test succeeded, and was expected to
-succeed.
-
-@item XPASS
-@kindex XPASS
-@cindex successful test, unexpected
-@cindex unexpected success
-A pleasant kind of failure: a test was expected to fail, but succeeded.
-This may indicate progress; inspect the test case to determine whether
-you should amend it to stop expecting failure.
-
-@item FAIL
-@kindex FAIL
-@cindex failing test, unexpected
-@cindex test, failing
-A test failed, although it was expected to succeed. This may indicate
-regress; inspect the test case and the failing software to locate the bug.
-
-@item XFAIL
-@kindex XFAIL
-@cindex expected failure
-@cindex failing test, expected
-A test failed, but it was expected to fail. This result indicates no
-change in a known bug. If a test fails because the operating system
-where the test runs lacks some facility required by the test, the
-outcome is @code{UNSUPPORTED} instead.
-
-@item UNRESOLVED
-@kindex UNRESOLVED
-@cindex test, unresolved outcome
-Output from a test requires manual inspection; the test suite could not
-automatically determine the outcome. For example, your tests can report
-this outcome is when a test does not complete as expected.
-
-@item UNTESTED
-@kindex UNTESTED
-@cindex untested properties
-A test case is not yet complete, and in particular cannot yet produce a
-@code{PASS} or @code{FAIL}. You can also use this outcome in dummy
-``tests'' that note explicitly the absence of a real test case
-for a particular property.
-
-@item UNSUPPORTED
-@kindex UNSUPPORTED
-@cindex unsupported test
-@cindex test, unsupported
-A test depends on a conditionally available feature that does not exist
-(in the configured testing environment). For example, you can use this
-outcome to report on a test case that does not work on a particular
-target because its operating system support does not include a required
-subroutine.
-@end table
-
-@code{runtest} may also display the following messages:
-
-@table @code
-@item ERROR
-@kindex ERROR
-@cindex problem, detected by test case
-@cindex test case cannot run
-Indicates a major problem (detected by the test case itself) in running
-the test. This is usually an unrecoverable error, such as a missing file
-or loss of communication to the target. (@sc{posix} test suites should
-not emit this message; use @code{UNSUPPORTED}, @code{UNTESTED}, or
-@code{UNRESOLVED} instead, as appropriate.)
-
-@item WARNING
-@kindex WARNING
-@cindex test case warnings
-Indicates a possible problem in running the test. Usually warnings
-correspond to recoverable errors, or display an important message about
-the following tests.
-
-@item NOTE
-@kindex NOTE
-@cindex test case messages
-An informational message about the test case.
-@end table
-
-This is the full set of command line options that @code{runtest}
-recognizes. Arguments may be abbreviated to the shortest unique string.
-
-@cindex @code{runtest} option list
-@cindex option list, @code{runtest}
-@smallexample
-runtest --tool @var{tool} [ @var{testsuite}.exp @dots{} ]
-[ @var{testsuite}.exp="testfile1 @dots{}" ]
-[ @var{tclvar}=@var{value}@dots{} ]
-[ --all ] [ --baud @var{baud-rate} ] [ --connect @var{type} ]
-[ --debug ] [ --help ] [ --host @var{string} ]
-[ --mail "@var{name} @dots{}" ] [ --name @var{string} ]
-[ --name @var{name} ] [ --outdir @var{path} ]
-[ --objdir @var{path} ] [ --reboot ]
-[ --srcdir @var{path} ] [ --strace @var{n} ]
-[ --target @var{string} --build @var{string} ]
-[ -v | --verbose ] [ -V | --version ] [ --D@var{n} ]
-@end smallexample
-
-@table @code
-@item --tool @var{tool}
-@cindex selecting tests for a tool
-@cindex @code{--tool} (@code{runtest} option)
-@var{tool} specifies what set of tests to run, and what initialization
-module to use. @var{tool} is used @emph{only} for these two purposes:
-it is @emph{not} used to name the executable program to test.
-Executable tool names (and paths) are recorded in @file{site.exp}
-(@pxref{Config Values,,Configuration dependent values}), and you can
-override them by specifying Tcl variables on the command line.
-
-For example, including @samp{--tool gcc} on the @code{runtest} command
-line runs tests from all test subdirectories whose names match
-@file{gcc.*}, and uses one of the initialization modules named
-@file{config/*-gcc.exp}. To specify the name of the compiler (perhaps
-as an alternative path to what @code{runtest} would use by default), use
-@samp{GCC=@var{binname}} on the @code{runtest} command line.
-
-@item @var{testsuite}.exp @dots{}
-@cindex selecting a range of tests
-@cindex tests, running specifically
-@cindex naming tests to run
-Specify the names of testsuites to run.
-By default, @code{runtest} runs all tests for the tool, but you can
-restrict it to particular testsuites by giving the names of the @samp{.exp}
-@code{expect} scripts that control them.
-
-@var{testsuite}.exp may not include path information; use plain filenames.
-
-@item @var{testfile}.exp="testfile1 @dots{}"
-@cindex selecting a range of tests
-@cindex tests, running specifically
-@cindex naming tests to run
-Specify a subset of tests in a suite to run.
-For compiler or assembler tests, which often use a single @samp{.exp}
-script covering many different source files, this option allows you to
-further restrict the tests by listing particular source files to compile.
-Some tools even support wildcards here. The wildcards supported depend
-upon the tool, but typically they are @code{?}, @code{*}, and @code{[chars]}.
-
-@item @var{tclvar}=@var{value}
-@kindex @var{tclvar}=@var{value}
-@cindex Tcl variables, defining for @code{runtest}
-@cindex command line Tcl variable definition
-@cindex @code{runtest}, variable defns on cmdline
-You can define Tcl variables for use by your test scripts in the same
-style used with @code{make} for environment variables. For example,
-@samp{runtest GDB=gdb.old} defines a variable called @samp{GDB}; when
-your scripts refer to @samp{$GDB} in this run, they use the value
-@samp{gdb.old}.
-
-The default Tcl variables used for most tools are defined in the main
-DejaGnu @code{Makefile}; their values are captured in the
-@file{site.exp} file. @xref{Config Values,,Configuration dependent
-values}.
-
-@item --all
-@cindex @code{--all} (@code{runtest} option)
-@cindex test output, displaying all
-Display all test output. By default, @code{runtest} shows only the
-output of tests that produce unexpected results; that is, tests with
-status @samp{FAIL} (unexpected failure), @samp{XPASS} (unexpected
-success), or @samp{ERROR} (a severe error in the test case itself).
-Specify @samp{--all} to see output for tests with status @samp{PASS}
-(success, as expected) @samp{XFAIL} (failure, as expected), or
-@samp{WARNING} (minor error in the test case itself).
-
-@item --baud @var{baud-rate}
-@itemx -b @var{baud-rate}
-@cindex baud rate, specifying
-@cindex bps, specifying
-@cindex @code{--baud} (@code{runtest} option)
-@cindex @code{-b} (@code{runtest} option)
-Set the default baud rate to something other than 9600. (Some serial
-interface programs, like @code{tip}, use a separate initialization file
-instead of this value.)
-
-@item --connect @var{type}
-@cindex connecting to target
-@cindex @code{--connect} (@code{runtest} option)
-@cindex remote testbed, connecting to
-@cindex @code{rlogin}, remote testing via
-@cindex @code{telnet}, remote testing via
-@cindex @code{rsh}, remote testing via
-@cindex @code{tip}, remote testing via
-@cindex @code{kermit}, remote testing via
-@cindex @code{mondfe}, remote testing via
-@cindex remote testing via @code{rlogin}
-@cindex remote testing via @code{telnet}
-@cindex remote testing via @code{rsh}
-@cindex remote testing via @code{tip}
-@cindex remote testing via @code{kermit}
-@cindex remote testing via @code{mondfe}
-Connect to a target testing environment as specified by @var{type}, if
-the target is not the computer running @code{runtest}. For example, use
-@samp{--connect} to change the program used to connect to a ``bare
-board'' boot monitor. The choices for @var{type} in the DejaGnu 1.0
-distribution are @samp{rlogin}, @samp{telnet}, @samp{rsh}, @samp{tip},
-@samp{kermit}, and @samp{mondfe}.
-
-@noindent
-The default for this option depends on the configuration (@pxref{Cross
-Targets,,Remote targets supported}). The default is chosen to be the
-most convenient communication method available, but often other
-alternatives work as well; you may find it useful to try alternative
-connect methods if you suspect a communication problem with your testing
-target.
-
-@item --debug
-@cindex @code{--debug} (@code{runtest} option)
-@cindex debug log for test cases
-@cindex test cases, debug log
-@cindex @code{dbg.log} file
-Turns on the @code{expect} internal debugging output. Debugging output
-is displayed as part of the @code{runtest} output, and logged to a file
-called @file{dbg.log}. The extra debugging output does @emph{not}
-appear on standard output, unless the verbose level is greater than 2
-(for instance, to see debug output immediately, specify @samp{--debug -v
--v}). The debugging output shows all attempts at matching the test
-output of the tool with the scripted patterns describing expected
-output. The output generated with @samp{--strace} also goes into
-@file{dbg.log}.
-
-@item --help
-@itemx -he
-@cindex @code{--help} (@code{runtest} option)
-@cindex help with @code{runtest}
-@cindex @code{runtest}, listing options
-Prints out a short summary of the @code{runtest} options, then exits
-(even if you also specify other options).
-
-@item --host @var{string}
-@cindex @code{--host} (@code{runtest} option)
-@cindex specifying the host config name
-@cindex host config name, changing
-@var{string} is a full configuration ``triple'' name as used by
-@code{configure}. Use this option to override the default string
-recorded by your configuration's choice of host. This choice does not
-change how anything is actually configured unless --build is also
-specified; it affects @emph{only} DejaGnu procedures that compare the
-host string with particular values. The procedures @code{ishost},
-@code{istarget}, @code{isnative}, and @code{setup_xfail} are affected by
-@samp{--host}. In this usage, @code{host} refers to the machine that the
-tests are to be run on, which may not be the same as the @code{build}
-machine. If @code{--build} is also specified, then @code{--host} refers
-to the machine that the tests wil, be run on, not the machine DejaGnu is
-run on.
-
-@item --build @var{string}
-@cindex @code{--build} (@code{runtest} option)
-@cindex specifying the build config name
-@cindex build config name, changing
-@var{string} is a full configuration ``triple'' name as used by
-@code{configure}. This is the type of machine DejaGnu and the tools to
-be tested are built on. For a normal cross this is the same as the host,
-but for a canadian cross, they are seperate.
-
-@item --name @var{name}
-@cindex specifying target name
-@cindex target machine name
-@cindex @code{--name} (@code{runtest} option)
-@var{name} is a name for the particular testing target machine (for
-cross testing). If the testing target has IP network support (for
-example, @code{RPC} or @code{NFS}), this is the network name for the
-target itself. (@var{name} is @emph{not the configuration string} you
-specify as a target with @code{configure}; the @samp{--name} option
-names a particular target, rather than describing a class of targets.)
-For targets that connect in other ways, the meaning of the @var{name}
-string depends on the connection method. @xref{Cross Targets,,Remote
-targets supported}.
-
-@item --name @var{string}
-@cindex remote test machine name
-@cindex name for remote test machine
-Specify a network name of testing target or its host. The particular
-names that are meaningful with @samp{--name} will depend on your site
-configuration, and on the connection protocol: for example, @code{tip}
-connections require names from a serial line configuration file (usually
-called @file{/etc/remote}), while @code{telnet} connections use IP
-hostnames.
-
-@item --objdir @var{path}
-@cindex @code{--objdir} (@code{runtest} option)
-@cindex object directory
-@cindex test programs, auxiliary
-@cindex auxiliary test programs
-Use @var{path} as the top directory containing any auxiliary compiled
-test code. This defaults to @file{.}. Use this option to locate
-pre-compiled test code. You can normally prepare any auxiliary files
-needed with @code{make}.
-
-@item --outdir @var{path}
-@cindex output directory
-@cindex @code{--outdir} (@code{runtest} option)
-@cindex log files, where to write
-Write output logs in directory @var{path}. The default is @samp{.}, the
-directory where you start @code{runtest}. This option affects only the
-summary and the detailed log files @file{@var{tool}.sum} and
-@file{@var{tool}.log}. The DejaGnu debug log @file{dbg.log} always
-appears (when requested) in the local directory.
-
-@item --reboot
-@cindex rebooting remote targets
-@cindex @code{--reboot} (@code{runtest} option)
-Reboot the target board when @code{runtest} initializes.
-Usually, when running tests on a separate target board, it is safer to
-reboot the target to be certain of its state. However, when developing
-test scripts, rebooting takes a lot of time.
-
-@item --srcdir @var{path}
-@cindex source directory
-@cindex @code{--srcdir} (@code{runtest} option)
-Use @var{path} as the top directory for test scripts to run.
-@code{runtest} looks in this directory for any subdirectory whose name
-begins with the toolname (specified with @samp{--tool}). For instance,
-with @samp{--tool gdb}, @code{runtest} uses tests in subdirectories
-@file{gdb.*} (with the usual shell-like filename expansion). If you do
-not use @samp{--srcdir}, @code{runtest} looks for test directories under
-the current working directory.
-
-@item --strace @var{n}
-@cindex @code{--strace} (@code{runtest} option)
-@cindex tracing Tcl commands
-@cindex @code{expect} internal tracing
-Turn on internal tracing for @code{expect}, to @var{n} levels deep. By
-adjusting the level, you can control the extent to which your output
-expands multi-level Tcl statements. This allows you to ignore some
-levels of @code{case} or @code{if} statements. Each procedure call or
-control structure counts as one ``level''.
-
-The output is recorded in the same file, @file{dbg.log}, used for output
-from @samp{--debug}.
-
-@item --target @var{string}
-@cindex @code{--target} (@code{runtest} option)
-@cindex specifying the target configuration
-@cindex target configuration, specifying
-Use this option to override the default setting (running native tests).
-@var{string} is a full configuration ``triple''
-name@footnote{Configuration triples have the form
-@samp{@var{cpu}-@var{vendor}-@var{os}}.} as used by @code{configure}.
-This option changes the configuration @code{runtest} uses for the
-default tool names, and other setup information. @xref{Using
-configure,,Using @code{configure}, configure.info, Cygnus configure},
-for details about @code{configure} names.
-
-@item --verbose
-@itemx -v
-@cindex @code{--verbose} (@code{runtest} option)
-@cindex @code{-v} (@code{runtest} option)
-@cindex turning on output
-@cindex output, additional
-Turns on more output. Repeating this option increases the amount of
-output displayed. Level one (@samp{-v}) is simply test output. Level
-two (@samp{-v -v}) shows messages on options, configuration, and process
-control. Verbose messages appear in the detailed (@file{*.log}) log
-file, but not in the summary (@file{*.sum}) log file.
-
-@item --version
-@itemx -V
-@cindex @code{-V} (@code{runtest} option)
-@cindex @code{--version} (@code{runtest} option)
-@cindex version numbers
-Prints out the version numbers of DejaGnu, @code{expect} and Tcl, and
-exits without running any tests.
-
-@item -D0
-@itemx -D1
-@cindex starting the tcl debugger
-@cindex tcl debugger
-@c FIXME!!! we should say a *lot* more about this debugger
-Start the internal Tcl debugger. The Tcl debugger supports breakpoints,
-single stepping, and other common debugging activities. (See @cite{A
-Debugger for Tcl Applications} by Don Libes. @footnote{Distributed in
-PostScript form with @code{expect} as the file@*
-@file{expect/tcl-debug.ps}.})
-
-If you specify @samp{-D1}, the @code{expect} shell stops at a breakpoint
-as soon as DejaGnu invokes it.
-
-If you specify @samp{-D0}, DejaGnu starts as usual, but you can enter
-the debugger by sending an interrupt (e.g. by typing @key{C-c}).
-@end table
-
-@node Customizing
-@chapter Setting @code{runtest} defaults
-
-@kindex site.exp
-@cindex variables of DejaGnu, defaults
-The site configuration file, @file{site.exp}, captures
-configuration-dependent values and propagates them to the DejaGnu test
-environment using Tcl variables. This ties the DejaGnu test scripts
-into the @code{configure} and @code{make} programs.
-
-@cindex @file{site.exp}, multiple
-@cindex overriding @file{site.exp}
-DejaGnu supports more than one @file{site.exp} file. The multiple
-instances of @file{site.exp} are loaded in a fixed order built into
-DejaGnu (the more local last). The first file loaded is the optional
-@code{~/.dejagnurc}, then the local files, and finally the global file.
-
-@enumerate
-@item
-There is am optional ``master'' @file{site.exp}, capturing configuration values
-that apply to DejaGnu across the board, in each configuration-specific
-subdirectory of the DejaGnu library directory. @code{runtest} loads
-these values first. @xref{Installation,,Configuring and Installing
-DejaGnu}. The master @file{site.exp} contains the default values for
-all targets and hosts supported by DejaGnu. This master file is
-identified by setting the environment variable @code{DEJAGNU} to the
-name of the file. This is also refered to as the ``global'' config file.
-
-@item
-Any directory containing a configured test suite also has a
-@file{site.exp}, capturing configuration values specific to the tool
-under test. Since @code{runtest} loads these values last, the
-individual test configuration can either rely on and use, or override,
-any of the global values from the ``master'' @file{site.exp}.
-
-You can usually generate or update the testsuite @file{site.exp} by
-typing @samp{make site.exp} in the test suite directory, after the test
-suite is configured.
-
-@item
-You can also have a file in your home directory called
-@code{.dejagnurc}. This gets loaded first before the other config
-files. Usually this is used for personal stuff, like setting
-@code{all_flag} so all the output gets printed, or verbosity levels.
-@end enumerate
-
-You can further override the default values in a user-editable section
-of any @file{site.exp}, or by setting variables on the @code{runtest}
-command line.
-
-@menu
-* Config Values:: Variables used in the configuration file.
-* Master Config File:: The master configuration file.
-* Local Config File:: The local configuration file.
-* Personal Config File:: The personal configuration file.
-@end menu
-
-@node Config Values, Master Config File, , Customizing
-@subsection Config Variables
-@cindex configuration dependent defaults
-@cindex setting defaults for DejaGnu variables
-
-@c NOTE: default values are given via @code{"fubar"} rather than the
-@c more conventional @samp{fubar} to permit a consistent and clear
-@c notation for the empty string (@code{""}), which will work exactly as
-@c typed.
-
-DejaGnu uses a named array in Tcl to hold all the info for each
-machine. In the case of a canadian cross, this means host information as
-well as target information. The named array is called
-@code{target_info}, and it has two indices. The following fields are
-part of the array.
-
-@table @code
-@item name
-The name of the target. (mostly for error messages) This
-should also be the string used for this target's array.
-It should also be the same as the linker script so we
-can find them dynamically. This should be the same as the argument used
-for @code{push_target@{@}}.
-
-@item ldflags
-This is the linker flags required to produce a fully linked
-executable. For @code{libgloss} supported targets this is usually just
-the name of the linker script.
-
-@item config
-The target canonical for this target. This is used by some init files to
-make sure the target is supported.
-
-@item cflags
-The flags required to produce an object file from a source file.
-
-@item connect
-This is the connectmode for this target. This is for both IP and
-serial connections. Typically this is either @code{telnet},
-@code{rlogin}, or @code{rsh}.
-
-@item target
-This is the hostname of the target. This is for TCP/IP based connections,
-and is also used for version of tip that use /etc/remote.
-
-@item serial
-This is the serial port. This is typically /dev/tty? or com?:.
-
-@item netport
-This is the IP port. This is commonly used for telneting to target
-boards that are connected to a terminal server. In that case the IP port
-specifies the which serial port to use.
-
-@item baud
-This is the baud rate for a serial port connection.
-
-@item x10
-This is the parameters for an x10 controller. These are simple devices
-that let us power cycle or reset a target board remotely.
-
-@item fileid
-This is the fileid or spawn id of of the connection.
-
-@item prompt
-a glob style pattern to recognize the prompt.
-
-@item abbrev
-abbreviation for tool init files.
-
-@item ioport
-This is the port for I/O on dual port systems. In this configuration,
-the main serial port @code{0} is usually used for stdin and stdout,
-which the second serial port can be used for debugging.
-@end table
-
-The first index into the array is the same value as used in the
-@code{name} field. This is usually a short version of the name of the
-target board. For an example, here's the settings I use for my
-@code{Motorola's} @code{IDP} board and my @code{Motorola} 6U VME
-@code{MVME135-1} board. (both m68k targets)
-
-@cartouche
-@smallexample
-# IDP board
-set target_info(idp,name) "idp"
-set target_info(idp,ldflags) "-Tidp.ld"
-set target_info(idp,config) m68k-unknown-aout
-set target_info(idp,cflags) ""
-set target_info(idp,connect) telnet
-set target_info(idp,target) "s7"
-set target_info(idp,serial) "tstty7"
-set target_info(idp,netport) "wharfrat:1007"
-set target_info(idp,baud) "9600"
-# MVME 135 board
-set target_info(idp,name) "mvme"
-set target_info(idp,ldflags) "-Tmvme.ld"
-set target_info(idp,config) m68k-unknown-aout
-set target_info(idp,cflags) ""
-set target_info(idp,connect) telnet
-set target_info(idp,target) "s8"
-set target_info(idp,serial) "tstty8"
-set target_info(idp,netport) "wharfrat:1008"
-set target_info(idp,baud) "9600"
-@end smallexample
-@end cartouche
-
-DejaGnu can use this information to switch between multiple targets in
-one test run. This is done through the use of the @code{push_target}
-procedure, which is discussed elsewhere.
-@c FIXME: write that section and put an xref here
-
-This array can also hold information for a remote host, which is used
-when testing a candain cross. In this case, the only thing different is
-the index is just @code{host}. Here's the settings I use to run tests
-on my NT machine while running DejaGnu on a Unix machine. (in this case
-a Linux box)
-
-@cartouche
-@smallexample
-set target_info(host,name) "nt-host"
-set target_info(host,config) "386-unknown-winnt"
-set target_info(host,connect) "telnet"
-set target_info(host,target) "ripple"
-@end smallexample
-@end cartouche
-
-There is more info on how to use these variables in the sections on the
-config files. @xref{Master Config File,,Configuration Files}.
-
-@cindex option defaults
-@cindex @code{runtest} option defaults
-@cindex variables for option defaults
-@cindex defaults, option
-In the user editable second section of @file{site.exp}, you can not only
-override the configuration variables captured in the first section, but
-also specify default values for all the @code{runtest} command line
-options. Save for @samp{--debug}, @samp{--help}, and @samp{--version},
-each command line option has an associated Tcl variable. Use the Tcl
-@code{set} command to specify a new default value (as for the
-configuration variables). The following table describes the
-correspondence between command line options and variables you can set in
-@file{site.exp}. @xref{Invoking runtest,,Running the Tests}, for
-explanations of the command-line options.
-
-@kindex all_flag
-@kindex baud
-@kindex reboot
-@kindex outdir
-@kindex objdir
-@kindex runtests
-@kindex ignoretests
-@kindex srcdir
-@kindex tracelevel
-@kindex targetname
-@kindex connectmode
-@kindex tool
-@kindex target_triplet
-@kindex host_triplet
-@kindex build_triplet
-@kindex verbose
-
-@cindex command line option variables
-@cindex Tcl variables for option defaults
-@cindex default options, controlling
-@cindex options, Tcl variables for defaults
-
-@ifinfo
-@display
-runtest Tcl
-option variable description
-__________ ________ ___________________________________________
-
---all all_flag display all test results if set
-
---baud baud set the default baud rate to something other
- than 9600.
---connect connectmode @samp{rlogin}, @samp{telnet}, @samp{rsh},
- @samp{kermit}, @samp{tip}, or @samp{mondfe}
-
---outdir outdir directory for @file{@var{tool}.sum} and @file{@var{tool}.log}
-
---objdir objdir directory for pre-compiled binaries
-
---reboot reboot reboot the target if set to @code{"1"};
- do not reboot if set to @code{"0"} (the default)
-
---srcdir srcdir directory of test subdirectories
-
---strace tracelevel a number: Tcl trace depth
-
---tool tool name of tool to test; identifies init, test subdir
-
---verbose verbose verbosity level. As option, use multiple times;
- as variable, set a number, 0 or greater
---target target_triplet The canonical configuration string for the target.
---host host_triplet The canonical configuration string for the host.
---build build_triplet The canonical configuration string for the
- build host.
-
-@end display
-@end ifinfo
-
-@tex
-\vbox{\halign{\hfil \tt #\quad &\quad\tt #\hfil &\hbox{\vtop{{\raggedright\parindent=0pt\parskip=5pt\hsize=2.75in\rm#\strut\par}}}\hfill\cr
-\cr
-{\it runtest}&{\it Tcl}\cr
-{\it option}&{\it variable}&{\it description}\cr
-\noalign{\hrule width\hsize}\cr
---all &all\_flag &display all test results if set\cr
---baud &baud &set the default baud rate to something other
- than 9600.\cr
---connect &connectmode &@samp{rlogin}, @samp{telnet}, @samp{rsh},
- @samp{kermit}, @samp{tip}, or @samp{mondfe}\cr
---mail &mailing\_list&address list for mailing test output\cr
---name &targetname &network name of testing target or its host\cr
---outdir &outdir &directory for @file{@var{tool}.sum} and @file{@var{tool}.log}\cr
---objdir &objdir &directory for compiled binaries\cr
---reboot &reboot &reboot the target if set to @code{"1"};
-do not reboot if set to @code{"0"} (the default)\cr
---srcdir &srcdir &directory of test subdirectories\cr
---strace &tracelevel &a number: Tcl trace depth\cr
---tool &tool &name of tool to test; identifies init, test subdir\cr
---verbose &verbose &verbosity level. As option, use multiple times;
- as variable, set a number, 0 or greater\cr
---target &target\_triplet
- &The canonical configuration string for the target.\cr
---host &host\_triplet &The canonical configuration string for the host.\cr
---build &build\_triplet &The canonical configuration string for the
- build host.\cr
-}}
-@end tex
-
-@node Master Config File, Local Config File, Config Values, Customizing
-@subsection Master Config File
-@cindex master @file{site.exp}
-@cindex @file{site.exp} for all of DejaGnu
-The master config file is where all the target specific config variables
-get set for a whole site get set. The idea is that for a centralized
-testing lab where people have to share a target between multiple
-developers. There are settings for both remote targets and remote hosts.
-Here's an example of a Master Config File (also called the Global config
-file) for a @emph{canadian cross}. A canadian cross is when you build
-and test a cross compiler on a machine other than the one it's to be
-hosted on.
-
-Here we have the config settings for our California office. Note that
-all config values are site dependant. Here we have two sets of values
-that we use for testing m68k-aout cross compilers. As both of these
-target boards has a different debugging protocol, we test on both of
-them in sequence.
-
-@cartouche
-@smallexample
-global CFLAGS
-global CXXFLAGS
-
-case "$target_triplet" in @{
- @{ "native" @} @{
- set target_abbrev unix
- @}
- @{ "m68*-unknown-aout" @} @{
- set target_abbrev "rom68k"
- # IDP target # IDP board with rom68k monitor
- set target_info(idp,name) "idp"
- set target_info(idp,ldflags) "-Tidp.ld"
- set target_info(idp,config) m68k-unknown-aout
- set target_info(idp,cflags) ""
- set target_info(idp,connect) telnet
- set target_info(idp,target) "s7"
- set target_info(idp,serial) "tstty12"
- set target_info(idp,netport) "truckin:1007"
- set target_info(idp,baud) "9600"
- # MVME target # Motorola MVME 135 with BUG monitor
- set target_info(mvme,name) "mvme"
- set target_info(mvme,ldflags) "-Tmvme.ld"
- set target_info(mvme,config) m68k-unknown-aout
- set target_info(mvme,cflags) ""
- set target_info(mvme,connect) telnet
- set target_info(mvme,target) "s4"
- set target_info(mvme,serial) "tstty8"
- set target_info(mvme,netport) "truckin:1004"
- set target_info(mvme,baud) "9600"
- @}
-@}
-@end smallexample
-@end cartouche
-
- In this case, we have support for several remote hosts for
-our m68k-aout cross compiler. Typically the remote Unix hosts run
-DejaGnu locally, but we also use them for debugging the testsuites when
-we find problems in running on remote hosts. Expect won't run on NT, so
-DejaGnu is run on the local build machine, and it'll connect to the NT
-host and run all the tests for this cross compiler on that host.
-
-@smallexample
-@cartouche
-case "$host_triplet" in @{
- "native" @{
- @}
- "i?86-*-linux*" @{ # Linux host
- set target_info(host,name) "linux-host"
- set target_info(host,config) $host_triplet
- set target_info(host,connect) rlogin
- set target_info(host,target) chinadoll
- @}
- "i?86-*-winnt # NT host
- set target_info(host,name) "nt-host"
- set target_info(host,config) i386-unknown-winnt
- set target_info(host,connect) telnet
- set target_info(host,target) ripple
- @}
- "hppa*-hp-hpux*" @{ # HP-UX host
- set target_info(host,name) "hpux-host"
- set target_info(host,config) $host_triplet
- set target_info(host,connect) rlogin
- set target_info(host,target) slipknot
- @}
- "sparc-sun-sunos*" @{ # SunOS (sun4)
- set target_info(host,name) "sunos-host"
- set target_info(host,config) $host_triplet
- set target_info(host,connect) rlogin
- set target_info(host,target) darkstar
- @}
-@}
-@end cartouche
-@end smallexample
-
-@node Local Config File, Personal Config File, Master Config File, Customizing
-@subsection Local Config File
-@cindex local @file{site.exp}
-@cindex @file{site.exp} for each tool
-It is usually more convenient to keep these ``manual overrides'' in the
-@file{site.exp} local to each test directory, rather than in the
-``master'' @file{site.exp} in the DejaGnu library.
-
-All local @file{site.exp} usually files have two sections, separated by
-comment text. The first section is the part that is generated by
-@code{make}. It is essentially a collection of Tcl variable definitions
-based on @file{Makefile} environment variables. Since they are generated
-by @code{make}, they contain the values as specified by
-@code{configure}. (You can also customize these values by using the
-@samp{--site} option to @code{configure}.) In particular, this section
-contains the @file{Makefile} variables for host and target configuration
-data. Do not edit this first section; if you do, your changes are replaced
-next time you run @code{make}.
-
-The first section starts with:
-
-@cartouche
-@smallexample
-## these variables are automatically generated by make ##
-# Do not edit here. If you wish to override these values
-# add them to the last section
-@end smallexample
-@end cartouche
-
-In the second section, you can override any default values (locally to
-DejaGnu) for all the variables. The
-second section can also contain your preferred defaults for all the
-command line options to @code{runtest}. This allows you to easily
-customize @code{runtest} for your preferences in each configured
-test-suite tree, so that you need not type options repeatedly on the
-command line. (The second section may also be empty, if you do not wish
-to override any defaults.)
-
-The first section ends with this line:
-
-@cartouche
-@smallexample
-## All variables above are generated by configure. Do Not Edit ##
-@end smallexample
-@end cartouche
-
-You can make any changes under this line. If you wish to redefine a
-variable in the top section, then just put a duplicate value in this
-second section. Usually the values defined in this config file are
-related to the configuration of the test run. This is the ideal place to
-set the variables @code{host_triplet}, @code{build_triplet},
-@code{target_triplet}. All other variables are tool dependant. ie for
-testing a compiler, the value for @var{CC} might be set to a freshly
-built binary, as opposed to one in the user's path.
-
-@node Personal Config File, , Local Config File, Customizing
-@subsection Personal Config File
-@cindex personal config @file{site.exp}
-@cindex @file{site.exp} for each person
-The personal config file is used to customize @code{runtest's} behaviour
-for each person. It's typically used to set the user prefered setting
-for verbosity, and any experimental Tcl procedures. My personal
-@file{~/.dejagnurc} file looks like:
-
-@cartouche
-@smallexample
-set all_flag 1
-set RLOGIN /usr/ucb/rlogin
-set RSH /usr/ucb/rsh
-@end smallexample
-@end cartouche
-
-Here I set @code{all_flag} so I see all the test cases that PASS along
-with the ones that FAIL. I also set @var{RLOGIN} and @code{RSH} to the
-BSD version. I have @code{kerberos} installed, and when I rlogin to a
-target board, it usually isn't supported. So I use the non secure
-versions of these programs rather than the default that's in my path.
-
-@node Internals
-@chapter The DejaGnu Implementation
-@cindex operating principles
-@cindex internal details
-
-DejaGnu is entirely written in @code{expect}, which uses Tcl as a
-command language. @code{expect} serves as a very programmable shell;
-you can run any program, as with the usual Unix command shells---but
-once the program is started, your @code{expect} script has fully
-programmable control of its input and output. This does not just apply
-to the programs under test; @code{expect} can also run any auxiliary
-program, such as @code{diff} or @code{sh}, with full control over its
-input and output.
-
-DejaGnu itself is merely a framework for the set of test suites
-distributed separately for each @sc{gnu} tool. Future releases of
-@sc{gnu} tools will include even more tests, developed throughout the
-free software community.
-
-@kindex runtest.exp
-@code{runtest} is the glue to tie together and manage the test scripts.
-The @code{runtest} program is actually a simple Bourne shell script that
-locates a copy of the @code{expect} shell and then starts the main Tcl
-code, @code{runtest.exp}. @code{runtest.exp} itself has these essential
-functions:
-
-@enumerate
-@item
-Parse the command line options, load the library files, and load the
-default configuration files.
-
-@item
-Locating the individual test scripts. @code{runtest.exp} locates the tests
-by exploiting a straightforward naming convention based on the string
-you specify with the @samp{--tool} option.
-
-@item
-Providing an extended test environment, by defining additional Tcl
-procedures beyond those already in @code{expect}.
-
-@item
-Locating target-dependent functions, to standardize the test environment
-across a wide variety of test platforms.
-@end enumerate
-
-@menu
-* Names:: Conventions for using tool names
-* Init Module:: Initialization module
-* DejaGnu Builtins:: DejaGnu provides these Tcl procedures
-* Target Dependent:: Procedures supplied by the init module
-* Cross Targets:: Remote targets supported
-* Input Files:: The files DejaGnu depends on
-* Output Files:: The files DejaGnu produces
-@end menu
-
-@node Names
-@section Conventions for using tool names
-
-@cindex @code{--tool} and naming conventions
-@cindex tool names and naming conventions
-@cindex naming conventions
-DejaGnu uses @samp{$tool}, the name of the tool under test, to tie
-together the testing configuration in a straightforward but flexible
-way. If there is only one testsuite for a particular application, then
-@samp{$tool} is optional.
-
-@samp{$tool} is @emph{not} used to invoke the tool, since sites that run
-multiple configurations of a particular tool often call each
-configuration by a different name. @code{runtest} uses the
-configuration-dependent variables captured in @file{site.exp} to
-determine how to call each tool.
-
-@cindex directory names and @code{--tool}
-@cindex test directories, naming
-@code{runtest} uses tool names to find directories containing tests.
-@code{runtest} scans the source directory (specified with
-@code{--srcdir}) for all directories whose names start with the tool
-name. It is a common practice to put a period after the tool part of the
-name. For instance, directories that start with
-@samp{g++.} contain @sc{g++} tests. To add a new test, just put it in
-any directory (create an entirely new directory, if you wish) whose name
-follows this convention.
-
-@cindex @code{exp} filename suffix
-@cindex test filename
-@cindex filename for test files
-A test is any file in an appropriately named subdirectory whose name
-ends in @samp{.exp} (the conventional way of naming @code{expect}
-scripts). These simple naming conventions make it as simple as possible
-to install new tests: all you must do is put the test in the right
-directory.
-
-@cindex order of tests
-@cindex tests, running order
-@code{runtest} sorts the tests in each subdirectory by name (using the
-Tcl @code{lsort} command) and runs them in the resulting order.
-
-@node Init Module
-@section Initialization module
-@cindex tool initialization
-@cindex setting up targets
-
-@c FIXME! should this node be merged with "Target dependent"?
-
-@cindex init file, purpose
-@cindex starting interactive tools
-@cindex initialization
-The initialization module (or ``init file'') has two purposes: to
-provide tool and target dependent procedures, and to start up an
-interactive tool to the point where it is ready to operate. The latter
-includes establishing communications with the target. All the tests for
-interactive programs assume that the tool is already running and
-communicating. Initialization modules for non-interactive programs may
-only need to supply the support functions.
-
-@cindex init file name
-@cindex name, initialization module
-Each test suite directory must contain (in its @file{config}
-subdirectory) a separate initialization module for each target. The
-appropriate init file is can be named several ways. The prefered name is
-the @emph{os} part of the canonical configuration name with @code{.exp}
-as the suffix. An example would be that for an @code{m68k-coff} system,
-the @code{target_os} part would be @code{coff}. The next way is for
-system where there are short filenames, or a shortcut is desired to
-refer to the OS name for that target. This is uses the value of
-@code{$target_abbrev} rather than the @code{target_os}.
-
-The final file looked for is simply @file{default.exp}. If there is only
-one operating system to support, then this file can be used. It's main
-purpose is to offer some support for new operating systems, or for
-unsupported cross targets. The last file looked for is
-@file{unknown.exp}. This is usually limited to error handling for
-unsupported targets. It's whole contents is typically.
-
-@cartouche
-@smallexample
-perror "Sorry, there is no support for this target"
-exit 1
-@end smallexample
-@end cartouche
-
-At the beginning of the init file, you must first determine the proper
-executable name of the tool to execute, since the actual name of the
-tool to be tested my vary from system to system. Here's an example
-for the @sc{GNU} C compiler.
-
-@cartouche
-@smallexample
-global AR
-# look for the archiver ar
-if ![info exists AR] @{
- set AR [findfile $base_dir/../../binutils/ar $base_dir/../../binutils/ar [tr
-ansform ar]]
- verbose "AR defaulting to $AR" 2
-@}
-@}
-
-global CFLAGS
-if ![info exists CFLAGS] then @{
- set CFLAGS ""
-@}
-@end smallexample
-@end cartouche
-
-It is always a good idea to first check the variable, and only set it if
-it has not yet been defined. Often the proper value of @code{AR} is set
-on the command line that invokes @file{runtest}.
-
-@kindex findfile
-The @code{findfile} procedure takes as it's first argument a file name
-to look for. The second argument is returned if the file is found, and
-the third argument is returned if the file is not found. @code{base_dir}
-is set internally by DejaGnu to the top level directory of the object
-tree.
-
-@kindex transform
-The @code{transform} procedure takes as its argument the native name of
-a tool (such as @samp{gcc} for the compiler), and returns the name as
-configured for that tool in the current installation. (For example, a
-cross-compiling version of @sc{gnu} CC that generates MIPS code may be
-installed with a name like @code{mips-idt-ecoff-gcc}.)
-
-In a test running native, writing the Tcl code for initialization is
-usually quite simple. For cross configurations, however, more elaborate
-instructions are usually needed to describe how to talk to a remote
-target.
-
-Each initialization module defines up to four procedures with standard
-names and purposes. The names of these procedures begin with
-@samp{$tool}, the string that identifies tests for a particular tool:
-@code{$tool_start}, @code{$tool_load}, @code{$tool_exit}, and
-@code{$tool_version}. For example, the start procedure for @sc{gdb} is
-called @code{gdb_start}. (Since start procedures are used differently
-for batch and interactive tools, however, @code{runtest} itself never
-calls the start procedure. Init files for interactive tools are
-expected to end by running the start procedure.)
-
-@cindex utilities, loading from init file
-@cindex defaults, setting in init file
-The initialization module is also a good place to call @code{load_lib}
-to get any collections of utility procedures meant for a family of test
-cases, and to set up default values for any additional Tcl variables
-needed for a specific set of tests.
-
-@xref{Target Dependent,,Target dependent procedures}, for full
-descriptions of these procedures.
-
-@node DejaGnu Builtins
-@section DejaGnu procedures
-@cindex built in procedures, DejaGnu
-
-DejaGnu provides these Tcl procedures for use in test scripts.
-You can also use any standard @code{expect} or Tcl function. These
-procedures are stored in libraries, which DejaGnu loads at
-runtime. Here's explanation of the library procedures that get loaded at
-runtime. All other librarys are optional, and need to be loaded by the
-testsuite.
-
-@menu
-* framework.exp:: Core Internal Procedures.
-* remote.exp:: Procedures for remote communication.
-* utils.exp:: Utility procedures.
-* target.exp:: Cross target procedures.
-* debugger.exp:: Procedures for debugging your Tcl code.
-@end menu
-
-@node framework.exp, remote.exp, ,DejaGnu Builtins
-@subsection Core Internal Procedures
-@cindex Core Internal Procedures
-
-@xref{Posix,,A POSIX conforming test framework}, for more detailed
-explanations of the test outcomes (@samp{FAIL}, @samp{PASS},
-@samp{UNTESTED}, @samp{UNRESOLVED}, @samp{UNSUPPORTED}).
-
-@ftable @code
-@item perror "@var{string} @var{number}"
-@cindex test case, ERROR in
-@kindex ERROR
-Declares a severe error in the testing framework itself.
-@code{perror} writes in the log files a message beginning with
-@samp{ERROR}, appending the argument @var{string}. If the optional
-@var{number} is supplied, then this is used to set the internal count of
-errors to that value.
-
-As a side effect, @code{perror} also changes the effect of the next
-@code{pass} or @code{fail} command: the test outcome becomes
-@samp{UNRESOLVED}, since an automatic @samp{PASS} or @samp{FAIL} cannot
-be trusted after a severe error in the test framework. If the optional
-numeric value is @samp{0}, then there are no further side effects to
-calling this function, and the following test outcome doesn't become
-@samp{UNRESOLVED}. This can be used for errors with no known side
-effects.
-
-@item warning "@var{string} @var{number}"
-@cindex test case, WARNING in
-@kindex WARNING
-Declares detection of a minor error in the test case itself.
-@code{warning} writes in the log files a message beginning with
-@samp{WARNING}, appending the argument @var{string}. Use @code{warning}
-rather than @code{error} for cases (such as communication failure
-to be followed by a retry) where the test case can recover from the
-error. If the optional @var{number} is supplied, then this is used to
-set the internal count of warnings to that value.
-
-As a side effect, @code{warning_threshold} or more calls to
-@code{warning} in a single test case also changes the effect of the next
-@code{pass} or @code{fail} command: the test outcome becomes
-@samp{UNRESOLVED} since an automatic @samp{PASS} or @samp{FAIL} may not
-be trustworthy after many warnings. If the optional numeric value is
-@samp{0}, then there are no further side effects to calling this
-function, and the following test outcome doesn't become
-@samp{UNRESOLVED}. This can be used for errors with no known side
-effects.
-
-@item note "@var{string}"
-@cindex test case, informational messages
-@kindex NOTE
-Appends an informational message to the log file.
-@code{note} writes in the log files a message beginning with
-@samp{NOTE}, appending the argument @var{string}. Use @code{note}
-sparingly. @code{verbose} should be used for most such messages,
-but in cases where a message is needed in the log file regardless of
-the verbosity level use @code{note}.
-
-@item pass "@var{string}"
-@cindex test case, declaring success
-Declares a test to have passed. @code{pass} writes in the
-log files a message beginning with @samp{PASS} (or @code{XPASS}, if
-failure was expected), appending the argument @var{string}.
-
-@item fail "@var{string}"
-@cindex test case, declaring failure
-Declares a test to have failed. @code{fail} writes in the
-log files a message beginning with @samp{FAIL} (or @code{XFAIL}, if
-failure was expected), appending the argument @var{string}.
-
-@item unresolved "@var{string}"
-@cindex test case, declaring ambiguity
-Declares a test to have an unresolved outcome. @code{unresolved} writes
-in the log file a message beginning with @samp{UNRESOLVED}, appending
-the argument @var{string}. This usually means the test did not execute
-as expected, and a human being must go over results to determine if it
-passed or failed (and to improve the test case).
-
-@item untested "@var{string}"
-@cindex test case, declaring no test
-Declares a test was not run. @code{untested} writes in the log file a
-message beginning with @samp{UNTESTED}, appending the argument
-@var{string}. For example, you might use this in a dummy test whose
-only role is to record that a test does not yet exist for some feature.
-
-@item unsupported "@var{string}"
-@cindex test case, declaring no support
-Declares that a test case depends on some facility that does not exist
-in the testing environment. @code{unsupported} writes in the log file a
-message beginning with @samp{UNSUPPORTED}, appending the argument
-@var{string}.
-
-@item get_warning_threshold
-@cindex test case, WARNING threshold
-Returns the current value of @code{warning_threshold}.
-The default value is 3.
-
-@item set_warning_threshold @var{threshold}
-@cindex test case, WARNING threshold
-Sets the value of @code{warning_threshold}.
-A value of @code{0} disables it: calls to @code{warning} will not turn
-a @samp{PASS} or @samp{FAIL} into an @samp{UNRESOLVED}.
-
-@item transform "@var{toolname}"
-@cindex transform tool name
-@cindex installed tool name
-@cindex tool name, as installed
-@cindex name transformations
-Generates a string for the name of a tool as it was configured and
-installed, given its native name (as the argument @var{toolname}).
-This makes the assumption that all tools are installed using the same
-naming conventions: it extrapolates from the invocation name for
-@file{runtest}. For example, if you call @code{runtest} as
-@file{m68k-vxworks-runtest}, the result of @w{@samp{ transform "gcc" }}
-is @samp{m68k-vxworks-gcc}.
-
-@item ishost "@var{host}"
-@cindex host configuration test
-Tests for a particular @emph{host} environment. If the currently
-configured host matches the argument string, the result is @code{1};
-otherwise the result is @code{0}. @var{host} must be a full three-part
-@code{configure} host name; in particular, you may not use the shorter
-nicknames supported by @code{configure} (but you can use wildcard
-characters, using shell syntax, to specify sets of names).
-
-@item istarget "@var{target}"
-@cindex target configuration test
-Tests for a particular @emph{target} environment. If the currently
-configured target matches the argument string, the result is @code{1};
-otherwise the result is @code{0}. @var{target} must be a full
-three-part @code{configure} target name; in particular, you may not use
-the shorter nicknames supported by @code{configure} (but you can use
-wildcard characters, using shell syntax, to specify sets of names). If it is
-passed a @code{NULL} string, then it returns the name of the build
-canonical configuration.
-
-@item isbuild "@var{host}"
-@cindex build host configuration test
-Tests for a particular @emph{build host} environment. If the currently
-configured host matches the argument string, the result is @code{1};
-otherwise the result is @code{0}. @var{host} must be a full three-part
-@code{configure} host name; in particular, you may not use the shorter
-nicknames supported by @code{configure} (but you can use wildcard
-characters, using shell syntax, to specify sets of names). If it is
-passed a @code{NULL} string, then it returns the name of the build
-canonical configuration.
-
-item is3way "@var{host}"
-@cindex canadian cross configuration test
-Tests for a canadian cross. This is when the tests will be run on a
-remotly hosted cross compiler. If it is a canadian cross, then the
-result is @code{1}; otherwise the result is @code{0}.
-
-@item isnative
-@cindex native configuration test
-Tests whether the current configuration has the same host and target.
-When it runs in a @emph{native} configuration this procedure returns a
-@code{1}; otherwise it returns a @code{0}.
-
-@item load_lib "@var{library-file}"
-@cindex load library file
-Loads the file @var{library-file} by searching a fixed path built into
-@code{runtest}. If DejaGnu has been installed, it looks in a path
-starting with the installed library directory. If you are running
-DejaGnu directly from a source directory, without first running
-@samp{make install}, this path defaults to the current directory. In
-either case, it then looks in the current directory for a directory
-called @code{lib}. If there are duplicate definitions, the last one
-loaded takes precedence over the earlier ones.
-
-@item setup_xfail "@var{config} @r{[}@var{bugid}@r{]}"
-@c two spaces above to make it absolutely clear there's whitespace---a
-@c crude sort of italic correction!
-@cindex test case, expecting failure
-@cindex failure, expected
-@cindex expected failure
-Declares that the test is expected to fail on a particular set of
-configurations. The @var{config} argument must be a list of full
-three-part @code{configure} target name; in particular, you may not use
-the shorter nicknames supported by @code{configure} (but you can use the
-common shell wildcard characters to specify sets of names). The
-@var{bugid} argument is optional, and used only in the logging file
-output; use it as a link to a bug-tracking system such as @sc{gnats}
-(@pxref{Overview,, Overview, gnats.info, Tracking Bugs With GNATS}).
-
-@cindex @code{XFAIL}, producing
-@cindex @code{XPASS}, producing
-Once you use @code{setup_xfail}, the @code{fail} and @code{pass}
-procedures produce the messages @samp{XFAIL} and @samp{XPASS}
-respectively, allowing you to distinguish expected failures (and
-unexpected success!) from other test outcomes.
-
-@emph{Warning:} you must clear the expected failure after using
-@code{setup_xfail} in a test case. Any call to @code{pass} or
-@code{fail} clears the expected failure implicitly; if the test has some
-other outcome, e.g. an error, you can call @code{clear_xfail} to clear
-the expected failure explicitly. Otherwise, the expected-failure
-declaration applies to whatever test runs next, leading to surprising
-results.
-
-@item clear_xfail @var{config}
-@cindex cancelling expected failure
-@cindex expected failure, cancelling
-Cancel an expected failure (previously declared with @code{setup_xfail})
-for a particular set of configurations. The @var{config} argument is a
-list of configuration target names. It is only necessary to call
-@code{clear_xfail} if a test case ends without calling either
-@code{pass} or @code{fail}, after calling @code{setup_xfail}.
-
-@item verbose @r{[}-log@r{]} @r{[}-n@r{]} @r{[}--@r{]} "@var{string}" @var{number}
-@cindex @code{verbose} builtin function
-Test cases can use this function to issue helpful messages depending on
-the number of @samp{--verbose} options on the @code{runtest} command
-line. It prints @var{string} if the value of the variable
-@code{verbose} is higher than or equal to the optional @var{number}. The
-default value for @var{number} is 1. Use the optional @samp{-log} argument
-to cause @var{string} to always be added to the log file, even if it won't
-be printed. Use the optional @samp{-n} argument to print @var{string}
-without a trailing newline. Use the optional @samp{--} argument if
-@var{string} begins with "-".
-
-@end ftable
-
-@noindent
-@node remote.exp, utils.exp, framework.exp, DejaGnu Builtins
-@subsection Remote Communication Procedures
-
-@kindex remote.exp
-@kindex lib/remote.exp
-@cindex remote connection procedures
-@cindex communications procedures
-@file{lib/remote.exp} defines these functions, for establishing and
-managing communications:
-
-@emph{Procedures to establish a connection:} Each of these procedures
-tries to establish the connection up to three times before returning.
-Warnings (if retries will continue) or errors (if the attempt is
-abandoned) report on communication failures. The result for any of
-these procedures is either @code{-1}, when the connection cannot be
-established, or the spawn ID returned by the @code{expect} command
-@code{spawn}.
-
-It use the value of the @code{connect} field in the @code{target_info}
-array (was @code{connectmode} as the type of connection to make. Current
-supported connection types are tip, kermit, telnet, rsh, rlogin, and
-netdata. If the @code{--reboot} option was used on the runtest command
-line, then the target is rebooted before the connection is made.
-
-@ftable @code
-
-@item remote_open @var{type}
-@cindex Opening a remote connection
-@emph{Remote Connection Procedure.} This is passed @emph{host} or
-@emph{target}. Host or target refers to whether it is a connection to a
-remote target, or a remote host. This opens the connection to the
-desired target or host using the default values in the configuration
-system. It returns that @code{spawn_id} of the process that manages the
-connection. This value can be used in @code{expect} or @code{exp_send}
-statements, or passed to other procedures that need the connection
-process's id. This also sets the @code{fileid} field in the
-@code{target_info} array.
-
-
-@item remote_close @var{shellid}
-@cindex Closing a remote connection
-@emph{shellid} is value returned by a call to @code{remote_open}. This
-closes the connection to the target so resources can be used by
-others. This parameter can be left off if the @code{fileid} field in the
-@code{target_info} array is set.
-
-@item telnet @var{hostname} @var{port}
-@itemx rlogin @var{hostname}
-@itemx rsh @var{hostname}
-@cindex IP network procedures
-@cindex network (IP) procedures
-@emph{IP network procedures.} @var{hostname} refers to the IP address or
-name (for example, an entry in @file{/etc/hosts}) for this target. The
-procedure names reflect the Unix utility used to establish a
-connection. The optional @var{port} is used to specify the IP port
-number. The value of the @code{netport} field in the @code{target_info}
-array is used. (was @code{$netport}) This value has two parts, the
-hostname and the port number, seperated by a @emph{:}. If @code{host} or
-@code{target} is used in the @code{hostname} field, than the config
-array is used for all information.
-
-@item tip @var{port}
-@cindex serial line connection, @code{tip}
-@emph{Serial line procedure.} Connect using the Unix utility @code{tip}.
-@var{port} must be a name from the @code{tip} configuration file
-@file{/etc/remote}. Often, this is called @samp{hardwire}, or something
-like @samp{ttya}. This file holds all the configuration data for
-the serial port. The value of the @code{serial} field in the
-@code{target_info} array is used. (was @code{$serialport}) If
-@code{host} or @code{target} is used in the @code{port} field, than
-the config array is used for all information.
-
-@item kermit @var{port} @var{bps}
-@cindex serial line connection, @code{kermit}
-@emph{Serial line procedure.} Connect using the program @code{kermit}.
-@var{port} is the device name, e.g. @file{/dev/ttyb}. @var{bps} is
-the line speed to use (in bits per second) for the connection. The value
-of the @code{serial} field in the @code{target_info} array is used. (was
-@code{$serialport}) If @code{host} or @code{target} is used in the
-@code{port} field, than the config array is used for all information.
-
-@end ftable
-
-@noindent
-@emph{Procedures to manage a connection:}
-
-@ftable @code
-@item tip_download @var{spawnid} @var{file}
-@cindex download, @code{tip}
-@cindex serial download, @code{tip}
-Download @file{@var{file}} to the process @var{spawnid} (the value
-returned when the connection was established), using the @code{~put}
-command under @code{tip}. Most often used for single board computers
-that require downloading programs in @sc{ascii} S-records. Returns
-@code{1} if an error occurs, @code{0} otherwise.
-
-@item exit_remote_shell @var{spawnid}
-@cindex terminating remote connection
-@cindex remote connection, ending
-Exits a remote process started by any of the connection procedures.
-@var{spawnid} is the result of the connection procedure that started the
-remote process.
-
-@item download @var{file} @r{[} @var{spawnid} @r{]}
-@cindex download a file
-After you establish a connection to a target, you can download programs
-using this command. @code{download} reads in @var{file} (object code in
-S-record format) and writes it to the device controlling this
-@var{spawnid}. (From the point of view of the target, the S-record file
-comes in via standard input.)
-
-If you have more than one target active, you can use the optional argument
-@var{spawnid} to specify an alternative target (the default is the most
-recently established @var{spawnid}.)
-@end ftable
-
-@noindent
-@node utils.exp, target.exp, remote.exp, DejaGnu Builtins
-@subsection Utility Procedures
-
-@kindex utils.exp
-@kindex lib/utils.exp
-@file{lib/utils.exp} defines these utility procedures:
-
-@ftable @code
-@item getdirs @var{dir}
-@itemx getdirs @var{dir} @var{pattern}
-@cindex directories matching a pattern
-@cindex pattern match, directory
-Returns a list of all the directories in the single directory @var{dir}
-that match @var{pattern}. If you do not specify @var{pattern},
-@code{getdirs} assumes @samp{*}. You may use the common shell wildcard
-characters in @var{pattern}. If no directories match the pattern, then a
-@code{NULL} string is returned.
-
-@item find @var{dir} @var{pattern}
-@cindex files matching a pattern
-@cindex pattern match, filenames
-Search for files whose names match @var{pattern} (using shell wildcard
-characters for filename expansion). Search subdirectories recursively,
-starting at @var{dir}. The result is the list of files whose names
-match; if no files match, the result is empty. Filenames in the result
-include all intervening subdirectory names. If no files match the
-pattern, then a @code{NULL} string is returned.
-
-@item which @var{binary}
-@cindex path lookup
-Searches the execution path for an executable file @var{binary}, like
-the the BSD @code{which} utility. This procedure uses the shell
-environment variable @samp{PATH}. It returns @code{0} if the binary is
-not in the path, or if there is no @samp{PATH} environment variable. If
-@var{binary} is in the path, it returns the full path to @var{binary}.
-
-@item grep @var{filename} @var{regexp}
-@item grep @var{filename} @var{regexp} line
-@cindex regular expression, file contents
-@cindex searching file contents
-Search the file called @var{filename} (a fully specified path) for lines
-that contain a match for regular expression @var{regexp}. The result is
-a list of all the lines that match. If no lines match, the result is an
-empty string. Specify @var{regexp} using the standard regular
-expression style used by the Unix utility program @code{grep}.
-
-Use the optional third argument @samp{line} to start lines in the result
-with the line number in @var{filename}. (This argument is simply an
-option flag; type it just as shown---@samp{line}.)
-
-@item diff @var{filename} @var{filename}
-@cindex finding file differences
-@cindex comparing files
-Compares the two files and returns a 1 if they match, or a 0 if they
-don't. If @code{verbose} is set, then it'll print the differences to the
-screen.
-
-@item slay @var{name}
-@cindex slaying processes
-This look in the process tabel for @var{name} and send it a unix
-@code{SIGINT}, killing the process.
-
-@item absolute @var{path}
-@cindex converting relative paths to absolute
-This procedure takes the relative @var{path}, and converts it to an
-absolute path.
-
-@item psource @var{filename}
-@cindex sourcing Tcl files
-This sources the file @var{filename}, and traps all errors. It also
-ignores all extraneous output. If there was an error it returns a 1,
-otherwise it returns a 0.
-
-@item prune @var{list} @var{pattern}
-@cindex list, pruning
-Remove elements of the Tcl list @var{list}. Elements are fields
-delimited by spaces. The result is a copy of @var{list}, without any
-elements that match @var{pattern}. You can use the common shell
-wildcard characters to specify @var{pattern}.
-
-@item setenv @var{var} @var{val}
-@cindex setting environment variables
-Sets the variable @var{var} to the value @var{val}.
-
-@item unsetenv @var{var}
-@cindex unsetting environment variables
-Unsets the environment variable @var{var}
-
-@item getenv @var{var}
-@cindex getting environment variables
-returns the value of @var{var} in the environment if it exists,
-otherwise it returns @code{NULL}.
-
-@item runtest_file_p @var{runtests} @var{testcase}
-@cindex selecting a range of tests
-@cindex tests, running specifically
-Search @var{runtests} for @var{testcase} and return 1 if found, 0 if not.
-@var{runtests} is a list of two elements. The first is the pathname of
-the testsuite expect script running. The second is a copy of what was
-on the right side of the @code{=} if @samp{foo.exp="@dots{}"} was specified,
-or an empty string if no such argument is present.
-This is used by tools like compilers where each testcase is a file.
-
-@item prune_system_crud @var{system} @var{text}
-@cindex pruning system output, examining program output
-For system @var{system}, delete text the host or target operating system might
-issue that will interfere with pattern matching of program output in
-@var{text}. An example is the message that is printed if a shared library
-is out of date.
-
-@end ftable
-
-@noindent
-@node target.exp, debugger.exp, utils.exp, DejaGnu Builtins
-@subsection Cross target procedure
-
-@kindex target.exp
-@kindex lib/target.exp
-@file{lib/target.exp} defines these utility procedures:
-
-@ftable @code
-
-@item push_target @emph{name}
-@cindex set current target
-This makes the target named @emph{name} be the current target
-connection. The value of @emph{name} is an index into the
-@code{target_info} array and is set in the global config file.
-
-@item pop_target
-@cindex unset current target
-This unsets the current target connection.
-
-@item list_targets
-@cindex lists supported targets
-This lists all the supported targets for this architecture.
-
-@item push_host @emph{name}
-@cindex set current host
-This makes the host named @emph{name} be the current remote host
-connection. The value of @emph{name} is an index into the
-@code{target_info} array and is set in the global config file.
-
-@item pop_host
-@cindex unset current host
-This unsets the current host connection.
-
-@c @item compile @emph{file}
-@cindex compile a file
-This invokes the compiler as set by @code{CC} to compile the file
-@emph{file}. The default options for many cross compilation targets are
-@emph{guessed} by DejaGnu, and these options can be added to by passing
-in more parameters as arguments to @code{compile}. Optionally, this will
-also use the value of the @code{cflags} field in the target config
-array. If the host is not the same as the build machines, then then
-compiler is run on the remote host using @code{execute_anywhere}.
-
-@c @item archive @emph{file}
-@cindex archive object files
-This produces an archive file. Any parameters passed to @code{archive}
-are used in addition to the default flags. Optionally, this will
-also use the value of the @code{arflags} field in the target config
-array. If the host is not the same as the build machines, then then
-archiver is run on the remote host using @code{execute_anywhere}.
-
-@c @item ranlib @emph{file}
-@cindex ranlib a file
-This generates an index for the archive file for systems that aren't
-POSIX yet. Any parameters passed to @code{ranlib} are used in for the
-flags.
-
-@item execute_anywhere @emph{cmdline}
-@cindex executing commands remotely
-This executes the @emph{cmdline} on the proper host. This should be used
-as a replacement for the Tcl command @code{exec} as this version
-utilizes the target config info to execute this command on the build
-machine or a remote host. All config information for the remote host
-must be setup to have this command work. If this is a canadian cross,
-(where we test a cross compiler that runs on a different host then where
-DejaGnu is running) then a connection is made to the remote host and
-the command is executed there. It returns either @emph{REMOTERROR} (for
-an error) or the output produced when the command was executed. This is
-used for running the tool to be tested, not a test case.
-
-@end ftable
-
-@node debugger.exp, , target.exp, DejaGnu Builtins
-@subsection Debugging Procedures
-
-@kindex debugger.exp
-@kindex lib/debugger.exp
-@file{lib/debugger.exp} defines these utility procedures:
-
-@ftable @code
-
-@item dumpvars @emph{expr}
-@cindex Print global variable values
-This takes a csh style regular expression (glob rules) and prints the
-values of the global variable names that match. It is abbreviated as
-@code{dv}
-
-@item dumplocals @emph{expr}
-@cindex Print local variable value
-This takes a csh style regular expression (glob rules) and prints the
-values of the local variable names that match. It is abbreviated as
-@code{dl}.
-
-@item dumprocs @emph{expr}
-@cindex Print procedure bodies
-This takes a csh style regular expression (glob rules) and prints the
-body of all procs that match. It is abbreviated as @code{dp}
-
-@item dumpwatch @emph{expr}
-@cindex Print watchpoints
-This takes a csh style regular expression (glob rules) and prints all
-the watchpoints. It is abbreviated as @code{dw}.
-
-@c FIXME: finish these when the code is fixed.
-@c @item watcharray @emph{element} @emph{type}
-@c @cindex Set a watchpoint on an array
-@c This sets an watchpoint of the @emph{element-type} on the
-@c @item watchvar v null type
-@c @cindex Set a watchpoint on a variable
-
-@item watchunset @emph{var}
-@cindex Watch when a variable is unset
-This breaks program execution when the variable @emph{var} is unset. It
-is abbreviated as @code{wu}.
-
-@item watchwrite @emph{var}
-@cindex Watch when a variable is written
-This breaks program execution when the variable @emph{var} is
-written. It is abbreviated as @code{ww}.
-
-@item watchread @emph{var}
-@cindex Watch when a variable is read
-This breaks program execution when the variable @emph{var} is read. It
-is abbreviated as @code{wr}.
-
-@item watchdel @emph{watch}
-@cindex Delete a watchpoint.
-This deletes a the watchpoint for @emph{watch}. It is abbreviated as
-@code{wd}.
-
-@item print @emph{var}
-@cindex Printing variable values
-This prints the value of the variable @emph{var}. It is abbreviated as
-@code{p}.
-
-@item quit
-@cindex Quiting DejaGnu
-This makes runtest exit. It is abbreviated as @code{q}.
-
-@item bt
-@cindex Print a backtrace
-This prints a backtrace of the executed Tcl commands.
-
-@end ftable
-
-@node Target Dependent
-@section Target dependent procedures
-@cindex target dependent procedures
-
-@c FIXME? These may be renamed to just "start", "load", "exit", and
-@c "version" eventually.
-
-Each combination of target and tool requires some target-dependent
-procedures. The names of these procedures have a common form: the tool
-name, followed by an underbar @samp{_}, and finally a suffix describing
-the procedure's purpose. For example, a procedure to extract the
-version from @sc{gdb} is called @samp{gdb_version}. @xref{Init Module,,
-Initialization Module}, for a discussion of how DejaGnu arranges to find
-the right procedures for each target.
-
-@code{runtest} itself calls only two of these procedures,
-@code{@var{tool}_exit} and @code{@var{tool}_version}; these procedures use
-no arguments.
-
-The other two procedures, @code{@var{tool}_start} and
-@code{@var{tool}_load}, are only called by the test suites themselves
-(or by testsuite-specific initialization code); they may take arguments
-or not, depending on the conventions used within each test suite.
-
-@ftable @code
-@item @var{tool}_start
-@cindex start procedure, tested tools
-Starts a particular tool. For an interactive tool,
-@code{@var{tool}_start} starts and initializes the tool, leaving the
-tool up and running for the test cases; an example is @code{gdb_start},
-the start function for @sc{gdb}. For a batch oriented tool,
-@code{@var{tool}_start} is optional; the recommended convention is to
-let @code{@var{tool}_start} run the tool, leaving the output in a
-variable called @code{comp_output}. Test scripts can then analyze
-@samp{$comp_output} to determine the test results. An example of this
-second kind of start function is @code{gcc_start}, the start function
-for @sc{gcc}.
-
-@code{runtest} itself @emph{does not call} @code{@var{tool}_start}. The
-initialization module @file{@var{tool}_init.exp} must call
-@code{@var{tool}_start} for interactive tools; for batch-oriented tools,
-each individual test script calls @code{@var{tool}_start} (or makes
-other arrangements to run the tool).
-
-@item @var{tool}_load
-@cindex load procedure, tested tools
-Loads something into a tool. For an interactive tool, this conditions
-the tool for a particular test case; for example, @code{gdb_load} loads
-a new executable file into the debugger. For batch oriented tools,
-@code{@var{tool}_load} may do nothing---though, for example, the
-@sc{gcc} support uses @code{gcc_load} to load and run a binary on the
-target environment. Conventionally, @code{@var{tool}_load} leaves the
-output of any program it runs in a variable called @samp{exec_output}.
-Writing @code{@var{tool}_load} can be the most complex part of extending
-DejaGnu to a new tool or a new target, if it requires much communication
-coding or file downloading.
-
-Test scripts call @code{@var{tool}_load}.
-
-@item @var{tool}_exit
-@cindex exit procedure, tested tools
-Cleans up (if necessary) before @code{runtest} exits. For interactive
-tools, this usually ends the interactive session. You can also use
-@code{@var{tool}_exit} to remove any temporary files left over from the
-tests.
-
-@code{runtest} calls @code{@var{tool}_exit}.
-
-@item @var{tool}_version
-@cindex version procedure, tested tools
-Prints the version label and number for @var{tool}. This is called by
-the DejaGnu procedure that prints the final summary report. The output
-should consist of the full path name used for the tested tool, and its
-version number.
-
-@code{runtest} calls @code{@var{tool}_version}.
-@end ftable
-
-The usual convention for return codes from any of these procedures
-(although it is not required by @code{runtest}) is to return @code{0} if
-the procedure succeeded, @code{1} if it failed, and @code{-1} if there
-was a communication error.
-
-@node Cross Targets
-@section Remote targets supported
-
-@cindex targets
-@cindex remote testing
-The DejaGnu distribution includes support for the following remote
-targets. You can set the target name and the connect mode in the
-@file{site.exp} file (using the Tcl variables @samp{targetname} and
-@samp{connectmode}, respectively), or on the @code{runtest} command line
-(using @samp{--name} and @samp{--connect}).
-
-@table @strong
-@item @sc{amd} 29000, with UDI protocol
-Configure DejaGnu for target @samp{a29k-amd-udi}. (Cygnus
-@code{configure} also recognizes the abbreviation @samp{udi29k}.) Then,
-to run tests, use the @code{runtest} target name to specify whether you
-want to use a simulator, or a particular hardware board. The particular
-string to use with @samp{--name} will depend on your UDI setup file,
-@file{udi_soc} (if @file{udi_soc} is not in your working directory, the
-environment variable @samp{UDICONF} should contain a path to this file).
-For example, if your UDI setup file includes these lines:
-@end table
-@c table "ends" *only* to allow wider example below
-
-@cartouche
-@smallexample
-iss AF_UNIX * isstip -r /home/gnu/29k/src/osboot/sim/osboot
-mon AF_UNIX * montip -t serial -baud 9600 -com /dev/ttyb
-@end smallexample
-@end cartouche
-
-@table @strong
-@item @w{ }
-@c fake out table/item into continuing w/same margin as before
-You can use @samp{--name iss} to run tests on the simulator, and
-@samp{--name mon} to run tests on the 29K hardware. See the
-manufacturer's manuals for more information on UDI and @file{udi_soc}.
-@c FIXME! Is there a better ref than "the manufacturer's manuals"?
-
-@kindex mondfe
-The default connect protocol is @samp{mondfe} with either back end.
-@code{mondfe} is the only shell DejaGnu supports for UDI targets.
-@code{mondfe} is an @sc{amd} specific monitor program freely available
-from @sc{amd}.
-
-@emph{Warning:} This target requires @sc{gdb} version 4.7.2 (or
-greater). Earlier versions of @sc{gdb} do not fully support the
-@code{load} command on this target, so DejaGnu has no way to load
-executable files from the debugger.
-
-@item Motorola 680x0 boards, a.out or @sc{coff} object format
-Configure DejaGnu for any remote target matching @samp{m68k-*}.
-
-@emph{Warning:} Most @samp{m68k-*} configurations run all tests only for
-native testing (when the target is the same as the host). When you
-specify most of these targets for a cross configuration, you will only be
-able to use tests that run completely within the host (for example,
-tests of the binary utilities such as the archiver; or compiler tests
-that only generate code rather than running it).
-
-To run a.out or @sc{coff} binaries on a remote M68K, you must configure
-DejaGnu for a particular target board. @samp{m68k-abug} is an example.
-(In general for an embedded environment, because it does not have absolute
-addresses, a.out is not a good choice for output format in any case; most
-often S-records or Hex-32 are used instead.)
-
-@item Motorola 68K MVME 135 board running ABug boot monitor
-Configure for @samp{m68k-abug-aout} or @samp{m68k-abug-coff} (as a
-target). This boot monitor can only download S-records; therefore, the
-DejaGnu tests for this environment require a linker command script to
-convert either output format to S-records, setting the default addresses
-for @code{.text}, @code{.bss}, and @code{.data}.
-
-With this configuration, the default for @samp{--connect} is @samp{tip}.
-@samp{tip} is the only communications protocol supported for connecting
-to @samp{m68k-abug-*} targets. @samp{tip} uses an @sc{ascii} downloader
-(the @code{~put} command) to load S-records into the target board. The
-@samp{--name} string must be a machine name that @code{tip}
-understands (for example, on some @code{tip} implementations it must be
-an entry from the initialization file for @code{tip}; this file is
-sometimes called @file{/etc/remote}).
-
-See your system documentation for information on how to create new
-entries in @file{/etc/remote}. (Some @sc{unix} systems are distributed
-with at least one default entry with a name resembling @samp{hardwire};
-if your system has one, you can edit it, or make a modified copy with a
-new name.) When you have a working @file{/etc/remote} entry
-@var{abugtarget}, you should be able to type @samp{tip
-@var{abugtarget}}, and get the prompt @samp{135ABUG>} from the board.
-Use the same @var{abugtarget} string with @samp{runtest --name}.
-
-@item Motorola IDP board running the rom68k boot monitor
-@c FIXME 1: this doesn't really say anything! OK, so functionality is
-@c the same. Is object code the same (srecords)? Do we configure with
-@c the same triplets? What is the default for --connect? Is
-@c any comms method other than tip supported? What prompt to expect
-@c when tip connected?
-@c FIXME 2: should @code{BUG} below be @code{ABUG}?
-This is the same in functionality as the MVME board running the
-@code{BUG} boot monitor. Only the monitor commands and the addresses are
-different.
-
-@item VxWorks (Motorola 68K or Intel 960)
-Configure DejaGnu for either @samp{m68k-wrs-vxworks} (abbreviated
-@samp{vxworks68}) or @samp{i960-wrs-vxworks} (abbreviated
-@samp{vxworks960}). Since both targets support IP addressing, specify
-the network address (for example, a host name from @file{/etc/hosts})
-with @samp{--name}.
-
-The default connect protocol is @samp{rlogin}, but you can use any of
-@samp{--connect rlogin}, @samp{--connect telnet}, or @samp{--connect
-rsh}.
-
-Test scripts need no special code to load programs into these targets;
-since VxWorks supports NFS, all you must do is ensure test programs are
-on an exported filesystem.
-
-@cindex VxWorks, link with @samp{-r}
-When you compile for VxWorks, use the linker @samp{-r} option to make
-the linker output relocatable---at least if you want to use library
-routines. Many standard C routines are included in VxWorks; often no
-additional libraries are needed. See your VxWorks system documentation
-for additional details.
-@end table
-
-@node Input Files
-@section The files DejaGnu reads
-@cindex input files
-
-The @code{runtest} program used to invoke DejaGnu is a short shell
-script generated by @code{make} during the configuration process. Its
-main task is to read the main test framework driver, @file{runtest.exp}.
-
-@file{runtest.exp}, in turn, reads @code{expect} code from certain other
-files, in this order:
-
-@enumerate
-@item
-Each of the @file{site.exp} local definition files available.
-@xref{Customizing,,Setting @code{runtest} defaults}, for details.
-
-@item
-@file{lib/utils.exp}, a collection of utility procedures. @xref{DejaGnu
-Builtins,,DejaGnu Builtins}, for descriptions of these procedures.
-
-@item
-@file{lib/framework.exp}, a file of subroutines meant for @code{runtest}
-itself rather than for general-purpose use in both @code{runtest} and
-test suites.
-
-@item
-@file{debugger.exp}, Don Libes' Tcl Debugger. (See @cite{A Debugger for
-Tcl Applications} by Don Libes. This paper is distributed with
-@code{expect} in PostScript form as the file
-@file{expect/tcl-debug.ps}.)
-
-@item
-@file{lib/remote.exp}, a collection of subroutines meant for connecting
-to remote machines.
-
-@item
-@file{lib/target.exp}, a collection of subroutines used for the
-configuration systems in DejaGnu. These procedures typically manipulate
-or utilize the configuration system.
-
-@item
-@c FIXME! A comment in runtest.exp claims a system default is used if
-@c no tool-specific init file is not available; I couldn't see where
-@c the program flow actually does this, though---pesch 30jul1993.
-An initialization file @code{@var{tool}_init.exp}. @xref{Init
-Module,,Initialization module}, for more discussion of init files.
-@end enumerate
-
-@c This hard page break is mainly intended for smallbook formatting;
-@c some examples in this section come out better if this starts at a
-@c page boundary.
-@page
-@node Output Files
-@section The files DejaGnu writes
-@cindex output files
-
-@code{runtest} always writes two kinds of output files: summary logs and
-detailed logs. The contents of both of these are determined by your
-tests.
-
-For troubleshooting, a third kind of output file is useful: use
-@samp{--debug} to request an output file showing details of what
-@code{expect} is doing internally.
-
-@menu
-* Summary:: Files that summarize tests
-* Detail:: Files that contain complete test results
-* Debug:: Logging expect internal actions
-@end menu
-
-@node Summary
-@subsection Summary log
-@cindex summary log
-
-@code{runtest} always produces a summary output file
-@file{@var{tool}.sum}. This summary shows the names of all test files
-run; for each test file, one line of output from each @code{pass}
-command (showing status @samp{PASS} or @samp{XPASS}) or @code{fail}
-command (status @samp{FAIL} or @samp{XFAIL}); trailing summary
-statistics that count passing and failing tests (expected and
-unexpected); and the full pathname and version number of the tool
-tested. (All possible outcomes, and all errors, are always reflected in
-the summary output file, regardless of whether or not you specify
-@samp{--all}.)
-
-If any of your tests use the procedures @code{unresolved},
-@code{unsupported}, or @code{untested}, the summary output also
-tabulates the corresponding outcomes.
-
-For example, after @samp{runtest --tool binutils}, look for a summary
-log in @file{binutils.sum}. Normally, @code{runtest} writes this file
-in your current working directory; use the @samp{--outdir} option to
-select a different directory.
-
-@need 3500
-@noindent
-Here is a short sample summary log:
-
-@cartouche
-@smallexample
-Test Run By rob on Mon May 25 21:40:57 PDT 1992
- === gdb tests ===
-Running ./gdb.t00/echo.exp ...
-PASS: Echo test
-Running ./gdb.all/help.exp ...
-PASS: help add-symbol-file
-PASS: help aliases
-PASS: help breakpoint "bre" abbreviation
-FAIL: help run "r" abbreviation
-Running ./gdb.t10/crossload.exp ...
-PASS: m68k-elf (elf-big) explicit format; loaded
-XFAIL: mips-ecoff (ecoff-bigmips) "ptype v_signed_char" signed
-C types
- === gdb Summary ===
-# of expected passes 5
-# of expected failures 1
-# of unexpected failures 1
-/usr/latest/bin/gdb version 4.6.5 -q
-@end smallexample
-@end cartouche
-
-@node Detail
-@subsection Detailed log
-@cindex detailed log
-
-@code{runtest} also saves a detailed log file @file{@var{tool}.log},
-showing any output generated by tests as well as the summary output.
-For example, after @samp{runtest --tool binutils}, look for a detailed
-log in @file{binutils.log}. Normally, @code{runtest} writes this file
-in your current working directory; use the @samp{--outdir} option to
-select a different directory.
-
-@need 4000
-@noindent
-Here is a brief example showing a detailed log for @sc{g++} tests:
-
-@cartouche
-@smallexample
-Test Run By rob on Mon May 25 21:40:43 PDT 1992
-
- === g++ tests ===
-
---- Running ./g++.other/t01-1.exp ---
- PASS: operate delete
-
---- Running ./g++.other/t01-2.exp ---
- FAIL: i960 bug EOF
-p0000646.C: In function `int warn_return_1 ()':
-p0000646.C:109: warning: control reaches end of non-void function
-p0000646.C: In function `int warn_return_arg (int)':
-p0000646.C:117: warning: control reaches end of non-void function
-p0000646.C: In function `int warn_return_sum (int, int)':
-p0000646.C:125: warning: control reaches end of non-void function
-p0000646.C: In function `struct foo warn_return_foo ()':
-p0000646.C:132: warning: control reaches end of non-void function
-
---- Running ./g++.other/t01-4.exp ---
- FAIL: abort
-900403_04.C:8: zero width for bit-field `foo'
---- Running ./g++.other/t01-3.exp ---
- FAIL: segment violation
-900519_12.C:9: parse error before `;'
-900519_12.C:12: Segmentation violation
-/usr/latest/bin/gcc: Internal compiler error: program cc1plus got
-fatal signal
-
- === g++ Summary ===
-
-# of expected passes 1
-# of expected failures 3
-/usr/ps/bin/g++ version cygnus-2.0.1
-@end smallexample
-@end cartouche
-
-@node Debug
-@subsection Logging @code{expect} internal actions
-@cindex debug log
-
-With the @samp{--debug} option, you can request a log file showing the
-output from @code{expect} itself, running in debugging mode. This file
-(@file{dbg.log}, in the directory where you start @code{runtest}) shows
-each pattern @code{expect} considers in analyzing test output.
-
-This file reflects each @code{send} command, showing the string sent as
-input to the tool under test; and each @code{expect} command, showing
-each pattern it compares with the tool output.
-
-The log messages for @code{expect} begin with a message of the form
-
-@smallexample
-expect: does @{@var{tool output}@} (spawn_id @var{n}) match pattern
-@{@var{expected pattern}@}?
-@end smallexample
-
-@noindent
-For every unsuccessful match, @code{expect} issues a @samp{no} after
-this message; if other patterns are specified for the same
-@code{expect} command, they are reflected also, but without the first
-part of the message (@samp{expect@dots{}match pattern}).
-
-When @code{expect} finds a match, the log for the successful match ends
-with @samp{yes}, followed by a record of the @code{expect} variables set
-to describe a successful match. Here is an excerpt from the debugging
-log for a @sc{gdb} test:
-
-@c FIXME! Why is the second spawn_id shown 0 rather than 6?
-@cartouche
-@smallexample
-send: sent @{break gdbme.c:34\n@} to spawn id 6
-expect: does @{@} (spawn_id 6) match pattern @{Breakpoint.*at.* file
- gdbme.c, line 34.*\(gdb\) $@}? no
-@{.*\(gdb\) $@}? no
-expect: does @{@} (spawn_id 0) match pattern @{<return>@}? no
-@{\(y or n\) @}? no
-@{buffer_full@}? no
-@{virtual@}? no
-@{memory@}? no
-@{exhausted@}? no
-@{Undefined@}? no
-@{command@}? no
-break gdbme.c:34
-Breakpoint 8 at 0x23d8: file gdbme.c, line 34.
-(gdb) expect: does @{break gdbme.c:34\r\nBreakpoint 8 at 0x23d8:
-file gdbme.c, line 34.\r\n(gdb) @} (spawn_id 6) match pattern
-@{Breakpoint.*at.* file gdbme.c, line 34.*\(gdb\) $@}? yes
-expect: set expect_out(0,start) @{18@}
-expect: set expect_out(0,end) @{71@}
-expect: set expect_out(0,string) @{Breakpoint 8 at 0x23d8: file
-gdbme.c, line 34.\r\n(gdb) @}
-expect: set expect_out(spawn_id) @{6@}
-expect: set expect_out(buffer) @{break gdbme.c:34\r\nBreakpoint 8
-at 0x23d8: file gdbme.c, line 34.\r\n(gdb) @}
- PASS: 70 0 breakpoint line number in file
-@end smallexample
-@end cartouche
-
-@noindent
-This example exhibits three properties of @code{expect} and DejaGnu that
-might be surprising at first glance:
-
-@itemize @bullet
-@item
-Empty output for the first attempted match. The first set of attempted
-matches shown ran against the output @samp{@{@}}---that is, no output.
-@code{expect} begins attempting to match the patterns supplied
-immediately; often, the first pass is against incomplete output (or
-completely before all output, as in this case).
-
-@item
-Interspersed tool output. The beginning of the log entry for the second
-attempted match may be hard to spot: this is because the prompt
-@samp{(gdb) } appears on the same line, just before the @samp{expect:}
-that marks the beginning of the log entry.
-
-@item
-Fail-safe patterns. Many of the patterns tested are fail-safe patterns
-provided by @sc{gdb} testing utilities, to reduce possible
-indeterminacy. It is useful to anticipate potential variations
-caused by extreme system conditions (@sc{gdb} might issue the message
-@samp{virtual memory exhausted} in rare circumstances), or by changes in
-the tested program (@samp{Undefined command} is the likeliest outcome if
-the name of a tested command changes).
-
-The pattern @samp{@{<return>@}} is a particularly interesting fail-safe
-to notice; it checks for an unexpected @key{RET} prompt. This may
-happen, for example, if the tested tool can filter output through a
-pager.
-
-These fail-safe patterns (like the debugging log itself) are primarily
-useful while developing test scripts. Use the @code{error} procedure to
-make the actions for fail-safe patterns produce messages starting with
-@samp{ERROR} on the @code{runtest} standard output, and in the detailed
-log file.
-@end itemize
-
-@node Tests
-@chapter How To Write a Test Case
-@cindex writing a test case
-@cindex test case, writing
-
-@menu
-* Writing:: Writing a test case
-* Debugging:: Debugging a test case
-* Adding:: Adding a test case to a test suite
-* Hints:: Hints on writing a test case
-* Variables:: Special variables used by test cases
-@end menu
-
-@node Writing
-@section Writing a test case
-
-The easiest way to prepare a new test case is to base it on an existing
-one for a similar situation. There are two major categories of tests:
-batch or interactive. Batch oriented tests are usually easier to write.
-
-The @sc{gcc} tests are a good example of batch oriented tests. All
-@sc{gcc} tests consist primarily of a call to a single common procedure,
-since all the tests either have no output, or only have a few warning
-messages when successfully compiled. Any non-warning output is a test
-failure. All the C code needed is kept in the test directory. The test
-driver, written in @code{expect}, need only get a listing of all the C
-files in the directory, and compile them all using a generic procedure.
-This procedure and a few others supporting for these tests are kept in
-the library module @file{lib/c-torture.exp} in the @sc{gcc} test suite.
-Most tests of this kind use very few @code{expect} features, and are
-coded almost purely in Tcl.
-
-@noindent
-Writing the complete suite of C tests, then, consisted of these steps:
-
-@enumerate
-@item
-@cindex Granlund, Torbjorn
-@cindex C torture test
-Copying all the C code into the test directory. These tests were based on
-the C-torture test created by Torbjorn Granlund (on behalf of the Free
-Software Foundation) for @sc{gcc} development.
-
-@item
-Writing (and debugging) the generic @code{expect} procedures for
-compilation.
-
-@item
-Writing the simple test driver: its main task is to search the directory
-(using the Tcl procedure @code{glob} for filename expansion with
-wildcards) and call a Tcl procedure with each filename. It also checks
-for a few errors from the testing procedure.
-@end enumerate
-
-Testing interactive programs is intrinsically more complex. Tests for most
-interactive programs require some trial and error before they are complete.
-
-However, some interactive programs can be tested in a simple fashion
-reminiscent of batch tests. For example, prior to the creation of
-DejaGnu, the @sc{gdb} distribution already included a wide-ranging
-testing procedure. This procedure was very robust, and had already
-undergone much more debugging and error checking than many recent
-DejaGnu test cases. Accordingly, the best approach was simply to
-encapsulate the existing @sc{gdb} tests, for reporting purposes.
-Thereafter, new @sc{gdb} tests built up a family of @code{expect}
-procedures specialized for @sc{gdb} testing.
-
-@file{gdb.t10/crossload.exp} is a good example of an interactive test.
-@c FIXME! Check what *kind* of example it is---work-intensive, or generic...
-
-@node Debugging
-@section Debugging a test case
-@cindex debugging a test case
-@cindex test case, debugging
-
-@noindent
-These are the kinds of debugging information available from DejaGnu:
-
-@enumerate
-@item
-Output controlled by test scripts themselves, explicitly allowed for by
-the test author. This kind of debugging output appears in the detailed
-output recorded in the @file{@var{tool}.log} file. To do the same for
-new tests, use the @code{verbose} procedure (which in turn uses the
-variable also called @code{verbose}) to control how much output to
-generate. This will make it easier for other people running the test to
-debug it if necessary. Whenever possible, if @samp{$verbose} is
-@code{0}, there should be no output other than the output from
-@code{pass}, @code{fail}, @code{error}, and @code{warning}. Then, to
-whatever extent is appropriate for the particular test, allow
-successively higher values of @samp{$verbose} to generate more
-information. Be kind to other programmers who use your tests: provide
-for a lot of debugging information.
-
-@item
-Output from the internal debugging functions of Tcl and @code{expect}.
-There is a command line options for each; both forms of debugging output
-are recorded in the file @code{dbg.log} in the current directory.
-
-Use @samp{--debug} for information from the @code{expect} level; it
-generates displays of the @code{expect} attempts to match the tool
-output with the patterns specified (@pxref{Debug,,Debug Log}). This
-output can be very helpful while developing test scripts, since it shows
-precisely the characters received. Iterating between the latest attempt
-at a new test script and the corresponding @file{dbg.log} can allow you
-to create the final patterns by ``cut and paste''. This is sometimes
-the best way to write a test case.
-
-Use @samp{--strace} to see more detail at the Tcl level; this shows how Tcl
-procedure definitions expand, as they execute. The associated number
-controls the depth of definitions expanded; see the discussion of
-@samp{--strace} in @ref{Invoking runtest,,Running the Tests}.
-
-@item
-Finally, if the value of @samp{verbose} is 3 or greater, @code{runtest}
-turns on the @code{expect} command @code{log_user}. This command prints
-all @code{expect} actions to the @code{expect} standard output, to the
-detailed log file, and (if @samp{--debug} is on) to @file{dbg.log}.
-@end enumerate
-
-@node Adding
-@section Adding a test case to a test suite
-@cindex adding a test case
-
-There are two slightly different ways to add a test case. One is to add
-the test case to an existing directory. The other is to create a new
-directory to hold your test. The existing test directories represent
-several styles of testing, all of which are slightly different; examine
-the directories for the tool of interest to see which (if any) is most
-suitable.
-
-Adding a @sc{gcc} test can be very simple: just add the C code to any
-directory beginning with @samp{gcc.} and it runs on the next
-@samp{runtest --tool gcc}.
-
-To add a test to @sc{gdb}, first add any source code you will need to
-the test directory. Then you can either create a new @code{expect} file,
-or add your test to an existing one (any file with a @samp{.exp}
-suffix). Creating a new @samp{.exp} file is probably a better idea if
-the test is significantly different from existing tests. Adding it as a
-separate file also makes upgrading easier. If the C code has to be
-already compiled before the test will run, then you'll have to add it to
-the @file{Makefile.in} file for that test directory, then run
-@code{configure} and @code{make}.
-
-Adding a test by creating a new directory is very similar:
-
-@enumerate
-@item
-Create the new directory. All subdirectory names begin with the name of
-the tool to test; e.g. @sc{g++} tests might be in a directory called
-@file{g++.other}. There can be multiple test directories that start with
-the same tool name (such as @samp{g++}).
-
-@item
-Add the new directory name to the @samp{configdirs} definition in the
-@file{configure.in} file for the test suite directory. This way when
-@code{make} and @code{configure} next run, they include the new directory.
-
-@item
-Add the new test case to the directory, as above.
-
-@item
-To add support in the new directory for configure and make, you must
-also create a @code{Makefile.in} and a @code{configure.in}. @xref{What
-Configure Does,,What Configure Does, configure.info, Cygnus Configure}.
-@end enumerate
-
-@c FIXME! Expand this sentence to at least a section, maybe a chapter...
-@c The @file{admin} directory contains templates for a few common forms
-@c of test.
-
-@node Hints
-@section Hints on writing a test case
-@cindex hints on test case writing
-
-There may be useful existing procedures already written for your test in
-the @file{lib} directory of the DejaGnu distribution. @xref{DejaGnu
-Builtins,,DejaGnu Builtins}.
-
-It is safest to write patterns that match @emph{all} the output
-generated by the tested program; this is called @dfn{closure}. If a
-pattern does not match the entire output, any output that remains will
-be examined by the @emph{next} @code{expect} command. In this
-situation, the precise boundary that determines which @code{expect}
-command sees what is very sensitive to timing between the @code{expect}
-task and the task running the tested tool. As a result, the test may
-sometimes appear to work, but is likely to have unpredictable results.
-(This problem is particularly likely for interactive tools, but can also
-affect batch tools---especially for tests that take a long time to finish.)
-The best way to ensure closure is to use the @samp{-re} option for the
-@code{expect} command to write the pattern as a full regular
-expressions; then you can match the end of output using a @samp{$}. It
-is also a good idea to write patterns that match all available output by
-using @samp{.*\} after the text of interest; this will also match any
-intervening blank lines. Sometimes an alternative is to match end of
-line using @samp{\r} or @samp{\n}, but this is usually too dependent on
-terminal settings.
-@c FIXME!! explain what "end of output" means for interactive task.
-@c (Timeout or EOF, right?)
-
-Always escape punctuation, such as @samp{(} or @samp{"}, in your
-patterns; for example, write @samp{\(}. If you forget to escape
-punctuation, you will usually see an error message like @samp{extra
-characters after close-quote}.
-
-If you have trouble understanding why a pattern does not match the
-program output, try using the @samp{--debug} option to @code{runtest},
-and examine the debug log carefully. @xref{Debug,,Debug Log}.
-
-Be careful not to neglect output generated by setup rather than by the
-interesting parts of a test case. For example, while testing @sc{gdb},
-I issue a send @samp{set height 0\n} command. The purpose is simply to
-make sure @sc{gdb} never calls a paging program. The @samp{set height}
-command in @sc{gdb} does not generate any output; but running @emph{any}
-command makes @sc{gdb} issue a new @samp{(gdb) } prompt. If there were
-no @code{expect} command to match this prompt, the output @samp{(gdb) }
-begins the text seen by the next @code{expect} command---which might
-make @emph{that} pattern fail to match.
-
-To preserve basic sanity, I also recommended that no test ever pass if
-there was any kind of problem in the test case. To take an extreme
-case, tests that pass even when the tool will not spawn are misleading.
-Ideally, a test in this sort of situation should not fail either.
-Instead, print an error message by calling one of the DejaGnu procedures
-@code{error} or @code{warning}.
-
-@node Variables
-@section Special variables used by test cases
-@cindex special variables
-
-@cindex variables for all tests
-Your test cases can use these variables, with conventional meanings (as
-well as the variables saved in @file{site.exp}
-@pxref{Customizing,,Setting @code{runtest} defaults}):
-
-@quotation
-@emph{These variables are available to all test cases.}
-@end quotation
-
-@ftable @code
-@item prms_id
-@cindex PRMS bug number
-@cindex GNATS bug number
-@cindex bug number
-The tracking system (e.g. @sc{gnats}) number identifying a corresponding
-bugreport. (@samp{0} if you do not specify it in the test script.)
-
-@item bug_id
-@cindex bug number, extra
-An optional bug id; may reflect a bug identification from another
-organization. (@samp{0} if you do not specify it.)
-
-@item subdir
-@cindex current test subdirectory
-The subdirectory for the current test case.
-@end ftable
-
-@quotation
-@emph{These variables should never be changed. They appear in most
-tests.}
-@end quotation
-
-@ftable @code
-@item expect_out(buffer)
-@cindex last command output
-The output from the last command. This is an internal variable set by
-@code{expect}.
-
-@item exec_output
-This is the output from a @code{@var{tool}_load} command. This only
-applies to tools like @sc{gcc} and @sc{gas} which produce an object
-file that must in turn be executed to complete a test.
-
-@item comp_output
-This is the output from a @code{@var{tool}_start} command. This is
-conventionally used for batch oriented programs, like @sc{gcc} and
-@sc{gas}, that may produce interesting output (warnings, errors) without
-further interaction.
-@end ftable
-
-@node Extending
-@chapter New Tools, Targets, or Hosts
-
-The most common ways to extend the DejaGnu framework are: adding a suite
-of tests for a new tool to be tested; adding support for testing on a
-new target; and porting @code{runtest} to a new host.
-
-@menu
-* Adding Tools:: How to add tests for a new tool
-* Adding Targets:: How to add a new target
-* Porting:: Porting DejaGnu to a new host
-@end menu
-
-@node Adding Tools
-@section Writing tests for a new tool
-
-In general, the best way to learn how to write (code or even prose) is
-to read something similar. This principle applies to test cases and to
-test suites. Unfortunately, well-established test suites have a way of
-developing their own conventions: as test writers become more
-experienced with DejaGnu and with Tcl, they accumulate more utilities,
-and take advantage of more and more features of @code{expect} and Tcl in
-general.
-
-Inspecting such established test suites may make the prospect of
-creating an entirely new test suite appear overwhelming. Nevertheless,
-it is quite straightforward to get a new test suite going.
-
-@cindex Lupton, Robert
-There is one test suite that is guaranteed not to grow more elaborate
-over time: both it and the tool it tests were created expressly to
-illustrate what it takes to get started with DejaGnu. The
-@file{example/} directory of the DejaGnu distribution contains both an
-interactive tool called @code{calc}, and a test suite for it. Reading
-this test suite, and experimenting with it, is a good way to supplement
-the information in this section. (Thanks to Robert Lupton for creating
-@code{calc} and its test suite---and also the first version of this
-section of the manual!)
-
-To help orient you further in this task, here is an outline of the steps
-to begin building a test suite for a program @var{example}.
-
-@enumerate
-@item
-Create or select a directory to contain your new collection of tests.
-Change to that directory (shown here as @code{testsuite}):
-
-@example
-eg$ cd testsuite/
-@end example
-
-@item
-Create a @file{configure.in} file in this directory, to control
-configuration-dependent choices for your tests. So far as DejaGnu is
-concerned, the important thing is to set a value for the variable
-@code{target_abbrev}; this value is the link to the init file you will
-write soon. (For simplicity, we assume the environment is Unix, and use
-@samp{unix} as the value.)
-
-What else is needed in @file{configure.in} depends on the requirements
-of your tool, your intended test environments, and which
-@code{configure} system you use. This example is a minimal
-@code{configure.in} for use with Cygnus Configure. (For an alternative
-based on the FSF @code{autoconf} system, see the @code{calc} example
-distributed with DejaGnu.) Replace @var{example} with the name of your
-program:
-
-@cartouche
-@smallexample
-# This file is a shell script fragment
-# for use with Cygnus configure.
-
-srctrigger="@var{example}.0"
-srcname="The DejaGnu @var{example} tests"
-
-# per-host:
-
-# per-target:
-
-# everything defaults to unix for a target
-target_abbrev=unix
-
-# post-target:
-
-@end smallexample
-@end cartouche
-
-@item
-Create @file{Makefile.in}, the source file used by @code{configure} to
-build your @file{Makefile}. Its leading section should as usual contain
-the values that @code{configure} may override:
-
-@cartouche
-@smallexample
-srcdir = .
-prefix = /usr/local
-
-exec_prefix = $(prefix)
-bindir = $(exec_prefix)/bin
-libdir = $(exec_prefix)/lib
-tooldir = $(libdir)/$(target_alias)
-
-datadir = $(exec_prefix)/lib/dejagnu
-
-RUNTEST = runtest
-RUNTESTFLAGS =
-FLAGS_TO_PASS =
-
-#### host, target, site specific Makefile frags come in here.
-@end smallexample
-@end cartouche
-
-This should be followed by the standard targets at your site. To begin
-with, they need not do anything---for example, these definitions will
-do:
-
-@cartouche
-@smallexample
-
-all:
-
-info:
-
-install-info:
-
-install:
-uninstall:
-
-clean:
- -rm -f *~ core *.info*
-
-@end smallexample
-@end cartouche
-
-It is also a good idea to make sure your @file{Makefile} can rebuild
-itself if @file{Makefile.in} changes, with a target like this (which
-works for either Cygnus or FSF Configure):
-
-@cartouche
-@smallexample
-Makefile : $(srcdir)/Makefile.in $(host_makefile_frag) \
- $(target_makefile_frag)
- $(SHELL) ./config.status
-@end smallexample
-@end cartouche
-
-You also need to include two targets important to DejaGnu: @code{check},
-to run the tests, and @code{site.exp}, to set up the Tcl copies of
-configuration-dependent values. The @code{check} target must run
-@samp{runtest --tool @var{example}}:
-
-@cartouche
-@smallexample
-check: site.exp all
- $(RUNTEST) $(RUNTESTFLAGS) $(FLAGS_TO_PASS) \
- --tool @var{example} --srcdir $(srcdir)
-@end smallexample
-@end cartouche
-
-The @code{site.exp} target should usually set up (among other things!) a
-Tcl variable for the name of your program:
-
-@cartouche
-@smallexample
-site.exp: ./config.status Makefile
- @@echo "Making a new config file..."
- -@@rm -f ./tmp?
- @@touch site.exp
-
- -@@mv site.exp site.bak
- @@echo "## these variables are automatically\
- generated by make ##" > ./tmp0
- @@echo "# Do not edit here. If you wish to\
- override these values" >> ./tmp0
- @@echo "# add them to the last section" >> ./tmp0
- @@echo "set host_os $@{host_os@}" >> ./tmp0
- @@echo "set host_alias $@{host_alias@}" >> ./tmp0
- @@echo "set host_cpu $@{host_cpu@}" >> ./tmp0
- @@echo "set host_vendor $@{host_vendor@}" >> ./tmp0
- @@echo "set target_os $@{target_os@}" >> ./tmp0
- @@echo "set target_alias $@{target_alias@}" >> ./tmp0
- @@echo "set target_cpu $@{target_cpu@}" >> ./tmp0
- @@echo "set target_vendor $@{target_vendor@}" >> ./tmp0
- @@echo "set host_triplet $@{host_canonical@}" >> ./tmp0
- @@echo "set target_triplet $@{target_canonical@}">>./tmp0
- @@echo "set tool binutils" >> ./tmp0
- @@echo "set srcdir $@{srcdir@}" >> ./tmp0
- @@echo "set objdir `pwd`" >> ./tmp0
- @@echo "set @var{examplename} @var{example}" >> ./tmp0
- @@echo "## All variables above are generated by\
- configure. Do Not Edit ##" >> ./tmp0
- @@cat ./tmp0 > site.exp
- @@sed < site.bak \
- -e '1,/^## All variables above are.*##/ d' \
- >> site.exp
- -@@rm -f ./tmp?
-@end smallexample
-@end cartouche
-
-@item
-Create a directory (in @file{testsuite/}) called @file{config/}:
-
-@example
-eg$ mkdir config
-@end example
-
-@item
-Make an init file in this directory; its name must start with the
-@code{target_abbrev} value, so call it @file{config/unix.exp}.
-This is the file that contains the target-dependent procedures;
-fortunately, most of them do not have to do very much in order for
-@code{runtest} to run.
-
-If @var{example} is not interactive, you can get away with this minimal
-@file{unix.exp} to begin with:
-
-@cartouche
-@smallexample
-proc foo_exit @{@} @{@}
-proc foo_version @{@} @{@}
-@end smallexample
-@end cartouche
-
-If @var{example} is interactive, however, you might as well define a
-start routine @emph{and invoke it} by using an init file like this:
-
-@cartouche
-@smallexample
-proc foo_exit @{@} @{@}
-proc foo_version @{@} @{@}
-
-proc foo_start @{@} @{
- global @var{examplename}
- spawn $@var{examplename}
- expect @{
- -re "" @{@}
- @}
-@}
-foo_start
-@end smallexample
-@end cartouche
-
-@item
-Create a directory whose name begins with your tool's name, to contain
-tests:
-
-@example
-eg$ mkdir @var{example}.0
-@end example
-
-@item
-Create a sample test file in @file{@var{example}.0}. Its name must end
-with @samp{.exp}; you can use @samp{first-try.exp} To begin with, just
-write there a line of Tcl code to issue a message:
-
-@cartouche
-@smallexample
-send_user "Testing: one, two...\n"
-@end smallexample
-@end cartouche
-
-@item
-Back in the @file{testsuite/} (top level) directory, run
-
-@example
-eg$ configure
-@end example
-
-(You may have to specify more of a path, if a suitable @code{configure}
-is not available in your execution path.)
-
-@item
-You are now ready to triumphantly type @samp{make check} or
-@samp{runtest --tool @var{example}}. You should see something like this:
-
-@cartouche
-@smallexample
-Test Run By rhl on Fri Jan 29 16:25:44 EST 1993
-
- === @var{example} tests ===
-
-Running ./@var{example}.0/first-try.exp ...
-Testing: one, two...
-
- === @var{example} Summary ===
-
-@end smallexample
-@end cartouche
-
-There is no output in the summary, because so far the example does not
-call any of the procedures that establish a test outcome.
-
-@item
-Begin writing some real tests. For an interactive tool, you should
-probably write a real exit routine in fairly short order; in any case,
-you should also write a real version routine soon.
-@end enumerate
-
-@node Adding Targets
-@section Adding a target
-@cindex adding a target
-
-DejaGnu has some additional requirements for target support, beyond the
-general-purpose provisions of Cygnus @code{configure}. @code{runtest}
-must actively communicate with the target, rather than simply generating
-or managing code for the target architecture. Therefore, each tool
-requires an initialization module for each target. For new targets, you
-must supply a few Tcl procedures to adapt DejaGnu to the target. This
-permits DejaGnu itself to remain target independent. @xref{Init
-Module,,Initialization module}, for a discussion of the naming
-conventions that enable DejaGnu to locate and use init files.
-
-Usually the best way to write a new initialization module is to edit an
-existing initialization module; some trial and error will be required.
-If necessary, you can use the @samp{--debug} option to see what
-is really going on.
-
-When you code an initialization module, be generous in printing
-information controlled by the @code{verbose} procedure (@pxref{DejaGnu
-Builtins, DejaGnu procedures}).
-
-Most of the work is in getting the communications right. Communications
-code (for several situations involving IP networks or serial lines) is
-available in a DejaGnu library file, @file{lib/remote.exp}.
-@xref{DejaGnu Builtins,,DejaGnu Builtins}.
-
-@c FIXME! Say something about Tcl debugger here.
-If you suspect a communication problem, try running the connection
-interactively from @code{expect}. (There are three ways of running
-@code{expect} as an interactive interpreter. You can run @code{expect}
-with no arguments, and control it completely interactively; or you can
-use @samp{expect -i} together with other command-line options and
-arguments; or you can run the command @code{interpreter} from any
-@code{expect} procedure. Use @code{return} to get back to the calling
-procedure (if any), or @code{return -tcl} to make the calling procedure
-itself return to its caller; use @code{exit} or end-of-file to leave
-@code{expect} altogether.) Run the program whose name is recorded in
-@samp{$connectmode}, with the arguments in @samp{$targetname}, to
-establish a connection. You should at least be able to get a prompt
-from any target that is physically connected.
-
-@node Porting
-@section Porting to a new host
-@cindex porting to a new host
-
-The task of porting DejaGnu is basically that of porting Tcl and
-@code{expect}. Tcl and @code{expect}, as distributed with DejaGnu, both
-use @code{autoconf}; they should port automatically to most Unix
-systems.
-
-Once Tcl and @code{expect} are ported, DejaGnu should run. Most system
-dependencies are taken care of by using @code{expect} as the main
-command shell.
-
-@node Installation
-@appendix Installing DejaGnu
-
-@cindex host, explained
-@cindex target, explained
-@cindex DejaGnu configuration
-@cindex configuring DejaGnu
-Once you have the DejaGnu source unpacked and available, you must first
-configure the software to specify where it is to run (and the associated
-defaults); then you can proceed to installing it.
-
-@menu
-* Configuring DejaGnu::
-* Installing DejaGnu::
-@end menu
-
-@node Configuring DejaGnu
-@section Configuring the DejaGnu test driver
-
-It is usually best to configure in a directory separate
-from the source tree, specifying where to find the source with the
-optional @samp{--srcdir} option to @code{configure}. DejaGnu uses the
-GNU @code{autoconf} to configure itself. For more info on using
-autoconf, read the GNU autoconf manual. To configure, execute the
-@file{configure} program, no other options are required. For an example,
-to configure in a seperate tree for objects, execute the configure
-script from the source tree like this:
-
-@smallexample
-../dejagnu-1.3/configure
-@end smallexample
-
-DejaGnu doesn't care at config time if it's for testing a native system
-or a cross system. That is determined at runtime by using the config
-files.
-
-@cindex @code{prefix}, configure options
-@cindex @code{exec_prefix}, configure options.
-You may also want to use the @code{configure} option @samp{--prefix} to
-specify where you want DejaGnu and its supporting code installed. By
-default, installation is in subdirectories of @file{/usr/local}, but you
-can select any alternate directory @var{altdir} by including
-@samp{--prefix=@var{altdir}} on the @code{configure} command line.
-(This value is captured in the Makefile variables @code{prefix}
-and @code{exec_prefix}.)
-
-@cindex auxiliary programs
-@cindex test suite distributions
-@cindex @code{make} builds part of tests
-Save for a small number of example tests, the DejaGnu distribution
-itself does not include any test suites; these are available separately.
-Test suites for the @sc{gnu} compiler (testing both GCC and G++) and for
-the @sc{gnu} binary utilities are distributed in parallel with the
-DejaGnu distribution (but packaged as separate files). The test suite
-for the @sc{gnu} debugger is distributed in parallel with each release
-of GDB itself, starting with GDB 4.9. After configuring the top-level
-DejaGnu directory, unpack and configure the test directories for the
-tools you want to test; then, in each test directory, run @code{make} to
-build auxiliary programs required by some of the tests.
-
-@node Installing DejaGnu
-@section Installing DejaGnu
-
-@cindex installing DejaGnu
-To install DejaGnu in your filesystem (either in @file{/usr/local}, or
-as specified by your @samp{--prefix} option to @code{configure}), execute
-
-@example
-eg$ make install
-@end example
-
-@noindent
-@samp{make install} does these things for DejaGnu:
-
-@enumerate
-@item
-Look in the path specified for executables (@file{$exec_prefix}) for
-directories called @file{lib} and @file{bin}. If these directories do
-not exist, @samp{make install} creates them.
-
-@item
-Create another directory in the @file{lib} directory, called
-@file{dejagnu}.
-
-@item
-Copy the @code{runtest} shell script into @file{$exec_prefix/bin}.
-
-@item
-Copy all the library files (used to support the framework) into
-@file{$exec_prefix/lib/dejagnu}.
-
-@item
-Copy @file{runtest.exp} into @file{$exec_prefix/lib/dejagnu}. This is
-the main Tcl code implementing DejaGnu.
-
-@end enumerate
-
-Each test suite collection comes with simple installation instructions
-in a @file{README} file; in general, the test suites are designed to be
-unpacked in the source directory for the corresponding tool, and extract
-into a directory called @file{testsuite}.
-
-@node Index
-@unnumbered Index
-
-@printindex cp
-
-@contents
-
-@bye