[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ANNOUNCE] DejaGnu 1.6.3 released

From: Jacob Bachmeyer
Subject: [ANNOUNCE] DejaGnu 1.6.3 released
Date: Thu, 17 Jun 2021 00:03:04 -0400

After a long delay, a new maintainer, and a lengthy release candidate
series spanning nearly three full months, we are pleased to announce the
"Three Decades of DejaGnu" release of DejaGnu 1.6.3.

What is DejaGnu?

DejaGnu is a framework for testing other programs, with a variety of
features developed to support testing the GNU development toolchain.
DejaGnu supports both system testing and unit testing.

Where to Get DejaGnu

DejaGnu is available from and its many mirrors in the directory

Information about DejaGnu is available on the Web at

The 1.6.3 release files have the following checksums:

$ sha1sum dejagnu-1.6.3.*
390b586609bb23c807218eda493f428c4a913bc1  dejagnu-1.6.3.tar.gz
9efbaa9aca020e82d46e988308d181a6b93c40ae  dejagnu-1.6.3.tar.gz.sig
$ sha256sum dejagnu-1.6.3.*

Major Changes in This Release

This version collects the development work done over the past two years,
fixing numerous bugs, adding new commands under the "testsuite" and
"testcase" multiplex entrypoints, and significantly improving the manual.

According to Rob Savoye, the development of DejaGnu began in 1991.  The
ChangeLog supports this, with the oldest entries from mid-1992 implying an
already wide-ranging code base.  One of these early entries mentions
changing the executable name from "DejaGnu" to the current "runtest".  In
an example of coming full circle, this release now adds a "dejagnu" command
as a multiplex launcher for various auxiliary commands other than actually
running tests.

Two files removed in this release were the last non-trivial code files in
DejaGnu that did not have proper GPL notices:

The contrib/compare_tests script had been imported many years ago from GCC,
where upstream development has continued, leaving our version as a fossil.

The test script testsuite/runtest.libs/load_lib.exp was also found to be
inadequate as it fails to expose the mishandling of the libdirs list and
will be replaced in 1.6.4 using the new internal unit test infrastructure.

Notable visible changes (from NEWS) are:

 1. The internal proc 'is_remote' has been renamed to 'isremote' for
    consistency with the other similar procs (eg, istarget). Testsuites
    should use this proc. The 'is_remote' proc is deprecated.
 2. runtest now accepts --local_init and --global_init options to override
    the default of reading "site.exp".  See the manual for details.
 3. runtest now responds consistently to all Tcl errors and generates an
    UNRESOLVED result when a test script aborts.  Previously, calling an
    undefined procedure would cause the test run to abort while other Tcl
    errors produced only an easily-ignored message.
 4. runtest now collects Tcl errors encountered during a test run and prints
    the collected errors a second time at the end of the test run after the
    summary.  Separator lines containing more than 10 hyphens are included.
 5. A utility procedure relative_filename has been added.  This procedure
    computes a relative file name to a given destination from a given base.
 6. The utility procedure 'grep' now accepts a '-n' option that
    includes line numbers in the output, consistent with GNU grep.
 7. The target_compile procedure now accepts a "linker=" option that
    overrides the compiler selection when producing an executable.
 8. The internal default_target_compile procedure now supports compiling
    sources in Go (using GCC Go) and Rust.
 9. The host_execute procedure no longer insists that the executable be in
    the current directory if the file exists under the given name.
10. The host_execute procedure now reads input to end-of-file, to ensure
    that the child process will be able to complete instead of being cut
    short by a SIGPIPE under unpredictable unfavorable timing scenarios.
11. The match patterns in the host_execute procedure have been revised to
    fix timing issues causing test names to be truncated.
12. The host_execute procedure is no longer sensitive to the value of the
    "text" global variable.
13. A new multiplex procedure "testsuite" is added for commands retrieving
    or providing information about the current testsuite.
14. A command "testsuite file" is added to replace the use of the "*dir"
    variables in test scripts.
15. A command "testsuite can call" is added to report the availability of
    multiplexed API calls.
16. A new multiplex procedure "testcase" is added for commands examining or
    manipulating the dynamic state of ongoing testing.
17. A command "testcase group" is provided for reporting test groups to the
    DejaGnu core.  Currently, the usage of this command is validated, but
    it will affect at least XML output in a future release of DejaGnu.
18. A shell command "dejagnu" is added as a place to hang various
    auxiliary commands not directly involved with running tests. The
    "runtest" command will remain for that purpose for the foreseeable
