docs: kernel_abi.py: Handle with a lazy Sphinx parser
[linux-block.git] / Documentation / conf.py
CommitLineData
22cba31b
JN
1# -*- coding: utf-8 -*-
2#
3# The Linux Kernel documentation build configuration file, created by
4# sphinx-quickstart on Fri Feb 12 13:51:46 2016.
5#
6# This file is execfile()d with the current directory set to its
7# containing dir.
8#
9# Note that not all possible configuration values are present in this
10# autogenerated file.
11#
12# All configuration values have a default; values that are commented out
13# serve to show the default.
14
15import sys
16import os
d4fe7e14
MCC
17import sphinx
18
e0de2b59
MCC
19from subprocess import check_output
20
d4fe7e14 21# Get Sphinx version
c46988ae 22major, minor, patch = sphinx.version_info[:3]
d4fe7e14 23
22cba31b
JN
24
25# If extensions (or modules to document with autodoc) are in another directory,
26# add these directories to sys.path here. If the directory is relative to the
27# documentation root, use os.path.abspath to make it absolute, like shown here.
24dcdeb2 28sys.path.insert(0, os.path.abspath('sphinx'))
606b9ac8 29from load_config import loadConfig
22cba31b
JN
30
31# -- General configuration ------------------------------------------------
32
33# If your documentation needs a minimal Sphinx version, state it here.
0e4c2b75 34needs_sphinx = '1.3'
22cba31b
JN
35
36# Add any Sphinx extension module names here, as strings. They can be
37# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
38# ones.
afde706a 39extensions = ['kerneldoc', 'rstFlatTable', 'kernel_include',
aa204855 40 'kfigure', 'sphinx.ext.ifconfig', 'automarkup',
58ad30cf 41 'maintainers_include', 'sphinx.ext.autosectionlabel' ]
22cba31b 42
afde706a
JC
43#
44# cdomain is badly broken in Sphinx 3+. Leaving it out generates *most*
45# of the docs correctly, but not all. Scream bloody murder but allow
46# the process to proceed; hopefully somebody will fix this properly soon.
47#
48if major >= 3:
49 sys.stderr.write('''WARNING: The kernel documentation build process
14059a38
MCC
50 support for Sphinx v3.0 and above is brand new. Be prepared for
51 possible issues in the generated output.
b34b86d7
MCC
52 ''')
53 if minor > 0 or patch >= 2:
54 # Sphinx c function parser is more pedantic with regards to type
55 # checking. Due to that, having macros at c:function cause problems.
56 # Those needed to be scaped by using c_id_attributes[] array
57 c_id_attributes = [
58 # GCC Compiler types not parsed by Sphinx:
59 "__restrict__",
60
61 # include/linux/compiler_types.h:
62 "__iomem",
63 "__kernel",
64 "noinstr",
65 "notrace",
66 "__percpu",
67 "__rcu",
68 "__user",
69
70 # include/linux/compiler_attributes.h:
71 "__alias",
72 "__aligned",
73 "__aligned_largest",
74 "__always_inline",
75 "__assume_aligned",
76 "__cold",
77 "__attribute_const__",
78 "__copy",
79 "__pure",
80 "__designated_init",
81 "__visible",
82 "__printf",
83 "__scanf",
84 "__gnu_inline",
85 "__malloc",
86 "__mode",
87 "__no_caller_saved_registers",
88 "__noclone",
89 "__nonstring",
90 "__noreturn",
91 "__packed",
92 "__pure",
93 "__section",
94 "__always_unused",
95 "__maybe_unused",
96 "__used",
97 "__weak",
98 "noinline",
99
100 # include/linux/memblock.h:
101 "__init_memblock",
102 "__meminit",
103
104 # include/linux/init.h:
105 "__init",
106 "__ref",
107
108 # include/linux/linkage.h:
109 "asmlinkage",
110 ]
111
afde706a
JC
112else:
113 extensions.append('cdomain')
114
4658b0eb
MCC
115# Ensure that autosectionlabel will produce unique names
116autosectionlabel_prefix_document = True
117autosectionlabel_maxdepth = 2
118
d4fe7e14 119# The name of the math extension changed on Sphinx 1.4
3bc80884 120if (major == 1 and minor > 3) or (major > 1):
d4fe7e14
MCC
121 extensions.append("sphinx.ext.imgmath")
122else:
123 extensions.append("sphinx.ext.pngmath")
22cba31b
JN
124
125# Add any paths that contain templates here, relative to this directory.
126templates_path = ['_templates']
127
128# The suffix(es) of source filenames.
129# You can specify multiple suffix as a list of string:
130# source_suffix = ['.rst', '.md']
131source_suffix = '.rst'
132
133# The encoding of source files.
134#source_encoding = 'utf-8-sig'
135
136# The master toctree document.
137master_doc = 'index'
138
139# General information about the project.
140project = 'The Linux Kernel'
dc36143f 141copyright = 'The kernel development community'
22cba31b
JN
142author = 'The kernel development community'
143
144# The version info for the project you're documenting, acts as replacement for
145# |version| and |release|, also used in various other places throughout the
146# built documents.
147#
c13ce448
JN
148# In a normal build, version and release are are set to KERNELVERSION and
149# KERNELRELEASE, respectively, from the Makefile via Sphinx command line
150# arguments.
151#
152# The following code tries to extract the information by reading the Makefile,
153# when Sphinx is run directly (e.g. by Read the Docs).
154try:
155 makefile_version = None
156 makefile_patchlevel = None
157 for line in open('../Makefile'):
158 key, val = [x.strip() for x in line.split('=', 2)]
159 if key == 'VERSION':
160 makefile_version = val
161 elif key == 'PATCHLEVEL':
162 makefile_patchlevel = val
163 if makefile_version and makefile_patchlevel:
164 break
165except:
166 pass
167finally:
168 if makefile_version and makefile_patchlevel:
169 version = release = makefile_version + '.' + makefile_patchlevel
170 else:
c13ce448 171 version = release = "unknown version"
22cba31b
JN
172
173# The language for content autogenerated by Sphinx. Refer to documentation
174# for a list of supported languages.
175#
176# This is also used if you do content translation via gettext catalogs.
177# Usually you set "language" from the command line for these cases.
178language = None
179
180# There are two options for replacing |today|: either, you set today to some
181# non-false value, then it is used:
182#today = ''
183# Else, today_fmt is used as the format for a strftime call.
184#today_fmt = '%B %d, %Y'
185
186# List of patterns, relative to source directory, that match files and
187# directories to ignore when looking for source files.
188exclude_patterns = ['output']
189
190# The reST default role (used for this markup: `text`) to use for all
191# documents.
192#default_role = None
193
194# If true, '()' will be appended to :func: etc. cross-reference text.
195#add_function_parentheses = True
196
197# If true, the current module name will be prepended to all description
198# unit titles (such as .. function::).
199#add_module_names = True
200
201# If true, sectionauthor and moduleauthor directives will be shown in the
202# output. They are ignored by default.
203#show_authors = False
204
205# The name of the Pygments (syntax highlighting) style to use.
206pygments_style = 'sphinx'
207
208# A list of ignored prefixes for module index sorting.
209#modindex_common_prefix = []
210
211# If true, keep warnings as "system message" paragraphs in the built documents.
212#keep_warnings = False
213
214# If true, `todo` and `todoList` produce output, else they produce nothing.
215todo_include_todos = False
216
fd5d6669 217primary_domain = 'c'
b459106e 218highlight_language = 'none'
22cba31b
JN
219
220# -- Options for HTML output ----------------------------------------------
221
222# The theme to use for HTML and HTML Help pages. See the documentation for
223# a list of builtin themes.
224
225# The Read the Docs theme is available from
226# - https://github.com/snide/sphinx_rtd_theme
227# - https://pypi.python.org/pypi/sphinx_rtd_theme
228# - python-sphinx-rtd-theme package (on Debian)
229try:
230 import sphinx_rtd_theme
231 html_theme = 'sphinx_rtd_theme'
232 html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
233except ImportError:
234 sys.stderr.write('Warning: The Sphinx \'sphinx_rtd_theme\' HTML theme was not found. Make sure you have the theme installed to produce pretty HTML output. Falling back to the default theme.\n')
235
236# Theme options are theme-specific and customize the look and feel of a theme
237# further. For a list of options available for each theme, see the
238# documentation.
239#html_theme_options = {}
240
241# Add any paths that contain custom themes here, relative to this directory.
242#html_theme_path = []
243
244# The name for this set of Sphinx documents. If None, it defaults to
245# "<project> v<release> documentation".
246#html_title = None
247
248# A shorter title for the navigation bar. Default is the same as html_title.
249#html_short_title = None
250
251# The name of an image file (relative to this directory) to place at the top
252# of the sidebar.
253#html_logo = None
254
255# The name of an image file (within the static path) to use as favicon of the
256# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
257# pixels large.
258#html_favicon = None
259
260# Add any paths that contain custom static files (such as style sheets) here,
261# relative to this directory. They are copied after the builtin static files,
262# so a file named "default.css" will overwrite the builtin "default.css".
bc214671
MH
263
264html_static_path = ['sphinx-static']
265
266html_context = {
267 'css_files': [
268 '_static/theme_overrides.css',
269 ],
270}
22cba31b
JN
271
272# Add any extra paths that contain custom files (such as robots.txt or
273# .htaccess) here, relative to this directory. These files are copied
274# directly to the root of the documentation.
275#html_extra_path = []
276
277# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
278# using the given strftime format.
279#html_last_updated_fmt = '%b %d, %Y'
280
281# If true, SmartyPants will be used to convert quotes and dashes to
282# typographically correct entities.
7282a93f 283html_use_smartypants = False
22cba31b
JN
284
285# Custom sidebar templates, maps document names to template names.
286#html_sidebars = {}
287
288# Additional templates that should be rendered to pages, maps page names to
289# template names.
290#html_additional_pages = {}
291
292# If false, no module index is generated.
293#html_domain_indices = True
294
295# If false, no index is generated.
296#html_use_index = True
297
298# If true, the index is split into individual pages for each letter.
299#html_split_index = False
300
301# If true, links to the reST sources are added to the pages.
302#html_show_sourcelink = True
303
304# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
305#html_show_sphinx = True
306
307# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
308#html_show_copyright = True
309
310# If true, an OpenSearch description file will be output, and all pages will
311# contain a <link> tag referring to it. The value of this option must be the
312# base URL from which the finished HTML is served.
313#html_use_opensearch = ''
314
315# This is the file name suffix for HTML files (e.g. ".xhtml").
316#html_file_suffix = None
317
318# Language to be used for generating the HTML full-text search index.
319# Sphinx supports the following languages:
320# 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'
321# 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr'
322#html_search_language = 'en'
323
324# A dictionary with options for the search language support, empty by default.
325# Now only 'ja' uses this config value
326#html_search_options = {'type': 'default'}
327
328# The name of a javascript file (relative to the configuration directory) that
329# implements a search results scorer. If empty, the default will be used.
330#html_search_scorer = 'scorer.js'
331
332# Output file base name for HTML help builder.
333htmlhelp_basename = 'TheLinuxKerneldoc'
334
335# -- Options for LaTeX output ---------------------------------------------
336
337latex_elements = {
338# The paper size ('letterpaper' or 'a4paper').
caee5cde 339'papersize': 'a4paper',
22cba31b
JN
340
341# The font size ('10pt', '11pt' or '12pt').
44ba0bb4 342'pointsize': '11pt',
22cba31b
JN
343
344# Latex figure (float) alignment
345#'figure_align': 'htbp',
caee5cde 346
a682ec4b
MCC
347# Don't mangle with UTF-8 chars
348'inputenc': '',
349'utf8extra': '',
350
caee5cde
MCC
351# Additional stuff for the LaTeX preamble.
352 'preamble': '''
9fdcd6af
MCC
353 % Use some font with UTF-8 support with XeLaTeX
354 \\usepackage{fontspec}
44ba0bb4
DW
355 \\setsansfont{DejaVu Sans}
356 \\setromanfont{DejaVu Serif}
9fdcd6af 357 \\setmonofont{DejaVu Sans Mono}
e0de2b59
MCC
358 '''
359}
9fdcd6af 360
e0de2b59
MCC
361# At least one book (translations) may have Asian characters
362# with are only displayed if xeCJK is used
363
364cjk_cmd = check_output(['fc-list', '--format="%{family[0]}\n"']).decode('utf-8', 'ignore')
365if cjk_cmd.find("Noto Sans CJK SC") >= 0:
366 print ("enabling CJK for LaTeX builder")
367 latex_elements['preamble'] += '''
24889dad
MCC
368 % This is needed for translations
369 \\usepackage{xeCJK}
370 \\setCJKmainfont{Noto Sans CJK SC}
9fdcd6af 371 '''
9fdcd6af
MCC
372
373# Fix reference escape troubles with Sphinx 1.4.x
374if major == 1 and minor > 3:
375 latex_elements['preamble'] += '\\renewcommand*{\\DUrole}[2]{ #2 }\n'
376
377if major == 1 and minor <= 4:
378 latex_elements['preamble'] += '\\usepackage[margin=0.5in, top=1in, bottom=1in]{geometry}'
379elif major == 1 and (minor > 5 or (minor == 5 and patch >= 3)):
380 latex_elements['sphinxsetup'] = 'hmargin=0.5in, vmargin=1in'
381 latex_elements['preamble'] += '\\fvset{fontsize=auto}\n'
382
383# Customize notice background colors on Sphinx < 1.6:
384if major == 1 and minor < 6:
385 latex_elements['preamble'] += '''
cc110221 386 \\usepackage{ifthen}
85c21e5c 387
41cff161
MCC
388 % Put notes in color and let them be inside a table
389 \\definecolor{NoteColor}{RGB}{204,255,255}
390 \\definecolor{WarningColor}{RGB}{255,204,204}
391 \\definecolor{AttentionColor}{RGB}{255,255,204}
2a054b51 392 \\definecolor{ImportantColor}{RGB}{192,255,204}
41cff161 393 \\definecolor{OtherColor}{RGB}{204,204,204}
ba1377fb 394 \\newlength{\\mynoticelength}
41cff161 395 \\makeatletter\\newenvironment{coloredbox}[1]{%
aa4e37a3
MCC
396 \\setlength{\\fboxrule}{1pt}
397 \\setlength{\\fboxsep}{7pt}
ba1377fb
MCC
398 \\setlength{\\mynoticelength}{\\linewidth}
399 \\addtolength{\\mynoticelength}{-2\\fboxsep}
400 \\addtolength{\\mynoticelength}{-2\\fboxrule}
401 \\begin{lrbox}{\\@tempboxa}\\begin{minipage}{\\mynoticelength}}{\\end{minipage}\\end{lrbox}%
41cff161
MCC
402 \\ifthenelse%
403 {\\equal{\\py@noticetype}{note}}%
404 {\\colorbox{NoteColor}{\\usebox{\\@tempboxa}}}%
405 {%
406 \\ifthenelse%
407 {\\equal{\\py@noticetype}{warning}}%
408 {\\colorbox{WarningColor}{\\usebox{\\@tempboxa}}}%
409 {%
410 \\ifthenelse%
411 {\\equal{\\py@noticetype}{attention}}%
412 {\\colorbox{AttentionColor}{\\usebox{\\@tempboxa}}}%
2a054b51
MCC
413 {%
414 \\ifthenelse%
415 {\\equal{\\py@noticetype}{important}}%
416 {\\colorbox{ImportantColor}{\\usebox{\\@tempboxa}}}%
417 {\\colorbox{OtherColor}{\\usebox{\\@tempboxa}}}%
418 }%
41cff161
MCC
419 }%
420 }%
60459774
MCC
421 }\\makeatother
422
423 \\makeatletter
41cff161 424 \\renewenvironment{notice}[2]{%
60459774 425 \\def\\py@noticetype{#1}
41cff161
MCC
426 \\begin{coloredbox}{#1}
427 \\bf\\it
60459774
MCC
428 \\par\\strong{#2}
429 \\csname py@noticestart@#1\\endcsname
430 }
431 {
432 \\csname py@noticeend@\\py@noticetype\\endcsname
41cff161 433 \\end{coloredbox}
60459774
MCC
434 }
435 \\makeatother
a682ec4b 436
caee5cde 437 '''
e2a91f4f 438
9fdcd6af
MCC
439# With Sphinx 1.6, it is possible to change the Bg color directly
440# by using:
441# \definecolor{sphinxnoteBgColor}{RGB}{204,255,255}
442# \definecolor{sphinxwarningBgColor}{RGB}{255,204,204}
443# \definecolor{sphinxattentionBgColor}{RGB}{255,255,204}
444# \definecolor{sphinximportantBgColor}{RGB}{192,255,204}
445#
446# However, it require to use sphinx heavy box with:
447#
448# \renewenvironment{sphinxlightbox} {%
449# \\begin{sphinxheavybox}
450# }
451# \\end{sphinxheavybox}
452# }
453#
454# Unfortunately, the implementation is buggy: if a note is inside a
455# table, it isn't displayed well. So, for now, let's use boring
456# black and white notes.
633d612b 457
22cba31b
JN
458# Grouping the document tree into LaTeX files. List of tuples
459# (source start file, target name, title,
460# author, documentclass [howto, manual, or own class]).
c2b563d8 461# Sorted in alphabetical order
22cba31b 462latex_documents = [
22cba31b
JN
463]
464
9d42afbe
MCC
465# Add all other index files from Documentation/ subdirectories
466for fn in os.listdir('.'):
467 doc = os.path.join(fn, "index")
468 if os.path.exists(doc + ".rst"):
469 has = False
470 for l in latex_documents:
471 if l[0] == doc:
472 has = True
473 break
474 if not has:
475 latex_documents.append((doc, fn + '.tex',
476 'Linux %s Documentation' % fn.capitalize(),
477 'The kernel development community',
478 'manual'))
479
22cba31b
JN
480# The name of an image file (relative to this directory) to place at the top of
481# the title page.
482#latex_logo = None
483
484# For "manual" documents, if this is true, then toplevel headings are parts,
485# not chapters.
486#latex_use_parts = False
487
488# If true, show page references after internal links.
489#latex_show_pagerefs = False
490
491# If true, show URL addresses after external links.
492#latex_show_urls = False
493
494# Documents to append as an appendix to all manuals.
495#latex_appendices = []
496
497# If false, no module index is generated.
498#latex_domain_indices = True
499
500
501# -- Options for manual page output ---------------------------------------
502
503# One entry per manual page. List of tuples
504# (source start file, name, description, authors, manual section).
505man_pages = [
506 (master_doc, 'thelinuxkernel', 'The Linux Kernel Documentation',
507 [author], 1)
508]
509
510# If true, show URL addresses after external links.
511#man_show_urls = False
512
513
514# -- Options for Texinfo output -------------------------------------------
515
516# Grouping the document tree into Texinfo files. List of tuples
517# (source start file, target name, title, author,
518# dir menu entry, description, category)
519texinfo_documents = [
520 (master_doc, 'TheLinuxKernel', 'The Linux Kernel Documentation',
521 author, 'TheLinuxKernel', 'One line description of project.',
522 'Miscellaneous'),
523]
524
525# Documents to append as an appendix to all manuals.
526#texinfo_appendices = []
527
528# If false, no module index is generated.
529#texinfo_domain_indices = True
530
531# How to display URL addresses: 'footnote', 'no', or 'inline'.
532#texinfo_show_urls = 'footnote'
533
534# If true, do not generate a @detailmenu in the "Top" node's menu.
535#texinfo_no_detailmenu = False
536
537
538# -- Options for Epub output ----------------------------------------------
539
540# Bibliographic Dublin Core info.
541epub_title = project
542epub_author = author
543epub_publisher = author
544epub_copyright = copyright
545
546# The basename for the epub file. It defaults to the project name.
547#epub_basename = project
548
549# The HTML theme for the epub output. Since the default themes are not
550# optimized for small screen space, using the same theme for HTML and epub
551# output is usually not wise. This defaults to 'epub', a theme designed to save
552# visual space.
553#epub_theme = 'epub'
554
555# The language of the text. It defaults to the language option
556# or 'en' if the language is not set.
557#epub_language = ''
558
559# The scheme of the identifier. Typical schemes are ISBN or URL.
560#epub_scheme = ''
561
562# The unique identifier of the text. This can be a ISBN number
563# or the project homepage.
564#epub_identifier = ''
565
566# A unique identification for the text.
567#epub_uid = ''
568
569# A tuple containing the cover image and cover page html template filenames.
570#epub_cover = ()
571
572# A sequence of (type, uri, title) tuples for the guide element of content.opf.
573#epub_guide = ()
574
575# HTML files that should be inserted before the pages created by sphinx.
576# The format is a list of tuples containing the path and title.
577#epub_pre_files = []
578
579# HTML files that should be inserted after the pages created by sphinx.
580# The format is a list of tuples containing the path and title.
581#epub_post_files = []
582
583# A list of files that should not be packed into the epub file.
584epub_exclude_files = ['search.html']
585
586# The depth of the table of contents in toc.ncx.
587#epub_tocdepth = 3
588
589# Allow duplicate toc entries.
590#epub_tocdup = True
591
592# Choose between 'default' and 'includehidden'.
593#epub_tocscope = 'default'
594
595# Fix unsupported image types using the Pillow.
596#epub_fix_images = False
597
598# Scale large images.
599#epub_max_image_width = 0
600
601# How to display URL addresses: 'footnote', 'no', or 'inline'.
602#epub_show_urls = 'inline'
603
604# If false, no index is generated.
605#epub_use_index = True
606
607#=======
608# rst2pdf
609#
610# Grouping the document tree into PDF files. List of tuples
611# (source start file, target name, title, author, options).
612#
93431e06 613# See the Sphinx chapter of https://ralsina.me/static/manual.pdf
22cba31b
JN
614#
615# FIXME: Do not add the index file here; the result will be too big. Adding
616# multiple PDF files here actually tries to get the cross-referencing right
617# *between* PDF files.
618pdf_documents = [
520a2477 619 ('kernel-documentation', u'Kernel', u'Kernel', u'J. Random Bozo'),
22cba31b 620]
24dcdeb2
JN
621
622# kernel-doc extension configuration for running Sphinx directly (e.g. by Read
623# the Docs). In a normal build, these are supplied from the Makefile via command
624# line arguments.
625kerneldoc_bin = '../scripts/kernel-doc'
626kerneldoc_srctree = '..'
606b9ac8
MH
627
628# ------------------------------------------------------------------------------
629# Since loadConfig overwrites settings from the global namespace, it has to be
630# the last statement in the conf.py file
631# ------------------------------------------------------------------------------
632loadConfig(globals())