From 8d389acd693325fab2799840844750149d95809a Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 14 Dec 2019 13:35:45 +0000 Subject: [PATCH] build system: Fix race bug in recheck target Signed-off-by: Ian Jackson --- Dir.sd.mk | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Dir.sd.mk b/Dir.sd.mk index 1dba143..baabaf6 100644 --- a/Dir.sd.mk +++ b/Dir.sd.mk @@ -128,10 +128,20 @@ TESTDIRS=stest mtest &TARGETS_fullcheck += $(&TARGETS_check) &TARGETS_fullcheck += msgcode-test.confirm -recheck: - rm -f $(&TARGETS_check) - rm -rf $(addsuffix /d-*, $(TESTDIRS)) - $(MAKE) -f main.mk check +RECHECK_RM += $(&TARGETS_check) +RECHECK_RM += $(addsuffix /d-*, $(TESTDIRS)); +# Really the eval below should come very late, so that subdirs can add +# their stuff to RECHECK_RM, but we do not have a way to do that with +# subdirmk yet. So we embed ad-hoc knowledge about TESTDIRS. + +# This contrives to delete things before make starts, if the user +# said "recheck". The alternative is having recheck be a target +# which contains the rm's and then runs $(MAKE) again but then +# we recursively re-enter make in parallel, which is Bad. +$(eval $(if $(filter recheck,$(MAKECMDGOALS)), \ + $(shell set -x; rm -rf $(RECHECK_RM) ))) + +recheck: check .PHONY: FORCE version.c: FORCE -- 2.30.2