diff --git a/ChangeLog b/ChangeLog
index 8269e6bd699029a063a6d584df2f3d700b28867d..e73011009952084833752baf189da854c108fcd8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2017-05-23  Niels Möller  <nisse@lysator.liu.se>
+
+	Rework the previous change, which had the unintended effect of
+	always regenerating .test-rules.make after ./configure is run.
+	* testsuite/Makefile.in (test-rules.stamp): New stamp file target,
+	depend on Makefile.in, and run $(MAKE) test-rules.
+	(.test-rules.make): Add a level of indirection, by depending on
+	test-rules.stamp.
+
 2017-05-20  Niels Möller  <nisse@lysator.liu.se>
 
 	* testsuite/Makefile.in (test-rules): Use $(srddir)/-prefix for
diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in
index cc8dea3a8021dae496c2ef23df729b11799ce43c..c1ac7d241f7fa92c75f28776b5b1dedbcff8da5b 100644
--- a/testsuite/Makefile.in
+++ b/testsuite/Makefile.in
@@ -67,6 +67,7 @@ EXTRA_TARGETS = $(EXTRA_SOURCES:.c=$(EXEEXT))
 SOURCES = $(TS_SOURCES) $(EXTRA_SOURCES) testutils.c dlopen-test.c
 
 DISTFILES = $(SOURCES) $(CXX_SOURCES) Makefile.in .test-rules.make \
+	    test-rules.stamp \
 	    $(TS_SH) setup-env teardown-env \
 	    gold-bug.txt testutils.h sha3.awk
 
@@ -96,9 +97,7 @@ dlopen-test$(EXEEXT): dlopen-test.$(OBJEXT) testutils.$(OBJEXT)
 	$(LINK) dlopen-test.$(OBJEXT) -ldl -o dlopen-test$(EXEEXT)
 
 .PHONY: test-rules
-test-rules: $(srcdir)/.test-rules.make
-
-$(srcdir)/.test-rules.make: Makefile
+test-rules:
 	(for f in $(TS_NETTLE) $(TS_HOGWEED) $(EXTRA_TARGETS) ; do \
 	  echo $$f'$$(EXEEXT): '$$f'.$$(OBJEXT)' ; \
 	  echo '	$$(LINK) '$$f'.$$(OBJEXT) $$(TEST_OBJS) -o '$$f'$$(EXEEXT)' ; \
@@ -109,10 +108,14 @@ $(srcdir)/.test-rules.make: Makefile
 	  echo '	$$(LINK_CXX) '$$f'.$$(OBJEXT) $$(TEST_OBJS) -o '$$f'$$(EXEEXT)' ; \
 	  echo ; \
 	done) > $(srcdir)/.test-rules.make
-	@echo "******************************************************************"
-	@echo "testsuite Makefile rules have been regenerated; please re-run make"
-	@echo "******************************************************************"
-	false
+
+$(srcdir)/.test-rules.make: $(srcdir)/test-rules.stamp
+
+# Updates the stamp file *first*, so that this rule isn't triggered
+# again and again by the recursive $(MAKE).
+$(srcdir)/test-rules.stamp: Makefile.in
+	echo stamp > $(srcdir)/test-rules.stamp
+	$(MAKE) test-rules
 
 include $(srcdir)/.test-rules.make
 
diff --git a/testsuite/test-rules.stamp b/testsuite/test-rules.stamp
new file mode 100644
index 0000000000000000000000000000000000000000..859afb1de85951b27719cf567ac9821b9b8c51e0
--- /dev/null
+++ b/testsuite/test-rules.stamp
@@ -0,0 +1 @@
+stamp