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