210 lines
5.7 KiB
Python
210 lines
5.7 KiB
Python
# Zephyr documentation build configuration file.
|
|
# Reference: https://www.sphinx-doc.org/en/master/usage/configuration.html
|
|
|
|
import sys
|
|
import os
|
|
from pathlib import Path
|
|
import re
|
|
|
|
from sphinx.highlighting import lexers
|
|
import sphinx_rtd_theme
|
|
|
|
|
|
ZEPHYR_BASE = os.environ.get("ZEPHYR_BASE")
|
|
if not ZEPHYR_BASE:
|
|
raise ValueError("ZEPHYR_BASE environment variable undefined")
|
|
ZEPHYR_BASE = Path(ZEPHYR_BASE)
|
|
|
|
ZEPHYR_BUILD = os.environ.get("ZEPHYR_BUILD")
|
|
if not ZEPHYR_BUILD:
|
|
raise ValueError("ZEPHYR_BUILD environment variable undefined")
|
|
ZEPHYR_BUILD = Path(ZEPHYR_BUILD)
|
|
|
|
# Add the '_extensions' directory to sys.path, to enable finding Sphinx
|
|
# extensions within.
|
|
sys.path.insert(0, str(ZEPHYR_BASE / "doc" / "_extensions"))
|
|
|
|
# Add the '_scripts' directory to sys.path, to enable finding utility
|
|
# modules.
|
|
sys.path.insert(0, str(ZEPHYR_BASE / "doc" / "_scripts"))
|
|
|
|
# Add the directory which contains the runners package as well,
|
|
# for autodoc directives on runners.xyz.
|
|
sys.path.insert(0, str(ZEPHYR_BASE / "scripts" / "west_commands"))
|
|
|
|
from lexer.DtsLexer import DtsLexer
|
|
import redirects
|
|
|
|
try:
|
|
import west as west_found
|
|
except ImportError:
|
|
west_found = False
|
|
|
|
# -- Project --------------------------------------------------------------
|
|
|
|
project = "Zephyr Project"
|
|
copyright = "2015-2021 Zephyr Project members and individual contributors"
|
|
author = "The Zephyr Project"
|
|
|
|
# parse version from 'VERSION' file
|
|
with open(ZEPHYR_BASE / "VERSION") as f:
|
|
m = re.match(
|
|
(
|
|
r"^VERSION_MAJOR\s*=\s*(\d+)$\n"
|
|
+ r"^VERSION_MINOR\s*=\s*(\d+)$\n"
|
|
+ r"^PATCHLEVEL\s*=\s*(\d+)$\n"
|
|
+ r"^VERSION_TWEAK\s*=\s*\d+$\n"
|
|
+ r"^EXTRAVERSION\s*=\s*(.*)$"
|
|
),
|
|
f.read(),
|
|
re.MULTILINE,
|
|
)
|
|
|
|
if not m:
|
|
sys.stderr.write("Warning: Could not extract kernel version\n")
|
|
version = "Unknown"
|
|
else:
|
|
major, minor, patch, extra = m.groups(1)
|
|
version = ".".join((major, minor, patch))
|
|
if extra:
|
|
version += "-" + extra
|
|
|
|
# -- General configuration ------------------------------------------------
|
|
|
|
extensions = [
|
|
"breathe",
|
|
"sphinx.ext.todo",
|
|
"sphinx.ext.extlinks",
|
|
"sphinx.ext.autodoc",
|
|
"zephyr.application",
|
|
"zephyr.html_redirects",
|
|
"only.eager_only",
|
|
"zephyr.dtcompatible-role",
|
|
"zephyr.link-roles",
|
|
"sphinx_tabs.tabs",
|
|
]
|
|
|
|
# Only use SVG converter when it is really needed, e.g. LaTeX.
|
|
if tags.has("svgconvert"): # pylint: disable=undefined-variable
|
|
extensions.append("sphinxcontrib.rsvgconverter")
|
|
|
|
templates_path = ["_templates"]
|
|
|
|
exclude_patterns = ["_build"]
|
|
|
|
if not west_found:
|
|
exclude_patterns.append("**/*west-apis*")
|
|
else:
|
|
exclude_patterns.append("**/*west-not-found*")
|
|
|
|
# This change will allow us to use bare back-tick notation to let
|
|
# Sphinx hunt for a reference, starting with normal "document"
|
|
# references such as :ref:, but also including :c: and :cpp: domains
|
|
# (potentially) helping with API (doxygen) references simply by using
|
|
# `name`
|
|
default_role = "any"
|
|
|
|
pygments_style = "sphinx"
|
|
|
|
lexers["DTS"] = DtsLexer()
|
|
|
|
todo_include_todos = False
|
|
|
|
rst_epilog = """
|
|
.. include:: /substitutions.txt
|
|
"""
|
|
|
|
# -- Options for HTML output ----------------------------------------------
|
|
|
|
html_theme = "sphinx_rtd_theme"
|
|
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
|
html_theme_options = {"prev_next_buttons_location": None}
|
|
html_title = "Zephyr Project Documentation"
|
|
html_logo = "images/Zephyr-Kite-logo.png"
|
|
html_favicon = "images/zp_favicon.png"
|
|
html_static_path = [str(ZEPHYR_BASE / "doc" / "_static")]
|
|
html_last_updated_fmt = "%b %d, %Y"
|
|
html_domain_indices = False
|
|
html_split_index = True
|
|
html_show_sourcelink = False
|
|
html_show_sphinx = False
|
|
html_search_scorer = "_static/js/scorer.js"
|
|
|
|
is_release = tags.has("release") # pylint: disable=undefined-variable
|
|
docs_title = "Docs / {}".format(version if is_release else "Latest")
|
|
html_context = {
|
|
"show_license": True,
|
|
"docs_title": docs_title,
|
|
"is_release": is_release,
|
|
"theme_logo_only": False,
|
|
"current_version": version,
|
|
"versions": (
|
|
("latest", "/"),
|
|
("2.5.0", "/2.5.0/"),
|
|
("2.4.0", "/2.4.0/"),
|
|
("2.3.0", "/2.3.0/"),
|
|
("2.2.0", "/2.2.0/"),
|
|
("1.14.1", "/1.14.1/"),
|
|
),
|
|
}
|
|
|
|
# -- Options for LaTeX output ---------------------------------------------
|
|
|
|
latex_elements = {
|
|
"preamble": r"\setcounter{tocdepth}{2}",
|
|
}
|
|
|
|
latex_documents = [
|
|
("index", "zephyr.tex", "Zephyr Project Documentation", "many", "manual"),
|
|
]
|
|
|
|
# -- Options for Breathe plugin -------------------------------------------
|
|
|
|
breathe_projects = {
|
|
"Zephyr": str(ZEPHYR_BUILD / "doxygen" / "xml"),
|
|
"doc-examples": str(ZEPHYR_BUILD / "doxygen" / "xml"),
|
|
}
|
|
breathe_default_project = "Zephyr"
|
|
breathe_domain_by_extension = {
|
|
"h": "c",
|
|
"c": "c",
|
|
}
|
|
breathe_separate_member_pages = True
|
|
breathe_show_enumvalue_initializer = True
|
|
|
|
cpp_id_attributes = [
|
|
"__syscall",
|
|
"__deprecated",
|
|
"__may_alias",
|
|
"__used",
|
|
"__unused",
|
|
"__weak",
|
|
"__DEPRECATED_MACRO",
|
|
"FUNC_NORETURN",
|
|
"__subsystem",
|
|
]
|
|
c_id_attributes = cpp_id_attributes
|
|
|
|
# -- Options for html_redirect plugin -------------------------------------
|
|
|
|
html_redirect_pages = redirects.REDIRECTS
|
|
|
|
# -- Linkcheck options ----------------------------------------------------
|
|
|
|
extlinks = {
|
|
"jira": ("https://jira.zephyrproject.org/browse/%s", ""),
|
|
"github": ("https://github.com/zephyrproject-rtos/zephyr/issues/%s", ""),
|
|
}
|
|
|
|
linkcheck_timeout = 30
|
|
linkcheck_workers = 10
|
|
linkcheck_anchors = False
|
|
|
|
|
|
def setup(app):
|
|
app.add_css_file("css/zephyr-custom.css")
|
|
app.add_js_file("js/zephyr-custom.js")
|
|
|
|
app.add_js_file("https://www.googletagmanager.com/gtag/js?id=UA-831873-47")
|
|
app.add_js_file("js/ga-tracker.js")
|