tests: Add make shell target

Add a makefile target to start an interactive subshell with the
environment required to run tests directly from the command line.  Tests
can also be run from a debugger or from the "runtests" front-end test
runner.

Example usage:

    $ make shell
    ...
    Starting a shell to run tests. Run 'exit' when done.

    # Set the subshell prompt (optional).
    $ PS1="(tests) $PS1"

    # Run tests directly or with a debugger.
    (tests) $ rx/perf-t
    ...
    (tests) $ file rx/perf-t
    rx/perf-t: Perl script text executable
    (tests) $ perl -d rx/perf-t
    ...

    # End the subshell.
    (tests) $ exit
    $

The shell started will be the one discovered by configure, which may not
be the preferred shell for interactive use. To specify a different
shell, define SHELL when running make:

    $ make shell SHELL=/path/to/my/shell

If you use this feature often, you may want to update your shell profile
to automatically set the PS1 when running the test subshell.  For
example, you can append this to your bashrc file:

    # OpenAFS unit test subshell.
    if [[ $MAKECHECK -eq 1 ]]; then
        PS1="(tests) $PS1"
    fi

Thanks to Ben Kaduk for the suggestion.

Change-Id: I8d949d21153396c0da8db186fd35477ad0383f12
Reviewed-on: https://gerrit.openafs.org/15730
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
This commit is contained in:
Michael Meffie 2024-04-04 15:51:07 -04:00
parent b78d0b46fc
commit 9dd6fa97b6

View File

@ -35,6 +35,31 @@ check test tests: all runtests
MAKECHECK=1 $(abs_top_srcdir)/tests/libwrap @TOP_OBJDIR@/lib \
./runtests $(RUNTESTS_ARGS)
# To start an interactive subshell with the environment required to run
# the test programs, run 'make shell'. Run 'exit' to end the subshell.
#
# Example usage:
#
# $ make shell
# Starting a shell to run tests. Run 'exit' when done.
# $ PS1="(tests) $PS1" # Optionally set the PS1 in the subshell.
# (tests) $ rx/perf-t # Run tests directly or via a debugger.
# ...
# (tests) $ exit # Exit when done.
#
shell: all runtests
@if [ "x$$MAKECHECK" = "x1" ]; then \
echo "Already in the tests subshell."; \
else \
echo "Starting a shell to run tests. Run 'exit' when done."; \
MAKECHECK=1 \
C_TAP_SOURCE=@abs_top_srcdir@/tests \
C_TAP_BUILD=@abs_top_builddir@/tests \
SOURCE=@abs_top_srcdir@/tests \
BUILD=@abs_top_builddir@/tests \
@abs_top_srcdir@/tests/libwrap @TOP_OBJDIR@/lib $(SHELL); \
fi
install:
clean distclean: