build-site.py 3.17 KB
Newer Older
Tim Bielawa committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#!/usr/bin/env python
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
#
# This file is part of the Ansible Documentation
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.

__docformat__ = 'restructuredtext'

import os
import sys
Michael DeHaan committed
23
import traceback
24 25 26 27 28 29 30
try:
    from sphinx.application import Sphinx
except ImportError:
    print "#################################"
    print "Dependency missing: Python Sphinx"
    print "#################################"
    sys.exit(1)
31
import os
Tim Bielawa committed
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47


class SphinxBuilder(object):
    """
    Creates HTML documentation using Sphinx.
    """

    def __init__(self):
        """
        Run the DocCommand.
        """
        print "Creating html documentation ..."

        try:
            buildername = 'html'

Michael DeHaan committed
48
            outdir = os.path.abspath(os.path.join(os.getcwd(), "htmlout"))
Tim Bielawa committed
49 50 51 52 53 54
            # Create the output directory if it doesn't exist
            if not os.access(outdir, os.F_OK):
                os.mkdir(outdir)

            doctreedir = os.path.join('./', '.doctrees')

55 56
            confdir = os.path.abspath('./')
            srcdir = os.path.abspath('rst')
57
            freshenv = True
Tim Bielawa committed
58 59 60 61 62 63 64 65 66 67 68 69 70

            # Create the builder
            app = Sphinx(srcdir,
                              confdir,
                              outdir,
                              doctreedir,
                              buildername,
                              {},
                              sys.stdout,
                              sys.stderr,
                              freshenv)

            app.builder.build_all()
71

Tim Bielawa committed
72
        except ImportError, ie:
Michael DeHaan committed
73
            traceback.print_exc()
Tim Bielawa committed
74 75 76 77 78 79 80
        except Exception, ex:
            print >> sys.stderr, "FAIL! exiting ... (%s)" % ex

    def build_docs(self):
        self.app.builder.build_all()


81
def build_rst_docs():
Tim Bielawa committed
82
    docgen = SphinxBuilder()
83

84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
if __name__ == '__main__':
    if '-h' in sys.argv or '--help' in sys.argv:
        print "This script builds the html documentation from rst/asciidoc sources.\n"
        print "    Run 'make docs' to build everything."
        print "    Run 'make viewdocs' to build and then preview in a web browser."
        sys.exit(0)

    # The 'htmldocs' make target will call this scrip twith the 'rst'
    # parameter' We don't need to run the 'htmlman' target then.
    if "rst" in sys.argv:
        build_rst_docs()
    else:
        # By default, preform the rst->html transformation and then
        # the asciidoc->html trasnformation
        build_rst_docs()

100 101
    if "view" in sys.argv:
        import webbrowser
102
        if not webbrowser.open('htmlout/index.html'):
103
            print >> sys.stderr, "Could not open on your webbrowser."