From 9dd6fa97b6c21543ac95cd268f2c5a17a9e3571e Mon Sep 17 00:00:00 2001 From: Michael Meffie Date: Thu, 4 Apr 2024 15:51:07 -0400 Subject: [PATCH] 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 Tested-by: BuildBot Reviewed-by: Michael Meffie --- tests/Makefile.in | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/Makefile.in b/tests/Makefile.in index 6cd4f669c7..e7c923ff32 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -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: