New TESTS variable to run a subset of tests in parallel.

* Makefile.in (TESTS): New variable.
	(expanded_tests, expanded_tests_or_none): New variables
	(check-single): Pass $(expanded_tests_or_none) to runtest.
	(check-parallel): Only run tests in $(TESTS) if non-empty.
	(check/no-matching-tests-found): New rule.
	* README: Document TESTS makefile variable.
This commit is contained in:
Doug Evans 2014-02-18 16:11:02 -08:00
parent 5dd3176fb7
commit c17ef0d5d2
3 changed files with 60 additions and 1 deletions

View File

@ -1,3 +1,12 @@
2014-02-18 Doug Evans <dje@google.com>
* Makefile.in (TESTS): New variable.
(expanded_tests, expanded_tests_or_none): New variables
(check-single): Pass $(expanded_tests_or_none) to runtest.
(check-parallel): Only run tests in $(TESTS) if non-empty.
(check/no-matching-tests-found): New rule.
* README: Document TESTS makefile variable.
2014-02-18 Doug Evans <dje@google.com>
* Makefile.in (check-parallel): rm -rf outputs temp.

View File

@ -160,8 +160,25 @@ DO_RUNTEST = \
export TCL_LIBRARY ; fi ; \
$(RUNTEST)
# TESTS exists for the user to pass on the command line to easily
# say "Only run these tests." With check-single it's not necessary, but
# with check-parallel there's no other way to (easily) specify a subset
# of tests. For consistency we support it for check-single as well.
# To specify all tests in a subdirectory, use TESTS=gdb.subdir/*.exp.
# E.g., make check TESTS="gdb.server/*.exp gdb.threads/*.exp".
@GMAKE_TRUE@TESTS :=
@GMAKE_FALSE@TESTS =
@GMAKE_TRUE@ifeq ($(strip $(TESTS)),)
@GMAKE_TRUE@expanded_tests_or_none :=
@GMAKE_TRUE@else
@GMAKE_TRUE@expanded_tests := $(patsubst $(srcdir)/%,%,$(wildcard $(addprefix $(srcdir)/,$(TESTS))))
@GMAKE_TRUE@expanded_tests_or_none := $(or $(expanded_tests),no-matching-tests-found)
@GMAKE_TRUE@endif
@GMAKE_FALSE@expanded_tests_or_none = $(TESTS)
check-single:
$(DO_RUNTEST) $(RUNTESTFLAGS)
$(DO_RUNTEST) $(RUNTESTFLAGS) $(expanded_tests_or_none)
check-parallel:
-rm -rf cache outputs temp
@ -180,11 +197,15 @@ check-parallel:
# them to the front of the list to try to lessen the overall time
# taken by the test suite -- if one of these tests happens to be run
# late, it will cause the overall time to increase.
@GMAKE_TRUE@ifeq ($(strip $(TESTS)),)
slow_tests = gdb.base/break-interp.exp gdb.base/interp.exp \
gdb.base/multi-forks.exp
@GMAKE_TRUE@all_tests := $(shell cd $(srcdir) && find gdb.* -name '*.exp' -print)
@GMAKE_TRUE@reordered_tests := $(slow_tests) $(filter-out $(slow_tests),$(all_tests))
@GMAKE_TRUE@TEST_TARGETS := $(addprefix check/,$(reordered_tests))
@GMAKE_TRUE@else
@GMAKE_TRUE@TEST_TARGETS := $(addprefix check/,$(expanded_tests_or_none))
@GMAKE_TRUE@endif
do-check-parallel: $(TEST_TARGETS)
@:
@ -193,6 +214,11 @@ do-check-parallel: $(TEST_TARGETS)
@GMAKE_TRUE@ -mkdir -p outputs/$*
@GMAKE_TRUE@ @$(DO_RUNTEST) GDB_PARALLEL=yes --outdir=outputs/$* $*.exp $(RUNTESTFLAGS)
check/no-matching-tests-found:
@echo ""
@echo "No matching tests found."
@echo ""
check-perf: all $(abs_builddir)/site.exp
@if test ! -d gdb.perf; then mkdir gdb.perf; fi
$(DO_RUNTEST) --directory=gdb.perf --outdir gdb.perf GDB_PERFTEST_MODE=both $(RUNTESTFLAGS)

View File

@ -151,6 +151,30 @@ them, both to stdout and in the test suite log file.
This setting is only meaningful in conjunction with GDB_PARALLEL.
TESTS
This variable is used to specify which set of tests to run.
It is passed to make (not runtest) and its contents are a space separated
list of tests to run.
If using GNU make then the contents are wildcard-expanded using
GNU make's $(wildcard) function. Test paths must be fully specified,
relative to the "testsuite" subdirectory. This allows one to run all
tests in a subdirectory by passing "gdb.subdir/*.exp".
If for some strange reason one wanted to run all tests that begin with
the letter "d" that is also possible: TESTS="*/d*.exp".
Do not write */*.exp to specify all tests (assuming all tests are only
nested one level deep, which is not necessarily true). This will pick up
.exp files in ancillary directories like "lib" and "config".
Instead write gdb.*/*.exp.
Example:
make -j10 check TESTS="gdb.server/[s-w]*.exp */x*.exp"
If not using GNU make then the value is passed directly to runtest.
If not specified, all tests are run.
Testsuite Configuration
***********************