diff --git a/Doc/tools/dailybuild.py b/Doc/tools/dailybuild.py
new file mode 100755
index 0000000..6291d90
--- /dev/null
+++ b/Doc/tools/dailybuild.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Runs the daily build of the Python docs on dinsdale.python.org.
+#
+# Usages:
+#
+#   dailybuild.py
+#
+# without any arguments builds docs for all branches configured in the global
+# BRANCHES value.
+#
+#   dailybuild.py [-d] <checkout> <target>
+#
+# builds one version, where <checkout> is an SVN checkout directory of the
+# Python branch to build docs for, and <target> is the directory where the
+# result should be placed.  If -d is given, the docs are built even if the
+# branch is in development mode (i.e. version contains a, b or c).
+#
+# This script is not run from the checkout, so if you want to change how the
+# daily build is run, you must replace it on dinsdale.  This is necessary, for
+# example, after the release of a new minor version.
+#
+# 03/2010, Georg Brandl
+
+import os
+import sys
+import getopt
+
+
+BUILDROOT = '/home/gbrandl/docbuild'
+WWWROOT = '/data/ftp.python.org/pub/docs.python.org'
+
+BRANCHES = [
+    # checkout, target, isdev
+    (BUILDROOT + '/python26', WWWROOT, False),
+    (BUILDROOT + '/python31', WWWROOT + '/py3k', False),
+    (BUILDROOT + '/python27', WWWROOT + '/dev', True),
+    (BUILDROOT + '/python32', WWWROOT + '/dev/py3k', True),
+]
+
+
+def build_one(checkout, target, isdev):
+    print 'Doc autobuild started in %s' % checkout
+    os.chdir(checkout)
+    print 'Running svn update'
+    os.system('svn update')
+    print 'Running make autobuild'
+    if os.WEXITSTATUS(os.system(
+        'cd Doc; make autobuild-%s' % (isdev and 'dev' or 'stable'))) == 2:
+        print '*' * 80
+        return
+    print 'Copying HTML files'
+    os.system('cp -a Doc/build/html/* %s' % target)
+    print 'Copying dist files'
+    os.system('cp -a Doc/dist %s/dist' % target)
+    print 'Finished'
+    print '=' * 80
+
+def usage():
+    print 'Usage:'
+    print '  %s' % sys.argv[0]
+    print 'or'
+    print '  %s [-d] <checkout> <target>' % sys.argv[0]
+    sys.exit(1)
+
+
+if __name__ == '__main__':
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'd')
+    except getopt.error:
+        usage()
+    if opts and not args:
+        usage()
+    if args:
+        if len(args) != 2:
+            usage()
+        build_one(args[0], args[1], bool(opts))
+    else:
+        for branch in BRANCHES:
+            build_one(*branch)
