aboutsummaryrefslogtreecommitdiff
path: root/contrib/bluegnu2.0.3/doc/dejagnu.info-2
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bluegnu2.0.3/doc/dejagnu.info-2')
-rw-r--r--contrib/bluegnu2.0.3/doc/dejagnu.info-21137
1 files changed, 1137 insertions, 0 deletions
diff --git a/contrib/bluegnu2.0.3/doc/dejagnu.info-2 b/contrib/bluegnu2.0.3/doc/dejagnu.info-2
new file mode 100644
index 0000000..9339d94
--- /dev/null
+++ b/contrib/bluegnu2.0.3/doc/dejagnu.info-2
@@ -0,0 +1,1137 @@
+This is Info file dejagnu.info, produced by Makeinfo version 1.68 from
+the input file ./dejagnu.texi.
+
+START-INFO-DIR-ENTRY
+* DejaGnu: (dejagnu). The GNU testing framework.
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+
+ Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+ Permission is granted to copy and distribute modified versions of
+this manual under the conditions for verbatim copying, provided also
+that the entire resulting derived work is distributed under the terms
+of a permission notice identical to this one.
+
+ Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions.
+
+
+File: dejagnu.info, Node: Names, Next: Init Module, Up: Internals
+
+Conventions for using tool names
+================================
+
+ DejaGnu uses `$tool', the name of the tool under test, to tie
+together the testing configuration in a straightforward but flexible
+way. If there is only one testsuite for a particular application, then
+`$tool' is optional.
+
+ `$tool' is *not* used to invoke the tool, since sites that run
+multiple configurations of a particular tool often call each
+configuration by a different name. `runtest' uses the
+configuration-dependent variables captured in `site.exp' to determine
+how to call each tool.
+
+ `runtest' uses tool names to find directories containing tests.
+`runtest' scans the source directory (specified with `--srcdir') for
+all directories whose names start with the tool name. It is a common
+practice to put a period after the tool part of the name. For instance,
+directories that start with `g++.' contain G++ tests. To add a new
+test, just put it in any directory (create an entirely new directory,
+if you wish) whose name follows this convention.
+
+ A test is any file in an appropriately named subdirectory whose name
+ends in `.exp' (the conventional way of naming `expect' scripts).
+These simple naming conventions make it as simple as possible to
+install new tests: all you must do is put the test in the right
+directory.
+
+ `runtest' sorts the tests in each subdirectory by name (using the
+Tcl `lsort' command) and runs them in the resulting order.
+
+
+File: dejagnu.info, Node: Init Module, Next: DejaGnu Builtins, Prev: Names, Up: Internals
+
+Initialization module
+=====================
+
+ The initialization module (or "init file") has two purposes: to
+provide tool and target dependent procedures, and to start up an
+interactive tool to the point where it is ready to operate. The latter
+includes establishing communications with the target. All the tests for
+interactive programs assume that the tool is already running and
+communicating. Initialization modules for non-interactive programs may
+only need to supply the support functions.
+
+ Each test suite directory must contain (in its `config'
+subdirectory) a separate initialization module for each target. The
+appropriate init file is can be named several ways. The prefered name is
+the *os* part of the canonical configuration name with `.exp' as the
+suffix. An example would be that for an `m68k-coff' system, the
+`target_os' part would be `coff'. The next way is for system where
+there are short filenames, or a shortcut is desired to refer to the OS
+name for that target. This is uses the value of `$target_abbrev' rather
+than the `target_os'.
+
+ The final file looked for is simply `default.exp'. If there is only
+one operating system to support, then this file can be used. It's main
+purpose is to offer some support for new operating systems, or for
+unsupported cross targets. The last file looked for is `unknown.exp'.
+This is usually limited to error handling for unsupported targets. It's
+whole contents is typically.
+
+ perror "Sorry, there is no support for this target"
+ exit 1
+
+ At the beginning of the init file, you must first determine the
+proper executable name of the tool to execute, since the actual name of
+the tool to be tested my vary from system to system. Here's an example
+for the GNU C compiler.
+
+ global AR
+ # look for the archiver ar
+ if ![info exists AR] {
+ set AR [findfile $base_dir/../../binutils/ar $base_dir/../../binutils/ar [tr
+ ansform ar]]
+ verbose "AR defaulting to $AR" 2
+ }
+ }
+
+ global CFLAGS
+ if ![info exists CFLAGS] then {
+ set CFLAGS ""
+ }
+
+ It is always a good idea to first check the variable, and only set
+it if it has not yet been defined. Often the proper value of `AR' is
+set on the command line that invokes `runtest'.
+
+ The `findfile' procedure takes as it's first argument a file name to
+look for. The second argument is returned if the file is found, and the
+third argument is returned if the file is not found. `base_dir' is set
+internally by DejaGnu to the top level directory of the object tree.
+
+ The `transform' procedure takes as its argument the native name of a
+tool (such as `gcc' for the compiler), and returns the name as
+configured for that tool in the current installation. (For example, a
+cross-compiling version of GNU CC that generates MIPS code may be
+installed with a name like `mips-idt-ecoff-gcc'.)
+
+ In a test running native, writing the Tcl code for initialization is
+usually quite simple. For cross configurations, however, more elaborate
+instructions are usually needed to describe how to talk to a remote
+target.
+
+ Each initialization module defines up to four procedures with
+standard names and purposes. The names of these procedures begin with
+`$tool', the string that identifies tests for a particular tool:
+`$tool_start', `$tool_load', `$tool_exit', and `$tool_version'. For
+example, the start procedure for GDB is called `gdb_start'. (Since
+start procedures are used differently for batch and interactive tools,
+however, `runtest' itself never calls the start procedure. Init files
+for interactive tools are expected to end by running the start
+procedure.)
+
+ The initialization module is also a good place to call `load_lib' to
+get any collections of utility procedures meant for a family of test
+cases, and to set up default values for any additional Tcl variables
+needed for a specific set of tests.
+
+ *Note Target dependent procedures: Target Dependent, for full
+descriptions of these procedures.
+
+
+File: dejagnu.info, Node: DejaGnu Builtins, Next: Target Dependent, Prev: Init Module, Up: Internals
+
+DejaGnu procedures
+==================
+
+ DejaGnu provides these Tcl procedures for use in test scripts. You
+can also use any standard `expect' or Tcl function. These procedures
+are stored in libraries, which DejaGnu loads at runtime. Here's
+explanation of the library procedures that get loaded at runtime. All
+other librarys are optional, and need to be loaded by the testsuite.
+
+* Menu:
+
+* framework.exp:: Core Internal Procedures.
+* remote.exp:: Procedures for remote communication.
+* utils.exp:: Utility procedures.
+* target.exp:: Cross target procedures.
+* debugger.exp:: Procedures for debugging your Tcl code.
+
+
+File: dejagnu.info, Node: framework.exp, Next: remote.exp, Up: DejaGnu Builtins
+
+Core Internal Procedures
+------------------------
+
+ *Note A POSIX conforming test framework: Posix, for more detailed
+explanations of the test outcomes (`FAIL', `PASS', `UNTESTED',
+`UNRESOLVED', `UNSUPPORTED').
+
+`perror "STRING NUMBER"'
+ Declares a severe error in the testing framework itself. `perror'
+ writes in the log files a message beginning with `ERROR',
+ appending the argument STRING. If the optional NUMBER is supplied,
+ then this is used to set the internal count of errors to that
+ value.
+
+ As a side effect, `perror' also changes the effect of the next
+ `pass' or `fail' command: the test outcome becomes `UNRESOLVED',
+ since an automatic `PASS' or `FAIL' cannot be trusted after a
+ severe error in the test framework. If the optional numeric value
+ is `0', then there are no further side effects to calling this
+ function, and the following test outcome doesn't become
+ `UNRESOLVED'. This can be used for errors with no known side
+ effects.
+
+`warning "STRING NUMBER"'
+ Declares detection of a minor error in the test case itself.
+ `warning' writes in the log files a message beginning with
+ `WARNING', appending the argument STRING. Use `warning' rather
+ than `error' for cases (such as communication failure to be
+ followed by a retry) where the test case can recover from the
+ error. If the optional NUMBER is supplied, then this is used to
+ set the internal count of warnings to that value.
+
+ As a side effect, `warning_threshold' or more calls to `warning'
+ in a single test case also changes the effect of the next `pass'
+ or `fail' command: the test outcome becomes `UNRESOLVED' since an
+ automatic `PASS' or `FAIL' may not be trustworthy after many
+ warnings. If the optional numeric value is `0', then there are no
+ further side effects to calling this function, and the following
+ test outcome doesn't become `UNRESOLVED'. This can be used for
+ errors with no known side effects.
+
+`note "STRING"'
+ Appends an informational message to the log file. `note' writes
+ in the log files a message beginning with `NOTE', appending the
+ argument STRING. Use `note' sparingly. `verbose' should be used
+ for most such messages, but in cases where a message is needed in
+ the log file regardless of the verbosity level use `note'.
+
+`pass "STRING"'
+ Declares a test to have passed. `pass' writes in the log files a
+ message beginning with `PASS' (or `XPASS', if failure was
+ expected), appending the argument STRING.
+
+`fail "STRING"'
+ Declares a test to have failed. `fail' writes in the log files a
+ message beginning with `FAIL' (or `XFAIL', if failure was
+ expected), appending the argument STRING.
+
+`unresolved "STRING"'
+ Declares a test to have an unresolved outcome. `unresolved' writes
+ in the log file a message beginning with `UNRESOLVED', appending
+ the argument STRING. This usually means the test did not execute
+ as expected, and a human being must go over results to determine
+ if it passed or failed (and to improve the test case).
+
+`untested "STRING"'
+ Declares a test was not run. `untested' writes in the log file a
+ message beginning with `UNTESTED', appending the argument STRING.
+ For example, you might use this in a dummy test whose only role is
+ to record that a test does not yet exist for some feature.
+
+`unsupported "STRING"'
+ Declares that a test case depends on some facility that does not
+ exist in the testing environment. `unsupported' writes in the log
+ file a message beginning with `UNSUPPORTED', appending the argument
+ STRING.
+
+`get_warning_threshold'
+ Returns the current value of `warning_threshold'. The default
+ value is 3.
+
+`set_warning_threshold THRESHOLD'
+ Sets the value of `warning_threshold'. A value of `0' disables
+ it: calls to `warning' will not turn a `PASS' or `FAIL' into an
+ `UNRESOLVED'.
+
+`transform "TOOLNAME"'
+ Generates a string for the name of a tool as it was configured and
+ installed, given its native name (as the argument TOOLNAME). This
+ makes the assumption that all tools are installed using the same
+ naming conventions: it extrapolates from the invocation name for
+ `runtest'. For example, if you call `runtest' as
+ `m68k-vxworks-runtest', the result of ` transform "gcc" ' is
+ `m68k-vxworks-gcc'.
+
+`ishost "HOST"'
+ Tests for a particular *host* environment. If the currently
+ configured host matches the argument string, the result is `1';
+ otherwise the result is `0'. HOST must be a full three-part
+ `configure' host name; in particular, you may not use the shorter
+ nicknames supported by `configure' (but you can use wildcard
+ characters, using shell syntax, to specify sets of names).
+
+`istarget "TARGET"'
+ Tests for a particular *target* environment. If the currently
+ configured target matches the argument string, the result is `1';
+ otherwise the result is `0'. TARGET must be a full three-part
+ `configure' target name; in particular, you may not use the
+ shorter nicknames supported by `configure' (but you can use
+ wildcard characters, using shell syntax, to specify sets of
+ names). If it is passed a `NULL' string, then it returns the name
+ of the build canonical configuration.
+
+`isbuild "HOST"'
+ Tests for a particular *build host* environment. If the currently
+ configured host matches the argument string, the result is `1';
+ otherwise the result is `0'. HOST must be a full three-part
+ `configure' host name; in particular, you may not use the shorter
+ nicknames supported by `configure' (but you can use wildcard
+ characters, using shell syntax, to specify sets of names). If it is
+ passed a `NULL' string, then it returns the name of the build
+ canonical configuration.
+
+ item is3way "HOST" Tests for a canadian cross. This is when the
+ tests will be run on a remotly hosted cross compiler. If it is a
+ canadian cross, then the result is `1'; otherwise the result is
+ `0'.
+
+`isnative'
+ Tests whether the current configuration has the same host and
+ target. When it runs in a *native* configuration this procedure
+ returns a `1'; otherwise it returns a `0'.
+
+`load_lib "LIBRARY-FILE"'
+ Loads the file LIBRARY-FILE by searching a fixed path built into
+ `runtest'. If DejaGnu has been installed, it looks in a path
+ starting with the installed library directory. If you are running
+ DejaGnu directly from a source directory, without first running
+ `make install', this path defaults to the current directory. In
+ either case, it then looks in the current directory for a directory
+ called `lib'. If there are duplicate definitions, the last one
+ loaded takes precedence over the earlier ones.
+
+`setup_xfail "CONFIG [BUGID]"'
+ Declares that the test is expected to fail on a particular set of
+ configurations. The CONFIG argument must be a list of full
+ three-part `configure' target name; in particular, you may not use
+ the shorter nicknames supported by `configure' (but you can use the
+ common shell wildcard characters to specify sets of names). The
+ BUGID argument is optional, and used only in the logging file
+ output; use it as a link to a bug-tracking system such as GNATS
+ (*note Overview: (gnats.info)Overview.).
+
+ Once you use `setup_xfail', the `fail' and `pass' procedures
+ produce the messages `XFAIL' and `XPASS' respectively, allowing
+ you to distinguish expected failures (and unexpected success!)
+ from other test outcomes.
+
+ *Warning:* you must clear the expected failure after using
+ `setup_xfail' in a test case. Any call to `pass' or `fail' clears
+ the expected failure implicitly; if the test has some other
+ outcome, e.g. an error, you can call `clear_xfail' to clear the
+ expected failure explicitly. Otherwise, the expected-failure
+ declaration applies to whatever test runs next, leading to
+ surprising results.
+
+`clear_xfail CONFIG'
+ Cancel an expected failure (previously declared with `setup_xfail')
+ for a particular set of configurations. The CONFIG argument is a
+ list of configuration target names. It is only necessary to call
+ `clear_xfail' if a test case ends without calling either `pass' or
+ `fail', after calling `setup_xfail'.
+
+`verbose [-log] [-n] [--] "STRING" NUMBER'
+ Test cases can use this function to issue helpful messages
+ depending on the number of `--verbose' options on the `runtest'
+ command line. It prints STRING if the value of the variable
+ `verbose' is higher than or equal to the optional NUMBER. The
+ default value for NUMBER is 1. Use the optional `-log' argument
+ to cause STRING to always be added to the log file, even if it
+ won't be printed. Use the optional `-n' argument to print STRING
+ without a trailing newline. Use the optional `--' argument if
+ STRING begins with "-".
+
+
+File: dejagnu.info, Node: remote.exp, Next: utils.exp, Prev: framework.exp, Up: DejaGnu Builtins
+
+Remote Communication Procedures
+-------------------------------
+
+`lib/remote.exp' defines these functions, for establishing and managing
+communications:
+
+ *Procedures to establish a connection:* Each of these procedures
+tries to establish the connection up to three times before returning.
+Warnings (if retries will continue) or errors (if the attempt is
+abandoned) report on communication failures. The result for any of
+these procedures is either `-1', when the connection cannot be
+established, or the spawn ID returned by the `expect' command `spawn'.
+
+ It use the value of the `connect' field in the `target_info' array
+(was `connectmode' as the type of connection to make. Current supported
+connection types are tip, kermit, telnet, rsh, rlogin, and netdata. If
+the `--reboot' option was used on the runtest command line, then the
+target is rebooted before the connection is made.
+
+`remote_open TYPE'
+ *Remote Connection Procedure.* This is passed *host* or *target*.
+ Host or target refers to whether it is a connection to a remote
+ target, or a remote host. This opens the connection to the desired
+ target or host using the default values in the configuration
+ system. It returns that `spawn_id' of the process that manages the
+ connection. This value can be used in `expect' or `exp_send'
+ statements, or passed to other procedures that need the connection
+ process's id. This also sets the `fileid' field in the
+ `target_info' array.
+
+`remote_close SHELLID'
+ *shellid* is value returned by a call to `remote_open'. This
+ closes the connection to the target so resources can be used by
+ others. This parameter can be left off if the `fileid' field in the
+ `target_info' array is set.
+
+`telnet HOSTNAME PORT'
+`rlogin HOSTNAME'
+`rsh HOSTNAME'
+ *IP network procedures.* HOSTNAME refers to the IP address or name
+ (for example, an entry in `/etc/hosts') for this target. The
+ procedure names reflect the Unix utility used to establish a
+ connection. The optional PORT is used to specify the IP port
+ number. The value of the `netport' field in the `target_info'
+ array is used. (was `$netport') This value has two parts, the
+ hostname and the port number, seperated by a *:*. If `host' or
+ `target' is used in the `hostname' field, than the config array is
+ used for all information.
+
+`tip PORT'
+ *Serial line procedure.* Connect using the Unix utility `tip'.
+ PORT must be a name from the `tip' configuration file
+ `/etc/remote'. Often, this is called `hardwire', or something
+ like `ttya'. This file holds all the configuration data for the
+ serial port. The value of the `serial' field in the `target_info'
+ array is used. (was `$serialport') If `host' or `target' is used
+ in the `port' field, than the config array is used for all
+ information.
+
+`kermit PORT BPS'
+ *Serial line procedure.* Connect using the program `kermit'.
+ PORT is the device name, e.g. `/dev/ttyb'. BPS is the line speed
+ to use (in bits per second) for the connection. The value of the
+ `serial' field in the `target_info' array is used. (was
+ `$serialport') If `host' or `target' is used in the `port' field,
+ than the config array is used for all information.
+
+*Procedures to manage a connection:*
+
+`tip_download SPAWNID FILE'
+ Download `FILE' to the process SPAWNID (the value returned when
+ the connection was established), using the `~put' command under
+ `tip'. Most often used for single board computers that require
+ downloading programs in ASCII S-records. Returns `1' if an error
+ occurs, `0' otherwise.
+
+`exit_remote_shell SPAWNID'
+ Exits a remote process started by any of the connection procedures.
+ SPAWNID is the result of the connection procedure that started the
+ remote process.
+
+`download FILE [ SPAWNID ]'
+ After you establish a connection to a target, you can download
+ programs using this command. `download' reads in FILE (object
+ code in S-record format) and writes it to the device controlling
+ this SPAWNID. (From the point of view of the target, the S-record
+ file comes in via standard input.)
+
+ If you have more than one target active, you can use the optional
+ argument SPAWNID to specify an alternative target (the default is
+ the most recently established SPAWNID.)
+
+
+File: dejagnu.info, Node: utils.exp, Next: target.exp, Prev: remote.exp, Up: DejaGnu Builtins
+
+Utility Procedures
+------------------
+
+`lib/utils.exp' defines these utility procedures:
+
+`getdirs DIR'
+`getdirs DIR PATTERN'
+ Returns a list of all the directories in the single directory DIR
+ that match PATTERN. If you do not specify PATTERN, `getdirs'
+ assumes `*'. You may use the common shell wildcard characters in
+ PATTERN. If no directories match the pattern, then a `NULL' string
+ is returned.
+
+`find DIR PATTERN'
+ Search for files whose names match PATTERN (using shell wildcard
+ characters for filename expansion). Search subdirectories
+ recursively, starting at DIR. The result is the list of files
+ whose names match; if no files match, the result is empty.
+ Filenames in the result include all intervening subdirectory
+ names. If no files match the pattern, then a `NULL' string is
+ returned.
+
+`which BINARY'
+ Searches the execution path for an executable file BINARY, like
+ the the BSD `which' utility. This procedure uses the shell
+ environment variable `PATH'. It returns `0' if the binary is not
+ in the path, or if there is no `PATH' environment variable. If
+ BINARY is in the path, it returns the full path to BINARY.
+
+`grep FILENAME REGEXP'
+
+`grep FILENAME REGEXP line'
+ Search the file called FILENAME (a fully specified path) for lines
+ that contain a match for regular expression REGEXP. The result is
+ a list of all the lines that match. If no lines match, the result
+ is an empty string. Specify REGEXP using the standard regular
+ expression style used by the Unix utility program `grep'.
+
+ Use the optional third argument `line' to start lines in the result
+ with the line number in FILENAME. (This argument is simply an
+ option flag; type it just as shown--`line'.)
+
+`diff FILENAME FILENAME'
+ Compares the two files and returns a 1 if they match, or a 0 if
+ they don't. If `verbose' is set, then it'll print the differences
+ to the screen.
+
+`slay NAME'
+ This look in the process tabel for NAME and send it a unix
+ `SIGINT', killing the process.
+
+`absolute PATH'
+ This procedure takes the relative PATH, and converts it to an
+ absolute path.
+
+`psource FILENAME'
+ This sources the file FILENAME, and traps all errors. It also
+ ignores all extraneous output. If there was an error it returns a
+ 1, otherwise it returns a 0.
+
+`prune LIST PATTERN'
+ Remove elements of the Tcl list LIST. Elements are fields
+ delimited by spaces. The result is a copy of LIST, without any
+ elements that match PATTERN. You can use the common shell
+ wildcard characters to specify PATTERN.
+
+`setenv VAR VAL'
+ Sets the variable VAR to the value VAL.
+
+`unsetenv VAR'
+ Unsets the environment variable VAR
+
+`getenv VAR'
+ returns the value of VAR in the environment if it exists,
+ otherwise it returns `NULL'.
+
+`runtest_file_p RUNTESTS TESTCASE'
+ Search RUNTESTS for TESTCASE and return 1 if found, 0 if not.
+ RUNTESTS is a list of two elements. The first is the pathname of
+ the testsuite expect script running. The second is a copy of what
+ was on the right side of the `=' if `foo.exp="..."' was specified,
+ or an empty string if no such argument is present. This is used
+ by tools like compilers where each testcase is a file.
+
+`prune_system_crud SYSTEM TEXT'
+ For system SYSTEM, delete text the host or target operating system
+ might issue that will interfere with pattern matching of program
+ output in TEXT. An example is the message that is printed if a
+ shared library is out of date.
+
+
+File: dejagnu.info, Node: target.exp, Next: debugger.exp, Prev: utils.exp, Up: DejaGnu Builtins
+
+Cross target procedure
+----------------------
+
+`lib/target.exp' defines these utility procedures:
+
+`push_target *name*'
+ This makes the target named *name* be the current target
+ connection. The value of *name* is an index into the `target_info'
+ array and is set in the global config file.
+
+`pop_target'
+ This unsets the current target connection.
+
+`list_targets'
+ This lists all the supported targets for this architecture.
+
+`push_host *name*'
+ This makes the host named *name* be the current remote host
+ connection. The value of *name* is an index into the `target_info'
+ array and is set in the global config file.
+
+`pop_host'
+ This unsets the current host connection.
+
+ This invokes the compiler as set by `CC' to compile the file
+ *file*. The default options for many cross compilation targets are
+ *guessed* by DejaGnu, and these options can be added to by passing
+ in more parameters as arguments to `compile'. Optionally, this will
+ also use the value of the `cflags' field in the target config
+ array. If the host is not the same as the build machines, then then
+ compiler is run on the remote host using `execute_anywhere'.
+
+ This produces an archive file. Any parameters passed to `archive'
+ are used in addition to the default flags. Optionally, this will
+ also use the value of the `arflags' field in the target config
+ array. If the host is not the same as the build machines, then then
+ archiver is run on the remote host using `execute_anywhere'.
+
+ This generates an index for the archive file for systems that
+ aren't POSIX yet. Any parameters passed to `ranlib' are used in
+ for the flags.
+
+`execute_anywhere *cmdline*'
+ This executes the *cmdline* on the proper host. This should be used
+ as a replacement for the Tcl command `exec' as this version
+ utilizes the target config info to execute this command on the
+ build machine or a remote host. All config information for the
+ remote host must be setup to have this command work. If this is a
+ canadian cross, (where we test a cross compiler that runs on a
+ different host then where DejaGnu is running) then a connection is
+ made to the remote host and the command is executed there. It
+ returns either *REMOTERROR* (for an error) or the output produced
+ when the command was executed. This is used for running the tool
+ to be tested, not a test case.
+
+
+File: dejagnu.info, Node: debugger.exp, Prev: target.exp, Up: DejaGnu Builtins
+
+Debugging Procedures
+--------------------
+
+ `lib/debugger.exp' defines these utility procedures:
+
+`dumpvars *expr*'
+ This takes a csh style regular expression (glob rules) and prints
+ the values of the global variable names that match. It is
+ abbreviated as `dv'
+
+`dumplocals *expr*'
+ This takes a csh style regular expression (glob rules) and prints
+ the values of the local variable names that match. It is
+ abbreviated as `dl'.
+
+`dumprocs *expr*'
+ This takes a csh style regular expression (glob rules) and prints
+ the body of all procs that match. It is abbreviated as `dp'
+
+`dumpwatch *expr*'
+ This takes a csh style regular expression (glob rules) and prints
+ all the watchpoints. It is abbreviated as `dw'.
+
+`watchunset *var*'
+ This breaks program execution when the variable *var* is unset. It
+ is abbreviated as `wu'.
+
+`watchwrite *var*'
+ This breaks program execution when the variable *var* is written.
+ It is abbreviated as `ww'.
+
+`watchread *var*'
+ This breaks program execution when the variable *var* is read. It
+ is abbreviated as `wr'.
+
+`watchdel *watch*'
+ This deletes a the watchpoint for *watch*. It is abbreviated as
+ `wd'.
+
+`print *var*'
+ This prints the value of the variable *var*. It is abbreviated as
+ `p'.
+
+`quit'
+ This makes runtest exit. It is abbreviated as `q'.
+
+`bt'
+ This prints a backtrace of the executed Tcl commands.
+
+
+File: dejagnu.info, Node: Target Dependent, Next: Cross Targets, Prev: DejaGnu Builtins, Up: Internals
+
+Target dependent procedures
+===========================
+
+ Each combination of target and tool requires some target-dependent
+procedures. The names of these procedures have a common form: the tool
+name, followed by an underbar `_', and finally a suffix describing the
+procedure's purpose. For example, a procedure to extract the version
+from GDB is called `gdb_version'. *Note Initialization Module: Init
+Module, for a discussion of how DejaGnu arranges to find the right
+procedures for each target.
+
+ `runtest' itself calls only two of these procedures, `TOOL_exit' and
+`TOOL_version'; these procedures use no arguments.
+
+ The other two procedures, `TOOL_start' and `TOOL_load', are only
+called by the test suites themselves (or by testsuite-specific
+initialization code); they may take arguments or not, depending on the
+conventions used within each test suite.
+
+`TOOL_start'
+ Starts a particular tool. For an interactive tool, `TOOL_start'
+ starts and initializes the tool, leaving the tool up and running
+ for the test cases; an example is `gdb_start', the start function
+ for GDB. For a batch oriented tool, `TOOL_start' is optional; the
+ recommended convention is to let `TOOL_start' run the tool,
+ leaving the output in a variable called `comp_output'. Test
+ scripts can then analyze `$comp_output' to determine the test
+ results. An example of this second kind of start function is
+ `gcc_start', the start function for GCC.
+
+ `runtest' itself *does not call* `TOOL_start'. The initialization
+ module `TOOL_init.exp' must call `TOOL_start' for interactive
+ tools; for batch-oriented tools, each individual test script calls
+ `TOOL_start' (or makes other arrangements to run the tool).
+
+`TOOL_load'
+ Loads something into a tool. For an interactive tool, this
+ conditions the tool for a particular test case; for example,
+ `gdb_load' loads a new executable file into the debugger. For
+ batch oriented tools, `TOOL_load' may do nothing--though, for
+ example, the GCC support uses `gcc_load' to load and run a binary
+ on the target environment. Conventionally, `TOOL_load' leaves the
+ output of any program it runs in a variable called `exec_output'.
+ Writing `TOOL_load' can be the most complex part of extending
+ DejaGnu to a new tool or a new target, if it requires much
+ communication coding or file downloading.
+
+ Test scripts call `TOOL_load'.
+
+`TOOL_exit'
+ Cleans up (if necessary) before `runtest' exits. For interactive
+ tools, this usually ends the interactive session. You can also use
+ `TOOL_exit' to remove any temporary files left over from the tests.
+
+ `runtest' calls `TOOL_exit'.
+
+`TOOL_version'
+ Prints the version label and number for TOOL. This is called by
+ the DejaGnu procedure that prints the final summary report. The
+ output should consist of the full path name used for the tested
+ tool, and its version number.
+
+ `runtest' calls `TOOL_version'.
+
+ The usual convention for return codes from any of these procedures
+(although it is not required by `runtest') is to return `0' if the
+procedure succeeded, `1' if it failed, and `-1' if there was a
+communication error.
+
+
+File: dejagnu.info, Node: Cross Targets, Next: Input Files, Prev: Target Dependent, Up: Internals
+
+Remote targets supported
+========================
+
+ The DejaGnu distribution includes support for the following remote
+targets. You can set the target name and the connect mode in the
+`site.exp' file (using the Tcl variables `targetname' and
+`connectmode', respectively), or on the `runtest' command line (using
+`--name' and `--connect').
+
+*AMD 29000, with UDI protocol*
+ Configure DejaGnu for target `a29k-amd-udi'. (Cygnus `configure'
+ also recognizes the abbreviation `udi29k'.) Then, to run tests,
+ use the `runtest' target name to specify whether you want to use a
+ simulator, or a particular hardware board. The particular string
+ to use with `--name' will depend on your UDI setup file, `udi_soc'
+ (if `udi_soc' is not in your working directory, the environment
+ variable `UDICONF' should contain a path to this file). For
+ example, if your UDI setup file includes these lines:
+
+ iss AF_UNIX * isstip -r /home/gnu/29k/src/osboot/sim/osboot
+ mon AF_UNIX * montip -t serial -baud 9600 -com /dev/ttyb
+
+* *
+ You can use `--name iss' to run tests on the simulator, and
+ `--name mon' to run tests on the 29K hardware. See the
+ manufacturer's manuals for more information on UDI and `udi_soc'.
+
+ The default connect protocol is `mondfe' with either back end.
+ `mondfe' is the only shell DejaGnu supports for UDI targets.
+ `mondfe' is an AMD specific monitor program freely available from
+ AMD.
+
+ *Warning:* This target requires GDB version 4.7.2 (or greater).
+ Earlier versions of GDB do not fully support the `load' command on
+ this target, so DejaGnu has no way to load executable files from
+ the debugger.
+
+*Motorola 680x0 boards, a.out or COFF object format*
+ Configure DejaGnu for any remote target matching `m68k-*'.
+
+ *Warning:* Most `m68k-*' configurations run all tests only for
+ native testing (when the target is the same as the host). When you
+ specify most of these targets for a cross configuration, you will
+ only be able to use tests that run completely within the host (for
+ example, tests of the binary utilities such as the archiver; or
+ compiler tests that only generate code rather than running it).
+
+ To run a.out or COFF binaries on a remote M68K, you must configure
+ DejaGnu for a particular target board. `m68k-abug' is an example.
+ (In general for an embedded environment, because it does not have
+ absolute addresses, a.out is not a good choice for output format
+ in any case; most often S-records or Hex-32 are used instead.)
+
+*Motorola 68K MVME 135 board running ABug boot monitor*
+ Configure for `m68k-abug-aout' or `m68k-abug-coff' (as a target).
+ This boot monitor can only download S-records; therefore, the
+ DejaGnu tests for this environment require a linker command script
+ to convert either output format to S-records, setting the default
+ addresses for `.text', `.bss', and `.data'.
+
+ With this configuration, the default for `--connect' is `tip'.
+ `tip' is the only communications protocol supported for connecting
+ to `m68k-abug-*' targets. `tip' uses an ASCII downloader (the
+ `~put' command) to load S-records into the target board. The
+ `--name' string must be a machine name that `tip' understands (for
+ example, on some `tip' implementations it must be an entry from
+ the initialization file for `tip'; this file is sometimes called
+ `/etc/remote').
+
+ See your system documentation for information on how to create new
+ entries in `/etc/remote'. (Some UNIX systems are distributed with
+ at least one default entry with a name resembling `hardwire'; if
+ your system has one, you can edit it, or make a modified copy with
+ a new name.) When you have a working `/etc/remote' entry
+ ABUGTARGET, you should be able to type `tip ABUGTARGET', and get
+ the prompt `135ABUG>' from the board. Use the same ABUGTARGET
+ string with `runtest --name'.
+
+*Motorola IDP board running the rom68k boot monitor*
+ This is the same in functionality as the MVME board running the
+ `BUG' boot monitor. Only the monitor commands and the addresses are
+ different.
+
+*VxWorks (Motorola 68K or Intel 960)*
+ Configure DejaGnu for either `m68k-wrs-vxworks' (abbreviated
+ `vxworks68') or `i960-wrs-vxworks' (abbreviated `vxworks960').
+ Since both targets support IP addressing, specify the network
+ address (for example, a host name from `/etc/hosts') with `--name'.
+
+ The default connect protocol is `rlogin', but you can use any of
+ `--connect rlogin', `--connect telnet', or `--connect rsh'.
+
+ Test scripts need no special code to load programs into these
+ targets; since VxWorks supports NFS, all you must do is ensure
+ test programs are on an exported filesystem.
+
+ When you compile for VxWorks, use the linker `-r' option to make
+ the linker output relocatable--at least if you want to use library
+ routines. Many standard C routines are included in VxWorks; often
+ no additional libraries are needed. See your VxWorks system
+ documentation for additional details.
+
+
+File: dejagnu.info, Node: Input Files, Next: Output Files, Prev: Cross Targets, Up: Internals
+
+The files DejaGnu reads
+=======================
+
+ The `runtest' program used to invoke DejaGnu is a short shell script
+generated by `make' during the configuration process. Its main task is
+to read the main test framework driver, `runtest.exp'.
+
+ `runtest.exp', in turn, reads `expect' code from certain other
+files, in this order:
+
+ 1. Each of the `site.exp' local definition files available. *Note
+ Setting `runtest' defaults: Customizing, for details.
+
+ 2. `lib/utils.exp', a collection of utility procedures. *Note
+ DejaGnu Builtins: DejaGnu Builtins, for descriptions of these
+ procedures.
+
+ 3. `lib/framework.exp', a file of subroutines meant for `runtest'
+ itself rather than for general-purpose use in both `runtest' and
+ test suites.
+
+ 4. `debugger.exp', Don Libes' Tcl Debugger. (See `A Debugger for Tcl
+ Applications' by Don Libes. This paper is distributed with
+ `expect' in PostScript form as the file `expect/tcl-debug.ps'.)
+
+ 5. `lib/remote.exp', a collection of subroutines meant for connecting
+ to remote machines.
+
+ 6. `lib/target.exp', a collection of subroutines used for the
+ configuration systems in DejaGnu. These procedures typically
+ manipulate or utilize the configuration system.
+
+ 7. An initialization file `TOOL_init.exp'. *Note Initialization
+ module: Init Module, for more discussion of init files.
+
+
+File: dejagnu.info, Node: Output Files, Prev: Input Files, Up: Internals
+
+The files DejaGnu writes
+========================
+
+ `runtest' always writes two kinds of output files: summary logs and
+detailed logs. The contents of both of these are determined by your
+tests.
+
+ For troubleshooting, a third kind of output file is useful: use
+`--debug' to request an output file showing details of what `expect' is
+doing internally.
+
+* Menu:
+
+* Summary:: Files that summarize tests
+* Detail:: Files that contain complete test results
+* Debug:: Logging expect internal actions
+
+
+File: dejagnu.info, Node: Summary, Next: Detail, Up: Output Files
+
+Summary log
+-----------
+
+ `runtest' always produces a summary output file `TOOL.sum'. This
+summary shows the names of all test files run; for each test file, one
+line of output from each `pass' command (showing status `PASS' or
+`XPASS') or `fail' command (status `FAIL' or `XFAIL'); trailing summary
+statistics that count passing and failing tests (expected and
+unexpected); and the full pathname and version number of the tool
+tested. (All possible outcomes, and all errors, are always reflected in
+the summary output file, regardless of whether or not you specify
+`--all'.)
+
+ If any of your tests use the procedures `unresolved', `unsupported',
+or `untested', the summary output also tabulates the corresponding
+outcomes.
+
+ For example, after `runtest --tool binutils', look for a summary log
+in `binutils.sum'. Normally, `runtest' writes this file in your
+current working directory; use the `--outdir' option to select a
+different directory.
+
+Here is a short sample summary log:
+
+ Test Run By rob on Mon May 25 21:40:57 PDT 1992
+ === gdb tests ===
+ Running ./gdb.t00/echo.exp ...
+ PASS: Echo test
+ Running ./gdb.all/help.exp ...
+ PASS: help add-symbol-file
+ PASS: help aliases
+ PASS: help breakpoint "bre" abbreviation
+ FAIL: help run "r" abbreviation
+ Running ./gdb.t10/crossload.exp ...
+ PASS: m68k-elf (elf-big) explicit format; loaded
+ XFAIL: mips-ecoff (ecoff-bigmips) "ptype v_signed_char" signed
+ C types
+ === gdb Summary ===
+ # of expected passes 5
+ # of expected failures 1
+ # of unexpected failures 1
+ /usr/latest/bin/gdb version 4.6.5 -q
+
+
+File: dejagnu.info, Node: Detail, Next: Debug, Prev: Summary, Up: Output Files
+
+Detailed log
+------------
+
+ `runtest' also saves a detailed log file `TOOL.log', showing any
+output generated by tests as well as the summary output. For example,
+after `runtest --tool binutils', look for a detailed log in
+`binutils.log'. Normally, `runtest' writes this file in your current
+working directory; use the `--outdir' option to select a different
+directory.
+
+Here is a brief example showing a detailed log for G++ tests:
+
+ Test Run By rob on Mon May 25 21:40:43 PDT 1992
+
+ === g++ tests ===
+
+ --- Running ./g++.other/t01-1.exp ---
+ PASS: operate delete
+
+ --- Running ./g++.other/t01-2.exp ---
+ FAIL: i960 bug EOF
+ p0000646.C: In function `int warn_return_1 ()':
+ p0000646.C:109: warning: control reaches end of non-void function
+ p0000646.C: In function `int warn_return_arg (int)':
+ p0000646.C:117: warning: control reaches end of non-void function
+ p0000646.C: In function `int warn_return_sum (int, int)':
+ p0000646.C:125: warning: control reaches end of non-void function
+ p0000646.C: In function `struct foo warn_return_foo ()':
+ p0000646.C:132: warning: control reaches end of non-void function
+
+ --- Running ./g++.other/t01-4.exp ---
+ FAIL: abort
+ 900403_04.C:8: zero width for bit-field `foo'
+ --- Running ./g++.other/t01-3.exp ---
+ FAIL: segment violation
+ 900519_12.C:9: parse error before `;'
+ 900519_12.C:12: Segmentation violation
+ /usr/latest/bin/gcc: Internal compiler error: program cc1plus got
+ fatal signal
+
+ === g++ Summary ===
+
+ # of expected passes 1
+ # of expected failures 3
+ /usr/ps/bin/g++ version cygnus-2.0.1
+
+
+File: dejagnu.info, Node: Debug, Prev: Detail, Up: Output Files
+
+Logging `expect' internal actions
+---------------------------------
+
+ With the `--debug' option, you can request a log file showing the
+output from `expect' itself, running in debugging mode. This file
+(`dbg.log', in the directory where you start `runtest') shows each
+pattern `expect' considers in analyzing test output.
+
+ This file reflects each `send' command, showing the string sent as
+input to the tool under test; and each `expect' command, showing each
+pattern it compares with the tool output.
+
+ The log messages for `expect' begin with a message of the form
+
+ expect: does {TOOL OUTPUT} (spawn_id N) match pattern
+ {EXPECTED PATTERN}?
+
+For every unsuccessful match, `expect' issues a `no' after this
+message; if other patterns are specified for the same `expect' command,
+they are reflected also, but without the first part of the message
+(`expect...match pattern').
+
+ When `expect' finds a match, the log for the successful match ends
+with `yes', followed by a record of the `expect' variables set to
+describe a successful match. Here is an excerpt from the debugging log
+for a GDB test:
+
+ send: sent {break gdbme.c:34\n} to spawn id 6
+ expect: does {} (spawn_id 6) match pattern {Breakpoint.*at.* file
+ gdbme.c, line 34.*\(gdb\) $}? no
+ {.*\(gdb\) $}? no
+ expect: does {} (spawn_id 0) match pattern {<return>}? no
+ {\(y or n\) }? no
+ {buffer_full}? no
+ {virtual}? no
+ {memory}? no
+ {exhausted}? no
+ {Undefined}? no
+ {command}? no
+ break gdbme.c:34
+ Breakpoint 8 at 0x23d8: file gdbme.c, line 34.
+ (gdb) expect: does {break gdbme.c:34\r\nBreakpoint 8 at 0x23d8:
+ file gdbme.c, line 34.\r\n(gdb) } (spawn_id 6) match pattern
+ {Breakpoint.*at.* file gdbme.c, line 34.*\(gdb\) $}? yes
+ expect: set expect_out(0,start) {18}
+ expect: set expect_out(0,end) {71}
+ expect: set expect_out(0,string) {Breakpoint 8 at 0x23d8: file
+ gdbme.c, line 34.\r\n(gdb) }
+ expect: set expect_out(spawn_id) {6}
+ expect: set expect_out(buffer) {break gdbme.c:34\r\nBreakpoint 8
+ at 0x23d8: file gdbme.c, line 34.\r\n(gdb) }
+ PASS: 70 0 breakpoint line number in file
+
+This example exhibits three properties of `expect' and DejaGnu that
+might be surprising at first glance:
+
+ * Empty output for the first attempted match. The first set of
+ attempted matches shown ran against the output `{}'--that is, no
+ output. `expect' begins attempting to match the patterns supplied
+ immediately; often, the first pass is against incomplete output (or
+ completely before all output, as in this case).
+
+ * Interspersed tool output. The beginning of the log entry for the
+ second attempted match may be hard to spot: this is because the
+ prompt `(gdb) ' appears on the same line, just before the `expect:'
+ that marks the beginning of the log entry.
+
+ * Fail-safe patterns. Many of the patterns tested are fail-safe
+ patterns provided by GDB testing utilities, to reduce possible
+ indeterminacy. It is useful to anticipate potential variations
+ caused by extreme system conditions (GDB might issue the message
+ `virtual memory exhausted' in rare circumstances), or by changes in
+ the tested program (`Undefined command' is the likeliest outcome if
+ the name of a tested command changes).
+
+ The pattern `{<return>}' is a particularly interesting fail-safe
+ to notice; it checks for an unexpected <RET> prompt. This may
+ happen, for example, if the tested tool can filter output through a
+ pager.
+
+ These fail-safe patterns (like the debugging log itself) are
+ primarily useful while developing test scripts. Use the `error'
+ procedure to make the actions for fail-safe patterns produce
+ messages starting with `ERROR' on the `runtest' standard output,
+ and in the detailed log file.
+
+
+File: dejagnu.info, Node: Tests, Next: Extending, Prev: Internals, Up: Top
+
+How To Write a Test Case
+************************
+
+* Menu:
+
+* Writing:: Writing a test case
+* Debugging:: Debugging a test case
+* Adding:: Adding a test case to a test suite
+* Hints:: Hints on writing a test case
+* Variables:: Special variables used by test cases
+
+
+File: dejagnu.info, Node: Writing, Next: Debugging, Up: Tests
+
+Writing a test case
+===================
+
+ The easiest way to prepare a new test case is to base it on an
+existing one for a similar situation. There are two major categories
+of tests: batch or interactive. Batch oriented tests are usually
+easier to write.
+
+ The GCC tests are a good example of batch oriented tests. All GCC
+tests consist primarily of a call to a single common procedure, since
+all the tests either have no output, or only have a few warning
+messages when successfully compiled. Any non-warning output is a test
+failure. All the C code needed is kept in the test directory. The test
+driver, written in `expect', need only get a listing of all the C files
+in the directory, and compile them all using a generic procedure. This
+procedure and a few others supporting for these tests are kept in the
+library module `lib/c-torture.exp' in the GCC test suite. Most tests
+of this kind use very few `expect' features, and are coded almost
+purely in Tcl.
+
+Writing the complete suite of C tests, then, consisted of these steps:
+
+ 1. Copying all the C code into the test directory. These tests were
+ based on the C-torture test created by Torbjorn Granlund (on
+ behalf of the Free Software Foundation) for GCC development.
+
+ 2. Writing (and debugging) the generic `expect' procedures for
+ compilation.
+
+ 3. Writing the simple test driver: its main task is to search the
+ directory (using the Tcl procedure `glob' for filename expansion
+ with wildcards) and call a Tcl procedure with each filename. It
+ also checks for a few errors from the testing procedure.
+
+ Testing interactive programs is intrinsically more complex. Tests
+for most interactive programs require some trial and error before they
+are complete.
+
+ However, some interactive programs can be tested in a simple fashion
+reminiscent of batch tests. For example, prior to the creation of
+DejaGnu, the GDB distribution already included a wide-ranging testing
+procedure. This procedure was very robust, and had already undergone
+much more debugging and error checking than many recent DejaGnu test
+cases. Accordingly, the best approach was simply to encapsulate the
+existing GDB tests, for reporting purposes. Thereafter, new GDB tests
+built up a family of `expect' procedures specialized for GDB testing.
+
+ `gdb.t10/crossload.exp' is a good example of an interactive test.
+