chiark / gitweb /
build system: Fix race bug in recheck target
[secnet.git] / Dir.sd.mk
index 1dba14397482753fd701f3252bcbb155f000a04c..baabaf67ff8bea3a90476684a52bdc16c1ef417b 100644 (file)
--- 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