示例#1
0
文件: conf.py 项目: mario-bros/Plop
def prepare(globs, locs):
    git = Popen('which git 2> %s' % os.devnull, shell=True, stdout=PIPE
                ).stdout.read().strip()
    cwd = os.getcwd()
    root = os.path.abspath(os.path.join(cwd, '..', '..'))
    print "Running from %s..." % (root, )

    buildenv = os.path.join(root, 'vendor', 'erebot', 'buildenv')

    origin = Popen([git, 'config', '--local', 'remote.origin.url'],
                   stdout=PIPE).stdout.read().strip()
    project = origin.rpartition('/')[2]
    if project.endswith('.git'):
        project = project[:-4]
    locs['project'] = project

    for repository, path in (
        ('git://github.com/Erebot/Erebot_Buildenv.git', buildenv),
    ):
        if not os.path.isdir(path):
            os.makedirs(path)
            print "Cloning %s into %s..." % (repository, path)
            call([git, 'clone', repository, path])
        else:
            os.chdir(path)
            print "Updating clone of %s in %s..." % (repository, path)
            call([git, 'checkout', 'master'])
            call([git, 'pull'])
            os.chdir(cwd)

    real_conf = os.path.join(buildenv, 'sphinx', 'conf.py')
    print "Including real configuration file (%s)..." % (real_conf, )
    execfile(real_conf, globs, locs)
