xref: /llvm-project/llvm/docs/conf.py (revision b9f09a43b4437b9a1773d45d9fb5a699886a3e12)
1# -*- coding: utf-8 -*-
2#
3# LLVM documentation build configuration file.
4#
5# This file is execfile()d with the current directory set to its containing dir.
6#
7# Note that not all possible configuration values are present in this
8# autogenerated file.
9#
10# All configuration values have a default; values that are commented out
11# serve to show the default.
12from __future__ import print_function
13
14import sys, os, re
15from datetime import date
16
17# If extensions (or modules to document with autodoc) are in another directory,
18# add these directories to sys.path here. If the directory is relative to the
19# documentation root, use os.path.abspath to make it absolute, like shown here.
20sys.path.insert(0, os.path.abspath("."))
21
22# -- General configuration -----------------------------------------------------
23
24# If your documentation needs a minimal Sphinx version, state it here.
25# needs_sphinx = '1.0'
26
27# Add any Sphinx extension module names here, as strings. They can be extensions
28# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
29extensions = ["sphinx.ext.intersphinx", "sphinx.ext.todo"]
30
31# When building man pages, we do not use the markdown pages,
32# So, we can continue without the myst_parser dependencies.
33# Doing so reduces dependencies of some packaged llvm distributions.
34try:
35    import myst_parser
36
37    extensions.append("myst_parser")
38except ImportError:
39    if not tags.has("builder-man"):
40        raise
41else:
42    myst_enable_extensions = ["substitution"]
43
44# Automatic anchors for markdown titles
45myst_heading_anchors = 6
46myst_heading_slug_func = "llvm_slug.make_slug"
47
48
49# Add any paths that contain templates here, relative to this directory.
50templates_path = ["_templates"]
51
52source_suffix = [".rst", ".md"]
53
54import sphinx
55
56# The encoding of source files.
57# source_encoding = 'utf-8-sig'
58
59# The master toctree document.
60master_doc = "index"
61
62# General information about the project.
63project = "LLVM"
64copyright = "2003-%d, LLVM Project" % date.today().year
65
66# The language for content autogenerated by Sphinx. Refer to documentation
67# for a list of supported languages.
68# language = None
69
70# There are two options for replacing |today|: either, you set today to some
71# non-false value, then it is used:
72# today = ''
73# Else, today_fmt is used as the format for a strftime call.
74today_fmt = "%Y-%m-%d"
75
76# List of patterns, relative to source directory, that match files and
77# directories to ignore when looking for source files.
78exclude_patterns = ["_build"]
79
80# The reST default role (used for this markup: `text`) to use for all documents.
81# default_role = None
82
83# If true, '()' will be appended to :func: etc. cross-reference text.
84# add_function_parentheses = True
85
86# If true, the current module name will be prepended to all description
87# unit titles (such as .. function::).
88# add_module_names = True
89
90# If true, sectionauthor and moduleauthor directives will be shown in the
91# output. They are ignored by default.
92show_authors = True
93
94# The name of the Pygments (syntax highlighting) style to use.
95pygments_style = "friendly"
96
97# A list of ignored prefixes for module index sorting.
98# modindex_common_prefix = []
99
100
101# -- Options for HTML output ---------------------------------------------------
102
103# The theme to use for HTML and HTML Help pages.  See the documentation for
104# a list of builtin themes.
105html_theme = "llvm-theme"
106
107# Theme options are theme-specific and customize the look and feel of a theme
108# further.  For a list of options available for each theme, see the
109# documentation.
110html_theme_options = {"nosidebar": False}
111
112# Add any paths that contain custom themes here, relative to this directory.
113html_theme_path = ["_themes"]
114
115# The name for this set of Sphinx documents.  If None, it defaults to
116# "<project> v<release> documentation".
117# html_title = None
118
119# A shorter title for the navigation bar.  Default is the same as html_title.
120# html_short_title = None
121
122# The name of an image file (relative to this directory) to place at the top
123# of the sidebar.
124# html_logo = None
125
126# The name of an image file (within the static path) to use as favicon of the
127# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
128# pixels large.
129# html_favicon = None
130
131# Add any paths that contain custom static files (such as style sheets) here,
132# relative to this directory. They are copied after the builtin static files,
133# so a file named "default.css" will overwrite the builtin "default.css".
134html_static_path = ["_static"]
135
136# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
137# using the given strftime format.
138html_last_updated_fmt = "%Y-%m-%d"
139
140# If true, SmartyPants will be used to convert quotes and dashes to
141# typographically correct entities.
142# html_use_smartypants = True
143
144# Custom sidebar templates, maps document names to template names.
145
146html_sidebars = {
147    "**": [
148        "indexsidebar.html",
149        "sourcelink.html",
150        "searchbox.html",
151    ]
152}
153
154# Additional templates that should be rendered to pages, maps page names to
155# template names.
156# html_additional_pages = {}
157
158# If false, no module index is generated.
159# html_domain_indices = True
160
161# If false, no index is generated.
162# html_use_index = True
163
164# If true, the index is split into individual pages for each letter.
165# html_split_index = False
166
167# If true, links to the reST sources are added to the pages.
168html_show_sourcelink = True
169
170# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
171# html_show_sphinx = True
172
173# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
174# html_show_copyright = True
175
176# If true, an OpenSearch description file will be output, and all pages will
177# contain a <link> tag referring to it.  The value of this option must be the
178# base URL from which the finished HTML is served.
179# html_use_opensearch = ''
180
181# This is the file name suffix for HTML files (e.g. ".xhtml").
182# html_file_suffix = None
183
184# Output file base name for HTML help builder.
185htmlhelp_basename = "LLVMdoc"
186
187
188# -- Options for LaTeX output --------------------------------------------------
189
190latex_elements = {
191    # The paper size ('letterpaper' or 'a4paper').
192    #'papersize': 'letterpaper',
193    # The font size ('10pt', '11pt' or '12pt').
194    #'pointsize': '10pt',
195    # Additional stuff for the LaTeX preamble.
196    #'preamble': '',
197}
198
199# Grouping the document tree into LaTeX files. List of tuples
200# (source start file, target name, title, author, documentclass [howto/manual]).
201latex_documents = [
202    ("index", "LLVM.tex", "LLVM Documentation", "LLVM project", "manual"),
203]
204
205# The name of an image file (relative to this directory) to place at the top of
206# the title page.
207# latex_logo = None
208
209# For "manual" documents, if this is true, then toplevel headings are parts,
210# not chapters.
211# latex_use_parts = False
212
213# If true, show page references after internal links.
214# latex_show_pagerefs = False
215
216# If true, show URL addresses after external links.
217# latex_show_urls = False
218
219# Documents to append as an appendix to all manuals.
220# latex_appendices = []
221
222# If false, no module index is generated.
223# latex_domain_indices = True
224
225# If true, figures, tables and code-blocks are automatically numbered if they
226# have a caption.
227numfig = True
228
229# -- Options for manual page output --------------------------------------------
230
231# One entry per manual page. List of tuples
232# (source start file, name, description, authors, manual section).
233man_pages = []
234
235# Automatically derive the list of man pages from the contents of the command
236# guide subdirectory.
237basedir = os.path.dirname(__file__)
238man_page_authors = "Maintained by the LLVM Team (https://llvm.org/)."
239command_guide_subpath = "CommandGuide"
240command_guide_path = os.path.join(basedir, command_guide_subpath)
241manpages_url = "{page}.html"
242
243
244def process_md(name):
245    file_subpath = os.path.join(command_guide_subpath, name)
246    with open(os.path.join(command_guide_path, name)) as f:
247        title = f.readline().rstrip("\n")
248
249        m = re.match(r"^# (\S+) - (.+)$", title)
250        if m is None:
251            print(
252                "error: invalid title in %r "
253                "(expected '# <name> - <description>')" % file_subpath,
254                file=sys.stderr,
255            )
256        else:
257            man_pages.append(
258                (
259                    file_subpath.replace(".md", ""),
260                    m.group(1),
261                    m.group(2),
262                    man_page_authors,
263                    1,
264                )
265            )
266
267
268def process_rst(name):
269    file_subpath = os.path.join(command_guide_subpath, name)
270    with open(os.path.join(command_guide_path, name)) as f:
271        title = f.readline().rstrip("\n")
272        header = f.readline().rstrip("\n")
273
274        if len(header) != len(title):
275            print(
276                "error: invalid header in %r (does not match title)" % file_subpath,
277                file=sys.stderr,
278            )
279        if " - " not in title:
280            print(
281                "error: invalid title in %r "
282                "(expected '<name> - <description>')" % file_subpath,
283                file=sys.stderr,
284            )
285        # Split the name out of the title.
286        name, description = title.split(" - ", 1)
287        man_pages.append(
288            (file_subpath.replace(".rst", ""), name, description, man_page_authors, 1)
289        )
290
291
292for name in os.listdir(command_guide_path):
293    # Process Markdown files
294    if name.endswith(".md"):
295        process_md(name)
296    # Process ReST files apart from the index page.
297    elif name.endswith(".rst") and name != "index.rst":
298        process_rst(name)
299
300# If true, show URL addresses after external links.
301# man_show_urls = False
302
303# FIXME: Define intersphinx configuration.
304intersphinx_mapping = {}
305
306# Pygment lexer are sometimes out of date (when parsing LLVM for example) or
307# wrong. Suppress the warning so the build doesn't abort.
308suppress_warnings = ["misc.highlighting_failure"]
309