summaryrefslogtreecommitdiff
path: root/sphinx/setup_command.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/setup_command.py')
-rw-r--r--sphinx/setup_command.py84
1 files changed, 51 insertions, 33 deletions
diff --git a/sphinx/setup_command.py b/sphinx/setup_command.py
index c6c256b72..8e773923f 100644
--- a/sphinx/setup_command.py
+++ b/sphinx/setup_command.py
@@ -18,7 +18,7 @@ import os
from six import StringIO, string_types
from distutils.cmd import Command
-from distutils.errors import DistutilsOptionError, DistutilsExecError
+from distutils.errors import DistutilsOptionError, DistutilsExecError # type: ignore
from sphinx.application import Sphinx
from sphinx.cmdline import handle_exception
@@ -26,6 +26,10 @@ from sphinx.util.console import nocolor, color_terminal
from sphinx.util.docutils import docutils_namespace
from sphinx.util.osutil import abspath
+if False:
+ # For type annotation
+ from typing import Any, List, Tuple # NOQA
+
class BuildDoc(Command):
"""
@@ -72,7 +76,8 @@ class BuildDoc(Command):
('source-dir=', 's', 'Source directory'),
('build-dir=', None, 'Build directory'),
('config-dir=', 'c', 'Location of the configuration directory'),
- ('builder=', 'b', 'The builder to use. Defaults to "html"'),
+ ('builder=', 'b', 'The builder (or builders) to use. Can be a comma- '
+ 'or space-separated list. Defaults to "html"'),
('warning-is-error', 'W', 'Turn warning into errors'),
('project=', None, 'The documented project\'s name'),
('version=', None, 'The short X.Y version'),
@@ -87,22 +92,24 @@ class BuildDoc(Command):
'link-index']
def initialize_options(self):
+ # type: () -> None
self.fresh_env = self.all_files = False
self.pdb = False
- self.source_dir = self.build_dir = None
+ self.source_dir = self.build_dir = None # type: unicode
self.builder = 'html'
self.warning_is_error = False
self.project = ''
self.version = ''
self.release = ''
self.today = ''
- self.config_dir = None
+ self.config_dir = None # type: unicode
self.link_index = False
self.copyright = ''
self.verbosity = 0
self.traceback = False
def _guess_source_dir(self):
+ # type: () -> unicode
for guess in ('doc', 'docs'):
if not os.path.isdir(guess):
continue
@@ -115,6 +122,7 @@ class BuildDoc(Command):
# unicode, causing finalize_options to fail if invoked again. Workaround
# for http://bugs.python.org/issue19570
def _ensure_stringlike(self, option, what, default=None):
+ # type: (unicode, unicode, Any) -> Any
val = getattr(self, option)
if val is None:
setattr(self, option, default)
@@ -125,10 +133,11 @@ class BuildDoc(Command):
return val
def finalize_options(self):
+ # type: () -> None
if self.source_dir is None:
self.source_dir = self._guess_source_dir()
- self.announce('Using source directory %s' % self.source_dir)
- self.ensure_dirname('source_dir')
+ self.announce('Using source directory %s' % self.source_dir) # type: ignore
+ self.ensure_dirname('source_dir') # type: ignore
if self.source_dir is None:
self.source_dir = os.curdir
self.source_dir = abspath(self.source_dir)
@@ -136,23 +145,28 @@ class BuildDoc(Command):
self.config_dir = self.source_dir
self.config_dir = abspath(self.config_dir)
+ self.ensure_string_list('builder') # type: ignore
if self.build_dir is None:
- build = self.get_finalized_command('build')
+ build = self.get_finalized_command('build') # type: ignore
self.build_dir = os.path.join(abspath(build.build_base), 'sphinx')
- self.mkpath(self.build_dir)
+ self.mkpath(self.build_dir) # type: ignore
self.build_dir = abspath(self.build_dir)
self.doctree_dir = os.path.join(self.build_dir, 'doctrees')
- self.mkpath(self.doctree_dir)
- self.builder_target_dir = os.path.join(self.build_dir, self.builder)
- self.mkpath(self.builder_target_dir)
+ self.mkpath(self.doctree_dir) # type: ignore
+ self.builder_target_dirs = [
+ (builder, os.path.join(self.build_dir, builder))
+ for builder in self.builder] # type: List[Tuple[str, unicode]]
+ for _, builder_target_dir in self.builder_target_dirs:
+ self.mkpath(builder_target_dir) # type: ignore
def run(self):
+ # type: () -> None
if not color_terminal():
nocolor()
- if not self.verbose:
+ if not self.verbose: # type: ignore
status_stream = StringIO()
else:
- status_stream = sys.stdout
+ status_stream = sys.stdout # type: ignore
confoverrides = {}
if self.project:
confoverrides['project'] = self.project
@@ -165,24 +179,28 @@ class BuildDoc(Command):
if self.copyright:
confoverrides['copyright'] = self.copyright
- app = None
- try:
- with docutils_namespace():
- app = Sphinx(self.source_dir, self.config_dir,
- self.builder_target_dir, self.doctree_dir,
- self.builder, confoverrides, status_stream,
- freshenv=self.fresh_env,
- warningiserror=self.warning_is_error)
- app.build(force_all=self.all_files)
- if app.statuscode:
- raise DistutilsExecError(
- 'caused by %s builder.' % app.builder.name)
- except Exception as exc:
- handle_exception(app, self, exc, sys.stderr)
- if not self.pdb:
- raise SystemExit(1)
-
- if self.link_index:
- src = app.config.master_doc + app.builder.out_suffix
- dst = app.builder.get_outfilename('index')
+ for builder, builder_target_dir in self.builder_target_dirs:
+ app = None
+
+ try:
+ with docutils_namespace():
+ app = Sphinx(self.source_dir, self.config_dir,
+ builder_target_dir, self.doctree_dir,
+ builder, confoverrides, status_stream,
+ freshenv=self.fresh_env,
+ warningiserror=self.warning_is_error)
+ app.build(force_all=self.all_files)
+ if app.statuscode:
+ raise DistutilsExecError(
+ 'caused by %s builder.' % app.builder.name)
+ except Exception as exc:
+ handle_exception(app, self, exc, sys.stderr)
+ if not self.pdb:
+ raise SystemExit(1)
+
+ if not self.link_index:
+ continue
+
+ src = app.config.master_doc + app.builder.out_suffix # type: ignore
+ dst = app.builder.get_outfilename('index') # type: ignore
os.symlink(src, dst)