示例#2
0
def prepare(globs, locs):
    # Where are we?
    cwd = os.getcwd()
    root = os.path.abspath(os.path.join(cwd, '..', '..'))

    git = Popen('which git 2> %s' % os.devnull, shell=True,
                stdout=PIPE).stdout.read().strip()
    doxygen = Popen('which doxygen 2> %s' % os.devnull, shell=True,
                stdout=PIPE).stdout.read().strip()

    locs['rtd_slug'] = os.path.basename(os.path.dirname(os.path.dirname(root)))
    locs['rtd_version'] = os.path.basename(root)
    pybabel = os.path.join(root, '..', '..', 'envs',
                           locs['rtd_version'], 'bin', 'pybabel')

    print "git version:"
    call([git, '--version'])
    print "doxygen version:"
    call([doxygen, '--version'])
    print "pybabel version:"
    call([pybabel, '--version'])

    print "Building version %s for %s in %s..." % (
        locs['rtd_version'],
        locs['rtd_slug'],
        root
    )
    os.chdir(root)

    # Figure several configuration values from git.
    origin = Popen([git, 'config', '--local', 'remote.origin.url'],
                    stdout=PIPE).stdout.read().strip()
    git_tag = Popen([git, 'describe', '--tags', '--exact', '--first-parent'],
                    stdout=PIPE).communicate()[0].strip()
    git_hash = Popen([git, 'rev-parse', 'HEAD'],
                    stdout=PIPE).communicate()[0].strip()
    project = origin.rpartition('/')[2]
    if project.endswith('.git'):
        project = project[:-4]
    os.environ['SPHINX_PROJECT'] = project
    if git_tag:
        os.environ['SPHINX_VERSION'] = git_tag
        os.environ['SPHINX_RELEASE'] = git_tag
    else:
        commit = Popen([git, 'describe', '--always', '--first-parent'],
                        stdout=PIPE).communicate()[0].strip()
        os.environ['SPHINX_VERSION'] = 'latest'
        os.environ['SPHINX_RELEASE'] = 'latest-%s' % (commit, )
        locs['tags'].add('devel')

    # Clone or update dependencies
    buildenv = os.path.join(root, 'vendor', 'erebot', 'buildenv')
    natives = os.path.join(root, 'vendor', 'fpoirotte', 'natives4doxygen')
    generic_doc = os.path.join(root, 'docs', 'src', 'generic')
    for repository, path in (
        ('git://github.com/Erebot/Buildenv.git', buildenv),
        ('git://github.com/fpoirotte/PHPNatives4Doxygen', natives),
        ('git://github.com/Erebot/GenericDoc.git', generic_doc),
    ):
        if not os.path.isdir(path):
            os.makedirs(path)
            print "Cloning %s into %s..." % (repository, path)
            call([git, 'clone', repository, path])
        elif os.path.isdir(os.path.join(path, '.git')):
            os.chdir(path)
            print "Updating clone of %s in %s..." % (repository, path)
            call([git, 'checkout', 'master'])
            call([git, 'pull'])
            os.chdir(root)

    composer = json.load(open(os.path.join(root, 'composer.json'), 'r'))

    # Run doxygen
    call([doxygen, os.path.join(root, 'Doxyfile')], env={
        'COMPONENT_NAME': os.environ['SPHINX_PROJECT'],
        'COMPONENT_VERSION': os.environ['SPHINX_VERSION'],
        'COMPONENT_BRIEF': composer.get('description', ''),
    })

    # Remove extra files/folders.
    try:
        shutil.rmtree(os.path.join(root, 'build'))
    except OSError:
        pass
    os.mkdir(os.path.join(root, 'build'))
    shutil.move(
        os.path.join(root, 'docs', 'api', 'html'),
        os.path.join(root, 'build', 'apidoc'),
    )
    try:
        shutil.move(
            os.path.join(root, '%s.tagfile.xml' %
                os.environ['SPHINX_PROJECT']),
            os.path.join(root, 'build', 'apidoc', '%s.tagfile.xml' %
                os.environ['SPHINX_PROJECT'])
        )
    except OSError:
        pass

    # Copy translations for generic docs to catalogs folder.
    gen_i18n = os.path.join(root, 'docs', 'src', 'generic', 'i18n', '.')[:-1]
    for translation in glob.iglob(os.path.join(gen_i18n, '*')):
        target_dir = os.path.join(
            root, 'docs', 'i18n',
            translation[len(gen_i18n):],
            'LC_MESSAGES', 'generic'
        )
        translation = os.path.join(translation, 'LC_MESSAGES', 'generic')
        shutil.rmtree(target_dir, ignore_errors=True)
        shutil.copytree(translation, target_dir)

    # Compile translation catalogs.
    for locale_dir in glob.iglob(os.path.join(root, 'docs', 'i18n', '*')):
        for base, dirnames, filenames in os.walk(locale_dir):
            for po in fnmatch.filter(filenames, '*.po'):
                po = os.path.join(base, po)
                mo = po[:-3] + '.mo'
                call([pybabel, 'compile', '-f', '--statistics',
                      '-i', po, '-o', mo])

    # Load the real Sphinx configuration file.
    os.chdir(cwd)
    real_conf = os.path.join(buildenv, 'sphinx', 'conf.py')
    print "Including real configuration file (%s)..." % (real_conf, )
    execfile(real_conf, globs, locs)

    # Patch configuration afterwards.
    # - Theme
    if 'html_extra_path' not in locs:
        locs['html_extra_path'] = []
    locs['html_extra_path'].append(os.path.join(root, 'build'))
    locs['html_theme'] = 'haiku'

    # - I18N
    if 'locale_dirs' not in locs:
        locs['locale_dirs'] = []
    locs['locale_dirs'].insert(0, os.path.join(root, 'docs', 'i18n'))

    if 'rst_prolog' not in locs:
        locs['rst_prolog'] = ''
    locs['rst_prolog'] += '\n    .. _`this_commit`: https://github.com/%s/commit/%s\n' % (
        project,
        git_hash,
    )

    # - Custom roles
    if 'doxylinks' in locs and 'api' in locs['doxylinks']:
        locs['doxylinks']['api'] = (
            locs['doxylinks']['api'][0],
            'file://%s' % urllib.quote(
                os.path.join(root, 'build', 'apidoc', '%s.tagfile.xml' %
                    os.environ['SPHINX_PROJECT'])
            )
        )
