buildframework/helium/external/python/lib/common/Sphinx-0.5.1-py2.5.egg/sphinx/setup_command.py
author wbernard
Wed, 23 Dec 2009 19:29:07 +0200
changeset 179 d8ac696cc51f
permissions -rw-r--r--
helium_7.0-r14027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
179
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     2
"""
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     3
    sphinx.setup_command
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     4
    ~~~~~~~~~~~~~~~~~~~~
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     5
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     6
    Setuptools/distutils commands to assist the building of sphinx
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     7
    documentation.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     8
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     9
    :author: Sebastian Wiesner
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    10
    :contact: basti.wiesner@gmx.net
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    11
    :copyright: 2008 by Sebastian Wiesner.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    12
    :license: MIT.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    13
"""
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    14
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    15
import sys
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    16
import os
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    17
from StringIO import StringIO
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    18
from distutils.cmd import Command
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    19
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    20
from sphinx.application import Sphinx
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    21
from sphinx.util.console import darkred, nocolor
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    22
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    23
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    24
class BuildDoc(Command):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    25
    """Distutils command to build Sphinx documentation."""
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    26
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    27
    description = 'Build Sphinx documentation'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    28
    user_options = [
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    29
        ('fresh-env', 'E', 'discard saved environment'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    30
        ('all-files', 'a', 'build all files'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    31
        ('source-dir=', 's', 'Source directory'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    32
        ('build-dir=', None, 'Build directory'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    33
        ('builder=', 'b', 'The builder to use. Defaults to "html"'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    34
        ]
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    35
    boolean_options = ['fresh-env', 'all-files']
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    36
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    37
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    38
    def initialize_options(self):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    39
        self.fresh_env = self.all_files = False
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    40
        self.source_dir = self.build_dir = None
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    41
        self.conf_file_name = 'conf.py'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    42
        self.builder = 'html'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    43
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    44
    def finalize_options(self):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    45
        if self.source_dir is None:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    46
            if os.path.isdir('doc'):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    47
                for root, dirnames, filenames in os.walk('doc'):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    48
                    if 'conf.py' in filenames:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    49
                        self.source_dir = root
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    50
                        self.announce('Using source directory %s' % root)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    51
                        break
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    52
        self.ensure_dirname('source_dir')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    53
        self.source_dir = os.path.abspath(self.source_dir)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    54
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    55
        if self.build_dir is None:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    56
            build = self.get_finalized_command('build')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    57
            self.build_dir = os.path.join(build.build_base, 'sphinx')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    58
            self.mkpath(self.build_dir)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    59
        self.ensure_dirname('build_dir')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    60
        self.doctree_dir = os.path.join(self.build_dir, 'doctrees')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    61
        self.mkpath(self.doctree_dir)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    62
        self.builder_target_dir = os.path.join(self.build_dir, self.builder)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    63
        self.mkpath(self.builder_target_dir)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    64
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    65
    def run(self):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    66
        if not sys.stdout.isatty() or sys.platform == 'win32':
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    67
            # Windows' poor cmd box doesn't understand ANSI sequences
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    68
            nocolor()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    69
        if not self.verbose:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    70
            status_stream = StringIO()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    71
        else:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    72
            status_stream = sys.stdout
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    73
        app = Sphinx(self.source_dir, self.source_dir,
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    74
                     self.builder_target_dir, self.doctree_dir,
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    75
                     self.builder, {}, status_stream,
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    76
                     freshenv=self.fresh_env)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    77
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    78
        try:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    79
            if self.all_files:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    80
                app.builder.build_all()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    81
            else:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    82
                app.builder.build_update()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    83
        except Exception, err:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    84
            from docutils.utils import SystemMessage
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    85
            if isinstance(err, SystemMessage):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    86
                sys.stderr, darkred('reST markup error:')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    87
                print >>sys.stderr, err.args[0].encode('ascii', 'backslashreplace')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    88
            else:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    89
                raise