# 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")