示例#3
0
文件: conf.py 项目: 0x6B386F/Erebot
def prepare(globs, locs):
    # Where are we?
    cwd = os.getcwd()
    root = os.path.abspath(os.path.join(cwd, '..', '..'))

    git = Popen('which git 2> %s' % os.devnull, shell=True,
                stdout=PIPE).stdout.read().strip()
    doxygen = Popen('which doxygen 2> %s' % os.devnull,
                    shell=True,
                    stdout=PIPE).stdout.read().strip()

    locs['rtd_slug'] = os.path.basename(os.path.dirname(os.path.dirname(root)))
    locs['rtd_version'] = os.path.basename(root)
    pybabel = os.path.join(root, '..', '..', 'envs', locs['rtd_version'],
                           'bin', 'pybabel')

    print "git version:"
    call([git, '--version'])
    print "doxygen version:"
    call([doxygen, '--version'])
    print "pybabel version:"
    call([pybabel, '--version'])

    print "Building version %s for %s in %s..." % (locs['rtd_version'],
                                                   locs['rtd_slug'], root)
    os.chdir(root)

    # Figure several configuration values from git.
    origin = Popen([git, 'config', '--local', 'remote.origin.url'],
                   stdout=PIPE).stdout.read().strip()
    git_tag = Popen(['git', 'describe', '--tags', '--exact', '--first-parent'],
                    stdout=PIPE).communicate()[0].strip()
    project = origin.rpartition('/')[2]
    if project.endswith('.git'):
        project = project[:-4]
    os.environ['SPHINX_PROJECT'] = project
    if git_tag:
        os.environ['SPHINX_VERSION'] = git_tag
        os.environ['SPHINX_RELEASE'] = git_tag
    else:
        commit = Popen(['git', 'describe', '--always', '--first-parent'],
                       stdout=PIPE).communicate()[0].strip()
        os.environ['SPHINX_VERSION'] = 'latest'
        os.environ['SPHINX_RELEASE'] = 'latest-%s' % (commit, )
        locs['tags'].add('devel')

    # Clone or update dependencies
    buildenv = os.path.join(root, 'vendor', 'erebot', 'buildenv')
    natives = os.path.join(root, 'vendor', 'fpoirotte', 'natives4doxygen')
    generic_doc = os.path.join(root, 'docs', 'src', 'generic')
    for repository, path in (
        ('git://github.com/Erebot/Buildenv.git', buildenv),
        ('git://github.com/fpoirotte/PHPNatives4Doxygen', natives),
        ('git://github.com/Erebot/GenericDoc.git', generic_doc),
    ):
        if not os.path.isdir(path):
            os.makedirs(path)
            print "Cloning %s into %s..." % (repository, path)
            call([git, 'clone', repository, path])
        else:
            os.chdir(path)
            print "Updating clone of %s in %s..." % (repository, path)
            call([git, 'checkout', 'master'])
            call([git, 'pull'])
            os.chdir(root)

    composer = json.load(open(os.path.join(root, 'composer.json'), 'r'))

    # Run doxygen
    call(
        [doxygen, os.path.join(root, 'Doxyfile')],
        env={
            'COMPONENT_NAME': os.environ['SPHINX_PROJECT'],
            'COMPONENT_VERSION': os.environ['SPHINX_VERSION'],
            'COMPONENT_BRIEF': composer.get('description', ''),
        })

    # Remove extra files/folders.
    try:
        shutil.rmtree(os.path.join(root, 'build'))
    except OSError:
        pass
    shutil.move(
        os.path.join(root, 'docs', 'api', 'html'),
        os.path.join(root, 'build', 'apidoc'),
    )
    try:
        shutil.move(
            os.path.join(root,
                         '%s.tagfile.xml' % os.environ['SPHINX_PROJECT']),
            os.path.join(root, 'build', 'apidoc',
                         '%s.tagfile.xml' % os.environ['SPHINX_PROJECT']))
    except OSError:
        pass

    # Copy translations for generic docs to catalogs folder.
    gen_i18n = os.path.join(root, 'docs', 'src', 'generic', 'i18n', '.')[:-1]
    for translation in glob.iglob(os.path.join(gen_i18n, '*')):
        target_dir = os.path.join(root, 'docs', 'i18n',
                                  translation[len(gen_i18n):], 'LC_MESSAGES',
                                  'generic')
        translation = os.path.join(translation, 'LC_MESSAGES', 'generic')
        shutil.rmtree(target_dir, ignore_errors=True)
        shutil.copytree(translation, target_dir)

    # Compile translation catalogs.
    for locale_dir in glob.iglob(os.path.join(root, 'docs', 'i18n', '*')):
        for root, dirnames, filenames in os.walk(locale_dir):
            for po in fnmatch.filter(filenames, '*.po'):
                po = os.path.join(root, po)
                mo = po[:-3] + '.mo'
                call([
                    pybabel, 'compile', '-f', '--statistics', '-i', po, '-o',
                    mo
                ])

    # Load the real Sphinx configuration file.
    os.chdir(cwd)
    real_conf = os.path.join(buildenv, 'sphinx', 'conf.py')
    print "Including real configuration file (%s)..." % (real_conf, )
    execfile(real_conf, globs, locs)

    # Patch configuration afterwards.
    # - Theme
    if 'html_extra_path' not in locs:
        locs['html_extra_path'] = []
    locs['html_extra_path'].append(os.path.join(root, 'build'))
    locs['html_theme'] = 'haiku'

    # - I18N
    if 'locale_dirs' not in locs:
        locs['locale_dirs'] = []
    locs['locale_dirs'].insert(0, os.path.join(root, 'docs', 'i18n'))

    # - Custom roles
    if 'doxylinks' in locs and 'api' in locs['doxylinks']:
        locs['doxylinks']['api'] = (
            locs['doxylinks']['api'][0], 'file://%s' % urllib.quote(
                os.path.join(root, 'build', 'apidoc',
                             '%s.tagfile.xml' % os.environ['SPHINX_PROJECT'])))