19. The first auxiliary command is added: "report card". The "dejagnu
    report card" command reads DejaGnu summary files and produces a compact
    tabular summary across multiple tools.
20. A Tcl namespace is now used for some internal procedures and variables.
    The Tcl namespace ::dejagnu and all child namespaces are entirely
    internal and should not be mentioned in testsuite code.  Its contents
    are subject to change without notice, even on point releases.
21. The DejaGnu testsuite no longer searches for a nearby Expect executable
    in the location where it would have been located in the old Cygnus tree
    layout.  If you want to use a special Expect other than the system
    Expect, specify EXPECT=/name/of/expect to "runtest" or "make check".

See the ChangeLog and Git history for full details.

Known Bugs in This Release

These bugs were reported after the 1.6.3 code freeze and are not
sufficiently serious to justify lifting the freeze prior to the release:

PR44462 DejaGnu performs an internal check on the compiler that is only
        valid if the compiler is GCC without first checking that the
        compiler actually is GCC.  (get_multilibs procedure)

PR44545 Older versions of MacOS X have a deficient system Awk which is not
        detected by configure or at runtime.  This causes the report-card
        tests to crash with Expect/Tcl errors.  The dejagnu-report-card
        tool is unlikely to work on these systems, but the main DejaGnu
        testing framework should still be usable.

        Reported by Fred Wright on Apple Darwin 8.11.0 PowerPC, but other
        tests performed on Apple Darwin 9.8.0 were reported to pass on both
        PowerPC and x86.

PR44545 BSD make does not appear to support exporting variables to the
        environment and configure does not detect this situation.  The
        solution is to install GNU make, often packaged as "gmake" in BSD
        system distributions, and set MAKE=gmake when running configure.

PR44602 DejaGnu will fail to load if installed in a directory with spaces
        in the full absolute file name.  Similar problems will occur if the
        testsuite is in such a directory.

PR47385 An undocumented DejaGnu procedure (findfile) can return the name of
        a directory despite its own name.  Since directories are files in
        POSIX and this procedure is undocumented, the best fix is unclear.

PR47385 The which procedure in utils.exp can incorrectly return the name of
        a directory for which search permission is available.  This is a
        clear bug because this procedure is documented as searching for
        executable files.  (In POSIX, the same permission bit is used for
        execute permission on files and search permission on directories.)

        Reported by Rainer Orth, who happened to have an environment that
        tickled this bug in the DejaGnu testsuite.  The testsuite in 1.6.3
        works around this issue, for which the root causes are listed as a
        known bug in 1.6.3.

Other minor known bugs, not currently in the bug tracker, include incorrect
handling of the libdirs variable and thread-safety issues with dejagnu.h

Future Directions

Monkeypatching the framework is not and never was supported.  Such
monkeypatches may break without warning and broken monkeypatches are bugs
in the testsuite using them, not the framework.  Efforts will be made to
upstream any useful features currently monkeypatched or otherwise to assist
in getting Free testsuites out of this trap.  This release obsoletes a
monkeypatch on default_target_compile that GDB has carried for some years;
1.6.4 will begin efforts towards providing extensibility to prevent similar
issues in the future.

The 1.6.4 release is expected to fix all of the known bugs in 1.6.3, but
PR44545 may be treated as a documentation issue if a direct technical
solution proves infeasible.

The 1.6.4 release is expected to include some additional build support code
to pass the *_triplet variables obtained by configure into the testsuite.
This support will eventually be upstreamed to Automake and become the new
default behavior.

The 1.6.4 release is expected to focus on improvements to unit test and
target support.  The current implementation of the default_target_compile
procedure is dangerously close to unmaintainable spaghetti; a rewrite is
planned.  Supporting infrastructure for this rewrite may also enable
significant changes to the board_info internals; these will not affect the
existing API, but the internal arrays may disappear in a future release.

As advance notice, some of the changes currently planned for 1.7 are:

    - a radically revised XML output format, currently in development on
      the "psql" branch in the Git repository

    - log file messages generated by the framework will be tagged with the
      name of the procedure that called into the logging subsystem

    - default processing will be moved out of the various *_hook
      procedures; sites overriding these procedures will need to update
      their site configuration files when installing 1.7

    - DejaGnu 1.7 will no longer override the ::unknown procedure to detect
      calls to undefined procedures; this mechanism is obsoleted by general
      error handling improvements in 1.6.3 but will be retained until 1.7

    - {^Totals} and {\d{2}(:.{2}){2}} patterns will be removed from the
      pattern list in host_execute; this may affect some unit tests

reply via email to

[Prev in Thread] Current Thread [Next in Thread]