Document use of "DG_" and "DG__" prefixes in dejagnu.h
[dejagnu.git] / doc / dejagnu.texi
blobc16264697963d3f5d23fee2815e835fef8d9b80d
1 \input texinfo       @c                    -*- Texinfo -*-
2 @setfilename dejagnu.info
3 @documentencoding us-ascii
4 @settitle DejaGnu
5 @finalout
7 @c man begin INCLUDE
8 @include version.texi
9 @c man end
11 @copying
12 @c man begin COPYRIGHT
13 Copyright @copyright{} 1992-2020, 2022 Free Software Foundation, Inc.
15 Permission is granted to copy, distribute and/or modify this document
16 under the terms of the GNU Free Documentation License, Version 1.3 or
17 any later version published by the Free Software Foundation; with no
18 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
19 Texts.  A copy of the license is included in the section entitled
20 ``GNU Free Documentation License''.
22 @c man end
23 @end copying
25 @dircategory Software development
26 @direntry
27 * DejaGnu: (dejagnu).           The GNU testing framework.
28 @end direntry
30 @titlepage
31 @title DejaGnu
32 @ifset VERSION_PACKAGE
33 @subtitle @value{VERSION_PACKAGE}
34 @end ifset
35 @subtitle Version @value{VERSION}
36 @sp 1
37 @subtitle @value{UPDATED}
38 @author Rob Savoye et al.
39 @author Cygnus Support and the GNU Project
40 @page
42 @vskip 0pt plus 1filll
43 @insertcopying
44 @end titlepage
45 @contents
47 @node Top, Introduction, , (dir)
48 @top DejaGnu
50 @menu
51 * Introduction::
52 * Running tests::
53 * Running other DejaGnu commands::
54 * Customizing DejaGnu::
55 * Extending DejaGnu::
56 * Unit testing::
57 * Built-in Procedures::
58 * GNU Free Documentation License::
59 * Concept Index::
60 * Procedure Index::
61 * Variable Index::
63 @detailmenu
65 Introduction
67 * What is DejaGnu?::
68 * New in this release: Release Notes
69 * Design goals::
70 * A POSIX conforming test framework: A POSIX Conforming Test Framework.
71 * Installation::
73 Running tests
75 * Running 'make check': Make Check.
76 * Running runtest: Runtest.
77 * Output files: Output Files.
79 Running other DejaGnu commands
81 * Invoking dejagnu::            Command line options for the launcher itself.
82 * Invoking dejagnu help::       Reading man pages for dejagnu subcommands.
83 * Invoking dejagnu report card::  Summarizing test results from many tools.
85 Customizing DejaGnu
87 * Global configuration file::
88 * Local configuration file::
89 * Board configuration file::
90 * Remote host testing::
91 * Configuration file values::
93 Extending DejaGnu
95 * Adding a new testsuite::
96 * Adding a new tool::
97 * Adding a new target::
98 * Adding a new board::
99 * Board file values::
100 * Writing a test case::
101 * Debugging a test case::
102 * Adding a test case to a testsuite::
103 * Test case special variables: Test case variables.
105 Unit testing
107 * What is unit testing?::       Unit testing and system testing.
108 * Running unit tests::
109 * DejaGnu unit test protocol::  DejaGnu native unit testing protocol.
110 * C unit testing API::
111 * C++ unit testing API::
113 Reference
115 * Built-in Procedures::
117 Indices
119 * Concept Index::
120 * Procedure Index::
121 * Variable Index::
123 @end detailmenu
124 @end menu
126 @node Introduction, Running tests, Top, Top
127 @chapter Introduction
129 @menu
130 * What is DejaGnu?::
131 * New in this release: Release Notes.
132 * Design goals::
133 * A POSIX compliant test framework: A POSIX Conforming Test Framework.
134 * Installation::
135 @end menu
137 @node What is DejaGnu?, Release Notes, , Introduction
138 @section What is DejaGnu?
140 DejaGnu is a framework for testing other programs, providing a single
141 front-end for all tests.  You can think of it as a library of Tcl
142 procedures to help with writing a test harness.  A @emph{test harness}
143 is the infrastructure that is created to test a specific program or
144 tool.  Each program can have multiple testsuites, all supported by a
145 single test harness.  DejaGnu is written in Expect, which in turn uses
146 Tcl, the Tool command language.  There is more information on Tcl at
147 the @uref{http://www.tcl.tk,Tcl/Tk web site} and the
148 @uref{http://expect.nist.gov,Expect web site}.
150 Julia Menapace first coined the term @emph{DejaGnu} to describe an
151 earlier testing framework she wrote at Cygnus Support for testing GDB.
152 When we replaced it with the Expect-based framework, it was like
153 DejaGnu all over again.  More importantly, it was also named after my
154 daughter, Deja Snow Savoye, who was a toddler during DejaGnu's
155 beginnings.
157 DejaGnu offers several advantages for testing:
159 @itemize
161 @item
162 The flexibility and consistency of the DejaGnu framework make it easy to
163 write tests for any program, with either batch-oriented, or interactive
164 programs.
166 @item
167 DejaGnu provides a layer of abstraction which allows you to write
168 tests that are portable to any host or target where a program must be
169 tested.  For instance, a test for @code{GDB} can run from any
170 supported host system on any supported target system.  DejaGnu runs
171 tests on many single board computers, whose operating software ranges
172 from a simple boot monitor to a real-time OS.
174 @item
175 All tests have the same output format.  This makes it easy to
176 integrate testing into other software development processes.
177 DejaGnu's output is designed to be parsed by other filtering script
178 and it is also human readable.
180 @item
181 Using Tcl and Expect, it's easy to create wrappers for existing
182 testsuites.  By incorporating existing tests under DejaGnu, it's
183 easier to have a single set of report analyse programs..
184 @end itemize
186 Running tests requires two things: the testing framework and the
187 testsuites themselves.  Tests are usually written in Expect using Tcl,
188 but you can also use a Tcl script to run a testsuite that is not based
189 on Expect.  Expect script filenames conventionally use @file{.exp} as
190 a suffix.  For example, the main implementation of the DejaGnu test
191 driver is in the file @file{runtest.exp}.
193 @node Release Notes, Design goals, What is DejaGnu?, Introduction
194 @section New in this release
196 The following major, user-visible changes have been introduced since
197 version 1.5.3.
199 @enumerate
201 @item
202 Support for target communication via SSH has been added.
204 @item
205 A large number of very old config and baseboard files have been
206 removed.  If you need to resurrect these, you can get them from
207 version 1.5.3.  If you can show that a board is still in use, it can
208 be put back in the distribution.
210 @item
211 The @command{--status} command line option is now the default.  This
212 means that any error in the testsuite Tcl scripts will cause runtest
213 to abort with exit status code 2.  The @command{--status} option has
214 been removed from the documentation, but will continue to be accepted
215 for backward compatibility.
217 @item
218 @command{runtest} now exits with exit code 0 if the testsuite
219 "passed", 1 if something unexpected happened (eg, FAIL, XPASS or
220 UNRESOLVED), and 2 if an exception is raised by the Tcl interpreter.
222 @item
223 @command{runtest} now exits with the standard exit codes of programs
224 that are terminated by the SIGINT, SIGTERM and SIGQUIT signals.
226 @item
227 The user-visible utility procedures @code{absolute}, @code{psource}
228 and @code{slay} have been removed.  If a testsuite uses any of these
229 procedures, a copy of the procedure should be made and placed in the
230 lib directory of the testsuite.
232 @item
233 Support was added for testing the D compiler.
235 @item
236 @file{~/.dejagnurc} is now loaded last, not first.  This allows the
237 user to have the ability to override anything in their environment
238 (even the @file{site.exp} file specified by @code{$DEJAGNU}).
240 @item
241 The user-visible utility procedure @code{unsetenv} is
242 @strong{deprecated} and will be removed in the next release.  If a
243 testsuite uses this procedure, a copy should be made and placed in the
244 lib directory of the testsuite.
246 @end enumerate
248 @node Design goals, A POSIX Conforming Test Framework, Release Notes, Introduction
249 @section Design goals
250 @cindex design goals
252 DejaGnu grew out of the internal needs of Cygnus Solutions (formerly
253 Cygnus Support).  Cygnus maintained and enhanced a variety of free
254 programs in many different environments and needed a testing tool
255 that:
257 @itemize
259 @item
260 was useful to developers while fixing bugs;
262 @item
263 automated running many tests during a software release process;
265 @item
266 was portable among a variety of host computers;
268 @item
269 supported a cross-development environment;
271 @item
272 permitted testing of interactive programs like @code{GDB}; and
274 @item
275 permitted testing of batch-oriented programs like @code{GCC}.
276 @end itemize
278 Some of the requirements proved challenging.  For example, interactive
279 programs do not lend themselves very well to automated testing.  But
280 all the requirements are important.  For instance, it is imperative to
281 make sure that @code{GDB} works as well when cross-debugging as it
282 does in a native configuration.
284 Probably the greatest challenge was testing in a cross-development
285 environment.  Most cross-development environments are customized by
286 each developer.  Even when buying packaged boards from vendors there
287 are many differences.  The communication interfaces vary from a serial
288 line to Ethernet.  DejaGnu was designed with a modular communication
289 setup, so that each kind of communication can be added as required and
290 supported thereafter.  Once a communication procedure is written, any
291 test can use it.  Currently DejaGnu can use @code{ssh}, @code{rsh},
292 @code{rlogin}, @code{telnet}, @code{tip}, and @code{kermit} for remote
293 communications.
295 @node A POSIX Conforming Test Framework, Installation, Design goals, Introduction
296 @section A POSIX compliant test framework
297 @cindex POSIX compliant test framework
298 @cindex POSIX 1003.3
300 DejaGnu conforms to the POSIX 1003.3 standard for test frameworks.
301 Rob Savoye was a member of that committee.
303 POSIX standard 1003.3 defines what a testing framework needs to
304 provide to create a POSIX compliant testsuite.  This standard is
305 primarily oriented to checking POSIX conformance, but its requirements
306 also support testing of features not related to POSIX conformance.
307 POSIX 1003.3 does not specify a particular testing framework, but at
308 this time there is only one other POSIX conforming test framework.
309 TET was created by Unisoft for a consortium comprised of X/Open, Unix
310 International and the Open Software Foundation.
312 @cindex assertions
313 The POSIX documentation refers to @dfn{assertions}.  An assertion is a
314 description of behavior.  For example, if a standard says ``The sun
315 shall shine'', a corresponding assertion might be ``The sun is
316 shining.''  A test based on this assertion would pass or fail
317 depending on whether it is day or night.  It is important to note that
318 the standard being tested is never 1003.3; the standard being tested
319 is some other standard, for which the assertions were written.
321 As there is no testsuite to verify that testing frameworks are POSIX
322 1003.3 compliant, this is done by repeatedly reading the standard and
323 experimenting.  One of the main things POSIX 1003.3 does specify is
324 the set of allowed output messages and their definitions.  Four
325 messages are supported for a required feature of POSIX conforming
326 systems and a fifth for a conditional feature.  DejaGnu supports all
327 five output messages.  In this sense a testsuite that uses exactly
328 these messages can be considered POSIX compliant.  These definitions
329 specify the output of a test case:
331 @table @asis
333 @item PASS
334 A test has succeeded.  That is, it demonstrated that the assertion is
335 true.
337 @item FAIL
338 A test has not succeeded -- the assertion is false.  The @emph{FAIL}
339 message is based on this test case only.  Other messages are used to
340 indicate a failure of the framework.  As with @emph{PASS}, POSIX tests
341 must return @emph{FAIL} rather than @emph{XFAIL} even if a failure was
342 expected.
344 @item XFAIL
345 POSIX 1003.3 does not incorporate the notion of expected failures, so
346 @emph{PASS}, instead of @emph{XPASS}, must also be returned for test
347 cases which were expected to fail and did not.  This means that
348 @emph{PASS} is in some sense more ambiguous than if @emph{XPASS} is
349 also used.
351 @item UNRESOLVED
352 A test produced indeterminate results.  Usually, this means the test
353 executed in an unexpected fashion.  This outcome requires a human to
354 go over results to determine if the test should have passed or failed.
355 This message is also used for any test that requires human
356 intervention because it is beyond the abilities of the testing
357 framework.  Any unresolved test should resolved to @emph{PASS} or
358 @emph{FAIL} before a test run can be considered finished.
360 Note that for POSIX, each assertion must produce a test result code.
361 If the test isn't actually run, it must produce @emph{UNRESOLVED}
362 rather than just leaving that test out of the output.  This means that
363 you have to be careful when writing tests to not carelessly use Tcl
364 commands like @emph{return}---if you alter the flow of control of the
365 Tcl code you must insure that every test still produces some result
366 code.
368 Here are some of the ways a test may wind up @emph{UNRESOLVED}:
369 @end table
371 @itemize
373 @item
374 Execution of a test is interrupted.
376 @item
377 A test does not produce a clear result.  This is usually because there
378 was an @emph{ERROR} from DejaGnu while processing the test, or because
379 there were three or more @emph{WARNING} messages.  Any @emph{WARNING}
380 or @emph{ERROR} messages can invalidate the output of the test.  This
381 usually requires a human to examine the output to determine what
382 really happened -- and to improve the test case.
384 @item
385 A test depends on a previous test, which has failed.
387 @item
388 The test was set up incorrectly.
390 @item
391 A test script aborts due to a Tcl error.  In this case, the DejaGnu
392 framework inserts an @emph{UNRESOLVED} result as a placeholder for an
393 unknown number of tests that were not run because the script crashed.
394 @end itemize
396 @table @asis
398 @item UNTESTED
399 A test was not run.  This is a placeholder used when there is no real
400 test case yet.
401 @end table
403 @table @asis
405 @item UNSUPPORTED
406 There is no support for the tested case.  This may mean that a
407 conditional feature of an operating system, or of a compiler, is not
408 implemented.  DejaGnu also uses this message when a testing
409 environment (often a ``bare board'' target) lacks basic support for
410 compiling or running the test case.  For example, a test for the
411 system subroutine @emph{gethostname} would never work on a target
412 board running only a boot monitor.
413 @end table
415 DejaGnu uses the same output procedures to produce these messages for
416 all testsuites and these procedures are already known to conform to
417 POSIX 1003.3.  For a DejaGnu testsuite to conform to POSIX 1003.3, you
418 must avoid the @emph{setup_xfail} procedure as described in the
419 @emph{PASS} section above and you must be careful to return
420 @emph{UNRESOLVED} where appropriate, as described in the
421 @emph{UNRESOLVED} section above.
423 @node Installation, , A POSIX Conforming Test Framework, Introduction
424 @section Installation
426 Refer to the @file{INSTALL} in the source distribution for detailed
427 installation instructions.  Note that there is no compilation step as
428 with many other GNU packages, as DejaGnu consists of interpreted code
429 only.
431 Save for its own small testsuite, the DejaGnu distribution does not
432 include any testsuites.  Testsuites for the various GNU development
433 tools are included with those packages.  After configuring the
434 top-level DejaGnu directory, unpack and configure the test directories
435 for the tools you want to test; then, in each test directory, run
436 @emph{make check} to build auxiliary programs required by some of the
437 tests, and run the test suites.
439 @node Running tests, Running other DejaGnu commands, Introduction, Top
440 @chapter Running tests
442 There are two ways to execute a testsuite.  The most common way is
443 when there is existing support in the @file{Makefile} of the tool
444 being tested.  This usually consists of a @emph{check} target.  The
445 other way is to execute the @code{runtest} program directly.  To run
446 @code{runtest} directly from the command line requires either all of
447 the correct command line options, or a @ref{Local configuration file}
448 must be set up correctly.
450 @menu
451 * Running `make check': Make Check.
452 * Running runtest: Runtest.
453 * Output files: Output Files.
454 @end menu
456 @node Make Check, Runtest, , Running tests
457 @section Running `make check'
459 To run tests from an existing collection, first use @code{configure}
460 as usual to set up the build directory.  Then type @code{make check}.
461 If the @emph{check} target exists, it usually saves you some trouble.
462 For instance, it can set up any auxiliary programs or other files
463 needed by the tests.  The most common file the @emph{check} target
464 depends on is the @file{site.exp} file.  The @file{site.exp} contains
465 various variables that DejaGnu uses to determine the configuration of
466 the program being tested.
468 Once you have run @emph{make check} to build any auxiliary files, you
469 can invoke the test driver @code{runtest} directly to repeat the
470 tests.  You will also have to execute @code{runtest} directly for test
471 collections with no @emph{check} target in the @file{Makefile}.
473 GNU Automake has built-in support for DejaGnu.  To add DejaGnu support
474 to your generated @file{Makefile.in}, just add the keyword
475 @code{dejagnu} to the AUTOMAKE_OPTIONS variable in @file{Makefile.am}.
476 This will ensure that the generated @file{Makefile.in} has a
477 @code{check} target that invokes DejaGnu correctly.  @xref{Tests,,
478 DejaGnu Tests, automake, The GNU Automake Manual}.
480 @node Runtest, Output Files, Make Check, Running tests
481 @section Running runtest
482 @pindex runtest
484 @code{runtest} is the test driver for DejaGnu.  You can specify two
485 kinds of things on the @code{runtest} command line: command line
486 options, and Tcl variables that are passed to the test scripts.  The
487 options are listed alphabetically below.
489 @code{runtest} returns one of the following exit codes:
491 @table @asis
492 @item 0
493 if all tests passed including expected failures and unsupported tests.
494 @item 1
495 if any test failed, passed unexpectedly, or was unresolved.
496 @item 2
497 if Expect encountered any error in the test scripts.
498 @end table
500 @menu
501 * Output States::
502 * Invoking runtest::
503 * Common Options: Common Operations.
504 @end menu
506 @node Output States, Invoking runtest, , Runtest
507 @subsection Output States
508 @cindex output states
510 @file{runtest} flags the outcome of each test as one of these cases.
511 See @ref{A POSIX Conforming Test Framework} for a discussion of how
512 POSIX specifies the meanings of these cases.
514 @table @asis
516 @item PASS
517 The most desirable outcome: the test was expected to succeed and did
518 succeed.
520 @item XPASS
521 A pleasant kind of failure: a test was expected to fail, but
522 succeeded.  This may indicate progress; inspect the test case to
523 determine whether you should amend it to stop expecting failure.
525 @item FAIL
526 A test failed, although it was expected to succeed.  This may indicate
527 regress; inspect the test case and the failing software to locate the
528 bug.
530 @item XFAIL
531 A test failed, but it was expected to fail.  This result indicates no
532 change in a known bug.  If a test fails because the operating system
533 where the test runs lacks some facility required by the test, the
534 outcome is @emph{UNSUPPORTED} instead.
536 @item UNRESOLVED
537 Output from a test requires manual inspection; the testsuite could not
538 automatically determine the outcome.  For example, your tests can
539 report this outcome is when a test does not complete as expected.
541 @item UNTESTED
542 A test case is not yet complete, and in particular cannot yet produce
543 a @emph{PASS} or @emph{FAIL}.  You can also use this outcome in dummy
544 ``tests'' that note explicitly the absence of a real test case for a
545 particular property.
547 @item UNSUPPORTED
548 A test depends on a conditionally available feature that does not
549 exist (in the configured testing environment).  For example, you can
550 use this outcome to report on a test case that does not work on a
551 particular target because its operating system support does not
552 include a required subroutine.
553 @end table
555 @code{runtest} may also display the following messages:
557 @table @asis
559 @item ERROR
560 Indicates a major problem (detected by the test case itself) in
561 running the test.  This is usually an unrecoverable error, such as a
562 missing file or loss of communication to the target.  POSIX testsuites
563 should not emit this message; use @emph{UNSUPPORTED}, @emph{UNTESTED},
564 or @emph{UNRESOLVED} instead, as appropriate.
566 @item WARNING
567 Indicates a possible problem in running the test.  Usually warnings
568 correspond to recoverable errors, or display an important message
569 about the following tests.
571 @item NOTE
572 An informational message about the test case.
573 @end table
575 @node Invoking runtest, Common Operations, Output States, Runtest
576 @subsection Invoking runtest
577 @cindex runtest, invoking
579 This is the full set of command line options that @code{runtest}
580 recognizes.  Option names may be abbreviated to the shortest unique
581 string.
583 @table @asis
585 @item @code{-a}, @code{--all}
586 Display all test output.  By default, @emph{runtest} shows only the
587 output of tests that produce unexpected results; that is, tests with
588 status @emph{FAIL} (unexpected failure), @emph{XPASS} (unexpected
589 success), or @emph{ERROR} (a severe error in the test case itself).
590 Specify @code{--all} to see output for tests with status @emph{PASS}
591 (success, as expected) @emph{XFAIL} (failure, as expected), or
592 @emph{WARNING} (minor error in the test case itself).
594 @item @code{--build [triplet]}
595 @emph{triplet} is a system triplet of the form
596 @emph{cpu-manufacturer-os}.  This is the type of machine DejaGnu and
597 the tools to be tested are built on.  For a normal cross environment
598 this is the same as the host, but for a Canadian cross, they are
599 different.
601 @item @code{-D0}, @code{-D1}
602 Start the internal Tcl debugger.  The Tcl debugger supports
603 breakpoints, single stepping, and other common debugging activities.
604 See the document @uref{http://expect.sourceforge.net/doc/tcl-debug.ps,
605 Debugger for Tcl Applications} by Don Libes.  If you specify
606 @emph{-D1}, the @emph{expect} shell stops at a breakpoint as soon as
607 DejaGnu invokes it.  If you specify @emph{-D0}, DejaGnu starts as
608 usual, but you can enter the debugger by sending an interrupt (e.g. by
609 typing @key{Ctrl}-@key{c}).
611 @item @code{--debug}
612 Turns on the Expect internal debugging output.  Debugging output is
613 displayed as part of the @emph{runtest} output, and logged to a file
614 called @file{dbg.log}.  The extra debugging output does @emph{not}
615 appear on standard output, unless the verbose level is greater than 2
616 (for instance, to see debug output immediately, specify @code{--debug
617 -v -v}).  The debugging output shows all attempts at matching the test
618 output of the tool with the scripted patterns describing expected
619 output.  The output generated with @code{--strace} also goes into
620 @file{dbg.log}.
622 @item @code{--global_init [name]}
623 Use @emph{name} as the global init file instead of @file{site.exp} in
624 @emph{libdir}.  The default is, of course, @file{site.exp}.  Note that
625 this option accepts a relative file name, interpreted starting at
626 @emph{libdir}, so a file in a subdirectory may be used.  This is
627 probably less useful for most sites, but is orthogonal with the
628 @code{--local_init} option and may be useful in large testing labs.
630 @item @code{--help}
631 Prints out a short summary of the @emph{runtest} options, then exits
632 (even if you specify other options).
634 @item @code{--host [triplet]}
635 @emph{triplet} is a system triplet of the form
636 @emph{cpu-manufactuer-os}.  Use this option to override the default
637 string recorded by your configuration's choice of host.  This choice
638 does not change how anything is actually configured unless --build is
639 also specified; it affects @emph{only} DejaGnu procedures that compare
640 the host string with particular values.  The procedures @emph{ishost},
641 @emph{istarget}, @emph{isnative}, and @emph{setup_xfail} are affected
642 by @code{--host}.  In this usage, @emph{host} refers to the machine
643 that the tests are to be run on, which may not be the same as the
644 @emph{build} machine.  If @code{--build} is also specified, then
645 @code{--host} refers to the machine that the tests will be run on, not
646 the machine DejaGnu is run on.
648 @item @code{--host_board [name]}
649 The host board to use.
651 @item @code{--ignore [tests(s)] }
652 The name(s) of specific tests to ignore.
654 @item @code{--local_init [name]}
655 Use @emph{name} as the testsuite local init file instead of
656 @file{site.exp} in the current directory and in @emph{objdir}.  The
657 default is, of course, @file{site.exp}.  Note that this option accepts
658 a relative file name, so a file in a subdirectory may be used.
660 @item @code{--log_dialog}
661 Emit Expect output to stdout.  The Expect output is usually only
662 written to the @file{.log} file.  By enabling this option, they are
663 also printed to standard output.
665 @item @code{--mail [address(es)]}
666 Send test results to one or more email addresses.
668 @item @code{--objdir [path]}
669 Use @emph{path} as the top directory containing any auxiliary compiled
670 test code.  The default is '.'.  Use this option to locate
671 pre-compiled test code.  You can normally prepare any auxiliary files
672 needed with @emph{make}.
674 @item @code{--outdir [path]}
675 Write log files in directory @file{path}.  The default is '.', the
676 directory where you start @emph{runtest}.  This option affects only
677 the summary (@file{.sum}) and the detailed log files (@file{.log}).
678 The DejaGnu debug log @file{dbg.log} always appears (when requested)
679 in the local directory.
681 @item @code{--reboot [name]}
682 Reboot the target board when @code{runtest} starts.  When running
683 tests on a separate target board, it is safer to reboot the target to
684 be certain of its state.  However, when developing test scripts,
685 rebooting can take a lot of time.
687 @item @code{--srcdir [path]}
688 Use @file{path} as the top directory for test scripts to run.
689 @emph{runtest} looks in this directory for any subdirectory whose name
690 begins with the toolname (specified with @code{--tool}).  For
691 instance, with @code{--tool gdb}, @emph{runtest} uses tests in
692 subdirectories @file{gdb.*} (with the usual shell-like filename
693 expansion).  If you do not use @code{--srcdir}, @emph{runtest} looks
694 for test directories under the current working directory.
696 @item @code{--strace [n]}
697 Turn on internal tracing for @emph{expect}, to n levels deep.  By
698 adjusting the level, you can control the extent to which your output
699 expands multi-level Tcl statements.  This allows you to ignore some
700 levels of @emph{case} or @emph{if} statements.  Each procedure call or
701 control structure counts as one ``level''.  The output is recorded in
702 the same file, @file{dbg.log}, used for output from @code{--debug}.
704 @item @code{--target [triplet]}
705 Use this option to override the default setting (native testing).
706 @emph{triplet} is a system triplet of the form
707 @emph{cpu-manufacturer-os}.  This option changes the configuration
708 @code{runtest} uses for the default tool names, and other setup
709 information.
711 @item @code{--target_board [name(s)]}
712 The list of target boards to run tests on.
714 @item @code{--tool [name(s)]}
715 Specifies which testsuite to run, and what initialization module to
716 use.  @code{--tool} is used @emph{only} for these two purposes.  It is
717 @emph{not} used to name the executable program to test.  Executable
718 tool names (and paths) are recorded in @file{site.exp} and you can
719 override them by specifying Tcl variables on the command line.
721 For example, including @code{--tool} gcc on the command line runs
722 tests from all test subdirectories whose names match @file{gcc.*}, and
723 uses one of the initialization modules named @file{config/*-gcc.exp}.
724 To specify the name of the compiler (perhaps as an alternative path to
725 what @emph{runtest} would use by default), use @emph{GCC=path-to-gcc}
726 on the @emph{runtest} command line.
728 @item @code{--tool_exec [name]}
729 The path to the tool executable to test.
731 @item @code{--tool_opts [options]}
732 A list of additional options to pass to the tool.
734 @item @code{-v}, @code{--verbose}
735 Turns on more output.  Repeating this option increases the amount of
736 output displayed.  Level one (@emph{-v}) is simply test output.  Level
737 two (@emph{-v -v}) shows messages on options, configuration, and
738 process control.  Verbose messages appear in the detailed
739 (@file{*.log}) log file, but not in the summary (@file{*.sum}) log
740 file.
742 @item @code{-V}, @code{--version}
743 Prints out the version numbers of DejaGnu, Expect, and Tcl.
745 @item @code{-x}, @code{--xml}
746 Generate XML output.  The output file is named after the tool with an
747 .xml extension.
749 @item @file{testfile}.exp[=arg(s)]
750 Specify the names of testsuites to run.  By default, @emph{runtest}
751 runs all tests for the tool, but you can restrict it to particular
752 testsuites by giving the names of the @emph{.exp} scripts that control
753 them.  @emph{testsuite}.exp cannot include directory names, only plain
754 filenames.
756 @code{arg(s)} specifies a subset of test cases to run.  For compiler
757 or assembler tests, which often use a single @emph{.exp} script
758 covering many different test case files, this option allows you to
759 further restrict the tests by listing particular test cases.  For
760 larger testsuites such as that included in GCC, this can save a lot of
761 time.  Some tools support wildcards here, but this varies from tool to
762 tool.  Typically the wildcards @emph{?}, @emph{*}, and @emph{[chars]}
763 are recognized.
765 @item @code{tclvar}=value
766 You can define Tcl variables for use by your test scripts in the same
767 style used with @emph{make} for environment variables.  For example,
768 @emph{runtest GDB=gdb.old} defines a variable called @code{GDB}; when
769 your scripts refer to @code{$GDB} in this run, they use the value
770 @emph{gdb.old}.
772 The default Tcl variables used for most tools are defined in the main
773 DejaGnu @emph{Makefile}; their values are captured in the
774 @file{site.exp} file.
775 @end table
777 @node Common Operations, , Invoking runtest, Runtest
778 @subsection Common Options
779 @cindex options, common
781 Typically, you don't need to use any command line options.  The
782 @code{--tool} option is only required when there is more than one
783 testsuite in the same directory.  The default options are in the local
784 @file{site.exp} file, created by @code{make site.exp}.
786 For example, if the directory @file{gdb/testsuite} contains a
787 collection of DejaGnu tests for GDB, you can run them like this:
789 @example
790 $ cd gdb/testsuite
791 $ runtest --tool gdb
792 @end example
794 The test output follows, then ends with:
796 @example
797 === gdb Summary ===
799 # of expected passes 508
800 # of expected failures 103
801 /usr/latest/bin/gdb version 4.14.4 -nx
802 @end example
804 You can use the option @code{--srcdir} to point to some other
805 directory containing a collection of tests:
807 @example
808 $ runtest --srcdir /devo/gdb/testsuite
809 @end example
811 By default, @code{runtest} prints only the names of the tests it runs,
812 output from any tests that have unexpected results, and a summary
813 showing how many tests passed and how many failed.  To display output
814 from all tests (whether or not they behave as expected), use the
815 @code{-a} (all) option.  For more verbose output about processes being
816 run, communication, and so on, use @code{-v} (verbose).  To see even
817 more output, use multiple @code{-v} options.  See @ref{Invoking
818 runtest} for a more detailed explanation of each @code{runtest}
819 option.
821 @node Output Files, , Runtest, Running tests
822 @section Output files
824 DejaGnu always writes two kinds of output files.  Summary output is
825 written to the @file{.sum} file, and detailed output is written to the
826 @file{.log} file.  The tool name determines the prefix for these
827 files.  For example, after running with @code{--tool gdb}, the output
828 files will be called @file{gdb.sum} and @file{gdb.log}.  For
829 troubleshooting, a debug log file that logs the operation of Expect is
830 available.  Each of these will be described in turn.
832 @menu
833 * Summary log file::
834 * Detailed log file::
835 * Debug log file::
836 @end menu
838 @node Summary log file, Detailed log file, , Output Files
839 @subsection Summary log file
840 @cindex output file, summary log
842 DejaGnu always produces a summary (@file{.sum}) output file.  This
843 summary lists the names of all test files run.  For each test file,
844 one line of output from each @code{pass} command (showing status
845 @emph{PASS} or @emph{XPASS}) or @code{fail} command (status
846 @emph{FAIL} or @emph{XFAIL}), trailing summary statistics that count
847 passing and failing tests (expected and unexpected), the full pathname
848 of the tool tested, and the version number of the tool.  All possible
849 outcomes, and all errors, are always reflected in the summary output
850 file, regardless of whether or not you specify @code{--all}.
852 If any of your tests use the procedures @code{unresolved},
853 @code{unsupported}, or @code{untested}, the summary output also
854 tabulates the corresponding outcomes.
856 For example, after running @code{runtest --tool binutils} a summary
857 log file will be written to @file{binutils.sum}.  Normally, DejaGnu
858 writes this file in your current working directory.  Use the
859 @code{--outdir} option to select a different output directory.
861 @strong{Sample summary log}
863 @example
864 Test Run By bje on Sat Nov 14 21:04:30 AEDT 2015
866 @                === gdb tests ===
868 Running ./gdb.t00/echo.exp ...
869 PASS:   Echo test
870 Running ./gdb.all/help.exp ...
871 PASS:   help add-symbol-file
872 PASS:   help aliases
873 PASS:   help breakpoint "bre" abbreviation
874 FAIL:   help run "r" abbreviation
875 Running ./gdb.t10/crossload.exp ...
876 PASS:   m68k-elf (elf-big) explicit format; loaded
877 XFAIL:  mips-ecoff (ecoff-bigmips) "ptype v_signed_char" signed C types
879 @                === gdb Summary ===
881 # of expected passes            5
882 # of expected failures          1
883 # of unexpected failures        1
884 /usr/latest/bin/gdb version 4.6.5 -q
886 @end example
888 @node Detailed log file, Debug log file, Summary log file, Output Files
889 @subsection Detailed log file
890 @cindex output file, detailed log
892 DejaGnu also saves a detailed log file (@file{.log}), showing any
893 output generated by test cases as well as the summary output.  For
894 example, after running @code{runtest --tool binutils}, a detailed log
895 file will be written to @file{binutils.log}.  Normally, DejaGnu writes
896 this file in your current working directory.  Use the @code{--outdir}
897 option to select a different output directory.
899 @strong{Sample detailed log for g++ tests}
901 @example
902 Test Run By bje on Sat Nov 14 21:07:23 AEDT 2015
904 @                === g++ tests ===
906 Running ./g++.other/t01-1.exp ...
907 PASS:   operate delete
909 Running ./g++.other/t01-2.exp ...
910 FAIL:   i960 bug EOF
911 p0000646.C: In function `int  warn_return_1 ()':
912 p0000646.C:109: warning: control reaches end of non-void function
913 p0000646.C: In function `int  warn_return_arg (int)':
914 p0000646.C:117: warning: control reaches end of non-void function
915 p0000646.C: In function `int  warn_return_sum (int, int)':
916 p0000646.C:125: warning: control reaches end of non-void function
917 p0000646.C: In function `struct foo warn_return_foo ()':
918 p0000646.C:132: warning: control reaches end of non-void function
919 Running ./g++.other/t01-4.exp ...
920 FAIL:   abort
921 900403_04.C:8: zero width for bit-field `foo'
922 Running ./g++.other/t01-3.exp ...
923 FAIL:   segment violation
924 900519_12.C:9: parse error before `;'
925 900519_12.C:12: Segmentation violation
926 /usr/latest/bin/gcc: Internal compiler error: program cc1plus got fatal signal
928 @                === g++ Summary ===
930 # of expected passes            1
931 # of expected failures          3
932 /usr/latest/bin/g++ version cygnus-2.0.1
934 @end example
936 @node Debug log file, , Detailed log file, Output Files
937 @subsection Debug log file
938 @cindex output file, debug log
940 The @code{runtest} option @code{--debug} creates a file showing the
941 output from Expect in debugging mode.  The @file{dbg.log} file is
942 created in the current directory.  The log file shows the string sent
943 to the tool being tested by each @code{send} command and the pattern
944 it compares with the tool output by each @code{expect} command.
946 The log messages begin with a message of the form:
948 @example
949 expect: does @{tool output@} (spawn_id n)
950    match pattern @{expected pattern@}?
951 @end example
953 For every unsuccessful match, Expect issues a @emph{no} after this
954 message.  If other patterns are specified for the same Expect command,
955 they are reflected also, but without the first part of the message
956 (@emph{expect... match pattern}).
958 When Expect finds a match, the log for the successful match ends with
959 @emph{yes}, followed by a record of the Expect variables set to
960 describe a successful match.
962 @strong{Example debug log file for a GDB test}
964 @example
965 send: sent @{break gdbme.c:34\n@} to spawn id 6
966 expect: does @{@} (spawn_id 6) match pattern @{Breakpoint.*at.* file
967 gdbme.c, line 34.*\(gdb\) $@}? no
968 @{.*\(gdb\) $@}? no
969 expect: does @{@} (spawn_id 0) match pattern @{return@} ? no
970 @{\(y or n\) @}? no
971 @{buffer_full@}? no
972 @{virtual@}? no
973 @{memory@}? no
974 @{exhausted@}? no
975 @{Undefined@}? no
976 @{command@}? no
977 break gdbme.c:34
978 Breakpoint 8 at 0x23d8: file gdbme.c, line 34.
979 (gdb) expect: does @{break gdbme.c:34\r\nBreakpoint 8 at 0x23d8:
980 file gdbme.c, line 34.\r\n(gdb) @} (spawn_id 6) match pattern
981 @{Breakpoint.*at.* file gdbme.c, line 34.*\(gdb\) $@}? yes
982 expect: set expect_out(0,start) @{18@}
983 expect: set expect_out(0,end) @{71@}
984 expect: set expect_out(0,string) @{Breakpoint 8 at 0x23d8: file
985 gdbme.c, line 34.\r\n(gdb) @}
986 epect: set expect_out(spawn_id) @{6@}
987 expect: set expect_out(buffer) @{break gdbme.c:34\r\nBreakpoint 8
988 at 0x23d8: file gdbme.c, line 34.\r\n(gdb) @}
989 PASS:   70      0       breakpoint line number in file
991 @end example
993 This example exhibits three properties of Expect and DejaGnu that
994 might be surprising at first glance:
996 @itemize
998 @item
999 Empty output for the first attempted match.  The first set of
1000 attempted matches shown ran against the output @emph{@{@}} --- that
1001 is, no output.  Expect begins attempting to match the patterns
1002 supplied immediately; often, the first pass is against incomplete
1003 output (or completely before all output, as in this case).
1005 @item
1006 Interspersed tool output.  The beginning of the log entry for the
1007 second attempted match may be hard to spot: this is because the prompt
1008 @emph{@{(gdb) @}} appears on the same line, just before the
1009 @emph{expect:} that marks the beginning of the log entry.
1011 @item
1012 Fail-safe patterns.  Many of the patterns tested are fail-safe
1013 patterns provided by GDB testing utilities, to reduce possible
1014 indeterminacy.  It is useful to anticipate potential variations caused
1015 by extreme system conditions (GDB might issue the message
1016 @emph{virtual memory exhausted} in rare circumstances), or by changes
1017 in the tested program (@emph{Undefined command} is the likeliest
1018 outcome if the name of a tested command changes).
1020 The pattern @emph{@{return@}} is a particularly interesting fail-safe
1021 to notice; it checks for an unexpected @key{RET} prompt.  This may
1022 happen, for example, if the tested tool can filter output through a
1023 pager.
1025 These fail-safe patterns (like the debugging log itself) are primarily
1026 useful while developing test scripts.  Use the @code{error} procedure
1027 to make the actions for fail-safe patterns produce messages starting
1028 with @emph{ERROR} on standard output, and in the detailed log file.
1030 @end itemize
1032 @node Running other DejaGnu commands, Customizing DejaGnu, Running tests, Top
1033 @chapter Running other DejaGnu commands
1035 DejaGnu now features auxiliary commands not directly related to
1036 running tests, but somehow related to the broader purpose of testing.
1038 These commands are run via the @command{dejagnu} multiplex launcher,
1039 which locates an appropriate script and the required interpreter and
1040 then runs the requested command.
1042 @menu
1043 * Invoking dejagnu::            Command line options for the launcher itself.
1044 * Invoking dejagnu help::       Reading man pages for dejagnu subcommands.
1045 * Invoking dejagnu report card::  Summarizing test results from many tools.
1046 @end menu
1048 @node Invoking dejagnu, Invoking dejagnu help, Running other DejaGnu commands, Running other DejaGnu commands
1049 @section Invoking @command{dejagnu}
1050 @cindex dejagnu, invoking
1052 The @command{dejagnu} launcher is primarily designed to pass most
1053 options on to the scripts that it runs, but does process the
1054 @option{--help} and @option{--version} options entirely internally,
1055 while also recognizing the @option{--verbose} option.
1057 @example
1058 @command{dejagnu} <command> [options...]
1059 @command{dejagnu} --help
1060 @command{dejagnu} --version
1061 @end example
1063 Note that the command names may contain multiple words.  In this case,
1064 the command can be given as separate arguments to @command{dejagnu} or
1065 combined with dashes (@samp{-}); both forms are equivalent.
1067 All words of the command name must appear before any options.  The
1068 search for a command terminates when an option is found.
1070 Note that the first valid command found is used.  A longer command
1071 name can be shadowed by a shorter command name that happens to be a
1072 prefix of the longer name, if the command name is given as multiple
1073 arguments.  The equivalent form with the longer command name combined
1074 using dashes into a single argument will correctly refer to the
1075 otherwise shadowed command.
1077 The @command{dejagnu} launcher can also be run using symbolic links,
1078 provided that the shell places the name under which @command{dejagnu}
1079 was invoked in @code{$0}.  Any dash-separated words after ``dejagnu''
1080 in the name of such a link are taken to be the leading words of a
1081 command name.
1083 The @command{dejagnu} launcher supports alternate implementations
1084 depending upon available interpreters.
1086 Options for the @command{dejagnu} launcher itself cannot be
1087 abbreviated, since the launcher has no way to know which abbreviations
1088 are unique and which would be ambiguous to the invoked command.
1090 @table @asis
1092 @item @code{--help}
1093 Print a help message instead of running a command.
1095 @item @code{-V}, @code{--version}
1096 Print a version banner for the launcher itself including the version
1097 of DejaGnu.  Any command given is ignored.
1099 @item @code{-v}, @code{--verbose}
1100 Emit additional output describing the inner workings of the
1101 @command{dejagnu} launcher.  This option is also passed on to the
1102 invoked command.
1104 @end table
1106 All arguments after the command name are passed to the invoked
1107 command.
1109 @node Invoking dejagnu help, Invoking dejagnu report card, Invoking dejagnu, Running other DejaGnu commands
1110 @section Invoking @command{dejagnu help}
1111 @cindex dejagnu help, invoking
1113 The @command{dejagnu help} tool displays long-form documentation for
1114 DejaGnu auxiliary commands that are invoked using the
1115 @command{dejagnu} launcher.
1117 @example
1118 @command{dejagnu help} [options...] <command>
1119 @end example
1121 Again, command names may contain multiple words.  This command forms
1122 an operand by joining all words in the command name using dashes
1123 (@samp{-}) and prepending @samp{dejagnu-}.  This is then used as the
1124 name of a manual page and passed to the @command{man} command.
1126 If the manual page is in a particular directory relative to the script
1127 implementing this command, a full file name is produced, otherwise,
1128 @command{man} performs its normal search.
1130 The @option{--verbose} option causes additional output describing the
1131 inner workings of the @command{dejagnu help} command to be produced.
1133 The @option{--path}, @option{-w}, and @option{-W} options are passed
1134 to @command{man}.
1136 @node Invoking dejagnu report card,  , Invoking dejagnu help, Running other DejaGnu commands
1137 @section Invoking @command{dejagnu report card}
1138 @cindex dejagnu report card, invoking
1139 @cindex dejagnu report-card, invoking
1141 The @command{dejagnu report card} tool produces a tabular summary of
1142 the results from test runs by reading the summary files that DejaGnu
1143 produces.
1145 @example
1146 @command{dejagnu report card} [<option>|<tool>|<file>]...
1147 @end example
1149 The @option{--verbose} option causes additional output describing the
1150 inner workings of the @command{dejagnu report card} command to be
1151 produced.
1153 Aside from options, the command may include a list of tools or files.
1154 Names ending in @samp{.sum} are used as-is.  Names ending in
1155 @samp{.log} are changed to instead refer to the summary file.  Names
1156 ending with a simple dot (@samp{.}) have @samp{sum} appended, for
1157 convenience when using Readline filename completion in a shell, which
1158 will complete to the dot, since there are both @samp{.sum} and
1159 @samp{.log} files produced for each tool tested.  Lastly, all other
1160 names are taken as tool names and @samp{.sum} is appended to refer to
1161 the summary file produced by DejaGnu.
1163 The relevant summary files are read and an ASCII-art table is
1164 produced.  The table has columns for counts of tests passed, failed,
1165 unsupported, unresolved, and untested.  Tests that are expected to
1166 pass and tests that are expected to fail are counted in separate
1167 columns, but known failures (@samp{KFAIL} and @samp{KPASS}) are
1168 summarized together with expected failures (@samp{XFAIL} and
1169 @samp{XPASS}) in two additional columns: @samp{?PASS} and
1170 @samp{?FAIL}.  Additionally, if a test produced any warnings or
1171 errors, tags @samp{!W!} or @samp{!E!} are added at the end of the row.
1173 @node Customizing DejaGnu, Extending DejaGnu, Running other DejaGnu commands, Top
1174 @chapter Customizing DejaGnu
1175 @cindex customization
1177 The site configuration file, @file{site.exp}, captures
1178 configuration-dependent values and propagates them to the DejaGnu test
1179 environment using Tcl variables.  This ties the DejaGnu test scripts
1180 into the @code{configure} and @code{make} programs.  If this file is
1181 setup correctly, it is possible to execute a testsuite merely by
1182 typing @code{runtest}.
1184 DejaGnu supports two @file{site.exp} files.  The multiple instances of
1185 @file{site.exp} are loaded in a fixed order.  The first file loaded is
1186 the local file @file{site.exp}, and then the optional global
1187 @file{site.exp} file as pointed to by the @code{DEJAGNU} environment
1188 variable.
1190 There is an optional global @file{site.exp}, containing configuration
1191 values that apply to DejaGnu site-wide.  @code{runtest} loads these
1192 values first.  The global @file{site.exp} contains the default values
1193 for all targets and hosts supported by DejaGnu.  This global file is
1194 identified by setting the environment variable @code{DEJAGNU} to the
1195 name of the file.  If @code{DEJAGNU} is set, but the file cannot be
1196 located, an error will be raised and @code{runtest} will abort.
1198 Any directory containing a configured testsuite also has a local
1199 @file{site.exp}, capturing configuration values specific to the tool
1200 being tested.  Since @code{runtest} loads these values last, the
1201 individual test configuration can either rely on and use, or override,
1202 any of the global values from the global @file{site.exp} file.
1204 You can usually generate or update the testsuite's local
1205 @file{site.exp} by typing @code{make site.exp} in the testsuite
1206 directory, after the test suite is configured.
1208 You can also have a file in your home directory called
1209 @file{.dejagnurc}.  This gets loaded after the other config files.
1210 Usually this is used for personal stuff, like setting the
1211 @code{all_flag} so all the output gets printed, or your own verbosity
1212 levels.  This file is usually restricted to setting command line
1213 options.
1215 You can further override the default values in a user-editable section
1216 of any @file{site.exp}, or by setting variables on the @code{runtest}
1217 command line.
1219 @menu
1220 * Local configuration file::
1221 * Global configuration file::
1222 * Board configuration file::
1223 * Remote host testing::
1224 * Configuration file values::
1225 @end menu
1227 @node Global configuration file, Local configuration file, , Customizing DejaGnu
1228 @section Global configuration file
1229 @cindex configuration file, global
1231 The global configuration file is where all the target specific
1232 configuration variables for a site are set.  For example, a
1233 centralized testing lab where multiple developers have to share an
1234 embedded development board.  There are settings for both remote hosts
1235 and remote targets.  Below is an example of a global configuration
1236 file for a Canadian cross environment.  A Canadian cross is a
1237 toolchain that is built on, runs on, and targets three different
1238 system triplets (for example, building a Solaris-hosted MIPS R4000
1239 toolchain on a GNU/Linux system).  This example is based on a
1240 configuration once used at Cygnus.
1242 @strong{Example global configuration file}
1244 @example
1245 # Make sure we look in the right place for the board description files.
1246 lappend boards_dir "/nfs/cygint/s1/cygnus/dejagnu/boards"
1248 verbose "Global config file: target_triplet is $target_triplet" 2
1249 global target_list
1251 switch -glob -- $target_triplet @{
1252 @    "native" @{
1253 @        set target_list "unix"
1254 @    @}
1255 @    "sparc64-*elf" @{
1256 @        set target_list "sparc64-sim"
1257 @    @}
1258 @    "mips-*elf" @{
1259 @        set target_list "mips-sim wilma barney"
1260 @    @}
1261 @    "mips-lsi-elf" @{
1262 @        set target_list "mips-lsi-sim@{,soft-float,el@}"
1263 @    @}
1265 @end example
1267 In this case, we have support for several cross compilers, that all
1268 run on this host.  To run DejaGnu tests on tools hosted on operating
1269 systems that do not run Expect, DejaGnu can be run on the build
1270 machine and connect to the remote host to run all the tests.  As you
1271 can see, all one does is set the variable @code{target_list} to the
1272 list of targets and options to test.
1274 In this example, simple cases like @emph{sparc64-elf} only require
1275 setting the name of the single board configuration file.  The
1276 @emph{mips-elf} target is more complicated and sets the list to three
1277 target boards.  @emph{mips-sim} is a symbolic name for a simulator
1278 ``board'' and @emph{wilma} and @emph{barney} are symbolic names for
1279 physical boards.  Symbolic names are covered in the @ref{Adding a new
1280 board} section.  The more complicated example is the entry for
1281 @emph{mips-lsi-elf}.  This one runs the tests with multiple iterations
1282 using all possible combinations of the @code{--soft-float} and the
1283 @code{--el} (little endian) options.  The braced string includes an
1284 initial comma so that the set of combinations includes no options at
1285 all.  Needless to say, this last target example is mostly specific to
1286 compiler testing.
1288 @node Local configuration file, Board configuration file, Global configuration file, Customizing DejaGnu
1289 @section Local configuration file
1290 @cindex configuration file, local
1292 It is usually more convenient to keep these @emph{manual overrides} in
1293 the @file{site.exp} local to each test directory, rather than in the
1294 global @file{site.exp} in the installed DejaGnu library.  This file is
1295 mostly for supplying tool specific info that is required by the
1296 testsuite.
1298 All local @file{site.exp} files have two sections, separated by
1299 comments.  The first section is generated by @code{make}.  It is
1300 essentially a collection of Tcl variable definitions based on
1301 @file{Makefile} environment variables.  Since they are generated by
1302 @code{make}, they contain the values as specified by @code{configure}.
1303 In particular, this section contains the @file{Makefile} variables for
1304 host and target configuration data.  Do not edit this first section;
1305 if you do, your changes will be overwritten the next time you run
1306 @code{make}.  The first section starts with:
1308 @example
1309 ## these variables are automatically generated by make ##
1310 # Do not edit here. If you wish to override these values
1311 # add them to the last section
1312 @end example
1314 In the second section, you can override any default values for all the
1315 variables.  The second section can also contain your preferred
1316 defaults for all the command line options to @code{runtest}.  This
1317 allows you to easily customize @code{runtest} for your preferences in
1318 each configured testsuite tree, so that you need not type options
1319 repeatedly on the command line.  The second section may also be empty
1320 if you do not wish to override any defaults.
1322 @strong{The first section ends with this line}
1324 @example
1325 ## All variables above are generated by configure. Do Not Edit ##
1326 @end example
1328 You can make any changes under this line.  If you wish to redefine a
1329 variable in the top section, then just put a duplicate value in this
1330 second section.  Usually the values defined in this configuration file
1331 are related to the configuration of the test run.  This is the ideal
1332 place to set the variables @code{host_triplet}, @code{build_triplet},
1333 @code{target_triplet}.  All other variables are tool dependent, i.e.,
1334 for testing a compiler, the value for @code{CC} might be set to a
1335 freshly built binary, as opposed to one in the user's path.
1337 Here's an example local site.exp file, as used for GCC/G++ testing.
1339 @strong{Local Configuration File}
1341 @example
1342 ## these variables are automatically generated by make ##
1343 # Do not edit here. If you wish to override these values
1344 # add them to the last section
1345 set rootme "/build/devo-builds/i686-pc-linux-gnu/gcc"
1346 set host_triplet i686-pc-linux-gnu
1347 set build_triplet i686-pc-linux-gnu
1348 set target_triplet i686-pc-linux-gnu
1349 set target_alias i686-pc-linux-gnu
1350 set CFLAGS ""
1351 set CXXFLAGS "-isystem /build/devo-builds/i686-pc-linux-gnu/gcc/../libio -isystem $srcdir/../libg++/src -isystem $srcdir/../libio -isystem $srcdir/../libstdc++ -isystem $srcdir/../libstdc++/stl -L/build/devo-builds/i686-pc-linux-gnu/gcc/../libg++ -L/build/devo-builds/i686-pc-linux-gnu/gcc/../libstdc++"
1352 append LDFLAGS " -L/build/devo-builds/i686-pc-linux-gnu/gcc/../ld"
1353 set tmpdir /build/devo-builds/i686-pc-linux-gnu/gcc/testsuite
1354 set srcdir "$@{srcdir@}/testsuite"
1355 ## All variables above are generated by configure. Do Not Edit ##
1356 @end example
1358 This file defines the required fields for a local configuration file,
1359 namely the three system triplets, and the srcdir.  It also defines
1360 several other Tcl variables that are used exclusively by the GCC
1361 testsuite.  For most test cases, the CXXFLAGS and LDFLAGS are supplied
1362 by DejaGnu itself for cross testing, but to test a compiler, GCC needs
1363 to manipulate these itself.
1365 @vindex test_timeout
1366 The local @file{site.exp} may also set Tcl variables such as
1367 @code{test_timeout} which can control the amount of time (in seconds)
1368 to wait for a remote test to complete.  If not specified,
1369 @code{test_timeout} defaults to 300 seconds.
1371 @node Board configuration file, Remote host testing, Local configuration file, Customizing DejaGnu
1372 @section Board configuration file
1373 @cindex configuration file, board
1375 The board configuration file is where board-specific configuration
1376 details are stored.  A board configuration file contains all the
1377 higher-level configuration settings.  There is a rough inheritance
1378 scheme, where it is possible to derive a new board description file
1379 from an existing one.  There are also collections of custom procedures
1380 for common environments.  For more information on adding a new board
1381 config file, see @ref{Adding a new board}.
1383 An example board configuration file for a GNU simulator is as follows.
1384 @code{set_board_info} is a procedure that sets the field name to the
1385 specified value.  The procedures mentioned in brackets are
1386 @emph{helper procedures}.  These are used to find parts of a toolchain
1387 required to build an executable image that may reside in various
1388 locations.  This is mostly of use when the startup code, the standard
1389 C libraries, or the toolchain itself is part of your build tree.
1391 @strong{Example file}
1392 @example
1393 # This is a list of toolchains that are supported on this board.
1394 set_board_info target_install @{sparc64-elf@}
1396 # Load the generic configuration for this board. This will define any
1397 # routines needed by the tool to communicate with the board.
1398 load_generic_config "sim"
1400 # We need this for find_gcc and *_include_flags/*_link_flags.
1401 load_base_board_description "basic-sim"
1403 # Use long64 by default.
1404 process_multilib_options "long64"
1406 setup_sim sparc64
1408 # We only support newlib on this target. We assume that all multilib
1409 # options have been specified before we get here.
1411 set_board_info compiler "[find_gcc]"
1412 set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
1413 set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
1414 # No linker script.
1415 set_board_info ldscript ""
1417 # Used by a few gcc.c-torture testcases to delimit how large the
1418 # stack can be.
1419 set_board_info gcc,stack_size 16384
1420 # The simulator doesn't return exit status and we need to indicate this
1421 # the standard GCC wrapper will work with this target.
1422 set_board_info needs_status_wrapper 1
1423 # We can't pass arguments to programs.
1424 set_board_info noargs 1
1425 @end example
1427 There are five helper procedures used in this example:
1429 @itemize
1430 @item
1431 @code{find_gcc} looks for a copy of the GNU compiler in your build
1432 tree, or it uses the one in your path.  This will also return the
1433 proper transformed name for a cross compiler if you whole build tree
1434 is configured for one.  DejaGnu will use this procedure to locate a
1435 compiler if the @code{compiler} field is not set.
1437 @item
1438 @code{libgloss_include_flags} returns the flags to compile using
1439 @ref{Libgloss, libgloss}, the GNU board support package (BSP).
1441 @item
1442 @code{libgloss_link_flags} returns the flags to link an executable
1443 using @ref{Libgloss, libgloss}.
1445 @item
1446 @code{newlib_include_flags} returns the flags to compile using
1447 @uref{https://sourceware.org/newlib, newlib}, a re-entrant standard C
1448 library for embedded systems comprising of non-GPL'd code
1450 @item
1451 @code{newlib_link_flags} returns the flags to link an executable with
1452 @uref{https://sourceware.org/newlib, newlib}.
1454 @end itemize
1456 @node Remote host testing, Configuration file values, Board configuration file, Customizing DejaGnu
1457 @section Remote host testing
1458 @cindex testing on remote hosts
1460 DejaGnu also supports running the tests on a remote host.  To set this
1461 up, the remote host needs an FTP server, and a telnet server.
1462 Currently foreign operating systems used as remote hosts are VxWorks,
1463 VRTX, DOS/Windows 3.1, MacOS and Windows.
1465 The recommended source for a Windows-based FTP server is to get IIS
1466 (either IIS 1 or Personal Web Server) from
1467 @uref{http://www.microsoft.com,http://www.microsoft.com}.  When you
1468 install it, make sure you install the FTP server - it's not selected
1469 by default.  Go into the IIS manager and change the FTP server so that
1470 it does not allow anonymous FTP.  Set the home directory to the root
1471 directory (i.e. c:\) of a suitable drive.  Allow writing via FTP.
1473 It will create an account like IUSR_FOOBAR where foobar is the name of
1474 your machine.  Go into the user editor and give that account a
1475 password that you don't mind hanging around in the clear (i.e. not the
1476 same as your admin or personal passwords).  Also, add it to all the
1477 various permission groups.
1479 You'll also need a telnet server.  For Windows, go to the
1480 @uref{http://ataman.com,Ataman} web site, pick up the Ataman Remote
1481 Logon Services for Windows, and install it.  You can get started on
1482 the eval period anyway.  Add IUSR_FOOBAR to the list of allowed users,
1483 set the HOME directory to be the same as the FTP default directory.
1484 Change the Mode prompt to simple.
1486 Now you need to pick a directory name to do all the testing in.  For
1487 the sake of this example, we'll call it piggy (i.e. c:\piggy).  Create
1488 this directory.
1490 You'll need a Unix machine.  Create a directory for the scripts you'll
1491 need.  For this example, we'll use /usr/local/swamp/testing.  You'll
1492 need to have a source tree somewhere, say /usr/src/devo.  Now, copy
1493 some files from releng's area in SV to your machine:
1495 @strong{Remote host setup}
1497 @example
1498 cd /usr/local/swamp/testing
1499 mkdir boards
1500 scp darkstar.welcomehome.org:/dejagnu/cst/bin/MkTestDir .
1501 scp darkstar.welcomehome.org:/dejagnu/site.exp .
1502 scp darkstar.welcomehome.org:/dejagnu/boards/useless98r2.exp boards/foobar.exp
1503 export DEJAGNU=/usr/local/swamp/testing/site.exp
1504 @end example
1506 You must edit the boards/foobar.exp file to reflect your machine;
1507 change the hostname (foobar.com), username (iusr_foobar), password,
1508 and ftp_directory (c:/piggy) to match what you selected.
1510 Edit the global @file{ site.exp} to reflect your boards directory:
1512 @strong{Add The Board Directory}
1514 @example
1515 lappend boards_dir "/usr/local/swamp/testing/boards"
1516 @end example
1518 Now run MkTestDir, which is in the contrib directory.  The first
1519 parameter is the toolchain prefix, the second is the location of your
1520 devo tree.  If you are testing a cross compiler (ex: you have
1521 sh-hms-gcc.exe in your PATH on the PC), do something like this:
1523 @strong{Setup Cross Remote Testing}
1525 @example
1526 ./MkTestDir sh-hms /usr/dejagnu/src/devo
1527 @end example
1529 If you are testing a native PC compiler (ex: you have gcc.exe in your
1530 PATH on the PC), do this:
1532 @strong{Setup Native Remote Testing}
1534 @example
1535 ./MkTestDir '' /usr/dejagnu/src/devo
1536 @end example
1538 To test the setup, @code{ftp} to your PC using the username
1539 (iusr_foobar) and password you selected.  CD to the test directory.
1540 Upload a file to the PC.  Now telnet to your PC using the same
1541 username and password.  CD to the test directory.  Make sure the file
1542 is there.  Type "set" and/or "gcc -v" (or sh-hms-gcc -v) and make sure
1543 the default PATH contains the installation you want to test.
1545 @strong{Run Test Remotely}
1547 @example
1548 cd /usr/local/swamp/testing
1549 make  -k -w check RUNTESTFLAGS="--host_board foobar --target_board foobar -v -v" > check.out 2>&1
1550 @end example
1552 To run a specific test, use a command like this (for this example,
1553 you'd run this from the gcc directory that MkTestDir created):
1555 @strong{Run a Test Remotely}
1557 @example
1558 make check RUNTESTFLAGS="--host_board sloth --target_board sloth -v compile.exp=921202-1.c"
1559 @end example
1561 Note: if you are testing a cross-compiler, put in the correct target
1562 board.  You'll also have to download more .exp files and modify them
1563 for your local configuration.  The -v's are optional.
1565 @node Configuration file values, , Remote host testing, Customizing DejaGnu
1566 @section Configuration file values
1567 @cindex configuration values
1569 @vindex target_info
1570 DejaGnu uses a Tcl associative array to hold all the info for each
1571 machine.  In the case of a Canadian cross, this means host information
1572 as well as target information.  The named array is called
1573 @code{target_info}, and it has two indices.  The following fields are
1574 part of the array.
1576 @menu
1577 * Command line option variables::
1578 * User configuration file::
1579 @end menu
1581 @node Command line option variables, User configuration file, , Configuration file values
1582 @subsection Command line option variables
1584 In the user editable second section of the @ref{User configuration
1585 file} you can not only override the configuration variables captured
1586 in the first section, but also specify default values for all of the
1587 @code{runtest} command line options.  Excepting @code{--debug},
1588 @code{--help}, and @code{--version}, each command line option has an
1589 associated Tcl variable.  Use the Tcl @code{set} command to specify a
1590 new default value (as for the configuration variables).  The following
1591 table describes the correspondence between command line options and
1592 variables you can set in @file{site.exp}.  Refer to @ref{Invoking
1593 runtest}, for explanations of the command-line options.
1595 @multitable {--target_board} {TOOL_EXECUTABLE} {verbosity level greater than or equal to 0}
1596 @headitem
1597 Option@tab Tcl variable@tab Description
1599 @item
1600 -a, --all@tab all_flag@tab display all test results if set
1602 @item
1603 --build@tab build_triplet@tab system triplet for the build host
1605 @item
1606 --dir@tab cmdline_dir_to_run@tab run only tests in the specified directory
1608 @item
1609 --global_init@tab global_init_file@tab file name for global init file in @code{libdir}
1611 @item
1612 --host@tab host_triplet@tab system triplet for the host
1614 @item
1615 --host_board@tab host_board@tab host board definition to use
1617 @item
1618 --ignore@tab ignoretests @tab do not run the specified tests
1620 @item
1621 --local_init@tab local_init_file@tab file name for local init file in @code{objdir}
1623 @item
1624 --log_dialog@tab log_dialog@tab emit Expect output to standard output
1626 @item
1627 --outdir@tab outdir@tab directory for @file{.sum} and @file{.log} files
1629 @item
1630 --objdir@tab objdir@tab directory for pre-compiled binaries
1632 @item
1633 --reboot@tab reboot@tab reboot the target if set to 1
1635 @item
1636 --srcdir@tab srcdir@tab directory of test subdirectories
1638 @item
1639 --target@tab target_triplet@tab system triplet for the target
1641 @item
1642 --target_board@tab target_list@tab list of target boards to run tests on
1644 @item
1645 --tool@tab tool@tab name of tool to test (selects tests to run)
1647 @item
1648 --tool_exec@tab TOOL_EXECUTABLE@tab path to the executable to test
1650 @item
1651 --tool_opts@tab TOOL_OPTIONS@tab additional options to pass to the tool
1653 @item
1654 --tool_root_dir@tab tool_root_dir@tab tool root directory
1656 @item
1657 -v, --verbose@tab verbose@tab verbosity level greater than or equal to 0
1659 @end multitable
1661 @node User configuration file, , Command line option variables, Configuration file values
1662 @subsection Per-user configuration file (.dejagnurc)
1664 The per-user configuration file is named @file{.dejagnurc} in the
1665 user's home directory.  It is used to customize the behaviour of
1666 @code{runtest} for each user -- typically the user's preference for
1667 log verbosity, and for storing any experimental Tcl procedures.  An
1668 example @file{~/.dejagnurc} file looks like:
1670 @strong{Example .dejagnurc}
1672 @example
1673 set all_flag 1
1674 set RLOGIN /usr/ucb/rlogin
1675 set RSH /usr/local/sbin/ssh
1676 @end example
1678 Here @code{all_flag} is set so that I see all the test cases that PASS
1679 along with the ones that FAIL.  I also set @code{RLOGIN} to the BSD
1680 (non-Kerberos) version.  I also set @code{RSH} to the SSH secure
1681 shell, as rsh is mostly used to test Unix machines within a local
1682 network.
1684 @node Extending DejaGnu, Unit testing, Customizing DejaGnu, Top
1685 @chapter Extending DejaGnu
1686 @cindex extensions
1687 @cindex extending DejaGnu
1689 This chapter describes how to extend DejaGnu with new testsuites, new
1690 tools, new targets and new boards.
1692 @menu
1693 * Adding a new testsuite::
1694 * Adding a new tool::
1695 * Adding a new target::
1696 * Adding a new board::
1697 * Board file values::
1698 * Writing a test case::
1699 * Debugging a test case::
1700 * Adding a test case to a testsuite::
1701 * Test case special variables: Test case variables.
1702 @end menu
1704 @node Adding a new testsuite, Adding a new tool, , Extending DejaGnu
1705 @section Adding a new testsuite
1706 @cindex adding, testsuite
1708 The testsuite for a new package should always be located in the source
1709 directory of that package.  DejaGnu requires this directory to be
1710 named @file{testsuite}.  Under this directory, the test cases go in
1711 various subdirectories whose name begins with the tool name.  The
1712 organization of the various testsuite subdirectories is up to you.
1713 For a tool named @code{gdb}, for instance, each subdirectory
1714 containing tests must start with @samp{gdb.}.
1716 @node Adding a new tool, Adding a new target, Adding a new testsuite, Extending DejaGnu
1717 @section Adding a new tool
1719 In general, the best way to learn how to write code, or even prose, is
1720 to read something similar.  This principle applies to test cases and
1721 to testsuites.  Unfortunately, well-established testsuites have a way
1722 of developing their own conventions: as test writers become more
1723 experienced with DejaGnu and with Tcl, they accumulate more utilities,
1724 and take advantage of more and more features of Expect and Tcl in
1725 general.  Inspecting such established testsuites may make the prospect
1726 of creating an entirely new testsuite appear overwhelming.
1727 Nevertheless, it is straightforward to start a new testsuite.
1729 To help orient you further in this task, here is an outline of the
1730 steps to begin building a testsuite for a program example.
1732 Create or select a directory to contain your new collection of tests.
1733 Change into that directory (shown here as @file{testsuite}):
1735 Create a @file{configure.in} file in this directory, to control
1736 configuration-dependent choices for your tests.  So far as DejaGnu is
1737 concerned, the important thing is to set a value for the variable
1738 @code{target_abbrev}; this value is the link to the init file you will
1739 write soon.  (For simplicity, we assume the environment is Unix, and
1740 use @emph{unix} as the value.)
1742 What else is needed in @file{configure.in} depends on the requirements
1743 of your tool, your intended test environments, and which configure
1744 system you use.  This example is a minimal @file{configure.ac} for use
1745 with GNU Autoconf.
1747 @subsection Sample Makefile.in Fragment
1749 Create @file{Makefile.in} (if using Autoconf), or @file{Makefile.am}
1750 (if using Automake), the source file used by configure to build your
1751 @file{Makefile}.  If you are using GNU Automake.just add the keyword
1752 @emph{dejagnu} to the @emph{AUTOMAKE_OPTIONS} variable in your
1753 @file{Makefile.am} file.  This will add all the @file{Makefile}
1754 support needed to run DejaGnu, and support the @ref{Make Check, make
1755 check} target.
1757 You also need to include two targets important to DejaGnu:
1758 @emph{check}, to run the tests, and @emph{site.exp}, to set up the Tcl
1759 copies of configuration-dependent values.  This is called the
1760 @ref{Local configuration file} The @emph{check} target must invoke the
1761 @code{runtest} program to run the tests.
1763 The @emph{site.exp} target should usually set up (among other things)
1764 the @emph{$tool} variable for the name of your program.  If the local
1765 @file{site.exp} file is setup correctly, it is possible to execute the
1766 tests by merely typing @code{runtest} on the command line.
1768 @example
1769 # Look for a local version of DejaGnu, otherwise use one in the path
1770 RUNTEST = `if test -f $(top_srcdir)/../dejagnu/runtest; then \
1771       echo $(top_srcdir) ../dejagnu/runtest; \
1772     else \
1773       echo runtest; \
1774     fi`
1776 # Flags to pass to runtest
1777 RUNTESTFLAGS =
1779 # Execute the tests
1780 check: site.exp all
1781 @        $(RUNTEST) $(RUNTESTFLAGS) --tool $@{example@} --srcdir $(srcdir)
1783 # Make the local config file
1784 site.exp: ./config.status Makefile
1785 @        @@echo "Making a new config file..."
1786 @        -@@rm -f ./tmp?
1787 @        @@touch site.exp
1789 @        -@@mv site.exp site.bak
1790 @        @@echo "## these variables are automatically generated by make ##" > ./tmp0
1791 @        @@echo "# Do not edit here. If you wish to override these values" >> ./tmp0
1792 @        @@echo "# add them to the last section" >> ./tmp0
1793 @        @@echo "set host_os $@{host_os@}" >> ./tmp0
1794 @        @@echo "set host_alias $@{host_alias@}" >> ./tmp0
1795 @        @@echo "set host_cpu $@{host_cpu@}" >> ./tmp0
1796 @        @@echo "set host_vendor $@{host_vendor@}" >> ./tmp0
1797 @        @@echo "set target_os $@{target_os@}" >> ./tmp0
1798 @        @@echo "set target_alias $@{target_alias@}" >> ./tmp0
1799 @        @@echo "set target_cpu $@{target_cpu@}" >> ./tmp0
1800 @        @@echo "set target_vendor $@{target_vendor@}" >> ./tmp0
1801 @        @@echo "set host_triplet $@{host_canonical@}" >> ./tmp0
1802 @        @@echo "set target_triplet $@{target_canonical@}">>./tmp0
1803 @        @@echo "set tool binutils" >> ./tmp0
1804 @        @@echo "set srcdir $@{srcdir@}" >> ./tmp0
1805 @        @@echo "set objdir `pwd`" >> ./tmp0
1806 @        @@echo "set $@{examplename@} $@{example@}" >> ./tmp0
1807 @        @@echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
1808 @        @@cat ./tmp0 > site.exp
1809 @        @@sed < site.bak \
1810 @            -e '1,/^## All variables above are.*##/ d' \
1811 @            >> site.exp
1812 @        -@@rm -f ./tmp?
1813 @end example
1815 @subsection Simple tool init file for batch programs
1817 The tool init file may be placed in @file{testsuite/lib} or in
1818 @file{testsuite/lib/tool} and must be named @file{@var{tool}.exp},
1819 where @var{tool} is the name of the tool to be tested.  For this
1820 example, we will use the name @samp{example} for the tool name, which
1821 means that the tool init file must be named @file{example.exp}.  If the
1822 program being tested is not interactive, you can get away with this
1823 minimal tool init file to begin with:
1825 @example
1826 proc example_exit @{@} @{@}
1827 proc example_version @{@} @{@}
1828 @end example
1830 By convention, the file name for the executable for a tool should be
1831 stored in a global variable with the same name as the tool, but in all
1832 uppercase.  For our example program @samp{example}, the name of the
1833 program under test should be stored in @samp{EXAMPLE}.
1835 @subsection Simple tool init file for interactive programs
1837 If the program being tested is interactive, however, you might as well
1838 define a @emph{start} routine and invoke it by using a tool init file
1839 like this:
1841 @example
1842 proc example_exit @{@} @{@}
1843 proc example_version @{@} @{@}
1845 proc example_start @{@} @{
1846 @     global EXAMPLE
1847 @     spawn $EXAMPLE
1848 @     expect @{
1849 @        -re "" @{@}
1850 @     @}
1853 # Start the program running we want to test
1854 example_start
1855 @end example
1857 Create a directory whose name begins with your tool's name, to contain
1858 tests.  For example, if the tool name is @samp{example}, then the
1859 directories all need to start with @samp{example.}.  Create a sample
1860 test file ending in @file{.exp}.  You can name the file
1861 @file{first-try.exp}.  To begin with, just write one line of Tcl code
1862 to issue a message:
1864 @example
1865 send_user "Testing: one, two...\n"
1866 @end example
1868 @subsection Testing A New Tool Config
1870 Back in the @file{testsuite} (top level) directory, run
1871 @code{configure}.  Typically you do this while in the build directory.
1872 You are now ready to type @code{make check} or @code{runtest}.  You
1873 should see something like this:
1875 @example
1876 Test Run By bje on Sat Nov 14 15:08:54 AEDT 2015
1878 @                === example tests ===
1880 Running ./example.0/first-try.exp ...
1881 Testing: one, two...
1883 @                === example Summary ===
1884 @end example
1886 There is no output in the summary, because so far the example does not
1887 call any of the procedures that report a test outcome.
1889 Write some real tests.  For an interactive tool, you should probably
1890 write a real exit routine in fairly short order.  In any case, you
1891 should also write a real version routine soon.
1893 @node Adding a new target, Adding a new board, Adding a new tool, Extending DejaGnu
1894 @section Adding a new target
1895 @cindex adding, target
1897 DejaGnu has some additional requirements for target support, beyond
1898 the general-purpose provisions of a @code{configure} script.  DejaGnu
1899 must actively communicate with the target, rather than simply
1900 generating or managing code for the target architecture.  Therefore,
1901 each tool requires an initialization module for each target.  For new
1902 targets, you must supply a few Tcl procedures to adapt DejaGnu to the
1903 target.
1905 Usually the best way to write a new initialization module is to edit
1906 an existing initialization module; some trial and error will be
1907 required.  If necessary, you can use the @code{--debug} option to see
1908 what is really going on.
1910 When you code an initialization module, be generous in printing
1911 information using the @code{verbose} procedure.  In cross-development
1912 environments, most of the work is in getting the communications right.
1913 Code for communicating via TCP/IP networks or serial lines is
1914 available in a DejaGnu library files such as @file{lib/telnet.exp}.
1916 If you suspect a communication problem, try running the connection
1917 interactively from Expect.  (There are three ways of running Expect as
1918 an interactive interpreter.  You can run Expect with no arguments, and
1919 control it completely interactively; or you can use @code{expect -i}
1920 together with other command-line options and arguments; or you can run
1921 the command @code{interpreter} from any Expect procedure.  Use
1922 @code{return} to get back to the calling procedure (if any), or
1923 @code{return -tcl} to make the calling procedure itself return to its
1924 caller; use @code{exit} or end-of-file to leave Expect altogether.)
1925 Run the program whose name is recorded in @code{$connectmode}, with
1926 the arguments in @code{$targetname}, to establish a connection.  You
1927 should at least be able to get a prompt from any target that is
1928 physically connected.
1930 @node Adding a new board, Board file values, Adding a new target, Extending DejaGnu
1931 @section Adding a new board
1932 @cindex adding, board
1934 Adding a new board consists of creating a new board configuration
1935 file.  Examples are in @file{dejagnu/baseboards}.  Usually to make a
1936 new board file, it's easiest to copy an existing one.  It is also
1937 possible to have your file be based on a @emph{baseboard} file with
1938 only one or two changes needed.  Typically, this can be as simple as
1939 just changing the linker script.  Once the new baseboard file is done,
1940 add it to the @code{boards_DATA} list in the
1941 @file{dejagnu/baseboards/Makefile.am}, and regenerate the Makefile.in
1942 using automake.  Then just rebuild and install DejaGnu.  You can test
1943 it by:
1945 There is a crude inheritance scheme going on with board files, so you
1946 can include one board file into another, The two main procedures used
1947 to do this are @code{load_generic_config} and
1948 @code{load_base_board_description}.  The generic configuration file
1949 contains other procedures used for a certain class of target.  The
1950 board description file is where the board specific settings go.
1951 Commonly there are similar target environments with just different
1952 processors.
1954 @strong{Testing a New Board Configuration File}
1956 @example
1957 make check RUNTESTFLAGS="--target_board=newboardfile".
1958 @end example
1960 Here's an example of a board configuration file.  There are several
1961 @emph{helper procedures} used in this example.  A helper procedure is
1962 one that look for a tool of files in commonly installed locations.
1963 These are mostly used when testing in the build tree, because the
1964 executables to be tested are in the same tree as the new DejaGnu
1965 files.  The helper procedures are the ones in brackets, which
1966 indicates a Tcl procedure call.
1968 @strong{Example Board Configuration File}
1970 @example
1971 # Load the generic configuration for this board. This will define a basic
1972 # set of routines needed by the tool to communicate with the board.
1973 load_generic_config "sim"
1975 # basic-sim.exp is a basic description for the standard Cygnus simulator.
1976 load_base_board_description "basic-sim"
1978 # The compiler used to build for this board. This has *nothing* to do
1979 # with what compiler is tested if we're testing gcc. Further, this is
1980 # the default, so this line is optional for most boards.
1981 set_board_info compiler "[find_gcc]"
1983 # We only support newlib on this target.
1984 # However, we include libgloss so we can find the linker scripts.
1985 set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]"
1986 set_board_info ldflags "[newlib_link_flags]"
1988 # No linker script for this board.
1989 set_board_info ldscript "-Tsim.ld"
1991 # The simulator doesn't return exit statuses and we need to indicate this.
1992 set_board_info needs_status_wrapper 1
1994 # Can't pass arguments to this target.
1995 set_board_info noargs 1
1997 # No signals.
1998 set_board_info gdb,nosignals 1
2000 # And it can't call functions.
2001 set_board_info gdb,cannot_call_functions 1
2002 @end example
2004 @node Board file values, Writing a test case, Adding a new board, Extending DejaGnu
2005 @section Board configuration file values
2007 The following fields are in the @code{board_info} array.  These are
2008 set by the @code{set_board_info} procedure (or @code{add_board_info}
2009 procedure for appending to lists).  Both procedures take a field name
2010 and a value for the field (or is added to the field), respectively.
2011 Some common board info fields are shown below.
2013 @multitable @columnfractions 0.2 0.2 0.6
2014 @item
2015 @strong{Field} @tab @strong{Example value} @tab @strong{Description}
2016 @item
2017 compiler@tab @code{[find_gcc]}@tab The path to the compiler to use.
2018 @item
2019 cflags@tab @code{-mca}@tab Compilation flags for the compiler.
2020 @item
2021 ldflags@tab @code{[libgloss_link_flags] [newlib_link_flags]}@tab Linking flags for the compiler.
2022 @item
2023 ldscript@tab @code{-Wl,-Tidt.ld}@tab The linker script to use when cross compiling.
2024 @item
2025 libs@tab @code{-lgcc}@tab Any additional libraries to link in.
2026 @item
2027 shell_prompt@tab @code{cygmon>}@tab The command prompt of the remote shell.
2028 @item
2029 hex_startaddr@tab @code{0xa0020000}@tab The Starting address as a string.
2030 @item
2031 start_addr@tab 0xa0008000@tab The starting address as a value.
2032 @item
2033 startaddr@tab @code{a0020000}@tab
2034 @item
2035 exit_statuses_bad@tab 1@tab Whether there is an accurate exit status.
2036 @item
2037 reboot_delay@tab 10@tab The delay between power off and power on.
2038 @item
2039 unreliable@tab 1@tab Whether communication with the board is unreliable.
2040 @item
2041 sim@tab [find_sim]@tab The path to the simulator to use.
2042 @item
2043 objcopy@tab $tempfil@tab The path to the @code{objcopy} program.
2044 @item
2045 support_libs@tab @code{$@{prefix_dir@}/i386-coff/}@tab Support libraries needed for cross compiling.
2046 @item
2047 addl_link_flags@tab @code{-N}@tab Additional link flags, rarely used.
2048 @item
2049 remotedir@tab @code{/tmp/runtest.[pid]}@tab Directory on the remote target in which executables are downloaded and executed.
2050 @end multitable
2052 These fields are used by the GCC and GDB tests, and are mostly only
2053 useful to somewhat trying to debug a new board file for one of these
2054 tools.  Many of these are used only by a few testcases, and their
2055 purpose is esoteric.  These are listed with sample values as a guide
2056 to better guessing if you need to change any of these.
2058 @strong{Board Info Fields For GCC & GDB}
2060 @multitable @columnfractions 0.333333333333333 0.333333333333333 0.333333333333333
2061 @item
2062 Field@tab Sample Value@tab Description
2063 @item
2064 strip@tab $tempfile@tab Strip the executable of symbols.
2065 @item
2066 gdb_load_offset@tab "0x40050000"@tab
2067 @item
2068 gdb_protocol@tab "remote"@tab The GDB debugging protocol to use.
2069 @item
2070 gdb_sect_offset@tab "0x41000000";@tab
2071 @item
2072 gdb_stub_ldscript@tab "-Wl,-Teva-stub.ld"@tab The linker script to use with a GDB stub.
2073 @item
2074 gdb,noargs@tab 1@tab Whether the target can take command line arguments.
2075 @item
2076 gdb,nosignals@tab 1@tab Whether there are signals on the target.
2077 @item
2078 gdb,short_int@tab 1@tab
2079 @item
2080 gdb,target_sim_options@tab "-sparclite"@tab Special options to pass to the simulator.
2081 @item
2082 gdb,timeout@tab 540@tab Timeout value to use for remote communication.
2083 @item
2084 gdb_init_command@tab "set mipsfpu none"@tab A single command to send to GDB before the program being
2085 debugged is started.
2086 @item
2087 gdb_init_commands@tab "print/x \$fsr = 0x0"@tab Same as @emph{gdb_init_command}, except
2088 that this is a list, more commands can be added.
2089 @item
2090 gdb_load_offset@tab "0x12020000"@tab
2091 @item
2092 gdb_opts@tab "--command gdbinit"@tab
2093 @item
2094 gdb_prompt@tab "\\(gdb960\\)"@tab The prompt GDB is using.
2095 @item
2096 gdb_run_command@tab "jump start"@tab
2097 @item
2098 gdb_stub_offset@tab "0x12010000"@tab
2099 @item
2100 use_gdb_stub@tab 1@tab Whether to use a GDB stub.
2101 @item
2102 wrap_m68k_aout@tab 1@tab
2103 @item
2104 gcc,no_label_values@tab 1@tab
2105 @item
2106 gcc,no_trampolines@tab 1@tab
2107 @item
2108 gcc,no_varargs@tab 1@tab
2109 @item
2110 gcc,stack_size@tab 16384@tab Stack size to use with some GCC testcases.
2111 @item
2112 ieee_multilib_flags@tab "-mieee"@tab
2113 @item
2114 is_simulator@tab 1@tab
2115 @item
2116 needs_status_wrapper@tab 1@tab
2117 @item
2118 no_double@tab 1@tab
2119 @item
2120 no_long_long@tab 1@tab
2121 @item
2122 noargs@tab 1@tab
2123 @item
2124 target_install@tab @{sh-hms@}@tab
2125 @end multitable
2127 @node Writing a test case, Debugging a test case, Board file values, Extending DejaGnu
2128 @section Writing a test case
2129 @cindex Writing a test case
2131 The easiest way to prepare a new test case is to base it on an
2132 existing one for a similar situation.  There are two major categories
2133 of tests: batch-oriented and interactive.  Batch-oriented tests are
2134 usually easier to write.
2136 The GCC tests are a good example of batch-oriented tests.  All GCC
2137 tests consist primarily of a call to a single common procedure, since
2138 all the tests either have no output, or only have a few warning
2139 messages when successfully compiled.  Any non-warning output
2140 constitutes a test failure.  All the C code needed is kept in the test
2141 directory.  The test driver, written in Tcl, need only get a listing
2142 of all the C files in the directory, and compile them all using a
2143 generic procedure.  This procedure and a few others supporting for
2144 these tests are kept in the library module @file{lib/c-torture.exp} of
2145 the GCC testsuite.  Most tests of this kind use very few Expect
2146 features, and are coded almost purely in Tcl.
2148 Writing the complete suite of C tests, then, consisted of these steps:
2150 @itemize
2151 @item
2152 Copying all the C code into the test directory.  These tests were
2153 based on the C-torture test created by Torbjorn Granlund (on behalf of
2154 the Free Software Foundation) for GCC development.
2156 @item
2157 Writing (and debugging) the generic Tcl procedures for compilation.
2159 @item
2160 Writing the simple test driver: its main task is to search the
2161 directory (using the Tcl procedure @emph{glob} for filename expansion
2162 with wildcards) and call a Tcl procedure with each filename.  It also
2163 checks for a few errors from the testing procedure.
2164 @end itemize
2166 Testing interactive programs is intrinsically more complex.  Tests for
2167 most interactive programs require some trial and error before they are
2168 complete.
2170 However, some interactive programs can be tested in a simple fashion
2171 reminiscent of batch tests.  For example, prior to the creation of
2172 DejaGnu, the GDB distribution already included a wide-ranging testing
2173 procedure.  This procedure was very robust, and had already undergone
2174 much more debugging and error checking than many recent DejaGnu test
2175 cases.  Accordingly, the best approach was simply to encapsulate the
2176 existing GDB tests, for reporting purposes.  Thereafter, new GDB tests
2177 built up a family of Tcl procedures specialized for GDB testing.
2179 @subsection Hints on writing a test case
2180 @cindex hints on writing a test case
2181 @cindex test cases, writing
2183 To preserve basic sanity, no should test ever pass if there was any
2184 kind of problem in the test case.  To take an extreme case, tests that
2185 pass even when the tool will not spawn are misleading.  Ideally, a
2186 test in this sort of situation should not fail either.  Instead, print
2187 an error message by calling one of the DejaGnu procedures
2188 @code{perror} or @code{warning}.  Note that using @code{perror} will
2189 cause the next text result to be reported as @samp{UNRESOLVED}, so
2190 printing an error and allowing the test to fail is a good option.
2192 If you have trouble understanding why a pattern does not match the
2193 program output, try using the @code{--debug} option to @code{runtest},
2194 and examine the debug log carefully.
2196 If you use glob patterns, you will need to escape any @samp{*},
2197 @samp{?}, @samp{[}, @samp{]}, and @samp{\} characters that are meant
2198 to match literally.  If you use regular expressions, see the
2199 @cite{re_syntax(n)} manual page from Tcl for the syntax details, and
2200 be sure to understand what punctuation characters match literally and
2201 what characters have special meanings in regular expressions.
2203 Tcl has a few options for quoting; the most notable are @samp{@{@}}
2204 and @samp{""}.  These quotes behave differently: @samp{@{@}} must
2205 balance, while @samp{""} performs various interpolations.  In
2206 @samp{@{@}} quotes, unbalanced @samp{@{} or @samp{@}} characters must
2207 be escaped with @samp{\} and these escapes are @emph{not} removed;
2208 fortunately, backslash-escaped braces match literal braces in Tcl
2209 regular expressions.  In @samp{""} quotes, any embedded @samp{"}
2210 characters must be escaped, a literal @samp{$} begins a variable
2211 substitution, and unescaped @samp{[]} introduce a Tcl command
2212 substitution.
2214 @subsubheading Synchronization with the tested program
2216 A DejaGnu testsuite executes concurrently with the programs that it
2217 tests.  As a result, DejaGnu may see parts of the tested program's
2218 output while the tested program is still producing more output.
2219 Expect patterns must be written to handle the possibility that
2220 incomplete output from the tested program will be considered for
2221 matching.
2223 Expect reads the output from the tested program into an internal
2224 matching buffer and removes everything from the start of the buffer to
2225 the end of the match when a match is found.  Any given character can
2226 be matched at most once, or skipped if a match is found starting later
2227 in the buffer or the buffer reaches its capacity.  Anything left in
2228 the buffer after the end of the match remains in the buffer and is
2229 considered for the next @code{expect} command.  If @code{expect} is
2230 invoked and no patterns match, Expect waits for more text to arrive.
2231 New text is appended to the buffer as it is read.  If the buffer
2232 reaches its capacity, the entire contents of the buffer are discarded
2233 and Expect resumes reading.
2235 In Expect patterns, the regular expression anchors @samp{^} and
2236 @samp{$} match at the beginning and end of the @emph{buffer}, not at
2237 line boundaries.  The @samp{$} anchor must be used with care because
2238 it will match at the end of what Expect @emph{has} read, but the
2239 program may have produced more output that Expect @emph{has not yet}
2240 read.  Similarly, regular expressions ending with the @samp{*}
2241 quantifier can potentially match a prefix of the intended text, only
2242 for the rest to arrive shortly thereafter.
2244 Maintaining synchronization with the tested program is easier if the
2245 patterns match all of the output generated by the tested program; this
2246 is called closure.
2248 For interactive programs, a prompt is usually a good synchronization
2249 point, provided that the program's prompt can be uniquely recognized.
2250 Since the prompt is usually the last output until the program receives
2251 further input, the @samp{$} anchor can be useful here.
2253 If the output from the tested program is organized into lines,
2254 matching end-of-line using @samp{\n} is usually a good way to process
2255 one line at a time.  Note that terminal settings may result in the
2256 insertion of additional @samp{\r} characters, usually translating
2257 @samp{\n} to @samp{\r\n}.
2259 Be careful not to neglect output generated by setup rather than by the
2260 interesting parts of a test case.  For example, while testing GDB, a
2261 @samp{set height 0\n} command is issued.  The purpose is simply to
2262 make sure GDB never calls a paging program.  The @samp{set height}
2263 command in GDB does not generate any output; but running any command
2264 makes GDB issue a new @samp{(gdb) } prompt.  If there were no
2265 @code{expect} command to match this prompt, the @samp{(gdb) } prompt
2266 will remain in the buffer and begin the text seen by the next
2267 @code{expect} command---which might make that pattern fail to match.
2269 @subsubheading Priority of Expect patterns
2271 Be particularly careful about how you write the patterns.  Expect
2272 attempts to match each pattern in the order that they are written in
2273 the @code{expect} command.  Unless a regexp pattern is anchored at the
2274 beginning of the buffer, Expect can search ahead for a match for a
2275 pattern that appears earlier in the @code{expect} command and skip
2276 over text that would match a later pattern.  @emph{The text thus
2277 skipped is discarded.}  This is a source of very hard to trace bugs,
2278 especially when reading input from batch-oriented unit tests.
2280 For example, consider a simple model once used by the DejaGnu
2281 testsuite for unit testing.  In this example, a test has failed, but
2282 the tests before and after it have passed.  First the relevant input
2283 to DejaGnu:
2285 @example
2286 PASSED: foo
2287 FAILED: bar
2288 PASSED: baz
2289 @end example
2291 The test script is reading this with two Expect patterns, simplified
2292 for this example by omitting handling of the actual messages and other
2293 possible results:
2295 @example
2296 expect @{
2297        -re @{PASSED: [^\r\n]+[\r\n]+@} @{ pass ... @}
2298        -re @{FAILED: [^\r\n]+[\r\n]+@} @{ fail ... @}
2300 @end example
2302 At every cycle, Expect attempts to match each pattern in the order
2303 that they are written against the available input.  If DejaGnu is
2304 processing the input as quickly as it arrives, this example will
2305 actually work.  However, if the system scheduler sets DejaGnu aside
2306 for a bit, or the external program produces output in a burst, Expect
2307 can find that its input buffer contains the text in the first example
2308 above all at once as the cycle begins.
2310 If this occurs, Expect will first attempt to match @code{@{PASSED:
2311 [^\r\n]+[\r\n]+@}} against the input and will succeed, since the input
2312 begins with @samp{PASSED: foo}.  The @code{pass} procedure is called
2313 and the test result recorded.  Expect then starts a new matching
2314 cycle.
2316 If the input had been presented one line at a time, the expected
2317 result would occur: the @code{@{FAILED: [^\r\n]+[\r\n]+@}} pattern
2318 would match and the test driver would work correctly.  But we are
2319 considering the case where all three lines arrived ``at once'' so we
2320 must examine what Expect will do in this case.  After the first line
2321 has been processed, the Expect buffer now contains:
2323 @example
2324 FAILED: bar
2325 PASSED: baz
2326 @end example
2328 Expect again attempts to match each pattern in order.  Expect will
2329 attempt to match @code{@{PASSED: [^\r\n]+[\r\n]+@}} before attempting
2330 to match @code{@{FAILED: [^\r\n]+[\r\n]+@}} and the first attempt
2331 succeeds because the pattern is not anchored.  The @samp{FAILED: bar}
2332 message is simply discarded when Expect finds the later
2333 @samp{PASSED:baz} message in the buffer.
2335 How to prevent this?  There are two ways: either group all of your
2336 test matches into a single regexp using alternation, or ensure that
2337 all patterns can match only at the start of Expect's buffer.  Both
2338 options can be made to work.  Grouping all status results into a
2339 single regexp allows some other unspecified text to still be silently
2340 discarded, while ensuring that all patterns are anchored absolutely
2341 requires closure, as any unmatched text will cause Expect to run out
2342 of buffer space.  Expect discards the entire buffer when this occurs.
2344 @node Debugging a test case, Adding a test case to a testsuite, Writing a test case, Extending DejaGnu
2345 @section Debugging a test case
2346 @cindex test cases, debugging
2348 These are the kinds of debugging information available from DejaGnu:
2350 @itemize
2352 @item
2353 Output controlled by test scripts themselves, explicitly allowed for
2354 by the test author.  This kind of debugging output appears in the
2355 detailed output recorded in the DejaGnu log file.  To do the same for
2356 new tests, use the @code{verbose} procedure (which in turn uses the
2357 Tcl variable @samp{verbose}) to control how much output to generate.
2358 This will make it easier for other people running the test to debug it
2359 if necessary.  If @samp{verbose} is zero, there should be no output
2360 other than the output from the framework (eg. FAIL).  Then, to
2361 whatever extent is appropriate for the particular test, allow
2362 successively higher values of @samp{verbose} to generate more
2363 information.  Be kind to other programmers who use your tests --
2364 provide plenty of debugging information.
2366 @item
2367 Output from the internal debugging functions of Tcl and Expect.  There
2368 is a command line options for each; both forms of debugging output are
2369 recorded in the file @file{dbg.log} in the current directory.
2371 Use @code{--debug} for information from Expect.  It logs how Expect
2372 attempts to match the tool output with the patterns specified.  This
2373 can be very helpful while developing test scripts, since it shows
2374 precisely the characters received.  Iterating between the latest
2375 attempt at a new test script and the corresponding @file{dbg.log} can
2376 allow you to create the final patterns by ``cut and paste''.  This is
2377 sometimes the best way to write a test case.
2379 @item
2380 Use @code{--strace} to see more detail from Tcl.  This logs how Tcl
2381 procedure definitions are expanded as they execute.  The trace level
2382 argument controls the depth of definitions expanded.
2384 @item
2385 If the value of @samp{verbose} is 3 or greater (@code{runtest -v -v
2386 -v}), DejaGnu activates the Expect command @code{log_user}.  This
2387 command prints all Expect actions to standard output, to the
2388 @file{.log} file and, if @code{--debug} is given, to @file{dbg.log}.
2389 @end itemize
2391 @node Adding a test case to a testsuite, Test case variables, Debugging a test case, Extending DejaGnu
2392 @section Adding a test case to a testsuite
2393 @cindex test cases, adding
2395 There are two slightly different ways to add a test case.  One is to
2396 add the test case to an existing directory.  The other is to create a
2397 new directory to hold your test.  The existing test directories
2398 represent several styles of testing, all of which are slightly
2399 different.  Examine the testsuite subdirectories for the tool of
2400 interest to see which approach is most suitable.
2402 Adding a GCC test may be very simple: just add the source file to any
2403 test directory beginning with @file{gcc.} and it will be tested on the
2404 next test run.
2406 Adding a test by creating a new directory involves:
2408 @enumerate
2409 @item
2410 Create the new directory.  All subdirectory names begin with the name
2411 of the tool to test; e.g. G++ tests might be in a directory called
2412 @file{g++.other}.  There can be multiple testsuite subdirectories with
2413 the same tool name prefix.
2415 @item
2416 Add the new test case to the directory, as above.
2417 @end enumerate
2419 @node Test case variables, , Adding a test case to a testsuite, Extending DejaGnu
2420 @section Test case special variables
2422 There are special variables that contain other information from
2423 DejaGnu.  Your test cases can inspect these variables, as well as the
2424 variables saved in @file{site.exp}.  These variables should never be
2425 changed.
2427 @table @code
2429 @item $prms_id
2430 @vindex prms_id
2431 The bug tracking system (eg. PRMS/GNATS) number identifying a
2432 corresponding bug report (@emph{0} if you do not specify it).
2434 @item $bug_id
2435 @vindex bug_id
2436 An optional bug ID, perhaps a bug identification number from another
2437 organization (@emph{0} if you do not specify it).
2439 @item $subdir
2440 @vindex subdir
2441 The subdirectory for the current test case.
2443 @item $exec_output
2444 @vindex exec_output
2445 This is the output from a @code{$@{tool@}_load} command.  This only
2446 applies to tools like GCC and GAS which produce an object file that
2447 must in turn be executed to complete a test.
2449 @item $comp_output
2450 @vindex comp_output
2451 This is the output from a @code{$@{tool@}_start} command.  This is
2452 conventionally used for batch-oriented programs, like GCC and GAS,
2453 that may produce interesting output (warnings, errors) without further
2454 interaction.
2456 @item $expect_out(buffer)
2457 @vindex expect_out(buffer)
2458 The output from the last command.  This is an internal variable set by
2459 Expect.  More information can be found in the Expect manual.
2460 @end table
2462 @node Unit testing, Built-in Procedures, Extending DejaGnu, Top
2463 @chapter Unit testing
2465 @menu
2466 * What is unit testing?::       Unit testing and system testing.
2467 * Running unit tests::
2468 * DejaGnu unit test protocol::  DejaGnu native unit testing protocol.
2469 * C unit testing API::
2470 * C++ unit testing API::
2471 @end menu
2473 @node What is unit testing?, Running unit tests, Unit testing, Unit testing
2474 @section What is unit testing?
2475 @cindex unit testing
2477 Most regression testing as done by DejaGnu is system testing: the
2478 complete application is tested all at once.  Unit testing is for
2479 testing single files, or small libraries.  In this case, each file is
2480 linked with a test case in C or C++, and each function or class and
2481 method is tested in turn, with the test case having to check private
2482 data or global variables to see if the function or method worked.
2484 This works particularly well for testing APIs at a level where it is
2485 easier to debug them, than by needing to trace through the entire
2486 application.  Also if there is a specification for the API to be
2487 tested, the testcase can also function as a compliance test.
2489 @node Running unit tests, DejaGnu unit test protocol, What is unit testing?, Unit testing
2490 @section Running unit tests
2491 @findex host_execute
2493 The native DejaGnu unit testing support is provided by a library
2494 module @file{dejagnu.exp} and the procedure @code{host_execute} is
2495 called by testsuite code to run unit tests.
2497 @quotation
2498 @t{@b{host_execute} @i{program} @i{arguments}}
2499 @end quotation
2501 The @code{host_execute} procedure runs @i{program}, passing
2502 @i{arguments} on the command line, and examines the output for test
2503 result messages according to the DejaGnu unit testing protocol.
2505 If successful, the return value is an empty string.  Otherwise, an
2506 error message is returned.
2508 @node DejaGnu unit test protocol, C unit testing API, Running unit tests, Unit testing
2509 @section DejaGnu unit test protocol
2511 DejaGnu spawns a unit test program and reads that program's output.
2512 Arguments for the unit test program can be specified in the testsuite.
2514 Unit test programs may produce any output for the benefit of a
2515 developer running them directly or reading the DejaGnu log, but output
2516 matching the Tcl regexp @code{@{\n\t[][[:upper:]]*:@}} (a tab character
2517 at the beginning of a line, followed by any sequence of uppercase
2518 letters and square brackets, followed by a colon) should be considered
2519 reserved for future extension.  Future versions of DejaGnu will
2520 interpret more lines matching this pattern as additional unit test
2521 information.
2523 @print{}@t{@ @ @ @ @ @ @ @ NOTE: }@i{text}
2525 This will cause @i{text} to be printed at verbose levels 2 and higher.
2527 @print{}@t{@ @ @ @ @ @ @ @ PASSED: }@i{name}
2529 @print{}@t{@ @ @ @ @ @ @ @ FAILED: }@i{name}
2531 @print{}@t{@ @ @ @ @ @ @ @ XPASSED: }@i{name}
2533 @print{}@t{@ @ @ @ @ @ @ @ XFAILED: }@i{name}
2535 @print{}@t{@ @ @ @ @ @ @ @ UNTESTED: }@i{name}
2537 @print{}@t{@ @ @ @ @ @ @ @ UNRESOLVED: }@i{name}
2539 @print{}@t{@ @ @ @ @ @ @ @ UNSUPPORTED: }@i{name}
2541 These indicate simple test results.
2543 @print{}@t{@ @ @ @ @ @ @ @ END: }@i{text}
2545 This indicates that the test case is complete.  All subsequent output
2546 from the test is ignored.  A warning is produced if the test case
2547 closes its output without producing this line.
2549 Note that all output from a unit test program, including the lines
2550 recognized and interpreted by DejaGnu, appears in the log.
2552 @node C unit testing API, C++ unit testing API, DejaGnu unit test protocol, Unit testing
2553 @section C unit testing API
2554 @cindex C unit testing API
2556 The C API is provided in the @file{dejagnu.h} header file.  This
2557 header provides a self-contained implementation and reserves names
2558 prefixed with @code{DG_} for future extensions and names prefixed with
2559 @code{DG__} (two underscores) for internal use.
2561 For convenience, the @code{totals()} function can be called at the end
2562 of the unit test program to output summary totals.  DejaGnu counts the
2563 test results independently and will operate correctly even if
2564 @code{totals()} is never invoked.
2566 All of the functions that take a @code{msg} parameter use a C
2567 @code{char *} that is the message to be displayed.  All of the
2568 functions that display a message accept a @code{printf}-style format
2569 string and variable arguments.
2571 @itemize
2572 @item
2573 @code{note} emits a note that will be displayed at verbose level 2 or
2574 higher.
2576 @quotation
2577 @t{@b{note}(@i{msg}, ...);}
2578 @end quotation
2580 @item
2581 @code{pass} prints a message for a successful test completion.
2583 @quotation
2584 @t{@b{pass}(@i{msg}, ...);}
2585 @end quotation
2587 @item
2588 @code{fail} prints a message for an unsuccessful test completion.
2590 @quotation
2591 @t{@b{fail}(@i{msg}, ...);}
2592 @end quotation
2594 @item
2595 @code{xfail} prints a message for an expected unsuccessful test
2596 completion.
2598 @quotation
2599 @t{@b{xfail}(@i{msg}, ...);}
2600 @end quotation
2602 @item
2603 @code{xpass} prints a message for an unexpected successful test
2604 completion.
2606 @quotation
2607 @t{@b{xpass}(@i{msg}, ...);}
2608 @end quotation
2610 @item
2611 @code{untested} prints a placeholder message for a test case that is
2612 not yet implemented or that could not be run for some reason.
2614 @quotation
2615 @t{@b{untested}(@i{msg}, ...);}
2616 @end quotation
2618 @item
2619 @code{unresolved} prints a message for a test case that was run, but
2620 did not produce a clear result.  These output states require a human
2621 to look over the results to determine what happened.
2623 @quotation
2624 @t{@b{unresolved}(@i{msg}, ...);}
2625 @end quotation
2627 @item
2628 @code{unsupported} prints a message for a test case that depends on a
2629 facility that is not available in the testing environment.
2631 @quotation
2632 @t{@b{unsupported}(@i{msg}, ...);}
2633 @end quotation
2635 @item
2636 @code{totals} prints out the total counts of all of the test results
2637 as a convenience when running the unit test program directly.  DejaGnu
2638 does not use this information and instead counts the results
2639 independently.
2641 @quotation
2642 @t{@b{totals}();}
2643 @end quotation
2645 @end itemize
2647 @node C++ unit testing API, , C unit testing API, Unit testing
2648 @section C++ unit testing API
2649 @cindex C++ unit testing API
2651 The C++ API is also provided in the @file{dejagnu.h} header file.
2652 This header provides a self-contained implementation and reserves
2653 names prefixed with @code{DG_} for future extensions and names
2654 prefixed with @code{DG__} (two underscores) for internal use.  In C++,
2655 @file{dejagnu.h} also reserves the C++ namespace @code{DejaGnu} for
2656 possible future use.
2658 For convenience, the @code{totals()} method outputs summary totals to
2659 be used at the end of unit test program.  DejaGnu does not depend on
2660 this summary and counts the test results independently.
2662 All of the methods that take a @code{msg} parameter use a STL string
2663 as the message to be displayed.  There currently is no support for
2664 formatted output in the C++ API; build the desired string before
2665 passing it to these functions.
2667 Note that the C API is also available in C++ unit test programs; all
2668 @code{TestState} objects and the C API share the same global set of
2669 summary counters.  Also note that a single global @code{TestState}
2670 object should be used, since the constructor clears the summary
2671 counters and the @code{totals} method is automatically called when a
2672 @code{TestState} object is destroyed.
2674 The @code{TestState} class supports the following instance methods:
2676 @itemize
2677 @item
2678 @code{note} emits a note that will be displayed at verbose level 2 or
2679 higher.
2681 @quotation
2682 @t{@b{TestState::note}(@i{msg});}
2683 @end quotation
2685 @item
2686 @code{pass} prints a message for a successful test completion.
2688 @quotation
2689 @t{@b{TestState::pass}(@i{msg});}
2690 @end quotation
2692 @item
2693 @code{fail} prints a message for an unsuccessful test completion.
2695 @quotation
2696 @t{@b{TestState::fail}(@i{msg});}
2697 @end quotation
2699 @item
2700 @code{xfail} prints a message for an expected unsuccessful test completion.
2702 @quotation
2703 @t{@b{TestState::xfail}(@i{msg});}
2704 @end quotation
2706 @item
2707 @code{xpass} prints a message for an unexpected successful test completion.
2709 @quotation
2710 @t{@b{TestState::xpass}(@i{msg});}
2711 @end quotation
2713 @item
2714 @code{untested} prints a placeholder message for a test case that is
2715 not yet implemented or that could not be run for some reason.
2717 @quotation
2718 @t{@b{TestState::untested}(@i{msg});}
2719 @end quotation
2721 @item
2722 @code{unresolved} prints a message for a test case that was run, but
2723 did not produce a clear result.  These output states require a human
2724 to look over the results to determine what happened.
2726 @quotation
2727 @t{@b{TestState::unresolved}(@i{msg});}
2728 @end quotation
2730 @item
2731 @code{unsupported} prints a message for a test case that depends on a
2732 facility that is not available in the testing environment.
2734 @quotation
2735 @t{@b{unsupported}(@i{msg}, ...);}
2736 @end quotation
2738 @item
2739 @code{totals} prints out the total counts of all of the test results
2740 as a convenience when running the unit test program directly.  DejaGnu
2741 does not use this information and instead counts the results
2742 independently.
2744 In the C++ API, this method is automatically called when a
2745 @code{TestState} instance is destroyed.
2747 @quotation
2748 @t{@b{TestState::totals}(@i{});}
2749 @end quotation
2751 @end itemize
2753 @node Built-in Procedures, GNU Free Documentation License, Unit testing, Top
2754 @appendix Built-in Procedures
2756 DejaGnu provides these Tcl procedures.
2758 @menu
2759 * Core Internal Procedures::
2760 * Procedures For Remote Communication::
2761 * Procedures For Using Utilities to Connect: connprocs.
2762 * Procedures For Target Boards::
2763 * Target Database Procedures: target database library file.
2764 * Platform Dependent Procedures: platform dependent procedures.
2765 * Utility Procedures::
2766 * Libgloss, a free board support package (BSP): Libgloss.
2767 * Debugging Procedures::
2768 @end menu
2770 @node Core Internal Procedures, Procedures For Remote Communication, , Built-in Procedures
2771 @section Core Internal Procedures
2773 @menu
2774 * open_logs Procedure: open_logs procedure
2775 * close_logs Procedure: close_logs procedure
2776 * isbuild Procedure: isbuild procedure
2777 * isremote Procedure: isremote procedure
2778 * is_remote Procedure: is_remote procedure
2779 * is3way Procedure: is3way procedure
2780 * ishost Procedure: ishost procedure
2781 * istarget Procedure: istarget procedure
2782 * isnative Procedure: isnative procedure
2783 * log_and_exit Procedure: log_and_exit procedure
2784 * log_summary Procedure: log_summary procedure
2785 * setup_xfail Procedure: setup_xfail procedure
2786 * pass Procedure: pass procedure
2787 * fail Procedure: fail procedure
2788 * xpass Procedure: xpass procedure
2789 * xfail Procedure: xfail procedure
2790 * set_warning_threshold Procedure: set_warning_threshold procedure
2791 * get_warning_threshold Procedure: get_warning_threshold procedure
2792 * warning Procedure: warning procedure
2793 * perror Procedure: perror procedure
2794 * note Procedure: note procedure
2795 * untested Procedure: untested procedure
2796 * unresolved Procedure: unresolved procedure
2797 * unsupported Procedure: unsupported procedure
2798 * transform Procedure: transform procedure
2799 * check_conditional_xfail Procedure: check_conditional_xfail procedure
2800 * clear_xfail Procedure: clear_xfail procedure
2801 * verbose Procedure: verbose procedure
2802 * load_lib Procedure: load_lib procedure
2803 * testsuite Procedure: testsuite procedure
2804 * testcase procedure: testcase procedure
2805 @end menu
2807 @node open_logs procedure, close_logs procedure, , Core Internal Procedures
2808 @subsubheading open_logs Procedure
2809 @findex open_logs
2811 Open the output logs.
2813 @quotation
2814 @t{@b{open_logs}}
2815 @end quotation
2817 @node close_logs procedure, isbuild procedure, open_logs procedure, Core Internal Procedures
2818 @subsubheading close_logs Procedure
2819 @findex close_logs
2821 Close the output logs.
2823 @quotation
2824 @t{@b{close_logs}}
2825 @end quotation
2827 @node isbuild procedure, isremote procedure, close_logs procedure, Core Internal Procedures
2828 @subsubheading isbuild Procedure
2829 @findex isbuild
2831 Tests for a particular build host environment.  If the currently
2832 configured host matches the @code{pattern} argument, the result is
2833 @emph{1}; otherwise the result is @emph{0}.  @emph{pattern} must be a
2834 full three-part configure triplet; in particular, you may not use the
2835 shorter aliases supported by @code{configure} (but you can use Tcl
2836 globbing to specify a range of triplets).  If called with no arguments
2837 or an empty pattern, this procedure returns the build system triplet.
2839 @quotation
2840 @t{@b{isbuild} @i{pattern}}
2841 @end quotation
2843 @node isremote procedure, is_remote procedure, isbuild procedure, Core Internal Procedures
2844 @subsubheading isremote Procedure
2845 @findex isremote
2847 Is @i{board} remote?  Return a non-zero value, if so.
2849 @quotation
2850 @t{@b{isremote} @i{ board }}
2851 @end quotation
2853 This procedure is to be used instead of @code{is_remote}.
2855 @node is_remote procedure, is3way procedure, isremote procedure, Core Internal Procedures
2856 @subsubheading is_remote Procedure
2857 @findex is_remote
2859 Is @i{board} remote?  Return a non-zero value, if so.
2861 @quotation
2862 @t{@b{is_remote} @i{ board }}
2863 @end quotation
2865 Note that this procedure is now deprecated.  Use @code{isremote}
2866 instead.
2868 @node is3way procedure, ishost procedure, is_remote procedure, Core Internal Procedures
2869 @subsubheading is3way Procedure
2870 @findex is3way
2872 Tests for a Canadian cross.  This is when the tests will be run on a
2873 remotely hosted cross-compiler.  If it is a Canadian cross, then the
2874 result is @emph{1}; otherwise @emph{0}.
2876 @quotation
2877 @t{@b{is3way}}
2878 @end quotation
2880 @node ishost procedure, istarget procedure, is3way procedure, Core Internal Procedures
2881 @subsubheading ishost Procedure
2882 @findex ishost
2884 Tests for a particular host environment.  If the currently configured
2885 host matches the argument string, the result is @emph{1}; otherwise
2886 the result is @emph{0}.  @emph{pattern} must be a full three-part
2887 configure triplet; in particular, you may not use the shorter aliases
2888 supported by @code{configure} (but you can use Tcl globbing to specify
2889 a range of triplets).  If called with no arguments or an empty
2890 pattern, this procedure returns the host triplet.
2892 @quotation
2893 @t{@b{ishost} @i{pattern}}
2894 @end quotation
2896 @node istarget procedure, isnative procedure, ishost procedure, Core Internal Procedures
2897 @subsubheading istarget Procedure
2898 @findex istarget
2900 Tests for a particular target environment.  If the currently
2901 configured target matches the argument string, the result is @emph{1}
2902 ; otherwise the result is @emph{0}.  @emph{pattern} must be a full
2903 three-part configure triplet; in particular, you may not use the
2904 shorter aliases supported by @code{configure} (but you can use Tcl
2905 globbing to specify a range of triplets).  If called with no arguments
2906 or an empty pattern, this procedure returns the target triplet.
2908 @quotation
2909 @t{@b{istarget} @i{pattern} }
2910 @end quotation
2912 @node isnative procedure, log_and_exit procedure, istarget procedure, Core Internal Procedures
2913 @subsubheading isnative Procedure
2914 @findex isnative
2916 This procedure returns @emph{1} if the current configuration has the
2917 same host and target (ie. it is a native configuration).  Otherwise it
2918 returns @emph{0}.
2920 @quotation
2921 @t{@b{isnative}}
2922 @end quotation
2924 @node log_and_exit procedure, log_summary procedure, isnative procedure, Core Internal Procedures
2925 @subsubheading log_and_exit Procedure
2926 @findex log_and_exit
2928 @quotation
2929 @t{@b{log_and_exit}}
2930 @end quotation
2932 This procedure writes out the end of the test log and terminates
2933 @code{runtest}.
2936 @node log_summary procedure, setup_xfail procedure, log_and_exit procedure, Core Internal Procedures
2937 @subsubheading log_summary Procedure
2938 @findex log_summary
2940 @quotation
2941 @t{@b{log_summary} @i{args}}
2942 @end quotation
2944 @table @asis
2945 @item @code{args}
2946 @end table
2948 @node setup_xfail procedure, pass procedure, log_summary procedure, Core Internal Procedures
2949 @subsubheading setup_xfail Procedure
2950 @findex setup_xfail
2952 Declares that the test is expected to fail on a particular set of
2953 configurations.  The config argument must be a list of full three-part
2954 configure target name; in particular, you may not use the shorter
2955 nicknames supported by configure (but you can use the common shell
2956 wildcard characters to specify a range of triplets).  The @emph{bugid}
2957 argument is optional, and used only in the logging file output; use it
2958 as a link to a bug-tracking system such as GNATS.
2960 Once you use @code{setup_xfail}, the @code{fail} and @code{pass}
2961 procedures produce the messages @emph{XFAIL} and @emph{XPASS}
2962 respectively, allowing you to distinguish expected failures (and
2963 unexpected success!) from other test outcomes.
2965 @quotation
2967 @strong{Warning}
2969 Warning you must clear the expected failure after using setup_xfail in
2970 a test case.  Any call to @code{pass }or @code{fail} clears the
2971 expected failure implicitly; if the test has some other outcome,
2972 e.g. an error, you can call @code{clear_xfail} to clear the expected
2973 failure explicitly.  Otherwise, the expected-failure declaration
2974 applies to whatever test runs next, leading to surprising results.
2975 @end quotation
2977 @quotation
2978 @t{@b{setup_xfail} @i{config} @i{bugid}}
2979 @end quotation
2981 @table @asis
2982 @item @code{config}
2983 The config triplet to trigger whether this is an unexpected or expect
2984 failure.
2986 @item @code{bugid}
2987 The optional bugid, used to tie this test case to a bug tracking
2988 system.
2989 @end table
2991 @node pass procedure, fail procedure, setup_xfail procedure, Core Internal Procedures
2992 @subsubheading pass Procedure
2993 @findex pass
2995 Declares a test to have passed.  @code{pass} writes in the log files a
2996 message beginning with @emph{PASS} (or @emph{XPASS}, if failure was
2997 expected), appending the @code{message} argument.
2999 @quotation
3000 @t{@b{pass} @i{message} }
3001 @end quotation
3003 @node fail procedure, xpass procedure, pass procedure, Core Internal Procedures
3004 @subsubheading fail Procedure
3005 @findex fail
3007 Declares a test to have failed.  @code{fail} writes in the log files a
3008 message beginning with @emph{FAIL} (or @emph{XFAIL}, if failure was
3009 expected), appending the @code{message} argument.
3011 @quotation
3012 @t{@b{fail} @i{message} }
3013 @end quotation
3015 @node xpass procedure, xfail procedure, fail procedure, Core Internal Procedures
3016 @subsubheading xpass Procedure
3017 @findex xpass
3019 Declares a test to have passed when it was expected to fail.
3020 @code{xpass} writes in the log files a message beginning with
3021 @emph{XPASS} (or @emph{XFAIL} if failure was expected) and the
3022 @code{message} argument.
3024 @quotation
3025 @t{@b{xpass} @i{message} }
3026 @end quotation
3028 @node xfail procedure, set_warning_threshold procedure, xpass procedure, Core Internal Procedures
3029 @subsubheading xfail Procedure
3030 @findex xfail
3032 Declares a test to have expectedly failed.  @code{xfail} writes in the
3033 log files a message beginning with @emph{XFAIL} (or @emph{PASS}, if
3034 success was expected), appending the @code{message} argument.
3036 @quotation
3037 @t{@b{xpass} @i{message} }
3038 @end quotation
3040 @node set_warning_threshold procedure, get_warning_threshold procedure, xfail procedure, Core Internal Procedures
3041 @subsubheading set_warning_threshold Procedure
3042 @findex set_warning_threshold
3044 Sets the value of @code{warning_threshold}.  A value of @emph{0}
3045 disables it: calls to @code{warning} will not turn a @emph{PASS} or
3046 @emph{FAIL} into an @emph{UNRESOLVED}.
3048 @quotation
3049 @t{@b{set_warning_threshold} @i{threshold}}
3050 @end quotation
3052 @table @asis
3054 @item @code{threshold}
3055 This is the value of the new warning threshold.
3056 @end table
3058 @node get_warning_threshold procedure, warning procedure, set_warning_threshold procedure, Core Internal Procedures
3059 @subsubheading get_warning_threshold Procedure
3060 @findex get_warning_threshold
3062 Returns the current value of @code{@{warning_threshold}.  The default
3063 value is 3.  This value controls how many @code{warning} procedures
3064 can be called before becoming @emph{UNRESOLVED}.
3066 @quotation
3067 @t{@b{get_warning_threshold}}
3068 @end quotation
3070 @node warning procedure, perror procedure, get_warning_threshold procedure, Core Internal Procedures
3071 @subsubheading warning Procedure
3072 @findex warning
3074 Declares detection of a minor error in the test case itself.
3075 @code{warning} writes in the log files a message beginning with
3076 @emph{WARNING}, appending the argument @code{string}.  Use
3077 @code{warning} rather than @code{perror} for cases (such as
3078 communication failure to be followed by a retry) where the test case
3079 can recover from the error.  If the optional @code{number} is
3080 supplied, then this is used to set the internal count of warnings to
3081 that value.
3083 As a side effect, @code{warning_threshold} or more calls to warning in
3084 a single test case also changes the effect of the next @code{pass} or
3085 @code{fail} command: the test outcome becomes @emph{UNRESOLVED} since
3086 an automatic @emph{PASS} or @emph{FAIL} may not be trustworthy after
3087 many warnings.  If the optional numeric value is @emph{0}, then there
3088 are no further side effects to calling this function, and the
3089 following test outcome doesn't become @emph{UNRESOLVED}.  This can be
3090 used for errors with no known side effects.
3092 @quotation
3093 @t{@b{warning} @i{messsage} @i{number} }
3094 @end quotation
3096 @table @asis
3098 @item @code{message}
3099 The warning message.
3101 @item @code{number}
3102 The optional number to set the error counter.  This is only used to
3103 fake out the counter when using the @code{xfail} procedure to control
3104 when it flips the output over to @emph{UNRESOLVED} state.
3105 @end table
3107 @node perror procedure, note procedure, warning procedure, Core Internal Procedures
3108 @subsubheading perror Procedure
3109 @findex perror
3111 Declares a severe error in the testing framework itself.
3112 @code{perror} writes in the log files a message beginning with
3113 @emph{ERROR}, appending the argument @code{string}.
3115 As a side effect, perror also changes the effect of the next
3116 @code{pass} or @code{fail} command: the test outcome becomes
3117 @emph{UNRESOLVED}, since an automatic @emph{PASS} or @emph{FAIL}
3118 cannot be trusted after a severe error in the test framework.  If the
3119 optional numeric value is @emph{0}, then there are no further side
3120 effects to calling this function, and the following test outcome
3121 doesn't become @emph{UNRESOLVED}.  This can be used for errors with no
3122 known side effects.
3124 @quotation
3125 @t{@b{perror} @i{message} @i{number} }
3126 @end quotation
3128 @table @asis
3129 @item @code{message}
3130 The message to be logged.
3132 @item @code{number}
3133 The optional number to set the error counter.  This is only used to
3134 fake out the counter when using the @code{xfail} procedure to control
3135 when it flips the output over to @emph{UNRESOLVED} state.
3136 @end table
3138 @node note procedure, untested procedure, perror procedure, Core Internal Procedures
3139 @subsubheading note Procedure
3140 @findex note
3142 Appends an informational message to the log file.  @code{note} writes
3143 in the log files a message beginning with @emph{NOTE}, appending the
3144 @code{message} argument.  Use @code{note} sparingly.  The
3145 @code{verbose} should be used for most such messages, but in cases
3146 where a message is needed in the log file regardless of the verbosity
3147 level use @code{note}.
3149 @quotation
3150 @t{@b{note} @i{messsage} }
3151 @end quotation
3154 @node untested procedure, unresolved procedure, note procedure, Core Internal Procedures
3155 @subsubheading untested Procedure
3156 @findex untested
3158 Declares a test was not run.  @code{untested} writes in the log file a
3159 message beginning with @emph{UNTESTED}, appending the @code{message}
3160 argument.  For example, you might use this in a dummy test whose only
3161 role is to record that a test does not yet exist for some feature.
3163 @quotation
3164 @t{@b{untested} @i{message} }
3165 @end quotation
3168 @node unresolved procedure, unsupported procedure, untested procedure, Core Internal Procedures
3169 @subsubheading unresolved Procedure
3170 @findex unresolved
3172 Declares a test to have an unresolved outcome.  @code{unresolved}
3173 writes in the log file a message beginning with @emph{UNRESOLVED},
3174 appending the @code{message} argument.  This usually means the test
3175 did not execute as expected, and a human being must go over results to
3176 determine if it passed or failed (and to improve the test case).
3178 @quotation
3179 @t{@b{unresolved} @i{message} }
3180 @end quotation
3183 @node unsupported procedure, transform procedure, unresolved procedure, Core Internal Procedures
3184 @subsubheading unsupported Procedure
3185 @findex unsupported
3187 Declares that a test case depends on some facility that does not exist
3188 in the testing environment.  @code{unsupported} writes in the log file
3189 a message beginning with @emph{UNSUPPORTED}, appending the
3190 @code{message} argument.
3192 @quotation
3193 @t{@b{unsupported} @i{message} }
3194 @end quotation
3197 @node transform procedure, check_conditional_xfail procedure, unsupported procedure, Core Internal Procedures
3198 @subsubheading transform Procedure
3199 @findex transform
3201 Generates a string for the name of a tool as it was configured and
3202 installed, given its native name (as the argument @code{toolname}).
3203 This makes the assumption that all tools are installed using the same
3204 naming conventions: For example, for a cross compiler supporting the
3205 @emph{m68k-vxworks} configuration, the result of transform @code{gcc}
3206 is @code{m68k-vxworks-gcc}.
3208 @quotation
3209 @t{@b{transform} @i{toolname}}
3210 @end quotation
3212 @table @asis
3214 @item @code{toolname}
3215 The name of the cross-development program to transform.
3216 @end table
3218 @node check_conditional_xfail procedure, clear_xfail procedure, transform procedure, Core Internal Procedures
3219 @subsubheading check_conditional_xfail Procedure
3220 @findex check_conditional_xfail
3222 This procedure adds a conditional xfail, based on compiler options
3223 used to create a test case executable.  If an include options is found
3224 in the compiler flags, and it's the right architecture, it'll trigger
3225 an @emph{XFAIL}.  Otherwise it'll produce an ordinary @emph{FAIL}.
3226 You can also specify flags to exclude.  This makes a result be a
3227 @emph{FAIL}, even if the included options are found.  To set the
3228 conditional, set the variable @code{compiler_conditional_xfail_data}
3229 to the fields
3231 @example
3232 "[message string] [targets list] [includes list] [excludes list]"
3233 @end example
3235 (descriptions below).  This is the checked at pass/fail decision time,
3236 so there is no need to call the procedure yourself, unless you wish to
3237 know if it gets triggered.  After a pass/fail, the variable is reset,
3238 so it doesn't effect other tests.  It returns @emph{1} if the
3239 conditional is true, or @emph{0} if the conditional is false.
3241 @quotation
3242 @t{@b{check_conditional_xfail} @i{message} @i{targets} @i{includes}
3243 @i{excludes}}
3244 @end quotation
3246 @table @asis
3248 @item @code{message}
3249 This is the message to print with the normal test result.
3251 @item @code{targets}
3252 This is a string with the list targets to activate this conditional
3255 @item @code{includes}
3256 This is a list of sets of options to search for in the compiler
3257 options to activate this conditional.  If the list of sets of options
3258 is empty or if any set of the options matches, then this conditional
3259 is true.  (It may be useful to specify an empty list of include sets
3260 if the conditional is always true unless one of the exclude sets
3261 matches.)
3263 @item @code{excludes}
3264 This is a list of sets of options to search for in the compiler
3265 options to activate this conditional.  If any set of the options
3266 matches, (regardless of whether any of the include sets match) then
3267 this conditional is de-activated.
3268 @end table
3270 @strong{Specifying the conditional xfail data}
3272 @example
3273 set compiler_conditional_xfail_data @{ \
3274      "I sure wish I knew why this was hosed" \
3275      "sparc*-sun*-* *-pc-*-*" \
3276      @{"-Wall -v" "-O3"@} \
3277      @{"-O1" "-Map"@} \
3279 @end example
3281 What this does is it matches only for these two targets if @code{-Wall
3282 -v} or @code{-O3} is set, but neither @code{-O1} or @code{-Map} is
3283 set.  For a set to match, the options specified are searched for
3284 independently of each other, so a @code{-Wall -v} matches either
3285 @code{-Wall -v} or @code{-v -Wall}.  A space separates the options in
3286 the string.  Glob patterns are also permitted.
3288 @node clear_xfail procedure, verbose procedure, check_conditional_xfail procedure, Core Internal Procedures
3289 @subsubheading clear_xfail Procedure
3290 @findex clear_xfail
3292 Cancel an expected failure (previously declared with
3293 @code{setup_xfail}) for a particular set of configurations.  The
3294 @code{config} argument is a list of configuration target names.  It is
3295 only necessary to call @code{clear_xfail} if a test case ends without
3296 calling either @code{pass} or @code{fail}, after calling
3297 @code{setup_xfail}.
3299 @quotation
3300 @t{@b{clear_xfail} @i{config}}
3301 @end quotation
3303 @table @asis
3305 @item @code{config}
3306 The system triplets to clear.
3307 @end table
3309 @node verbose procedure, load_lib procedure, clear_xfail procedure, Core Internal Procedures
3310 @subsubheading verbose Procedure
3311 @findex verbose
3313 Test cases can use this procedure to issue helpful messages depending
3314 on the number of @code{-v}/@code{--verbose} options passed on the
3315 command line to @code{runtest}.  It prints @i{message} if the value of
3316 the number of @code{-v} options passed is greater than or equal to the
3317 @i{loglevel} argument.  The default log level is 1.
3319 @quotation
3320 @t{ @b{verbose}
3321 @i{-log}
3322 @i{-x}
3323 @i{-n}
3324 @i{message}
3325 @i{loglevel}}
3326 @end quotation
3328 @table @asis
3330 @item @code{-log}
3331 Always write @i{message} to the log file, even if it won't be printed
3332 on the console.
3334 @item @code{-x}
3335 Log the @i{message} into an XML file.
3337 @item @code{-n}
3338 Print @i{message} without a trailing newline.
3340 @item @code{--}
3341 Use this option if @i{message} begins with @samp{-}.
3343 @item @code{message}
3344 The log messsage.
3346 @item @code{loglevel}
3347 The specified log level.  The default level is 1.
3348 @end table
3350 @node load_lib procedure, testsuite procedure, verbose procedure, Core Internal Procedures
3351 @subsubheading load_lib Procedure
3352 @findex load_lib
3354 @code{load_lib} loads a DejaGnu library file by searching the default
3355 fixed paths built into DejaGnu.  If DejaGnu has been installed, it
3356 looks in a path starting with the installed library directory.  If you
3357 are running DejaGnu directly from a source directory, without first
3358 running @code{make install}, this path defaults to the current
3359 directory.  In either case, it then looks in the current directory for
3360 a directory called @file{lib}.  If there are duplicate definitions,
3361 the last one loaded takes precedence over the earlier ones.
3363 @quotation
3364 @t{@b{load_lib} @i{filespec}}
3365 @end quotation
3367 @table @asis
3369 @item @code{filespec}
3370 The name of the DejaGnu library file to load.
3371 @end table
3373 The global variable @code{libdirs}, handled as a list, is appended to
3374 the default fixed paths built into DejaGnu.
3376 @strong{Additional search directories for load_lib}
3378 @example
3379 # append a non-standard search path
3380 global libdirs
3381 lappend libdirs $srcdir/../../gcc/testsuite/lib
3382 # now loading $srcdir/../../gcc/testsuite/lib/foo.exp works
3383 load_lib foo.exp
3384 @end example
3386 @node testsuite procedure, testcase procedure, load_lib procedure, Core Internal Procedures
3387 @subsubheading testsuite Procedure
3388 @findex testsuite
3390 The @code{testsuite} procedure is a multiplex call for retrieving or
3391 providing information about the current testsuite.
3393 @subsubheading testsuite file
3395 The @code{testsuite file} command returns an absolute file name
3396 specified relative to either the testsuite source or object trees.
3398 @quotation
3399 @t{  @b{testsuite file}
3400 ?@b{-source}|@b{-object}?
3401 @b{-top}|@b{-test}
3402 ?@b{-hypothetical}?
3403 ?@b{--}? @i{name}... }
3404 @end quotation
3406 Any number of @i{name}s are accepted and combined as if by @code{file
3407 join} with a directory relevant to the testsuite prepended.
3409 @table @asis
3411 @item @code{-object}
3412 Return a file name in the object tree.
3414 @item @code{-source}
3415 Return a file name in the source tree.
3417 @item @code{-top}
3418 Prepend the @code{testsuite} directory itself.
3420 @item @code{-test}
3421 Prepend the directory containing the current test script.
3423 @item @code{-hypothetical}
3424 Allow the returned value to imply directories that do not exist.
3426 @item @code{--}
3427 Use this option if the first @i{name} could begin with @samp{-}.
3429 @end table
3431 One of @code{-top} or @code{-test} must be given; an error is raised
3432 otherwise.
3434 Unless the @code{-hypothetical} option is given, any directories
3435 implied by the returned value will exist upon return.  Implied
3436 directories are created in the object tree if needed.  An error is
3437 raised if an implied directory does not exist in the source tree.
3439 @subsubheading testsuite can call
3441 The @code{testsuite can call} command is a feature test and returns a
3442 boolean value indicating if a subcommand under a multiplex point is
3443 available.  This API call is needed because only the multiplex points
3444 themselves are visible to the Tcl info command.
3446 @quotation
3447 @t{  @b{testsuite can call} @i{feature}... }
3448 @end quotation
3450 Any number of words are joined together into a single name, beginning
3451 with a multiplex entry point and forming the full name of an API call
3452 as documented in this manual.
3454 @node testcase procedure,  , testsuite procedure, Core Internal Procedures
3455 @subsubheading testcase Procedure
3457 The @code{testcase} procedure is a multiplex call for retrieving or
3458 providing information about the state of the testing process.
3460 @subsubheading testcase group
3462 The @code{testcase group} command provides support for grouping tests
3463 into hierarchical groups within a test script.
3465 Group names are internally tracked as Tcl lists, but are reported as
3466 strings delimited using forward slash (@samp{/}) characters.
3467 Individual name elements may not contain whitespace, but may contain
3468 forward slash.  A group entered by traversing intermediate levels must
3469 be left by traversing those same levels.  Groups must properly nest.
3471 There are three uses:
3473 @quotation
3474 @t{  @b{testcase group}}
3475 @end quotation
3477 Return the current group as a string delimited with forward slash
3478 (@samp{/}) characters.
3480 @quotation
3481 @t{  @b{testcase group begin} @i{name}}
3482 @end quotation
3483 @quotation
3484 @t{  @b{testcase group end} @i{name}}
3485 @end quotation
3487 These forms allow a group to be explicitly entered and left.  The
3488 @i{name} parameter must be identical across a pair of these calls, and
3489 both the @code{begin} and @code{end} calls must be in the same file.
3491 @quotation
3492 @t{  @b{testcase group eval} @i{name} @{@i{code}@}}
3493 @end quotation
3495 This form is available to wrap the @code{begin} and @code{end} calls
3496 around the execution of the provided @i{code}.  This form is preferred
3497 for convenience in top-level scripts, but the @code{begin} and
3498 @code{end} calls are preferred in helper procedures for performance.
3500 @node Procedures For Remote Communication, connprocs, Core Internal Procedures, Built-in Procedures
3501 @section Procedures For Remote Communication
3503 The file @file{lib/remote.exp} defines procedures for establishing and
3504 managing communications.  Each of these procedures tries to establish
3505 the connection up to three times before returning.  Warnings (if
3506 retries will continue) or errors (if the attempt is abandoned) report
3507 on communication failures.  The result for any of these procedures is
3508 either @emph{-1}, when the connection cannot be established, or the
3509 spawn ID returned by the Expect command @code{spawn}.
3511 It use the value of the @code{connect} field in the @code{target_info}
3512 array as the type of connection to make.  Current supported connection
3513 types are ssh, tip, kermit, telnet, rsh, and rlogin.  If the
3514 @code{--reboot} option was used on the @command{runtest} command line,
3515 then the target is rebooted before the connection is made.
3517 @menu
3518 * call_remote Procedure: call_remote procedure
3519 * check_for_board_status Procedure: check_for_board_status procedure
3520 * file_on_build Procedure: file_on_build procedure
3521 * file_on_host Procedure: file_on_host procedure
3522 * local_exec Procedure: local_exec procedure
3523 * remote_binary Procedure: remote_binary procedure
3524 * remote_close Procedure: remote_close procedure
3525 * remote_download Procedure: remote_download procedure
3526 * remote_exec Procedure: remote_exec procedure
3527 * remote_expect Procedure: remote_expect procedure
3528 * remote_file Procedure: remote_file procedure
3529 * remote_ld Procedure: remote_ld procedure
3530 * remote_load Procedure: remote_load procedure
3531 * remote_open Procedure: remote_open procedure
3532 * remote_pop_conn Procedure: remote_pop_conn procedure
3533 * remote_push_conn Procedure: remote_push_conn procedure
3534 * remote_raw_binary Procedure: remote_raw_binary procedure
3535 * remote_raw_close Procedure: remote_raw_close procedure
3536 * remote_raw_file Procedure: remote_raw_file procedure
3537 * remote_raw_ld Procedure: remote_raw_ld procedure
3538 * remote_raw_load Procedure: remote_raw_load procedure
3539 * remote_raw_open Procedure: remote_raw_open procedure
3540 * remote_raw_send Procedure: remote_raw_send procedure
3541 * remote_raw_spawn Procedure: remote_raw_spawn procedure
3542 * remote_raw_transmit Procedure: remote_raw_transmit procedure
3543 * remote_raw_wait Procedure: remote_raw_wait procedure
3544 * remote_reboot Procedure: remote_reboot procedure
3545 * remote_send Procedure: remote_send procedure
3546 * remote_spawn Procedure: remote_spawn procedure
3547 * remote_swap_conn Procedure: remote_swap_conn procedure
3548 * remote_transmit Procedure: remote_transmit procedure
3549 * remote_upload Procedure: remote_upload procedure
3550 * remote_wait Procedure: remote_wait procedure
3551 * standard_close Procedure: standard_close procedure
3552 * standard_download Procedure: standard_download procedure
3553 * standard_exec Procedure: standard_exec procedure
3554 * standard_file Procedure: standard_file procedure
3555 * standard_load Procedure: standard_load procedure
3556 * standard_reboot Procedure: standard_reboot procedure
3557 * standard_send Procedure: standard_send procedure
3558 * standard_spawn Procedure: standard_spawn procedure
3559 * standard_transmit Procedure: standard_transmit procedure
3560 * standard_upload Procedure: standard_upload procedure
3561 * standard_wait Procedure: standard_wait procedure
3562 * unix_clean_filename Procedure: unix_clean_filename procedure
3563 @end menu
3565 @node call_remote procedure, check_for_board_status procedure, , Procedures For Remote Communication
3566 @subsubheading call_remote Procedure
3567 @findex call_remote
3569 A standard procedure to call the appropriate @i{proc}.  This proceure
3570 first looks for a board-specific version, then a protocol-specific
3571 version, and finally @code{call_remote} will call
3572 @code{standard_$proc}.
3574 @quotation
3575 @t{@b{call_remote} @i{type} @i{proc} @i{dest} @i{args}}
3576 @end quotation
3578 @table @asis
3579 @item @code{proc}
3580 @item @code{dest}
3581 @item @code{args}
3582 @end table
3584 @node check_for_board_status procedure, file_on_build procedure, call_remote procedure, Procedures For Remote Communication
3585 @subsubheading check_for_board_status Procedure
3586 @findex check_for_board_status
3588 This procedure inspected the named variable within the calling
3589 procedure for the expected output from the status wrapper.  A
3590 non-negative value is returned if it exists.  Otherwise, it returns
3591 -1.  The output from the status wrapper is removed from the variable.
3593 @quotation
3594 @t{@b{check_for_board_status} @i{variable}}
3595 @end quotation
3597 @table @asis
3598 @item @code{variable}
3599 The name of the variable to check in the calling procedure.  Be sure
3600 to pass the name of the variable (@code{var}) and not the value of the
3601 variable (@code{$var}).
3602 @end table
3604 @node file_on_build procedure, file_on_host procedure, check_for_board_status procedure, Procedures For Remote Communication
3605 @subsubheading file_on_build Procedure
3606 @findex file_on_build
3608 @quotation
3609 @t{@b{file_on_build} @i{op} @i{file} @i{args}}
3610 @end quotation
3612 @table @asis
3613 @item @code{op}
3614 @item @code{file}
3615 @item @code{args}
3616 @end table
3618 @node file_on_host procedure, local_exec procedure, file_on_build procedure, Procedures For Remote Communication
3619 @subsubheading file_on_host Procedure
3620 @findex file_on_host
3622 @quotation
3623 @t{@b{file_on_host} @i{op} @i{file} @i{args}}
3624 @end quotation
3626 @table @asis
3627 @item @code{op}
3628 @item @code{file}
3629 @item @code{args}
3630 @end table
3632 @node local_exec procedure, remote_binary procedure, file_on_host procedure, Procedures For Remote Communication
3633 @subsubheading local_exec Procedure
3634 @findex local_exec
3636 Run the specified command on the local machine, redirecting input from
3637 file @code{inp} (if non-empty), redirecting output to file @code{outp}
3638 (if non-empty), and waiting @code{timeout} seconds for the command to
3639 complete before killing it.  A two-element list is returned: the exit
3640 status of the command and any output produced by the command.  If
3641 output is redirected, this may or may not be empty.  If output is
3642 redirected, both stdout and stderr will appear in the specified file.
3644 @quotation
3645 @t{@b{local_exec} @i{commandline} @i{inp} @i{outp} @i{timeout}}
3646 @end quotation
3648 @table @asis
3649 @item @code{inp}
3650 Redirect input into the input filename if not set to @code{""}.
3652 @item @code{outp}
3653 Redirect output into the output filename if not set to @code{""}.
3655 @item @code{timeout}
3656 Timeout in seconds.
3658 @end table
3660 @node remote_binary procedure, remote_close procedure, local_exec procedure, Procedures For Remote Communication
3661 @subsubheading remote_binary Procedure
3662 @findex remote_binary
3664 This procedure sets the connection into @i{binary} mode.  That is,
3665 there is no processing of input characters.
3667 @quotation
3668 @t{@b{remote_binary} @i{host}}
3669 @end quotation
3671 @table @asis
3672 @item @code{host}
3673 The host on which to set a binary connection.
3674 @end table
3676 @node remote_close procedure, remote_download procedure, remote_binary procedure, Procedures For Remote Communication
3677 @subsubheading remote_close Procedure
3678 @findex remote_close
3680 @quotation
3681 @t{@b{remote_close} @i{shellid}}
3682 @end quotation
3684 @table @asis
3686 @item @code{shellid}
3687 This is the value returned by a call to @code{remote_open}.  This
3688 closes the connection to the target so resources can be used by
3689 others.  This parameter can be left off if the @code{fileid} field in
3690 the @code{target_info} array is set.
3691 @end table
3693 @node remote_download procedure, remote_exec procedure, remote_close procedure, Procedures For Remote Communication
3694 @subsubheading remote_download Procedure
3695 @findex remote_download
3697 Download a file to a destination machine.  This procedure returns
3698 either an empty string (indicating failure) or the name of the file on
3699 the destination macine.
3701 @quotation
3702 @t{@b{remote_download} @i{dest} @i{file} @i{args}}
3703 @end quotation
3705 @table @asis
3706 @item @code{dest}
3707 Destination machine name.
3709 @item @code{file}
3710 Filename.
3712 @item @code{args}
3713 If the optional destination filename is specified, that filename will
3714 be used on the destination machine.
3715 @end table
3717 @node remote_exec procedure, remote_expect procedure, remote_download procedure, Procedures For Remote Communication
3718 @subsubheading remote_exec Procedure
3719 @findex remote_exec
3721 Execute the supplied program on a remote host.  A two-element list is
3722 returned.  The first element is the exit status of the program or -1
3723 if execution failed.  The second element is any output produced by the
3724 program.  This may be an empty string if output from the program was
3725 redirected.
3727 @quotation
3728 @t{  @b{remote_exec} @i{hostname} @i{program}
3729 ?@i{options}? ?@i{input}? ?@i{output}? ?@i{timeout}?}
3730 @end quotation
3732 @table @asis
3733 @item @code{hostname}
3734 Name of the host to execute the command on.
3736 @item @code{program}
3737 Command to execute.
3739 @item @code{options}
3740 Arguments to pass to the program.
3742 @item @code{input}
3743 Input filename to feed to standard input of the command.
3745 @item @code{output}
3746 Output filename where the output from the command should be written.
3748 @item @code{timeout}
3749 Timeout value in seconds.
3751 @end table
3753 All of the optional positional arguments accept an empty string as a
3754 neutral value.
3756 @node remote_expect procedure, remote_file procedure, remote_exec procedure, Procedures For Remote Communication
3757 @subsubheading remote_expect Procedure
3758 @findex remote_expect
3760 @quotation
3761 @t{@b{remote_expect} @i{board} @i{timeout} @i{args}}
3762 @end quotation
3764 @table @asis
3765 @item @code{board}
3766 @item @code{timeout}
3767 @item @code{args}
3768 @end table
3770 @node remote_file procedure, remote_ld procedure, remote_expect procedure, Procedures For Remote Communication
3771 @subsubheading remote_file Procedure
3772 @findex remote_file
3774 @quotation
3775 @t{@b{remote_file} @i{dest} @i{args}}
3776 @end quotation
3778 @table @asis
3780 @item @code{dest}
3782 @item @code{args}
3783 @end table
3785 @node remote_ld procedure, remote_load procedure, remote_file procedure, Procedures For Remote Communication
3786 @subsubheading remote_ld Procedure
3787 @findex remote_ld
3789 @quotation
3790 @t{@b{remote_ld} @i{dest} @i{prog}}
3791 @end quotation
3793 @table @asis
3794 @item @code{dest}
3795 @item @code{prog}
3796 @end table
3798 @node remote_load procedure, remote_open procedure, remote_ld procedure, Procedures For Remote Communication
3799 @subsubheading remote_load Procedure
3800 @findex remote_load
3802 @quotation
3803 @t{@b{remote_load} @i{dest} @i{prog} @i{args}}
3804 @end quotation
3806 @table @asis
3807 @item @code{dest}
3808 @item @code{prog}
3809 @item @code{args}
3810 @end table
3812 @node remote_open procedure, remote_pop_conn procedure, remote_load procedure, Procedures For Remote Communication
3813 @subsubheading remote_open Procedure
3814 @findex remote_open
3816 Open connection to a remote host or target.  This requires the
3817 @code{target_info} array be filled in with the proper information to
3818 work.  It returns the spawn id of the process that is the connection.
3820 @quotation
3821 @t{@b{remote_open} @i{type}}
3822 @end quotation
3823 @table @asis
3825 @item @code{type}
3826 This is passed @code{host} or @code{target}.  Host or target refers to
3827 whether it is a connection to a remote target, or a remote host.  This
3828 opens the connection to the desired target or host using the default
3829 values in the configuration system.  It returns that @code{spawn_id}
3830 of the process that manages the connection.  This value can be used in
3831 Expect or @code{exp_send} statements, or passed to other procedures
3832 that need the connection process's id.  This also sets the
3833 @code{fileid} field in the @code{target_info} array.
3834 @end table
3836 @node remote_pop_conn procedure, remote_push_conn procedure, remote_open procedure, Procedures For Remote Communication
3837 @subsubheading remote_pop_conn Procedure
3838 @findex remote_pop_conn
3840 Pop a previously-pushed connection from the stack.  You should have
3841 closed the current connection before calling this procedure.  Returns
3842 @code{pass} or @code{fail}.
3844 @quotation
3845 @t{@b{remote_pop_conn} @i{host}}
3846 @end quotation
3848 @table @asis
3849 @item @code{host}
3850 @end table
3852 @node remote_push_conn procedure, remote_raw_binary procedure, remote_pop_conn procedure, Procedures For Remote Communication
3853 @subsubheading remote_push_conn Procedure
3854 @findex remote_push_conn
3856 Pushes the current connection onto a stack.  Returns @code{pass} or
3857 @code{fail}.
3859 @quotation
3860 @t{@b{remote_push_conn} @i{host}}
3861 @end quotation
3863 @table @asis
3864 @item @code{host}
3865 @end table
3867 @node remote_raw_binary procedure, remote_raw_close procedure, remote_push_conn procedure, Procedures For Remote Communication
3868 @subsubheading remote_raw_binary Procedure
3869 @findex remote_raw_binary
3871 @quotation
3872 @t{@b{remote_raw_binary} @i{host}}
3873 @end quotation
3875 @table @asis
3876 @item @code{host}
3877 @end table
3879 @node remote_raw_close procedure, remote_raw_file procedure, remote_raw_binary procedure, Procedures For Remote Communication
3880 @subsubheading remote_raw_close Procedure
3881 @findex remote_raw_close
3883 @quotation
3884 @t{@b{remote_raw_close} @i{host}}
3885 @end quotation
3887 @table @asis
3888 @item @code{host}
3889 @end table
3891 @node remote_raw_file procedure, remote_raw_ld procedure, remote_raw_close procedure, Procedures For Remote Communication
3892 @subsubheading remote_raw_file Procedure
3893 @findex remote_raw_file
3895 @quotation
3896 @t{@b{remote_raw_file} @i{dest} @i{args}}
3897 @end quotation
3899 @table @asis
3900 @item @code{dest}
3902 @item @code{args}
3903 @end table
3905 @node remote_raw_ld procedure, remote_raw_load procedure, remote_raw_file procedure, Procedures For Remote Communication
3906 @subsubheading remote_raw_ld Procedure
3907 @findex remote_raw_ld
3909 @quotation
3910 @t{@b{remote_raw_ld} @i{dest} @i{prog}}
3911 @end quotation
3913 @table @asis
3914 @item @code{dest}
3915 @item @code{prog}
3916 @end table
3918 @node remote_raw_load procedure, remote_raw_open procedure, remote_raw_ld procedure, Procedures For Remote Communication
3919 @subsubheading remote_raw_load Procedure
3920 @findex remote_raw_load
3922 @quotation
3923 @t{@b{remote_raw_load} @i{dest} @i{prog} @i{args}}
3924 @end quotation
3926 @table @asis
3927 @item @code{dest}
3928 @item @code{prog}
3929 @item @code{args}
3930 @end table
3932 @node remote_raw_open procedure, remote_raw_send procedure, remote_raw_load procedure, Procedures For Remote Communication
3933 @subsubheading remote_raw_open Procedure
3934 @findex remote_raw_open
3936 @quotation
3937 @t{@b{remote_raw_open} @i{args}}
3938 @end quotation
3940 @table @asis
3941 @item @code{args}
3942 @end table
3944 @node remote_raw_send procedure, remote_raw_spawn procedure, remote_raw_open procedure, Procedures For Remote Communication
3945 @subsubheading remote_raw_send Procedure
3946 @findex remote_raw_send
3948 @quotation
3950 @t{@b{remote_raw_send} @i{dest} @i{string}}
3951 @end quotation
3953 @table @asis
3954 @item @code{dest}
3955 @item @code{string}
3956 @end table
3958 @node remote_raw_spawn procedure, remote_raw_transmit procedure, remote_raw_send procedure, Procedures For Remote Communication
3959 @subsubheading remote_raw_spawn Procedure
3960 @findex remote_raw_spawn
3962 @quotation
3963 @t{@b{remote_raw_spawn} @i{dest} @i{commandline}}
3964 @end quotation
3966 @table @asis
3967 @item @code{dest}
3968 @item @code{commandline}
3969 @end table
3971 @node remote_raw_transmit procedure, remote_raw_wait procedure, remote_raw_spawn procedure, Procedures For Remote Communication
3972 @subsubheading remote_raw_transmit Procedure
3973 @findex remote_raw_transmit
3975 @quotation
3976 @t{@b{remote_raw_transmit} @i{dest} @i{file}}
3977 @end quotation
3979 @table @asis
3980 @item @code{dest}
3981 @item @code{file}
3982 @end table
3984 @node remote_raw_wait procedure, remote_reboot procedure, remote_raw_transmit procedure, Procedures For Remote Communication
3985 @subsubheading remote_raw_wait Procedure
3986 @findex remote_raw_wait
3988 @quotation
3989 @t{@b{remote_raw_wait} @i{dest} @i{timeout}}
3990 @end quotation
3992 @table @asis
3993 @item @code{dest}
3994 @item @code{timeout}
3995 @end table
3997 @node remote_reboot procedure, remote_send procedure, remote_raw_wait procedure, Procedures For Remote Communication
3998 @subsubheading remote_reboot Procedure
3999 @findex remote_reboot
4001 Reboot the host.  The return value of this procedure depends on the
4002 actual implementation of reboot that will be used, in practice it is
4003 expected that @code{remote_reboot} returns @b{1} on success and @b{0}
4004 on failure.
4006 @quotation
4007 @t{@b{remote_reboot} @i{host}}
4008 @end quotation
4010 @table @asis
4011 @item @code{host}
4012 @end table
4014 @node remote_send procedure, remote_spawn procedure, remote_reboot procedure, Procedures For Remote Communication
4015 @subsubheading remote_send Procedure
4016 @findex remote_send
4018 @quotation
4019 @t{@b{remote_send} @i{dest} @i{string}}
4020 @end quotation
4022 @table @asis
4023 @item @code{dest}
4024 @item @code{string}
4025 @end table
4027 @node remote_spawn procedure, remote_swap_conn procedure, remote_send procedure, Procedures For Remote Communication
4028 @subsubheading remote_spawn Procedure
4029 @findex remote_spawn
4031 Start a command on the destination.  By default it is not possible to
4032 redirect I/O.  If the command is successfully started, a positive
4033 spawn ID is returned.  If the spawn fails, a negative value will be
4034 returned.  Once the command has started, you can interact with it
4035 using @code{remote_expect} and @code{remote_wait} procedures.
4037 @quotation
4038 @t{@b{remote_spawn} @i{dest} @i{commandline} @i{args}}
4039 @end quotation
4041 @table @asis
4042 @item @code{dest}
4043 The destination.
4045 @item @code{commandline}
4046 The command to execute.
4048 @item @code{args}
4049 If the optional keyword @code{readonly} is specified, input to the
4050 command may be redirected.
4051 @end table
4053 @node remote_swap_conn procedure, remote_transmit procedure, remote_spawn procedure, Procedures For Remote Communication
4054 @subsubheading remote_swap_conn Procedure
4055 @findex remote_swap_conn
4057 Swap the current connection with the topmost one on the stack.
4058 Returns @code{pass} or @code{fail}.
4060 @quotation
4061 @t{@b{remote_swap_conn} @i{host}}
4062 @end quotation
4064 @table @asis
4065 @item @code{}
4066 @end table
4068 @node remote_transmit procedure, remote_upload procedure, remote_swap_conn procedure, Procedures For Remote Communication
4069 @subsubheading remote_transmit Procedure
4070 @findex remote_transmit
4072 @quotation
4073 @t{@b{remote_transmit} @i{dest} @i{file}}
4074 @end quotation
4076 @table @asis
4077 @item @code{dest}
4078 @item @code{file}
4079 @end table
4081 @node remote_upload procedure, remote_wait procedure, remote_transmit procedure, Procedures For Remote Communication
4082 @subsubheading remote_upload Procedure
4083 @findex remote_upload
4085 @quotation
4086 @t{@b{remote_upload} @i{dest} @i{srcfile} @i{arg}}
4087 @end quotation
4089 @table @asis
4090 @item @code{dest}
4091 @item @code{srcfile}
4092 @item @code{arg}
4093 @end table
4095 @node remote_wait procedure, standard_close procedure, remote_upload procedure, Procedures For Remote Communication
4096 @subsubheading remote_wait Procedure
4097 @findex remote_wait
4099 Wait for the last spawned command on the destination to complete.  A
4100 list of two values is returned: the exit status (-1 if the program
4101 timed out) and any output produced by the command.
4103 @quotation
4104 @t{@b{remote_wait} @i{dest} @i{timeout}}
4105 @end quotation
4107 @table @asis
4108 @item @code{dest}
4109 The destination board.
4111 @item @code{timeout}
4112 The timeout in seconds.
4113 @end table
4115 @node standard_close procedure, standard_download procedure, remote_wait procedure, Procedures For Remote Communication
4116 @subsubheading standard_close Procedure
4117 @findex standard_close
4119 This procedure closes a connection.
4121 @quotation
4122 @t{@b{standard_close} @i{host}}
4123 @end quotation
4125 @table @asis
4126 @item @code{host}
4127 The host to close the connection to.
4128 @end table
4130 @node standard_download procedure, standard_exec procedure, standard_close procedure, Procedures For Remote Communication
4131 @subsubheading standard_download Procedure
4132 @findex standard_download
4134 Downloads a file to a destination.  It returns either the empty string
4135 (indicating failure) or the name of the file on the destination.
4137 @quotation
4138 @t{@b{standard_download} @i{dest} @i{file} @i{destfile}}
4139 @end quotation
4141 @table @asis
4142 @item @code{dest}
4143 Destination board.
4145 @item @code{file}
4146 The name of the file to download.
4148 @item @code{destfile}
4149 If the optional @i{destile} is specified, that filename will be used
4150 on the destination board.
4151 @end table
4153 @node standard_exec procedure, standard_file procedure, standard_download procedure, Procedures For Remote Communication
4154 @subsubheading standard_exec Procedure
4155 @findex standard_exec
4157 @quotation
4158 @t{@b{standard_exec} @i{hostname} @i{args}}
4159 @end quotation
4161 @table @asis
4162 @item @code{hostname}
4163 @item @code{args}
4164 @end table
4166 @node standard_file procedure, standard_load procedure, standard_exec procedure, Procedures For Remote Communication
4167 @subsubheading standard_file Procedure
4168 @findex standard_file
4170 @quotation
4171 @t{@b{standard_file} @i{dest} @i{op} @i{args}}
4172 @end quotation
4174 @table @asis
4175 @item @code{}
4176 @end table
4178 @node standard_load procedure, standard_reboot procedure, standard_file procedure, Procedures For Remote Communication
4179 @subsubheading standard_load Procedure
4180 @findex standard_load
4182 @quotation
4183 @t{@b{standard_load} @i{dest} @i{prog} @i{args}}
4184 @end quotation
4186 @table @asis
4187 @item @code{dest}
4188 @item @code{prog}
4189 @item @code{args}
4190 @end table
4192 @node standard_reboot procedure, standard_send procedure, standard_load procedure, Procedures For Remote Communication
4193 @subsubheading standard_reboot Procedure
4194 @findex standard_reboot
4196 It looks like that this procedure is never called, instead
4197 @code{$@{board@}_reboot} defined in @file{base-config.exp} will be
4198 used because it has higher priority and @file{base-config.exp} is
4199 always imported by @code{runtest}.
4201 @quotation
4202 @t{@b{standard_reboot} @i{host}}
4203 @end quotation
4205 @table @asis
4206 @item @code{host}
4207 @end table
4209 @node standard_send procedure, standard_spawn procedure, standard_reboot procedure, Procedures For Remote Communication
4210 @subsubheading standard_send Procedure
4211 @findex standard_send
4213 @quotation
4214 @t{@b{standard_send} @i{dest} @i{string}}
4215 @end quotation
4217 @table @asis
4218 @item @code{dest}
4219 @item @code{string}
4220 @end table
4222 @node standard_spawn procedure, standard_transmit procedure, standard_send procedure, Procedures For Remote Communication
4223 @subsubheading standard_spawn Procedure
4224 @findex standard_spawn
4226 @quotation
4227 @t{@b{standard_spawn} @i{dest} @i{commandline}}
4228 @end quotation
4230 @table @asis
4231 @item @code{dest}
4232 @item @code{commandline}
4233 @end table
4235 @node standard_transmit procedure, standard_upload procedure, standard_spawn procedure, Procedures For Remote Communication
4236 @subsubheading standard_transmit Procedure
4237 @findex standard_transmit
4239 The default transmit procedure if none other exists.  This feeds the
4240 file directly into the connection.
4242 @quotation
4243 @t{@b{standard_transmit} @i{dest} @i{file}}
4244 @end quotation
4246 @table @asis
4247 @item @code{dest}
4249 @item @code{file}
4250 File to transmit.
4251 @end table
4253 @node standard_upload procedure, standard_wait procedure, standard_transmit procedure, Procedures For Remote Communication
4254 @subsubheading standard_upload Procedure
4255 @findex standard_upload
4257 @quotation
4258 @t{@b{standard_upload} @i{dest srcfile destfile}}
4259 @end quotation
4261 @table @asis
4262 @item @code{dest}
4263 @item @code{srcfile}
4264 @item @code{destfile}
4265 @end table
4267 @node standard_wait procedure, unix_clean_filename procedure, standard_upload procedure, Procedures For Remote Communication
4268 @subsubheading standard_wait Procedure
4269 @findex standard_wait
4271 @quotation
4272 @t{@b{standard_wait} @i{dest} @i{timeout}}
4273 @end quotation
4275 @table @asis
4276 @item @code{dest}
4277 @item @code{timeout}
4278 @end table
4280 @node unix_clean_filename procedure, , standard_wait procedure, Procedures For Remote Communication
4281 @subsubheading unix_clean_filename Procedure
4282 @findex unix_clean_filename
4284 This procedure returns an absolute version of the filename argument
4285 with @samp{.} and @samp{..} removed.
4287 @quotation
4288 @t{@b{unix_clean_filename} @i{dest} @i{file}}
4289 @end quotation
4291 @table @asis
4292 @item @code{dest}
4293 @item @code{file}
4294 The filename.
4295 @end table
4297 @node connprocs, Procedures For Target Boards, Procedures For Remote Communication, Built-in Procedures
4298 @section Procedures For Using Utilities to Connect
4300 @menu
4301 * kermit_open Procedure: kermit_open procedure
4302 * kermit_command Procedure: kermit_command procedure
4303 * kermit_send Procedure: kermit_send procedure
4304 * kermit_transmit Procedure: kermit_transmit procedure
4305 * telnet_open Procedure: telnet_open procedure
4306 * telnet_binary Procedure: telnet_binary procedure
4307 * tip_open Procedure: tip_open procedure
4308 * rlogin_open Procedure: rlogin_open procedure
4309 * rlogin_spawn Procedure: rlogin_spawn procedure
4310 * rsh_open Procedure: rsh_open procedure
4311 * rsh_download Procedure: rsh_download procedure
4312 * rsh_upload Procedure: rsh_upload procedure
4313 * rsh_exec Procedure: rsh_exec procedure
4314 * ssh_close Procedure: ssh_close procedure
4315 * ssh_exec Procedure: ssh_exec procedure
4316 * ssh_download Procedure: ssh_download procedure
4317 * ssh_upload Procedure: ssh_upload procedure
4318 * ftp_open Procedure: ftp_open procedure
4319 * ftp_upload Procedure: ftp_upload procedure
4320 * ftp_download Procedure: ftp_download procedure
4321 * ftp_close Procedure: ftp_close procedure
4322 * tip_download Procedure: tip_download procedure
4323 @end menu
4325 @node kermit_open procedure, kermit_command procedure, connprocs, connprocs
4326 @subsubheading kermit_open Procedure
4327 @findex kermit_open
4329 @quotation
4330 @t{@b{kermit_open} @i{dest} @i{args}}
4331 @end quotation
4333 @table @asis
4334 @item @code{dest}
4335 @item @code{args}
4336 @end table
4338 @node kermit_command procedure, kermit_send procedure, kermit_open procedure, connprocs
4339 @subsubheading kermit_command Procedure
4340 @findex kermit_command
4342 @quotation
4343 @t{@b{kermit_command} @i{dest} @i{args}}
4344 @end quotation
4346 @table @asis
4347 @item @code{dest}
4348 @item @code{args}
4349 @end table
4351 @node kermit_send procedure, kermit_transmit procedure, kermit_command procedure, connprocs
4352 @subsubheading kermit_send Procedure
4353 @findex kermit_send
4355 @quotation
4356 @t{@b{kermit_send} @i{dest string args}}
4357 @end quotation
4359 @table @asis
4360 @item @code{dest}
4361 @item @code{string}
4362 @item @code{args}
4363 @end table
4365 @node kermit_transmit procedure, telnet_open procedure, kermit_send procedure, connprocs
4366 @subsubheading kermit_transmit Procedure
4367 @findex kermit_transmit
4369 @quotation
4370 @t{@b{kermit_transmit} @i{dest} @i{file} @i{args}}
4371 @end quotation
4373 @table @asis
4374 @item @code{dest}
4375 @item @code{file}
4376 @item @code{args}
4377 @end table
4379 @node telnet_open procedure, telnet_binary procedure, kermit_transmit procedure, connprocs
4380 @subsubheading telnet_open Procedure
4381 @findex telnet_open
4383 This procedure opens a connection to a remote host using TELNET.  This
4384 procedure sets the @code{fileid} field in the @code{board_info} array
4385 and returns the spawn id (or -1 for error).
4387 @quotation
4388 @t{@b{telnet_open} @i{hostname} @i{args}}
4389 @end quotation
4391 @table @asis
4392 @item @code{hostname}
4393 The host to connect to with TELNET.
4395 @item @code{args}
4396 A list of options.  Currently the only supported option is @code{raw}.
4397 @end table
4399 @node telnet_binary procedure, tip_open procedure, telnet_open procedure, connprocs
4400 @subsubheading telnet_binary Procedure
4401 @findex telnet_binary
4403 Puts an existing TELNET connection into binary mode.
4405 @quotation
4406 @t{@b{telnet_binary} @i{hostname}}
4407 @end quotation
4409 @table @asis
4410 @item @code{hostname}
4411 Hostname for the connection.
4412 @end table
4414 @node tip_open procedure, rlogin_open procedure, telnet_binary procedure, connprocs
4415 @subsubheading tip_open Procedure
4416 @findex tip_open
4418 Connect to a host using @code{tip(1)}.  This procedure sets the board
4419 @code{fileid} field with the @code{spawn_id} on success and,
4420 otherwise, returns -1.
4422 @quotation
4423 @t{@b{tip_open} @i{hostname}}
4424 @end quotation
4426 @table @asis
4427 @item @code{hostname}
4428 Hostname to connect to.
4429 @end table
4431 @node rlogin_open procedure, rlogin_spawn procedure, tip_open procedure, connprocs
4432 @subsubheading rlogin_open Procedure
4433 @findex rlogin_open
4435 @quotation
4436 @t{@b{rlogin_open} @i{arg}}
4437 @end quotation
4439 @table @asis
4440 @item @code{arg}
4441 @end table
4443 @node rlogin_spawn procedure, rsh_open procedure, rlogin_open procedure, connprocs
4444 @subsubheading rlogin_spawn Procedure
4445 @findex rlogin_spawn
4447 @quotation
4448 @t{@b{rlogin_spawn} @i{dest} @i{cmdline}}
4449 @end quotation
4451 @table @asis
4452 @item @code{dest}
4453 @item @code{cmdline}
4454 @end table
4456 @node rsh_open procedure, rsh_download procedure, rlogin_spawn procedure, connprocs
4457 @subsubheading rsh_open Procedure
4458 @findex rsh_open
4460 @quotation
4461 @t{@b{rsh_open} @i{hostname}}
4462 @end quotation
4464 @table @asis
4465 @item @code{hostname}
4466 @end table
4468 @node rsh_download procedure, rsh_upload procedure, rsh_open procedure, connprocs
4469 @subsubheading rsh_download Procedure
4470 @findex rsh_download
4472 @quotation
4473 @t{@b{rsh_download} @i{desthost} @i{srcfile} @i{destfile}}
4474 @end quotation
4476 @table @asis
4477 @item @code{desthost}
4478 @item @code{srcfile}
4479 @item @code{destfile}
4480 @end table
4482 @node rsh_upload procedure, rsh_exec procedure, rsh_download procedure, connprocs
4483 @subsubheading rsh_upload Procedure
4484 @findex rsh_upload
4486 @quotation
4487 @t{@b{rsh_upload} @i{desthost} @i{srcfile} @i{destfile}}
4488 @end quotation
4490 @table @asis
4491 @item @code{desthost}
4492 @item @code{srcfile}
4493 @item @code{destfile}
4494 @end table
4496 @node rsh_exec procedure, ssh_close procedure, rsh_upload procedure, connprocs
4497 @subsubheading rsh_exec Procedure
4498 @findex rsh_exec
4500 @quotation
4501 @t{@b{rsh_exec} @i{boardname} @i{cmd} @i{args}}
4502 @end quotation
4504 @table @asis
4505 @item @code{boardname}
4506 @item @code{cmd}
4507 @item @code{args}
4508 @end table
4510 @node ssh_close procedure, ssh_exec procedure, rsh_exec procedure, connprocs
4511 @subsubheading ssh_close procedure
4512 @findex ssh_close
4514 @quotation
4515 @t{@b{ssh_close} @i{desthost}}
4516 @end quotation
4518 @table @asis
4519 @item @code{desthost}
4520 @end table
4522 @node ssh_exec procedure, ssh_download procedure, ssh_close procedure, connprocs
4523 @subsubheading ssh_exec procedure
4524 @findex ssh_exec
4526 @quotation
4527 @t{@b{ssh_exec} @i{boardname} @i{program} @i{pargs} @i{inp} @i{outp}}
4528 @end quotation
4530 @table @asis
4531 @item @code{boardname}
4532 @item @code{program}
4533 @item @code{pargs}
4534 @item @code{inp}
4535 @item @code{outp}
4536 @end table
4538 @node ssh_download procedure, ssh_upload procedure, ssh_exec procedure, connprocs
4539 @subsubheading ssh_download procedure
4540 @findex ssh_download
4542 @quotation
4543 @t{@b{ssh_download} @i{desthost} @i{srcfile} @i{destfile}}
4544 @end quotation
4546 @table @asis
4547 @item @code{desthost}
4548 @item @code{srcfile}
4549 @item @code{destfile}
4550 @end table
4552 @node ssh_upload procedure, ftp_open procedure, ssh_download procedure, connprocs
4553 @subsubheading ssh_upload procedure
4554 @findex ssh_upload
4556 @quotation
4557 @t{@b{ssh_upload} @i{desthost} @i{srcfile} @i{destfile}}
4558 @end quotation
4560 @table @asis
4561 @item @code{desthost}
4562 @item @code{srcfile}
4563 @item @code{destfile}
4564 @end table
4566 @node ftp_open procedure, ftp_upload procedure, ssh_upload procedure, connprocs
4567 @subsubheading ftp_open Procedure
4568 @findex ftp_open
4570 Open an FTP connection.
4572 @quotation
4573 @t{@b{ftp_open} @i{host}}
4574 @end quotation
4576 @table @asis
4577 @item @code{host}
4578 The host to open the FTP connection to.
4579 @end table
4581 @node ftp_upload procedure, ftp_download procedure, ftp_open procedure, connprocs
4582 @subsubheading ftp_upload Procedure
4583 @findex ftp_upload
4585 Fetches a file from a remote host using FTP.
4587 @quotation
4588 @t{@b{ftp_upload} @i{host} @i{remotefile} @i{localfile}}
4589 @end quotation
4591 @table @asis
4592 @item @code{host}
4593 The host to transfer the file from.
4595 @item @code{remotefile}
4596 The filename at the remote end.
4598 @item @code{localfile}
4599 The filename to store locally.
4601 @end table
4603 @node ftp_download procedure, ftp_close procedure, ftp_upload procedure, connprocs
4604 @subsubheading ftp_download Procedure
4605 @findex ftp_download
4607 Sends a file to a remote host using FTP.
4609 @quotation
4610 @t{@b{ftp_download} @i{host} @i{localfile} @i{remotefile}}
4611 @end quotation
4613 @table @asis
4614 @item @code{host}
4615 The host to transfer the file from.
4617 @item @code{localfile}
4618 The filename on the local system.
4620 @item @code{remotefile}
4621 The filename at the remote end.
4622 @end table
4624 @node ftp_close procedure, tip_download procedure, ftp_download procedure, connprocs
4625 @subsubheading ftp_close Procedure
4626 @findex ftp_close
4628 Closes the FTP connection to a host.
4630 @quotation
4631 @t{@b{ftp_close} @i{host}}
4632 @end quotation
4634 @table @asis
4635 @item @code{host}
4636 The host connection to close.
4637 @end table
4639 @node tip_download procedure, , ftp_close procedure, connprocs
4640 @subsubheading tip_download Procedure
4641 @findex tip_download
4643 @quotation
4644 @t{@b{tip_download} @i{spawnid} @i{file}}
4645 @end quotation
4647 @table @asis
4649 @item @code{spawnid}
4650 Download @code{file} to the process @code{spawnid} (the value returned
4651 when the connection was established), using the @code{~put} command
4652 under tip.  Most often used for single board computers that require
4653 downloading programs in ASCII S-records.  Returns @emph{1} if an error
4654 occurs, @emph{0} otherwise.
4656 @item @code{file}
4657 This is the filename to download.
4658 @end table
4660 @node Procedures For Target Boards, target database library file, connprocs, Built-in Procedures
4661 @section Procedures For Target Boards
4663 @menu
4664 * default_link Procedure: default_link procedure
4665 * default_target_assemble Procedure: default_target_assemble procedure
4666 * default_target_compile Procedure: default_target_compile procedure
4667 * pop_config Procedure: pop_config procedure
4668 * prune_warnings Procedure: prune_warnings procedure
4669 * push_build Procedure: push_build procedure
4670 * push_config Procedure: push_config procedure
4671 * reboot_target Procedure: reboot_target procedure
4672 * target_assemble Procedure: target_assemble procedure
4673 * target_compile Procedure: target_compile procedure
4674 * target_link Procedure: target_link procedure
4675 @end menu
4677 @node default_link procedure, default_target_assemble procedure, , Procedures For Target Boards
4678 @subsubheading default_link Procedure
4679 @findex default_link
4681 @quotation
4682 @t{@b{default_link} @i{board} @i{objects} @i{destfile} @i{flags}}
4683 @end quotation
4685 This is the internal implementation for the @ref{target_link
4686 procedure}, and should not be directly called from testsuite code.
4688 @node default_target_assemble procedure, default_target_compile procedure, default_link procedure, Procedures For Target Boards
4689 @subsubheading default_target_assemble Procedure
4690 @findex default_target_assemble
4692 @quotation
4693 @t{@b{default_target_assemble} @i{source} @i{destfile} @i{flags}}
4694 @end quotation
4696 This is the internal implementation for the @ref{target_assemble
4697 procedure}, and should not be directly called from testsuite code.
4699 @node default_target_compile procedure, pop_config procedure, default_target_assemble procedure, Procedures For Target Boards
4700 @subsubheading default_target_compile Procedure
4701 @findex default_target_compile
4703 @quotation
4704 @t{@b{default_target_compile} @i{source} @i{destfile} @i{type}
4705 @i{options}}
4706 @end quotation
4708 This is the default implementation for the @ref{target_compile
4709 procedure}, and is used if the current target board does not have a
4710 special procedure for this purpose.  @xref{target_compile procedure},
4711 for API details.  Calling this procedure directly from testsuite code
4712 is deprecated.
4714 @node pop_config procedure, prune_warnings procedure, default_target_compile procedure, Procedures For Target Boards
4715 @subsubheading pop_config Procedure
4716 @findex pop_config
4718 @quotation
4719 @t{@b{pop_config} @i{type}}
4720 @end quotation
4722 @table @asis
4723 @item @code{type}
4724 @end table
4726 @node prune_warnings procedure, push_build procedure, pop_config procedure, Procedures For Target Boards
4727 @subsubheading prune_warnings Procedure
4728 @findex prune_warnings
4730 @quotation
4731 @t{@b{prune_warnings} @i{text}}
4732 @end quotation
4734 @table @asis
4735 @item @code{text}
4736 @end table
4738 @node push_build procedure, push_config procedure, prune_warnings procedure, Procedures For Target Boards
4739 @subsubheading push_build Procedure
4740 @findex push_build
4742 @quotation
4743 @t{@b{push_build} @i{name}}
4744 @end quotation
4746 @table @asis
4747 @item @code{name}
4748 @end table
4750 @node push_config procedure, reboot_target procedure, push_build procedure, Procedures For Target Boards
4751 @subsubheading push_config Procedure
4752 @findex push_config
4754 @quotation
4755 @t{@b{push_config} @i{type} @i{name}}
4756 @end quotation
4758 @table @asis
4759 @item @code{type}
4761 @item @code{name}
4762 @end table
4764 @node reboot_target procedure, target_assemble procedure, push_config procedure, Procedures For Target Boards
4765 @subsubheading reboot_target Procedure
4766 @findex reboot_target
4768 Reboot the target.
4770 @quotation
4771 @t{@b{reboot_target}}
4772 @end quotation
4774 @node target_assemble procedure, target_compile procedure, reboot_target procedure, Procedures For Target Boards
4775 @subsubheading target_assemble Procedure
4776 @findex target_assemble
4778 @quotation
4779 @t{@b{target_assemble} @i{source destfile flags}}
4780 @end quotation
4782 @table @asis
4783 @item @code{source}
4784 @item @code{destfile}
4785 @item @code{flags}
4786 @end table
4788 @node target_compile procedure, target_link procedure, target_assemble procedure, Procedures For Target Boards
4789 @subsubheading target_compile Procedure
4790 @findex target_compile
4792 @quotation
4793 @t{@b{target_compile} @i{source} @i{destfile} @i{type} @i{options}}
4794 @end quotation
4796 @table @code
4797 @item source
4798 Source file or other arguments if @var{type} is @code{none}.
4799 @item destfile
4800 Destination file or empty string to request output as return value.
4801 @item type
4802 Type of output that should be produced.
4803 @multitable {@code{preprocess}} {Special applications where no source is actually given.}
4804 @item @code{none}
4805 @tab Special applications where no source is actually given.
4806 @item @code{preprocess}
4807 @tab Run the source files through the C preprocessor.
4808 @item @code{assembly}
4809 @tab Produce assembler source from the compiler.
4810 @item @code{object}
4811 @tab Produce binary object files.
4812 @item @code{executable}
4813 @tab Produce an executable program.
4814 @end multitable
4815 @item options
4816 List of additional options:
4818 @b{Language-selection options:}
4819 @table @code
4820 @item ada
4821 Use an Ada compiler.
4822 @item c++
4823 Use a C++ compiler.
4824 @item d
4825 Use a compiler for the D language.
4826 @item f77
4827 Use a compiler for Fortran 77.
4828 @item f90
4829 Use a compiler for Fortran 90.
4830 @item go
4831 Use a compiler for Go.
4832 @item rust
4833 Use a compiler for Rust.
4834 @end table
4835 If none of these options are given, the C compiler is used by default.
4836 Giving multiple language-selection options is an error.
4838 The @code{f77} option generally selects the @command{g77} compiler,
4839 while the @code{f90} option selects the newer @command{gfortran}
4840 frontend.  Both of these can compile Fortran 77, but only
4841 @command{gfortran} supports Fortran 90.
4843 @b{Search path options:}
4844 @table @code
4845 @item incdir=@var{dir}
4846 Additional directory to search for preprocessor include files.
4847 Multiple uses of this option add multiple directories to the search
4848 path.
4849 @item libdir=@var{dir}
4850 Additional directory to search for libraries.  Multiple uses of this
4851 option add multiple directories to the search path.
4852 @end table
4854 @b{Target options:}
4855 @table @code
4856 @item debug
4857 Compile with debugging information.  Multiple uses of this option are
4858 treated as a single use.
4859 @item dest=@var{target}
4860 Override the current target and compile for @var{target} instead.  If
4861 this option is given multiple times, only the last use is significant.
4862 @item compiler=@var{command}
4863 Override the defaults and use @var{command} as the compiler.  If
4864 this option is given multiple times, only the last use is significant.
4865 @item linker=@var{command}
4866 Override the defaults and use @var{command} to build executables.  If
4867 this option is given multiple times, only the last use is significant.
4868 @item early_flags=@var{flags}
4869 Prepend @var{flags} to the set of arguments to be passed to the compiler.
4870 Multiple uses of this option specify additional arguments.
4871 @item additional_flags=@var{flags}
4872 Add @var{flags} to the set of arguments to be passed to the compiler.
4873 Multiple uses of this option specify additional arguments.
4874 @item optimize=@var{flags}
4875 Specify optimization flags to be passed to the compiler.  Nothing
4876 enforces that the flags given with option must actually be related to
4877 optimization, however.  If this option is given multiple times, only
4878 the last use is significant.
4879 @item ldflags=@var{flags}
4880 Add @var{flags} to the set of arguments to be passed to the linker.
4881 Note that these are passed literally to the compiler driver, without
4882 adding a special prefix to each option.  If a @samp{-Wl,} prefix is
4883 needed with GCC, it must be included in the given @var{flags}.  As a
4884 group, the linker flags are only used if an executable is requested
4885 and are given special treatment with some languages.  Multiple uses of
4886 this option specify additional arguments.
4887 @item ldscript=@var{script}
4888 Specify a linker script, or more precisely, the argument to pass to
4889 the linker via the compiler driver to select a linker script.  The
4890 @var{script} value is passed literally to the compiler driver.  If
4891 this option is given multiple times, only the last use is significant.
4892 @item libs=@var{libs}
4893 Specify additional libraries to be included in the link.  The
4894 @var{libs} value is a space-separated list of libraries to include.
4895 Each element is checked, and if a file exists with that exact name, it
4896 is added to the list of sources to be given to the compiler.
4897 Otherwise, the element is passed literally to the compiler driver
4898 after any linker flags specified with the @code{ldflags} option.
4899 Multiple uses of this option specify additional lists, which are
4900 concatenated in the order they are given.
4901 @end table
4903 @b{Execution options:}
4904 @table @code
4905 @item timeout=@var{timeout}
4906 Abort the compile job if it is still running after @var{timeout}
4907 seconds.  This is intended for compiler tests that are known to cause
4908 infinite loops upon failure.
4909 @item redirect=@var{file}
4910 Instead of returning output emitted on @code{stdout}, place it into
4911 @var{file}.
4912 @end table
4913 @end table
4915 The @code{target_compile} procedure also uses several global Tcl variables as overrides:
4916 @table @code
4917 @item CFLAGS_FOR_TARGET
4918 If @code{CFLAGS_FOR_TARGET} is set, its value is prepended to the
4919 flags otherwise prepared for the compiler, even ahead of any
4920 board-specific flags inserted as a result of a language-selection
4921 option.
4922 @item LDFLAGS_FOR_TARGET
4923 If @code{LDFLAGS_FOR_TARGET} is set, the set of arguments to be passed
4924 to linker is initialized to its value instead of an empty list.  The
4925 @code{ldflags} option appends to this list.
4926 @item CC_FOR_TARGET
4927 Override default compiler.  If no other compiler is given and this
4928 variable is set, its value will be used instead of searching for a
4929 compiler or using the default from the target board configuration.
4930 The @code{compiler} option overrides this variable.
4931 @item CXX_FOR_TARGET
4932 Override C++ compiler.  If the @code{c++} option is given, this
4933 compiler will be used and the @code{compiler} option ignored.
4934 @item D_FOR_TARGET
4935 Override D language compiler.  If the @code{d} option is given, this
4936 compiler will be used and the @code{compiler} option ignored.
4937 @item F77_FOR_TARGET
4938 Override Fortran 77 compiler.  If the @code{f77} option is given, this
4939 compiler will be used and the @code{compiler} option ignored.
4940 @item F90_FOR_TARGET
4941 Override Fortran 90 compiler.  If the @code{f90} option is given, this
4942 compiler will be used and the @code{compiler} option ignored.
4943 @item GO_FOR_TARGET
4944 Override Go compiler.  If the @code{go} option is given, this
4945 compiler will be used and the @code{compiler} option ignored.
4946 @item GO_LD_FOR_TARGET
4947 Override Go linker.  If the @code{go} option is given, this
4948 linker will be used.
4949 @item RUSTC_FOR_TARGET
4950 Override Rust compiler.  If the @code{rust} option is given, this
4951 compiler will be used and the @code{compiler} option ignored.
4952 @item GNATMAKE_FOR_TARGET
4953 Override Ada compiler.  If the @code{ada} option is given, this
4954 compiler will be used and the @code{compiler} option ignored.
4955 @end table
4957 The @code{target_compile} procedure obtains most defaults from the
4958 target board configuration, but additionally inserts any flags
4959 specified as @code{cflags_for_target} on the @emph{host} board
4960 configuration.  If no host is set, the @code{unix} board configuration
4961 is checked for a @code{cflags_for_target} key.  If the
4962 @code{cflags_for_target} key exists, its value is inserted into the
4963 set of arguments given to the compiler after any arguments given with
4964 the @code{additional_flags} option.
4966 In DejaGnu 1.6.2 and older, this mechanism did not work reliably and
4967 the @code{unix} board configuration was always searched for the
4968 @code{cflags_for_target} key, regardless of the host board selected.
4970 Also in DejaGnu 1.6.2 and older, the @code{dest} option interacted
4971 very badly with the language-selection options.  There was no correct
4972 way to combine these options because the language-specific defaults
4973 would be read from the current target board configuration instead of
4974 the board configuration specified with the @code{dest} option.  The
4975 closest solution was to always specify the language-selection option
4976 first, but this results in defaults appropriate for the current
4977 target, instead of the target selected with the @code{dest} option.
4979 @node target_link procedure,  , target_compile procedure, Procedures For Target Boards
4980 @subsubheading target_link Procedure
4981 @findex target_link
4983 @quotation
4984 @t{@b{target_link} @i{objects} @i{destfile} @i{flags}}
4985 @end quotation
4987 @table @asis
4988 @item @code{objects}
4989 @item @code{destfile}
4990 @item @code{flags}
4991 @end table
4993 @node target database library file, platform dependent procedures, Procedures For Target Boards, Built-in Procedures
4994 @section Target Database Procedures
4996 @menu
4997 * board_info Procedure: board_info procedure
4998 * host_info Procedure: host_info procedure
4999 * set_board_info Procedure: set_board_info procedure
5000 * add_board_info Procedure: add_board_info procedure
5001 * set_currtarget_info Procedure: set_currtarget_info procedure
5002 * target_info Procedure: target_info procedure
5003 * unset_board_info Procedure: unset_board_info procedure
5004 * unset_currtarget_info Procedure: unset_currtarget_info procedure
5005 * push_target Procedure: push_target procedure
5006 * pop_target Procedure: pop_target procedure
5007 * push_host Procedure: push_host procedure
5008 * pop_host Procedure: pop_host procedure
5009 @end menu
5011 @node board_info procedure, host_info procedure, , target database library file
5012 @subsubheading board_info Procedure
5013 @findex board_info
5015 Searches the @code{board_info} array for the specified information.
5017 @quotation
5018 @t{@b{board_info} @i{machine} @i{op} @i{args}}
5019 @end quotation
5021 @table @asis
5022 @item @code{machine}
5023 @item @code{op}
5024 @item @code{args}
5025 @end table
5027 @node host_info procedure, set_board_info procedure, board_info procedure, target database library file
5028 @subsubheading host_info Procedure
5029 @findex host_info
5031 @quotation
5032 @t{@b{host_info} @i{op} @i{args}}
5033 @end quotation
5035 @table @asis
5036 @item @code{op}
5037 @item @code{args}
5038 @end table
5040 @node set_board_info procedure, add_board_info procedure, host_info procedure, target database library file
5041 @subsubheading set_board_info Procedure
5042 @findex set_board_info
5044 This checks if the @code{board_info} array entry has been set already
5045 and, if not, sets it to given value.
5047 @quotation
5048 @t{@b{set_board_info} @i{entry} @i{value}}
5049 @end quotation
5051 @table @asis
5052 @item @code{entry}
5053 Field of the @code{board_info} to set.
5055 @item @code{value}
5056 Value to set the field to.
5057 @end table
5059 @node add_board_info procedure, set_currtarget_info procedure, set_board_info procedure, target database library file
5060 @subsubheading add_board_info Procedure
5061 @findex add_board_info
5063 This treats @code{board_info} array's field @emph{entry} as a TCL list
5064 and adds @emph{value} at the end.
5066 @quotation
5067 @t{@b{add_board_info} @i{entry} @i{value}}
5068 @end quotation
5070 @table @asis
5072 @item @code{entry}
5073 The name of a @code{board_info} field to operate on.
5075 @item @code{value}
5076 The value to add to the field.
5077 @end table
5079 @node set_currtarget_info procedure, target_info procedure, add_board_info procedure, target database library file
5080 @subsubheading set_currtarget_info Procedure
5081 @findex set_currtarget_info
5083 @quotation
5084 @t{@b{set_currtarget_info} @i{entry} @i{value}}
5085 @end quotation
5087 @table @asis
5088 @item @code{entry}
5089 @item @code{value}
5090 @end table
5092 @node target_info procedure, unset_board_info procedure, set_currtarget_info procedure, target database library file
5093 @subsubheading target_info Procedure
5094 @findex target_info
5096 @quotation
5097 @t{@b{target_info} @i{op} @i{args}}
5098 @end quotation
5100 @table @asis
5101 @item @code{op}
5102 @item @code{args}
5103 @end table
5105 @node unset_board_info procedure, unset_currtarget_info procedure, target_info procedure, target database library file
5106 @subsubheading unset_board_info Procedure
5107 @findex unset_board_info
5109 This checks if @code{board_info} array's field @emph{entry} has been
5110 set and if so, then removes it.
5112 @quotation
5113 @t{@b{unset_board_info} @i{entry}}
5114 @end quotation
5116 @table @asis
5117 @item @code{entry}
5118 The name of a @code{board_info} field to operate on.
5119 @end table
5121 @node unset_currtarget_info procedure, push_target procedure, unset_board_info procedure, target database library file
5122 @subsubheading unset_currtarget_info Procedure
5123 @findex unset_currtarget_info
5125 @quotation
5126 @t{@b{unset_currtarget_info} @i{entry}}
5127 @end quotation
5129 @table @asis
5130 @item @code{entry}
5131 @end table
5133 @node push_target procedure, pop_target procedure, unset_currtarget_info procedure, target database library file
5134 @subsubheading push_target Procedure
5135 @findex push_target
5137 This makes the target named @emph{name} be the current target
5138 connection.
5140 @quotation
5141 @t{@b{push_target} @i{name}}
5142 @end quotation
5144 @table @asis
5145 @item @code{name}
5146 Name of the target to make the current connection.
5147 @end table
5149 @node pop_target procedure, push_host procedure, push_target procedure, target database library file
5150 @subsubheading pop_target Procedure
5151 @findex pop_target
5153 This unsets the current target connection.
5155 @quotation
5156 @t{@b{pop_target}}
5157 @end quotation
5159 @node push_host procedure, pop_host procedure, pop_target procedure, target database library file
5160 @subsubheading push_host Procedure
5161 @findex push_host
5163 This procedure makes the host named @emph{name} be the current remote
5164 host connection.
5166 @quotation
5167 @t{@b{push_host} @i{name}}
5168 @end quotation
5170 @table @asis
5171 @item @code{name}
5172 Name of the host to make the current connection.
5173 @end table
5175 @node pop_host procedure,  , push_host procedure, target database library file
5176 @subsubheading pop_host Procedure
5177 @findex pop_host
5179 This unsets the current host connection.
5181 @quotation
5182 @t{@b{pop_host}}
5183 @end quotation
5185 @node platform dependent procedures, Utility Procedures, target database library file, Built-in Procedures
5186 @section Platform Dependent Procedures
5188 Each combination of target and tool requires some target-dependent
5189 procedures.  The names of these procedures have a common form: the
5190 tool name, followed by an underscore @emph{_}, and finally a suffix
5191 describing the procedure's purpose.  For example, a procedure to
5192 extract the version from GDB is called @code{gdb_version}.
5194 @code{runtest} itself calls only two of these procedures,
5195 @code{$@{tool@}_exit} and @code{$@{tool@}_version}; these procedures
5196 use no arguments.
5198 The other two procedures, @code{$@{tool@}_start} and
5199 @code{$@{tool@}_load}, are only called by the test suites themselves
5200 (or by testsuite-specific initialization code); they may take
5201 arguments or not, depending on the conventions used within each
5202 testsuite.
5204 The usual convention for return codes from any of these procedures
5205 (although it is not required by @code{runtest}) is to return @emph{0}
5206 if the procedure succeeded, @emph{1} if it failed, and @emph{-1} if
5207 there was a communication error.
5209 @menu
5210 * $@{tool@}_start Procedure: $@{tool@}_start procedure
5211 * $@{tool@}_load Procedure: $@{tool@}_load procedure
5212 * $@{tool@}_exit Procedure: $@{tool@}_exit procedure
5213 * $@{tool@}_version Procedure: $@{tool@}_version procedure
5214 @end menu
5216 @node $@{tool@}_start procedure, $@{tool@}_load procedure, , platform dependent procedures
5217 @subsubheading $@{tool@}_start Procedure
5218 @findex $@{tool@}_start
5220 Starts a particular tool.  For an interactive tool,
5221 @code{$@{tool@}_start} starts and initializes the tool, leaving the
5222 tool up and running for the test cases; an example is
5223 @code{gdb_start}, the start function for GDB.  For a batch-oriented
5224 tool, @code{$@{tool@}_start} is optional; the recommended convention
5225 is to let @code{$@{tool@}_start} run the tool, leaving the output in a
5226 variable called @code{comp_output}.  Test scripts can then analyze
5227 @code{$comp_output} to determine the test results.  An example of this
5228 second kind of start function is @code{gcc_start}, the start function
5229 for GCC.
5231 DejaGnu itself does not call @code{$@{tool@}_start}.  The
5232 initialization module @code{$@{tool@}_init.exp} must call
5233 @code{$@{tool@}_start} for interactive tools; for batch-oriented
5234 tools, each individual test script calls @code{$@{tool@}_start} (or
5235 makes other arrangements to run the tool).
5237 @quotation
5238 @t{@b{$@{tool@}_start}}
5239 @end quotation
5241 @node $@{tool@}_load procedure, $@{tool@}_exit procedure, $@{tool@}_start procedure, platform dependent procedures
5242 @subsubheading $@{tool@}_load Procedure
5243 @findex $@{tool@}_load
5245 Loads something into a tool.  For an interactive tool, this conditions
5246 the tool for a particular test case; for example, @code{gdb_load}
5247 loads a new executable file into the debugger.  For batch-oriented
5248 tools, @code{$@{tool@}_load} may do nothing---though, for example, the
5249 GCC support uses @code{gcc_load} to load and run a binary on the
5250 target environment.  Conventionally, @code{$@{tool@}_load} leaves the
5251 output of any program it runs in a variable called
5252 @code{$exec_output}.  Writing @code{$@{tool@}_load} can be the most
5253 complex part of extending DejaGnu to a new tool or a new target, if it
5254 requires much communication coding or file downloading.  Test scripts
5255 call @code{$@{tool@}_load}.
5257 @quotation
5258 @t{@b{$@{tool@}_load}}
5259 @end quotation
5261 @node $@{tool@}_exit procedure, $@{tool@}_version procedure, $@{tool@}_load procedure, platform dependent procedures
5262 @subsubheading $@{tool@}_exit Procedure
5263 @findex $@{tool@}_exit
5265 Cleans up (if necessary) before DejaGnu exits.  For interactive tools,
5266 this usually ends the interactive session.  You can also use
5267 @code{$@{tool@}_exit} to remove any temporary files left over from the
5268 tests.  @code{runtest} calls @code{$@{tool@}_exit}.
5270 @quotation
5271 @t{@b{$@{tool@}_exit}}
5272 @end quotation
5274 @node $@{tool@}_version procedure, , $@{tool@}_exit procedure, platform dependent procedures
5275 @subsubheading $@{tool@}_version Procedure
5276 @findex $@{tool@}_version
5278 Prints the version label and number for @code{$@{tool@}}.  This is
5279 called by the DejaGnu procedure that prints the final summary report.
5280 The output should consist of the full path name used for the tested
5281 tool, and its version number.
5283 @quotation
5284 @t{@b{$@{tool@}_version}}
5285 @end quotation
5287 @node Utility Procedures, Libgloss, platform dependent procedures, Built-in Procedures
5288 @section Utility Procedures
5290 @menu
5291 * getdirs Procedure: getdirs procedure
5292 * relative_filename Procedure: relative_filename procedure
5293 * find Procedure: find procedure
5294 * which Procedure: which procedure
5295 * grep Procedure: grep procedure
5296 * prune Procedure: prune procedure
5297 * runtest_file_p Procedure: runtest_file_p procedure
5298 * diff Procedure: diff procedure
5299 * setenv Procedure: setenv procedure
5300 * unsetenv Procedure: unsetenv procedure
5301 * getenv Procedure: getenv procedure
5302 @end menu
5304 @node getdirs procedure, relative_filename procedure, Utility Procedures, Utility Procedures
5305 @subsubheading getdirs Procedure
5306 @findex getdirs
5308 Returns a list of all the subdirectories in a single directory that
5309 match a glob pattern.  If no directories match the pattern, then an
5310 empty list is returned.
5312 This procedure is specialized as a search for tests in testsuites:
5313 @code{getdirs} ignores directories named @samp{testsuite},
5314 @samp{config}, or @samp{lib}, and also ignores directories associated
5315 with a few revision control systems, specifically Git (@samp{.git}),
5316 Subversion (@samp{.svn}), CVS (@samp{CVS}), RCS (@samp{RCS}), and SCCS
5317 (@samp{SCCS}).  These ignored directories will not appear in the
5318 returned list, nor will they be examined in a recursive search.
5320 @quotation
5321 @t{@b{getdirs} @i{-all} @i{rootdir} @i{pattern}}
5322 @end quotation
5324 @table @asis
5326 @item @code{-all}
5327 If this option is given, then subdirectories will be matched
5328 recursively.
5330 @item @code{rootdir}
5331 The top level directory to start the search from.
5333 @item @code{pattern}
5334 The Tcl glob pattern to match.  If you do not specify @code{pattern},
5335 @code{getdirs} uses a default pattern of @code{*}.
5337 @end table
5339 @node relative_filename procedure, find procedure, getdirs procedure, Utility Procedures
5340 @subsubheading relative_filename Procedure
5341 @findex relative_filename
5343 Return a relative file name, given a starting point.
5345 @quotation
5346 @t{@b{relative_filename} @i{base} @i{destination}}
5347 @end quotation
5349 @table @asis
5351 @item @code{base}
5352 The starting point for relative file name traversal.
5354 @item @code{destination}
5355 The absolute file name that should be reached by appending the return
5356 value to @i{base}.
5357 @end table
5359 @node find procedure, which procedure, relative_filename procedure, Utility Procedures
5360 @subsubheading find Procedure
5361 @findex find
5363 Search for files whose names match a glob pattern.  Search
5364 subdirectories recursively, starting at a particular root directory.
5365 The result is the list of files whose names match.  Filenames in the
5366 result include all intervening subdirectory names.  If no files match
5367 the pattern, then an empty string is returned.
5369 @quotation
5370 @t{@b{find} @i{rootdir} @i{pattern}}
5371 @end quotation
5373 @table @asis
5374 @item @code{rootdir}
5375 The top level directory to start the search from.
5377 @item @code{pattern}
5378 A glob pattern representing the files to find.
5379 @end table
5381 @node which procedure, grep procedure, find procedure, Utility Procedures
5382 @subsubheading which Procedure
5383 @findex which
5385 Searches the execution path for an executable file like the BSD
5386 @code{which(1)} utility.  This procedure uses the shell environment
5387 variable @code{PATH}.  It returns @b{0} if the binary is not in the
5388 path or if the @code{PATH} environment variable is not set.  If the
5389 file is in the path, this procedure returns the full path to the file.
5391 @quotation
5392 @t{@b{which} @i{file}}
5393 @end quotation
5395 @table @asis
5396 @item @code{file}
5397 The executable program or shell script to look for.
5398 @end table
5400 @node grep procedure, prune procedure, which procedure, Utility Procedures
5401 @subsubheading grep Procedure
5402 @findex grep
5404 Search a named file for lines that contain a match for a regular
5405 expression.  The result is a list of all the lines that match.  If no
5406 lines match, the result is an empty string.  All of the Tcl regular
5407 expression syntax is supported.
5409 @quotation
5410 @t{@b{grep} @i{-n} @i{filename} @i{regexp} @b{line}}
5411 @end quotation
5413 @table @asis
5414 @item @code{-n}
5415 The @code{-n} option prefixes matched lines in the result with the
5416 line number, just like GNU @code{grep} does.  This option should be
5417 used in preference to the @code{line} keyword documented below.
5419 @item @code{filename}
5420 The file to search.
5422 @item @code{regexp}
5423 The Unix style regular expression (as used by the @code{grep} UNIX
5424 utility) to search for.
5426 @item @code{line}
5427 Use the optional keyword @code{line} to prefix matched lines in the
5428 result with the line number.  This usage is deprecated.
5429 @end table
5431 @node prune procedure, runtest_file_p procedure, grep procedure, Utility Procedures
5432 @subsubheading prune Procedure
5433 @findex prune
5435 This procedure is deprecated and will be removed in a future release
5436 of DejaGnu.  If a testsuite uses this procedure, a copy of the
5437 procedure should be made and placed in the @file{lib} directory of the
5438 testsuite.
5440 @node runtest_file_p procedure, diff procedure, prune procedure, Utility Procedures
5441 @subsubheading runtest_file_p Procedure
5442 @findex runtest_file_p
5444 Search @emph{runtest}s for @emph{testcase} and return @b{1} if found,
5445 @b{0} if not.  This is used by tools like compilers where each
5446 testcase is a file.
5448 @quotation
5449 @t{@b{runtest_file_p} @i{runtests} @i{testcase}}
5450 @end quotation
5452 @table @asis
5453 @item @code{runtests}
5455 @code{runtests} is a list of two elements.  The second is a copy of
5456 what was on the right side of the @code{=} if @code{foo.exp="..."} was
5457 specified, or an empty string if no such argument is present.
5459 @item @code{testcase}
5460 The filename of the current testcase under consideration.
5461 @end table
5463 @node diff procedure, setenv procedure, runtest_file_p procedure, Utility Procedures
5464 @subsubheading diff Procedure
5465 @findex diff
5467 Compares two files and returns @b{1} if they match (no differences) or
5468 @b{0} if not.  If @code{verbose} is set, then it will print the
5469 differences to the console.
5471 @quotation
5472 @t{@b{diff} @i{file1} @i{file2}}
5473 @end quotation
5475 @table @asis
5476 @item @code{file1}
5477 First file for the comparison.
5479 @item @code{file2}
5480 Second file for the comparison.
5481 @end table
5483 @node setenv procedure, unsetenv procedure, diff procedure, Utility Procedures
5484 @subsubheading setenv Procedure
5485 @findex setenv
5487 Set an environment variable.
5489 @quotation
5490 @t{@b{setenv} @i{var} @i{val}}
5491 @end quotation
5493 @table @asis
5494 @item @code{var}
5495 The environment variable to set.
5497 @item @code{val}
5498 The value to set the variable to.
5499 @end table
5501 @node unsetenv procedure, getenv procedure, setenv procedure, Utility Procedures
5502 @subsubheading unsetenv Procedure
5503 @findex unsetenv
5505 Unset an environment variable.
5507 @quotation
5508 @t{@b{unsetenv} @i{var} }
5509 @end quotation
5511 @table @asis
5512 @item @code{var}
5513 The environment variable to unset.
5514 @end table
5516 @node getenv procedure,  , unsetenv procedure, Utility Procedures
5517 @subsubheading getenv Procedure
5518 @findex getenv
5520 Returns the value of the envrionment variable @emph{var} if it is
5521 defined, otherwise an empty string is returned.
5523 @quotation
5524 @t{@b{getenv} @i{var} }
5525 @end quotation
5527 @table @asis
5528 @item @code{var}
5529 Environment variable to retrieve.
5530 @end table
5532 @node Libgloss, Debugging Procedures, Utility Procedures, Built-in Procedures
5533 @section Libgloss, a free board support package (BSP)
5535 Libgloss is a free board support package @dfn{BSP} commonly used with
5536 GCC and G++ to produce a fully linked executable image for an embedded
5537 systems.
5539 @menu
5540 * libgloss_link_flags Procedure: libgloss_link_flags procedure
5541 * libgloss_include_flags Procedure: libgloss_include_flags procedure
5542 * newlib_link_flags Procedure: newlib_link_flags procedure
5543 * newlib_include_flags Procedure: newlib_include_flags procedure
5544 * libio_include_flags Procedure: libio_include_flags procedure
5545 * libio_link_flags Procedure: libio_link_flags procedure
5546 * g++_include_flags Procedure: g++_include_flags procedure
5547 * g++_link_flags Procedure: g++_link_flags procedure
5548 * libstdc++_include_flags Procedure: libstdc++_include_flags procedure
5549 * libstdc++_link_flags Procedure: libstdc++_link_flags procedure
5550 * get_multilibs Procedure: get_multilibs procedure
5551 * find_binutils_prog Procedure: find_binutils_prog procedure
5552 * find_gcc Procedure: find_gcc procedure
5553 * find_gcj Procedure: find_gcj procedure
5554 * find_g++ Procedure: find_g++ procedure
5555 * find_g77 Procedure: find_g77 procedure
5556 * find_gfortran Procedure: find_gfortran procedure
5557 * find_go Procedure: find_go procedure
5558 * find_go_linker Procedure: find_go_linker procedure
5559 * find_rustc Procedure: find_rustc procedure
5560 * process_multilib_options Procedure: process_multilib_options procedure
5561 * add_multilib_option Procedure: add_multilib_option procedure
5562 * find_gas Procedure: find_gas procedure
5563 * find_ld Procedure: find_ld procedure
5564 * build_wrapper Procedure: build_wrapper procedure
5565 * winsup_include_flags Procedure: winsup_include_flags procedure
5566 * winsup_link_flags Procedure: winsup_link_flags procedure
5567 @end menu
5569 @node libgloss_link_flags procedure, libgloss_include_flags procedure, , Libgloss
5570 @subsubheading libgloss_link_flags Procedure
5571 @findex libgloss_link_flags
5573 Finds the pieces of @code{libgloss} needed to link a set of object
5574 files into an executable.  This usually means setting the @code{-L}
5575 and @code{-B} paths correctly.
5577 @quotation
5578 @t{@b{libgloss_link_flags} @i{args} }
5579 @end quotation
5581 @table @asis
5582 @item @code{args}
5583 Ignored.
5584 @end table
5586 @node libgloss_include_flags procedure, newlib_link_flags procedure, libgloss_link_flags procedure, Libgloss
5587 @subsubheading libgloss_include_flags Procedure
5588 @findex libgloss_include_flags
5590 This procedure always returns an empty string.  It is provided for
5591 consistency.
5593 @quotation
5594 @t{@b{libgloss_include_flags} @i{args}}
5595 @end quotation
5597 @table @asis
5598 @item @code{args}
5599 Ignored.
5600 @end table
5602 @node newlib_link_flags procedure, newlib_include_flags procedure, libgloss_include_flags procedure, Libgloss
5603 @subsubheading newlib_link_flags Procedure
5604 @findex newlib_link_flags
5606 Return the options needed to link an executable with @code{newlib}.
5607 This usually means setting the @code{-L} and @code{-B} paths
5608 correctly.
5610 @quotation
5611 @t{@b{newlib_link_flags} @i{args}}
5612 @end quotation
5614 @table @asis
5615 @item @code{args}
5616 Ignored.
5617 @end table
5619 @node newlib_include_flags procedure, libio_include_flags procedure, newlib_link_flags procedure, Libgloss
5620 @subsubheading newlib_include_flags Procedure
5621 @findex newlib_include_flags
5623 Return the options needed to locate the @code{newlib} header files.
5625 @quotation
5626 @t{@b{newlib_include_flags} @i{args}}
5627 @end quotation
5629 @table @asis
5630 @item @code{args}
5631 Ignored.
5632 @end table
5634 @node libio_include_flags procedure, libio_link_flags procedure, newlib_include_flags procedure, Libgloss
5635 @subsubheading libio_include_flags Procedure
5636 @findex libio_include_flags
5638 @quotation
5639 @t{@b{libio_include_flags} @i{args}}
5640 @end quotation
5642 Return the options needed to locate the @code{libio} header files.
5644 @table @asis
5645 @item @code{args}
5646 Ignored.
5647 @end table
5649 @node libio_link_flags procedure, g++_include_flags procedure, libio_include_flags procedure, Libgloss
5650 @subsubheading libio_link_flags Procedure
5651 @findex libio_link_flags
5653 @quotation
5654 @t{@b{libio_link_flags} @i{args}}
5655 @end quotation
5657 Return the options needed to link an executable with @code{libio}.
5658 This usually means setting the @code{-L} and @code{-B} paths
5659 correctly.
5661 @table @asis
5662 @item @code{args}
5663 Ignored.
5664 @end table
5666 @node g++_include_flags procedure, g++_link_flags procedure, libio_link_flags procedure, Libgloss
5667 @subsubheading g++_include_flags Procedure
5668 @findex g++_include_flags
5670 Return the options needed to locate the C++ stnadard library header
5671 files.
5673 @quotation
5674 @t{@b{g++_include_flags} @i{args}}
5675 @end quotation
5677 @table @asis
5678 @item @code{args}
5679 Ignored.
5680 @end table
5682 @node g++_link_flags procedure, libstdc++_include_flags procedure, g++_include_flags procedure, Libgloss
5683 @subsubheading g++_link_flags Procedure
5684 @findex g++_link_flags
5686 @quotation
5687 @t{@b{g++_link_flags} @i{args}}
5688 @end quotation
5690 Return the options needed to link an executable with @code{libg++}.
5691 This usually means setting the @code{-L} and @code{-B} paths
5692 correctly.
5694 @table @asis
5695 @item @code{args}
5696 Ignored.
5697 @end table
5699 @node libstdc++_include_flags procedure, libstdc++_link_flags procedure, g++_link_flags procedure, Libgloss
5700 @subsubheading libstdc++_include_flags Procedure
5701 @findex libstdc++_include_flags
5703 @quotation
5704 @t{@b{libstdc++_include_flags} @i{args}}
5705 @end quotation
5707 Return the options needed to locate the C++ stnadard library header
5708 files.
5710 @table @asis
5711 @item @code{args}
5712 Ignored.
5713 @end table
5715 @node libstdc++_link_flags procedure, get_multilibs procedure, libstdc++_include_flags procedure, Libgloss
5716 @subsubheading libstdc++_link_flags Procedure
5717 @findex libstdc++_link_flags
5719 @quotation
5720 @t{@b{libstdc++_link_flags} @i{args}}
5721 @end quotation
5723 @table @asis
5724 @item @code{args}
5725 @end table
5727 @node get_multilibs procedure, find_binutils_prog procedure, libstdc++_link_flags procedure, Libgloss
5728 @subsubheading get_multilibs Procedure
5729 @findex get_multilibs
5731 @quotation
5732 @t{@b{get_multilibs} @i{args}}
5733 @end quotation
5735 @table @asis
5736 @item @code{args}
5737 @end table
5739 @node find_binutils_prog procedure, find_gcc procedure, get_multilibs procedure, Libgloss
5740 @subsubheading find_binutils_prog Procedure
5741 @findex find_binutils_prog
5743 @quotation
5744 @t{@b{find_binutils_prog} @i{name}}
5745 @end quotation
5747 @table @asis
5748 @item @code{name}
5749 @end table
5751 @node find_gcc procedure, find_gcj procedure, find_binutils_prog procedure, Libgloss
5752 @subsubheading find_gcc Procedure
5753 @findex find_gcc
5755 Looks for a copy of the GNU C compiler in the build tree and in the
5756 @code{PATH}.  This will also return the proper transformed name for a
5757 cross-compiler if the build tree is configured for one.
5759 @quotation
5760 @t{@b{find_gcc}}
5761 @end quotation
5763 @node find_gcj procedure, find_g++ procedure, find_gcc procedure, Libgloss
5764 @subsubheading find_gcj Procedure
5765 @findex find_gcj
5767 Looks for a copy of the GNU Java compiler in the build tree and in the
5768 @code{PATH}.  This will also return the proper transformed name for a
5769 cross-compiler if the build tree is configured for one.
5771 @quotation
5772 @t{@b{find_gcj}}
5773 @end quotation
5775 @node find_g++ procedure, find_g77 procedure, find_gcj procedure, Libgloss
5776 @subsubheading find_g++ Procedure
5777 @findex find_g++
5779 Looks for a copy of the GNU C++ compiler in the build tree and in the
5780 @code{PATH}.  This will also return the proper transformed name for a
5781 cross-compiler if the build tree is configured for one.
5783 @quotation
5784 @t{@b{find_g++}}
5785 @end quotation
5787 @node find_g77 procedure, find_gfortran procedure, find_g++ procedure, Libgloss
5788 @subsubheading find_g77 Procedure
5789 @findex find_g77
5791 Looks for a copy of the GNU Fortran 77 compiler in the build tree and
5792 in the @code{PATH}.  This will also return the proper transformed name
5793 for a cross-compiler if the build tree is configured for one.
5795 @quotation
5796 @t{@b{find_g77}}
5797 @end quotation
5799 @node find_gfortran procedure, find_go procedure, find_g77 procedure, Libgloss
5800 @subsubheading find_gfortran Procedure
5801 @findex find_gfortran
5803 Looks for a copy of the GNU Fortran compiler in the build tree and in
5804 the @code{PATH}.  This will also return the proper transformed name
5805 for a cross-compiler if the build tree is configured for one.
5807 @quotation
5808 @t{@b{find_gfortran}}
5809 @end quotation
5811 @node find_go procedure, find_go_linker procedure, find_gfortran procedure, Libgloss
5812 @subsubheading find_go Procedure
5813 @findex find_go
5815 Looks for a copy of the GNU compiler for the Go language in the build
5816 tree and in the @code{PATH}.  This will also return the proper
5817 transformed name for a cross-compiler if the build tree is configured
5818 for one.
5820 @quotation
5821 @t{@b{find_go}}
5822 @end quotation
5824 @node find_go_linker procedure, find_rustc procedure, find_go procedure, Libgloss
5825 @subsubheading find_go_linker Procedure
5826 @findex find_go_linker
5828 Looks for a copy of the special linker associated with the GNU
5829 compiler for the Go language in the build tree and in the @code{PATH}.
5830 This will also return the proper transformed name for a cross-compiler
5831 if the build tree is configured for one.
5833 @quotation
5834 @t{@b{find_go_linker}}
5835 @end quotation
5837 @node find_rustc procedure, process_multilib_options procedure, find_go_linker procedure, Libgloss
5838 @subsubheading find_rustc Procedure
5839 @findex find_rustc
5841 Looks for a copy of a compiler for the Rust language in the build tree
5842 and in the @code{PATH}.  The Rust compiler is different and this
5843 procedure also ensures that it will be called with options to suppress
5844 output coloration.
5846 @quotation
5847 @t{@b{find_rustc}}
5848 @end quotation
5850 @node process_multilib_options procedure, add_multilib_option procedure, find_rustc procedure, Libgloss
5851 @subsubheading process_multilib_options Procedure
5852 @findex process_multilib_options
5854 @quotation
5855 @t{@b{process_multilib_options} @i{args}}
5856 @end quotation
5858 @table @asis
5859 @item @code{args}
5860 @end table
5862 @node add_multilib_option procedure, find_gas procedure, process_multilib_options procedure, Libgloss
5863 @subsubheading add_multilib_option Procedure
5864 @findex add_multilib_option
5866 @quotation
5867 @t{@b{add_multilib_option} @i{args}}
5868 @end quotation
5870 @table @asis
5871 @item @code{args}
5872 @end table
5874 @node find_gas procedure, find_ld procedure, add_multilib_option procedure, Libgloss
5875 @subsubheading find_gas Procedure
5876 @findex find_gas
5878 @quotation
5879 @t{@b{find_gas}}
5880 @end quotation
5882 @node find_ld procedure, build_wrapper procedure, find_gas procedure, Libgloss
5883 @subsubheading find_ld Procedure
5884 @findex find_ld
5886 @quotation
5887 @t{@b{find_ld}}
5888 @end quotation
5890 @node build_wrapper procedure, winsup_include_flags procedure, find_ld procedure, Libgloss
5891 @subsubheading build_wrapper Procedure
5892 @findex build_wrapper
5894 @quotation
5895 @t{@b{build_wrapper} @i{gluefile}}
5896 @end quotation
5898 @table @asis
5899 @item @code{gluefile}
5900 @end table
5902 @node winsup_include_flags procedure, winsup_link_flags procedure, build_wrapper procedure, Libgloss
5903 @subsubheading winsup_include_flags Procedure
5904 @findex winsup_include_flags
5906 @quotation
5907 @t{@b{winsup_include_flags} @i{args}}
5908 @end quotation
5910 @table @asis
5911 @item @code{args}
5912 @end table
5914 @node winsup_link_flags procedure, , winsup_include_flags procedure, Libgloss
5915 @subsubheading winsup_link_flags Procedure
5916 @findex winsup_link_flags
5918 @quotation
5919 @t{@b{winsup_link_flags} @i{args}}
5920 @end quotation
5922 @table @asis
5923 @item @code{args}
5924 @end table
5926 @node Debugging Procedures, , Libgloss, Built-in Procedures
5927 @section Procedures for debugging your scripts
5929 @menu
5930 * bt Procedure: bt procedure
5931 * dumpvars Procedure: dumpvars procedure
5932 * dumplocals Procedure: dumplocals procedure
5933 * dumprocs Procedure: dumprocs procedure
5934 * dumpwatch Procedure: dumpwatch procedure
5935 * watcharray Procedure: watcharray procedure
5936 * watchvar Procedure: watchvar procedure
5937 * watchunset Procedure: watchunset procedure
5938 * watchwrite Procedure: watchwrite procedure
5939 * watchread Procedure: watchread procedure
5940 * watchdel Procedure: watchdel procedure
5941 * print Procedure: print procedure
5942 * quit Procedure: quit procedure
5943 @end menu
5945 @node bt procedure, dumpvars procedure, Debugging Procedures, Debugging Procedures
5946 @subsubheading bt Procedure
5947 @findex bt
5949 This procedure prints a backtrace using the @code{w} command from the
5950 Tcl debugger.
5952 @quotation
5953 @t{@b{bt}}
5954 @end quotation
5956 @node dumpvars procedure, dumplocals procedure, bt procedure, Debugging Procedures
5957 @subsubheading dumpvars Procedure
5958 @findex dumpvars
5959 @c abbrev: dv
5961 This procedure prints the values of the global variables that match a
5962 glob pattern.  Abbreviation: @kbd{dv}.
5964 @quotation
5965 @t{@b{dumpvars} @i{pattern}}
5966 @end quotation
5968 @table @asis
5969 @item @code{pattern}
5970 The global variables to dump.
5971 @end table
5973 @node dumplocals procedure, dumprocs procedure, dumpvars procedure, Debugging Procedures
5974 @subsubheading dumplocals Procedure
5975 @findex dumplocals
5976 @c abbrev: dl
5978 This procedure prints the values of local variables that match a glob
5979 pattern.  Abbreviation: @kbd{dl}.
5981 @quotation
5982 @t{@b{dumplocals} @i{pattern} }
5983 @end quotation
5985 @table @asis
5986 @item @code{pattern}
5987 The local variables to dump.
5988 @end table
5990 @node dumprocs procedure, dumpwatch procedure, dumplocals procedure, Debugging Procedures
5991 @subsubheading dumprocs Procedure
5992 @findex dumprocs
5993 @c abbrev: dp
5995 This procedure dumps the body of all procs that match a glob pattern.
5996 It is abbreviated as @kbd{dp}.
5998 @quotation
5999 @t{@b{dumprocs} @i{pattern}}
6000 @end quotation
6002 @table @asis
6003 @item @code{pattern}
6004 The proc bodies to dump.
6005 @end table
6007 @node dumpwatch procedure, watcharray procedure, dumprocs procedure, Debugging Procedures
6008 @subsubheading dumpwatch Procedure
6009 @findex dumpwatch
6010 @c abbrev: dw
6012 This procedure prints all of the watchpoints matching a glob pattern.
6013 It is abbreviated as @kbd{dw}.
6015 @quotation
6016 @t{@b{dumpwatch} @i{pattern}}
6017 @end quotation
6019 @table @asis
6020 @item @code{pattern}
6021 The watchpoints to dump.
6022 @end table
6024 @node watcharray procedure, watchvar procedure, dumpwatch procedure, Debugging Procedures
6025 @subsubheading watcharray Procedure
6026 @findex watcharray
6028 @quotation
6029 @t{@b{watcharray} @i{array} @i{element} @i{type}}
6030 @end quotation
6032 @table @asis
6033 @item @code{array}
6035 @item @code{element}
6037 @item @code{type}
6038 The csh "glob" style pattern to look for.
6039 @end table
6041 @node watchvar procedure, watchunset procedure, watcharray procedure, Debugging Procedures
6042 @subsubheading watchvar Procedure
6043 @findex watchvar
6045 @quotation
6046 @t{@b{watchvar} @i{var} @i{type}}
6047 @end quotation
6049 @table @asis
6050 @item @code{var}
6052 @item @code{type}
6053 @end table
6055 @node watchunset procedure, watchwrite procedure, watchvar procedure, Debugging Procedures
6056 @subsubheading watchunset Procedure
6057 @findex watchunset
6058 @c abbrev: wu
6060 This breaks program execution when the variable @code{var} is unset.
6061 Abbreviation: @kbd{wu}.
6063 @quotation
6064 @t{@b{watchunset} @i{pattern}}
6065 @end quotation
6067 @table @asis
6068 @item @code{pattern}
6069 @end table
6071 @node watchwrite procedure, watchread procedure, watchunset procedure, Debugging Procedures
6072 @subsubheading watchwrite Procedure
6073 @findex watchwrite
6074 @c abbrev: ww
6076 This breaks program execution when the variable @code{var} is written.
6077 Abbreviation: @kbd{ww}.
6079 @quotation
6080 @t{@b{watchwrite} @i{var}}
6081 @end quotation
6083 @table @asis
6084 @item @code{var}
6085 The variable to watch.
6086 @end table
6088 @node watchread procedure, watchdel procedure, watchwrite procedure, Debugging Procedures
6089 @subsubheading watchread Procedure
6090 @findex watchread
6091 @c abbrev: wr
6093 This breaks program execution when the variable @code{var} is read.
6094 Abbreviation: @kbd{wr}.
6096 @quotation
6097 @t{@b{watchread} @i{var}}
6098 @end quotation
6100 @table @asis
6101 @item @code{var}
6102 The variable to watch.
6103 @end table
6105 @node watchdel procedure, print procedure, watchread procedure, Debugging Procedures
6106 @subsubheading watchdel Procedure
6107 @findex watchdel
6108 @c abbrev: wd
6110 This deletes a watchpoint from the watch list.  Abbreviation:
6111 @kbd{wd}.
6113 @quotation
6114 @t{@b{watchdel} @i{pattern}}
6115 @end quotation
6117 @table @asis
6118 @item @code{pattern}
6119 @end table
6121 @node print procedure, quit procedure, watchdel procedure, Debugging Procedures
6122 @subsubheading print Procedure
6123 @findex print
6125 This prints the value of a variable.  Abbreviation: @kbd{p}.
6127 @quotation
6128 @t{@b{print} @i{var}}
6129 @end quotation
6131 @table @asis
6132 @item @code{var}
6133 The variable to print.
6134 @end table
6136 @node quit procedure, , print procedure, Debugging Procedures
6137 @subsubheading quit Procedure
6138 @findex quit
6140 This makes @code{runtest} exit.  Abbreviation: @kbd{q}.
6142 @quotation
6143 @t{@b{quit}}
6144 @end quotation
6146 @node GNU Free Documentation License, Concept Index, Built-in Procedures, Top
6147 @appendix GNU Free Documentation License
6148 @include fdl.texi
6150 @node Concept Index, Procedure Index, GNU Free Documentation License, Top
6151 @unnumbered Concept Index
6152 @printindex cp
6154 @node Procedure Index, Variable Index, Concept Index, Top
6155 @unnumbered Procedure Index
6156 @printindex fn
6158 @node Variable Index, , Procedure Index, Top
6159 @unnumbered Variable Index
6160 @printindex vr
6162 @bye
6164 @c  LocalWords:  subdirectory prepend prepended testsuite filename Expect's svn
6165 @c  LocalWords:  DejaGnu CVS RCS SCCS prepending subcommands Tcl Awk Readline
6166 @c  LocalWords:  POSIX KFAIL KPASS XFAIL XPASS hostname multitable gfortran api
6167 @c  LocalWords:  boolean subcommand testcase eval rustc executables perror gdb
6168 @c  LocalWords:  interprocess lookahead XPASSED XFAILED printf TestState init
6169 @c  LocalWords:  proc