示例#4
0
文件: conf.py 项目: erebot/erebot
def prepare(globs, locs):
    # Where are we?
    cwd = os.getcwd()
    root = os.path.abspath(os.path.join(cwd, "..", ".."))

    git = Popen("which git 2> %s" % os.devnull, shell=True, stdout=PIPE).stdout.read().strip()
    doxygen = Popen("which doxygen 2> %s" % os.devnull, shell=True, stdout=PIPE).stdout.read().strip()

    locs["rtd_slug"] = os.path.basename(os.path.dirname(os.path.dirname(root)))
    locs["rtd_version"] = os.path.basename(root)
    pybabel = os.path.join(root, "..", "..", "envs", locs["rtd_version"], "bin", "pybabel")

    print "git version:"
    call([git, "--version"])
    print "doxygen version:"
    call([doxygen, "--version"])
    print "pybabel version:"
    call([pybabel, "--version"])

    print "Building version %s for %s in %s..." % (locs["rtd_version"], locs["rtd_slug"], root)
    os.chdir(root)

    # Figure several configuration values from git.
    origin = Popen([git, "config", "--local", "remote.origin.url"], stdout=PIPE).stdout.read().strip()
    git_tag = Popen(["git", "describe", "--tags", "--exact", "--first-parent"], stdout=PIPE).communicate()[0].strip()
    project = origin.rpartition("/")[2]
    if project.endswith(".git"):
        project = project[:-4]
    os.environ["SPHINX_PROJECT"] = project
    if git_tag:
        os.environ["SPHINX_VERSION"] = git_tag
        os.environ["SPHINX_RELEASE"] = git_tag
    else:
        commit = Popen(["git", "describe", "--always", "--first-parent"], stdout=PIPE).communicate()[0].strip()
        os.environ["SPHINX_VERSION"] = "latest"
        os.environ["SPHINX_RELEASE"] = "latest-%s" % (commit,)
        locs["tags"].add("devel")

    # Clone or update dependencies
    buildenv = os.path.join(root, "vendor", "erebot", "buildenv")
    natives = os.path.join(root, "vendor", "fpoirotte", "natives4doxygen")
    generic_doc = os.path.join(root, "docs", "src", "generic")
    for repository, path in (
        ("git://github.com/Erebot/Buildenv.git", buildenv),
        ("git://github.com/fpoirotte/PHPNatives4Doxygen", natives),
        ("git://github.com/Erebot/GenericDoc.git", generic_doc),
    ):
        if not os.path.isdir(path):
            os.makedirs(path)
            print "Cloning %s into %s..." % (repository, path)
            call([git, "clone", repository, path])
        else:
            os.chdir(path)
            print "Updating clone of %s in %s..." % (repository, path)
            call([git, "checkout", "master"])
            call([git, "pull"])
            os.chdir(root)

    composer = json.load(open(os.path.join(root, "composer.json"), "r"))

    # Run doxygen
    call(
        [doxygen, os.path.join(root, "Doxyfile")],
        env={
            "COMPONENT_NAME": os.environ["SPHINX_PROJECT"],
            "COMPONENT_VERSION": os.environ["SPHINX_VERSION"],
            "COMPONENT_BRIEF": composer.get("description", ""),
        },
    )

    # Remove extra files/folders.
    try:
        shutil.rmtree(os.path.join(root, "build"))
    except OSError:
        pass
    shutil.move(os.path.join(root, "docs", "api", "html"), os.path.join(root, "build", "apidoc"))
    try:
        shutil.move(
            os.path.join(root, "%s.tagfile.xml" % os.environ["SPHINX_PROJECT"]),
            os.path.join(root, "build", "apidoc", "%s.tagfile.xml" % os.environ["SPHINX_PROJECT"]),
        )
    except OSError:
        pass

    # Copy translations for generic docs to catalogs folder.
    gen_i18n = os.path.join(root, "docs", "src", "generic", "i18n", ".")[:-1]
    for translation in glob.iglob(os.path.join(gen_i18n, "*")):
        target_dir = os.path.join(root, "docs", "i18n", translation[len(gen_i18n) :], "LC_MESSAGES", "generic")
        translation = os.path.join(translation, "LC_MESSAGES", "generic")
        shutil.rmtree(target_dir, ignore_errors=True)
        shutil.copytree(translation, target_dir)

    # Compile translation catalogs.
    for locale_dir in glob.iglob(os.path.join(root, "docs", "i18n", "*")):
        for root, dirnames, filenames in os.walk(locale_dir):
            for po in fnmatch.filter(filenames, "*.po"):
                po = os.path.join(root, po)
                mo = po[:-3] + ".mo"
                call([pybabel, "compile", "-f", "--statistics", "-i", po, "-o", mo])

    # Load the real Sphinx configuration file.
    os.chdir(cwd)
    real_conf = os.path.join(buildenv, "sphinx", "conf.py")
    print "Including real configuration file (%s)..." % (real_conf,)
    execfile(real_conf, globs, locs)

    # Patch configuration afterwards.
    # - Theme
    if "html_extra_path" not in locs:
        locs["html_extra_path"] = []
    locs["html_extra_path"].append(os.path.join(root, "build"))
    locs["html_theme"] = "haiku"

    # - I18N
    if "locale_dirs" not in locs:
        locs["locale_dirs"] = []
    locs["locale_dirs"].insert(0, os.path.join(root, "docs", "i18n"))

    # - Custom roles
    if "doxylinks" in locs and "api" in locs["doxylinks"]:
        locs["doxylinks"]["api"] = (
            locs["doxylinks"]["api"][0],
            "file://%s"
            % urllib.quote(os.path.join(root, "build", "apidoc", "%s.tagfile.xml" % os.environ["SPHINX_PROJECT"])),
        )