Blame lang/python/examples/howto/post_installer.py

Packit Service 30b792
#!/usr/bin/env python3
Packit Service 30b792
# -*- coding: utf-8 -*-
Packit Service 30b792
Packit Service 30b792
# Copyright (C) 2016-2018 g10 Code GmbH
Packit Service 30b792
# Copyright (C) 2015 Ben McGinnes <ben@adversary.org>
Packit Service 30b792
#
Packit Service 30b792
# This library is free software; you can redistribute it and/or
Packit Service 30b792
# modify it under the terms of the GNU Lesser General Public
Packit Service 30b792
# License as published by the Free Software Foundation; either
Packit Service 30b792
# version 2.1 of the License, or (at your option) any later version.
Packit Service 30b792
#
Packit Service 30b792
# This library is distributed in the hope that it will be useful,
Packit Service 30b792
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 30b792
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 30b792
# Lesser General Public License for more details.
Packit Service 30b792
#
Packit Service 30b792
# You should have received a copy of the GNU Lesser General Public
Packit Service 30b792
# License along with this library; if not, write to the Free Software
Packit Service 30b792
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
Packit Service 30b792
Packit Service 30b792
from __future__ import absolute_import, print_function, unicode_literals
Packit Service 30b792
Packit Service 30b792
import glob
Packit Service 30b792
import os
Packit Service 30b792
import os.path
Packit Service 30b792
import shutil
Packit Service 30b792
import subprocess
Packit Service 30b792
import sys
Packit Service 30b792
import sysconfig
Packit Service 30b792
Packit Service 30b792
from shutil import which
Packit Service 30b792
Packit Service 30b792
del absolute_import, print_function, unicode_literals
Packit Service 30b792
Packit Service 30b792
try:
Packit Service 30b792
    emacs = os.path.realpath(which("emacs"))
Packit Service 30b792
except TypeError as e:
Packit Service 30b792
    emacs = None
Packit Service 30b792
Packit Service 30b792
try:
Packit Service 30b792
    makeinfo = os.path.realpath(which("makeinfo"))
Packit Service 30b792
except TypeError as e:
Packit Service 30b792
    makeinfo = None
Packit Service 30b792
Packit Service 30b792
try:
Packit Service 30b792
    pandoc = os.path.realpath(which("pandoc"))
Packit Service 30b792
except TypeError as e:
Packit Service 30b792
    pandoc = None
Packit Service 30b792
Packit Service 30b792
try:
Packit Service 30b792
    texinfo = os.path.realpath(which("texinfo"))
Packit Service 30b792
except TypeError as e:
Packit Service 30b792
    texinfo = None
Packit Service 30b792
Packit Service 30b792
docsrc = glob.glob('doc/src/**/*', recursive=True)
Packit Service 30b792
Packit Service 30b792
for srcdoc in docsrc:
Packit Service 30b792
    process = subprocess.Popen([emacs, srcdoc, "--batch", "-f",
Packit Service 30b792
                                "org-texinfo-export-to-texinfo", "--kill"],
Packit Service 30b792
                                stdout=subprocess.PIPE)
Packit Service 30b792
    procom = process.communicate()
Packit Service 30b792
Packit Service 30b792
doctexi1 = glob.glob('doc/src/**/*.texi', recursive=True)
Packit Service 30b792
doctexi2 = []
Packit Service 30b792
doctexi3 = []
Packit Service 30b792
Packit Service 30b792
for texi in doctexi1:
Packit Service 30b792
    doctexi2.append(os.path.realpath(texi))
Packit Service 30b792
Packit Service 30b792
for texdoc in doctexi2:
Packit Service 30b792
    newtex = texdoc.replace("doc/src/", "doc/texinfo/")
Packit Service 30b792
    doctexi3.append(newtex)
Packit Service 30b792
    with open(texdoc, "r") as f:
Packit Service 30b792
        badtex = f.read()
Packit Service 30b792
    goodtex = badtex.replace("@documentencoding UTF-8\n",
Packit Service 30b792
                             "@documentencoding utf-8\n")
Packit Service 30b792
    with open(newtex, "w") as f:
Packit Service 30b792
        f.write(goodtex)
