python: post installer doc fix script
[gpgme.git] / lang / python / post_installer.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3
4 # Copyright (C) 2016-2018 g10 Code GmbH
5 # Copyright (C) 2015 Ben McGinnes <ben@adversary.org>
6 #
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2.1 of the License, or (at your option) any later version.
11 #
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 # Lesser General Public License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this library; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
20
21 from __future__ import absolute_import, print_function, unicode_literals
22
23 import glob
24 import os
25 import os.path
26 import shutil
27 import subprocess
28 import sys
29 import sysconfig
30
31 from shutil import which
32
33 del absolute_import, print_function, unicode_literals
34
35 try:
36     emacs = os.path.realpath(which("emacs"))
37 except TypeError as e:
38     emacs = None
39
40 try:
41     makeinfo = os.path.realpath(which("makeinfo"))
42 except TypeError as e:
43     makeinfo = None
44
45 try:
46     pandoc = os.path.realpath(which("pandoc"))
47 except TypeError as e:
48     pandoc = None
49
50 try:
51     texinfo = os.path.realpath(which("texinfo"))
52 except TypeError as e:
53     texinfo = None
54
55 docsrc = glob.glob('doc/src/**/*', recursive=True)
56
57 for srcdoc in docsrc:
58     process = subprocess.Popen([emacs, srcdoc, "--batch", "-f",
59                                 "org-texinfo-export-to-texinfo", "--kill"],
60                                 stdout=subprocess.PIPE)
61     procom = process.communicate()
62
63 doctexi1 = glob.glob('doc/src/**/*.texi', recursive=True)
64 doctexi2 = []
65 doctexi3 = []
66
67 for texi in doctexi1:
68     doctexi2.append(os.path.realpath(texi))
69
70 for texdoc in doctexi2:
71     newtex = texdoc.replace("doc/src/", "doc/texinfo/")
72     doctexi3.append(newtex)
73     with open(texdoc, "r") as f:
74         badtex = f.read()
75     goodtex = badtex.replace("@documentencoding UTF-8\n",
76                              "@documentencoding utf-8\n")
77     with open(newtex, "w") as f:
78         f.write(goodtex)
79
80 for srcdoc in docsrc:
81     rstdoc = "{0}.rst".format(srcdoc.replace("doc/src/", "doc/rst/"))
82     process = subprocess.Popen([pandoc, "-f", "org", "-t", "rst+smart", "-o",
83                                 rstdoc, srcdoc], stdout=subprocess.PIPE)
84     procom = process.communicate()
85
86 with open("doc/rst/index.rst", "r") as f:
87     genindex = f.readlines()
88
89 indextop = ['.. GPGME Python Bindings documentation master file, created by\n',
90             '   sphinx-quickstart on Wed Dec  5 09:04:47 2018.\n',
91             '   You can adapt this file completely to your liking, but it should at least\n',
92             '   contain the root `toctree` directive.\n', '\n',
93             'GPGME Python Bindings\n', '=====================\n', '\n',
94             '.. toctree::\n', '   :maxdepth: 3\n', '   :caption: Contents:\n',
95             '\n']
96
97 with open("doc/rst/index.rst", "w") as f:
98     for line in indextop:
99         f.write(line)
100     for line in genindex[5:]:
101         f.write(line)
102
103 with open("doc/rst/Makefile", "w") as f:
104     f.write("""# Minimal makefile for Sphinx documentation
105 #
106
107 # You can set these variables from the command line.
108 SPHINXOPTS    =
109 SPHINXBUILD   = sphinx-build
110 SOURCEDIR     = .
111 BUILDDIR      = _build
112
113 # Put it first so that "make" without argument is like "make help".
114 help:
115         @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
116
117 .PHONY: help Makefile
118
119 # Catch-all target: route all unknown targets to Sphinx using the new
120 # "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
121 %: Makefile
122         @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
123 """)
124
125 info_path = os.path.realpath(sysconfig._PREFIX + "/share/info")
126 info_paths = os.environ["INFOPATH"].split(":")
127
128 if info_paths.count(info_path) == 0:
129     info_paths.insert(0, info_path)
130 else:
131     pass
132
133 for ipath in info_paths:
134     if os.path.exists(os.path.realpath(ipath)) is False:
135         info_paths.remove(ipath)
136     else:
137         pass
138
139 print("""
140 You may now build your preferred documentation format using either:
141
142  1. Sphinx in the doc/rst/ directory; and/or
143  2. Texinfo or Makeinfo in the doc/texinfo/ directory.
144
145 Alternatively the original Org mode source files can be found in the doc/src/
146 directory.
147 """)