diff --git a/Makefile.am b/Makefile.am
index 99c3b1c0f5a6b5c0e7b138fd9ce7eda4235c7f0e..a62a3e4672d9c6e5d14f5552ecf4a8db705b7d59 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -48,7 +48,7 @@ MAINTAINERCLEANFILES = \
 	$(maninput)
 
 maintainer-clean-local:
-	-rm -rf doc/api doc/build doc/html
+	rm -rf doc/api doc/html
 
 CLEANFILES = \
 	autotools/replace_vars.sed \
@@ -150,16 +150,18 @@ docrst = \
 	doc/rapi.rst \
 	doc/security.rst
 
-doc/html: $(docrst) $(docpng) doc/conf.py configure.ac
+doc/html/.stamp: $(docrst) $(docpng) doc/conf.py configure.ac
 	@test -n "$(SPHINX)" || \
 	    { echo 'sphinx-build' not found during configure; exit 1; }
-	mkdir -p doc/build/doctrees
-	PYTHONPATH=.:$(top_builddir) $(SPHINX) -q -b html \
-	    -d doc/build/doctrees \
+	PYTHONPATH=. $(RUN_IN_TEMPDIR) $(SPHINX) -q -b html \
+	    -d . \
 	    -D version="$(VERSION_MAJOR).$(VERSION_MINOR)" \
 	    -D release="$(PACKAGE_VERSION)" \
-	    $(top_srcdir)/doc doc/html
-	touch "$@"
+	    $(abs_top_srcdir)/doc $(CURDIR)/doc/html
+	rm -f doc/html/.buildinfo doc/html/objects.inv
+	touch $@
+
+doc/html: doc/html/.stamp
 
 docdot = \
 	doc/arch-2.0.dot \