Packit Service 30b792
Packit Service 30b792
for srcdoc in docsrc:
Packit Service 30b792
    rstdoc = "{0}.rst".format(srcdoc.replace("doc/src/", "doc/rst/"))
Packit Service 30b792
    process = subprocess.Popen([pandoc, "-f", "org", "-t", "rst+smart", "-o",
Packit Service 30b792
                                rstdoc, srcdoc], stdout=subprocess.PIPE)
Packit Service 30b792
    procom = process.communicate()
Packit Service 30b792
Packit Service 30b792
with open("doc/rst/index.rst", "r") as f:
Packit Service 30b792
    genindex = f.readlines()
Packit Service 30b792
Packit Service 30b792
indextop = ['.. GPGME Python Bindings documentation master file, created by\n',
Packit Service 30b792
            '   sphinx-quickstart on Wed Dec  5 09:04:47 2018.\n',
Packit Service 30b792
            '   You can adapt this file completely to your liking, but it should at least\n',
Packit Service 30b792
            '   contain the root `toctree` directive.\n', '\n',
Packit Service 30b792
            'GPGME Python Bindings\n', '=====================\n', '\n',
Packit Service 30b792
            '.. toctree::\n', '   :maxdepth: 3\n', '   :caption: Contents:\n',
Packit Service 30b792
            '\n']
Packit Service 30b792
Packit Service 30b792
with open("doc/rst/index.rst", "w") as f:
Packit Service 30b792
    for line in indextop:
Packit Service 30b792
        f.write(line)
Packit Service 30b792
    for line in genindex[5:]:
Packit Service 30b792
        f.write(line)
Packit Service 30b792
Packit Service 30b792
with open("doc/rst/Makefile", "w") as f:
Packit Service 30b792
    f.write("""# Minimal makefile for Sphinx documentation
Packit Service 30b792
#
Packit Service 30b792
Packit Service 30b792
# You can set these variables from the command line.
Packit Service 30b792
SPHINXOPTS    =
Packit Service 30b792
SPHINXBUILD   = sphinx-build
Packit Service 30b792
SOURCEDIR     = .
Packit Service 30b792
BUILDDIR      = _build
Packit Service 30b792
Packit Service 30b792
# Put it first so that "make" without argument is like "make help".
Packit Service 30b792
help:
Packit Service 30b792
        @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
Packit Service 30b792
Packit Service 30b792
.PHONY: help Makefile
Packit Service 30b792
Packit Service 30b792
# Catch-all target: route all unknown targets to Sphinx using the new
Packit Service 30b792
# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
Packit Service 30b792
%: Makefile
Packit Service 30b792
        @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
Packit Service 30b792
""")
Packit Service 30b792
Packit Service 30b792
info_path = os.path.realpath(sysconfig._PREFIX + "/share/info")
Packit Service 30b792
info_paths = os.environ["INFOPATH"].split(":")
Packit Service 30b792
Packit Service 30b792
if info_paths.count(info_path) == 0:
Packit Service 30b792
    info_paths.insert(0, info_path)
Packit Service 30b792
else:
Packit Service 30b792
    pass
Packit Service 30b792
Packit Service 30b792
for ipath in info_paths:
Packit Service 30b792
    if os.path.exists(os.path.realpath(ipath)) is False:
Packit Service 30b792
        info_paths.remove(ipath)
Packit Service 30b792
    else:
Packit Service 30b792
        pass
Packit Service 30b792
Packit Service 30b792
# Remove the old generated .texi files from the org source directory.
Packit Service 30b792
for texifile in doctexi2:
Packit Service 30b792
    os.remove(texifile)
Packit Service 30b792
Packit Service 30b792
print("""
Packit Service 30b792
You may now build your preferred documentation format using either:
Packit Service 30b792
Packit Service 30b792
 1. Sphinx in the doc/rst/ directory; and/or
Packit Service 30b792
 2. Texinfo or Makeinfo in the doc/texinfo/ directory.
Packit Service 30b792
Packit Service 30b792
Alternatively the original Org mode source files can be found in the doc/src/
Packit Service 30b792
directory.
Packit Service 30b792
""")