Job.__init__():  Only create the builddir directory if it will be used (by
    building the HTML or text documentation).  There is no need to create
    it for other formats.

Job.build_html():  The builddir parameter is always passed in, so it need
    not be optional.
diff --git a/Doc/tools/mkhowto b/Doc/tools/mkhowto
index 5b69fe3..0d5d687 100755
--- a/Doc/tools/mkhowto
+++ b/Doc/tools/mkhowto
@@ -227,9 +227,12 @@
         self.doctype = get_doctype(path)
         self.filedir, self.doc = split_pathname(path)
         self.builddir = os.path.abspath(options.builddir or self.doc)
-        if not os.path.exists(self.builddir):
-            os.mkdir(self.builddir)
-        self.log_filename = os.path.join(self.builddir, self.doc + ".how")
+        if ("html" in options.formats or "text" in options.formats):
+            if not os.path.exists(self.builddir):
+                os.mkdir(self.builddir)
+            self.log_filename = os.path.join(self.builddir, self.doc + ".how")
+        else:
+            self.log_filename = os.path.abspath(self.doc + ".how")
         if os.path.exists(self.log_filename):
             os.unlink(self.log_filename)
         if os.path.exists(self.doc + ".l2h"):
@@ -350,9 +353,7 @@
     def build_ps(self):
         self.run("%s -N0 -o %s.ps %s" % (DVIPS_BINARY, self.doc, self.doc))
 
-    def build_html(self, builddir=None, max_split_depth=None):
-        if builddir is None:
-            builddir = self.builddir
+    def build_html(self, builddir, max_split_depth=None):
         if max_split_depth is None:
             max_split_depth = self.options.max_split_depth
         texfile = None