369 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
		
		
			
		
	
	
			369 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
|  | #!/usr/bin/env python3 | ||
|  | # | ||
|  | # pybind11 documentation build configuration file, created by | ||
|  | # sphinx-quickstart on Sun Oct 11 19:23:48 2015. | ||
|  | # | ||
|  | # This file is execfile()d with the current directory set to its | ||
|  | # containing dir. | ||
|  | # | ||
|  | # Note that not all possible configuration values are present in this | ||
|  | # autogenerated file. | ||
|  | # | ||
|  | # All configuration values have a default; values that are commented out | ||
|  | # serve to show the default. | ||
|  | 
 | ||
|  | import os | ||
|  | import re | ||
|  | import subprocess | ||
|  | import sys | ||
|  | from pathlib import Path | ||
|  | 
 | ||
|  | DIR = Path(__file__).parent.resolve() | ||
|  | 
 | ||
|  | # If extensions (or modules to document with autodoc) are in another directory, | ||
|  | # add these directories to sys.path here. If the directory is relative to the | ||
|  | # documentation root, use os.path.abspath to make it absolute, like shown here. | ||
|  | # sys.path.insert(0, os.path.abspath('.')) | ||
|  | 
 | ||
|  | # -- General configuration ------------------------------------------------ | ||
|  | 
 | ||
|  | # If your documentation needs a minimal Sphinx version, state it here. | ||
|  | # needs_sphinx = '1.0' | ||
|  | 
 | ||
|  | # Add any Sphinx extension module names here, as strings. They can be | ||
|  | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom | ||
|  | # ones. | ||
|  | extensions = [ | ||
|  |     "breathe", | ||
|  |     "sphinx_copybutton", | ||
|  |     "sphinxcontrib.rsvgconverter", | ||
|  |     "sphinxcontrib.moderncmakedomain", | ||
|  | ] | ||
|  | 
 | ||
|  | breathe_projects = {"pybind11": ".build/doxygenxml/"} | ||
|  | breathe_default_project = "pybind11" | ||
|  | breathe_domain_by_extension = {"h": "cpp"} | ||
|  | 
 | ||
|  | # Add any paths that contain templates here, relative to this directory. | ||
|  | templates_path = [".templates"] | ||
|  | 
 | ||
|  | # The suffix(es) of source filenames. | ||
|  | # You can specify multiple suffix as a list of string: | ||
|  | # source_suffix = ['.rst', '.md'] | ||
|  | source_suffix = ".rst" | ||
|  | 
 | ||
|  | # The encoding of source files. | ||
|  | # source_encoding = 'utf-8-sig' | ||
|  | 
 | ||
|  | # The master toctree document. | ||
|  | master_doc = "index" | ||
|  | 
 | ||
|  | # General information about the project. | ||
|  | project = "pybind11" | ||
|  | copyright = "2017, Wenzel Jakob" | ||
|  | author = "Wenzel Jakob" | ||
|  | 
 | ||
|  | # The version info for the project you're documenting, acts as replacement for | ||
|  | # |version| and |release|, also used in various other places throughout the | ||
|  | # built documents. | ||
|  | 
 | ||
|  | # Read the listed version | ||
|  | with open("../pybind11/_version.py") as f: | ||
|  |     code = compile(f.read(), "../pybind11/_version.py", "exec") | ||
|  | loc = {} | ||
|  | exec(code, loc) | ||
|  | 
 | ||
|  | # The full version, including alpha/beta/rc tags. | ||
|  | version = loc["__version__"] | ||
|  | 
 | ||
|  | # The language for content autogenerated by Sphinx. Refer to documentation | ||
|  | # for a list of supported languages. | ||
|  | # | ||
|  | # This is also used if you do content translation via gettext catalogs. | ||
|  | # Usually you set "language" from the command line for these cases. | ||
|  | language = None | ||
|  | 
 | ||
|  | # There are two options for replacing |today|: either, you set today to some | ||
|  | # non-false value, then it is used: | ||
|  | # today = '' | ||
|  | # Else, today_fmt is used as the format for a strftime call. | ||
|  | # today_fmt = '%B %d, %Y' | ||
|  | 
 | ||
|  | # List of patterns, relative to source directory, that match files and | ||
|  | # directories to ignore when looking for source files. | ||
|  | exclude_patterns = [".build", "release.rst"] | ||
|  | 
 | ||
|  | # The reST default role (used for this markup: `text`) to use for all | ||
|  | # documents. | ||
|  | default_role = "any" | ||
|  | 
 | ||
|  | # If true, '()' will be appended to :func: etc. cross-reference text. | ||
|  | # add_function_parentheses = True | ||
|  | 
 | ||
|  | # If true, the current module name will be prepended to all description | ||
|  | # unit titles (such as .. function::). | ||
|  | # add_module_names = True | ||
|  | 
 | ||
|  | # If true, sectionauthor and moduleauthor directives will be shown in the | ||
|  | # output. They are ignored by default. | ||
|  | # show_authors = False | ||
|  | 
 | ||
|  | # The name of the Pygments (syntax highlighting) style to use. | ||
|  | # pygments_style = 'monokai' | ||
|  | 
 | ||
|  | # A list of ignored prefixes for module index sorting. | ||
|  | # modindex_common_prefix = [] | ||
|  | 
 | ||
|  | # If true, keep warnings as "system message" paragraphs in the built documents. | ||
|  | # keep_warnings = False | ||
|  | 
 | ||
|  | # If true, `todo` and `todoList` produce output, else they produce nothing. | ||
|  | todo_include_todos = False | ||
|  | 
 | ||
|  | 
 | ||
|  | # -- Options for HTML output ---------------------------------------------- | ||
|  | 
 | ||
|  | # The theme to use for HTML and HTML Help pages.  See the documentation for | ||
|  | # a list of builtin themes. | ||
|  | 
 | ||
|  | html_theme = "furo" | ||
|  | 
 | ||
|  | # Theme options are theme-specific and customize the look and feel of a theme | ||
|  | # further.  For a list of options available for each theme, see the | ||
|  | # documentation. | ||
|  | # html_theme_options = {} | ||
|  | 
 | ||
|  | # Add any paths that contain custom themes here, relative to this directory. | ||
|  | # html_theme_path = [] | ||
|  | 
 | ||
|  | # The name for this set of Sphinx documents.  If None, it defaults to | ||
|  | # "<project> v<version> documentation". | ||
|  | # html_title = None | ||
|  | 
 | ||
|  | # A shorter title for the navigation bar.  Default is the same as html_title. | ||
|  | # html_short_title = None | ||
|  | 
 | ||
|  | # The name of an image file (relative to this directory) to place at the top | ||
|  | # of the sidebar. | ||
|  | # html_logo = None | ||
|  | 
 | ||
|  | # The name of an image file (within the static path) to use as favicon of the | ||
|  | # docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32 | ||
|  | # pixels large. | ||
|  | # html_favicon = None | ||
|  | 
 | ||
|  | # Add any paths that contain custom static files (such as style sheets) here, | ||
|  | # relative to this directory. They are copied after the builtin static files, | ||
|  | # so a file named "default.css" will overwrite the builtin "default.css". | ||
|  | html_static_path = ["_static"] | ||
|  | 
 | ||
|  | html_css_files = [ | ||
|  |     "css/custom.css", | ||
|  | ] | ||
|  | 
 | ||
|  | # Add any extra paths that contain custom files (such as robots.txt or | ||
|  | # .htaccess) here, relative to this directory. These files are copied | ||
|  | # directly to the root of the documentation. | ||
|  | # html_extra_path = [] | ||
|  | 
 | ||
|  | # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, | ||
|  | # using the given strftime format. | ||
|  | # html_last_updated_fmt = '%b %d, %Y' | ||
|  | 
 | ||
|  | # If true, SmartyPants will be used to convert quotes and dashes to | ||
|  | # typographically correct entities. | ||
|  | # html_use_smartypants = True | ||
|  | 
 | ||
|  | # Custom sidebar templates, maps document names to template names. | ||
|  | # html_sidebars = {} | ||
|  | 
 | ||
|  | # Additional templates that should be rendered to pages, maps page names to | ||
|  | # template names. | ||
|  | # html_additional_pages = {} | ||
|  | 
 | ||
|  | # If false, no module index is generated. | ||
|  | # html_domain_indices = True | ||
|  | 
 | ||
|  | # If false, no index is generated. | ||
|  | # html_use_index = True | ||
|  | 
 | ||
|  | # If true, the index is split into individual pages for each letter. | ||
|  | # html_split_index = False | ||
|  | 
 | ||
|  | # If true, links to the reST sources are added to the pages. | ||
|  | # html_show_sourcelink = True | ||
|  | 
 | ||
|  | # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. | ||
|  | # html_show_sphinx = True | ||
|  | 
 | ||
|  | # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. | ||
|  | # html_show_copyright = True | ||
|  | 
 | ||
|  | # If true, an OpenSearch description file will be output, and all pages will | ||
|  | # contain a <link> tag referring to it.  The value of this option must be the | ||
|  | # base URL from which the finished HTML is served. | ||
|  | # html_use_opensearch = '' | ||
|  | 
 | ||
|  | # This is the file name suffix for HTML files (e.g. ".xhtml"). | ||
|  | # html_file_suffix = None | ||
|  | 
 | ||
|  | # Language to be used for generating the HTML full-text search index. | ||
|  | # Sphinx supports the following languages: | ||
|  | #   'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja' | ||
|  | #   'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr' | ||
|  | # html_search_language = 'en' | ||
|  | 
 | ||
|  | # A dictionary with options for the search language support, empty by default. | ||
|  | # Now only 'ja' uses this config value | ||
|  | # html_search_options = {'type': 'default'} | ||
|  | 
 | ||
|  | # The name of a javascript file (relative to the configuration directory) that | ||
|  | # implements a search results scorer. If empty, the default will be used. | ||
|  | # html_search_scorer = 'scorer.js' | ||
|  | 
 | ||
|  | # Output file base name for HTML help builder. | ||
|  | htmlhelp_basename = "pybind11doc" | ||
|  | 
 | ||
|  | # -- Options for LaTeX output --------------------------------------------- | ||
|  | 
 | ||
|  | latex_engine = "pdflatex" | ||
|  | 
 | ||
|  | latex_elements = { | ||
|  |     # The paper size ('letterpaper' or 'a4paper'). | ||
|  |     # 'papersize': 'letterpaper', | ||
|  |     # | ||
|  |     # The font size ('10pt', '11pt' or '12pt'). | ||
|  |     # 'pointsize': '10pt', | ||
|  |     # | ||
|  |     # Additional stuff for the LaTeX preamble. | ||
|  |     # remove blank pages (between the title page and the TOC, etc.) | ||
|  |     "classoptions": ",openany,oneside", | ||
|  |     "preamble": r"""
 | ||
|  | \usepackage{fontawesome} | ||
|  | \usepackage{textgreek} | ||
|  | \DeclareUnicodeCharacter{00A0}{} | ||
|  | \DeclareUnicodeCharacter{2194}{\faArrowsH} | ||
|  | \DeclareUnicodeCharacter{1F382}{\faBirthdayCake} | ||
|  | \DeclareUnicodeCharacter{1F355}{\faAdjust} | ||
|  | \DeclareUnicodeCharacter{0301}{'} | ||
|  | \DeclareUnicodeCharacter{03C0}{\textpi} | ||
|  | 
 | ||
|  | """,
 | ||
|  |     # Latex figure (float) alignment | ||
|  |     # 'figure_align': 'htbp', | ||
|  | } | ||
|  | 
 | ||
|  | # Grouping the document tree into LaTeX files. List of tuples | ||
|  | # (source start file, target name, title, | ||
|  | #  author, documentclass [howto, manual, or own class]). | ||
|  | latex_documents = [ | ||
|  |     (master_doc, "pybind11.tex", "pybind11 Documentation", "Wenzel Jakob", "manual"), | ||
|  | ] | ||
|  | 
 | ||
|  | # The name of an image file (relative to this directory) to place at the top of | ||
|  | # the title page. | ||
|  | # latex_logo = 'pybind11-logo.png' | ||
|  | 
 | ||
|  | # For "manual" documents, if this is true, then toplevel headings are parts, | ||
|  | # not chapters. | ||
|  | # latex_use_parts = False | ||
|  | 
 | ||
|  | # If true, show page references after internal links. | ||
|  | # latex_show_pagerefs = False | ||
|  | 
 | ||
|  | # If true, show URL addresses after external links. | ||
|  | # latex_show_urls = False | ||
|  | 
 | ||
|  | # Documents to append as an appendix to all manuals. | ||
|  | # latex_appendices = [] | ||
|  | 
 | ||
|  | # If false, no module index is generated. | ||
|  | # latex_domain_indices = True | ||
|  | 
 | ||
|  | 
 | ||
|  | # -- Options for manual page output --------------------------------------- | ||
|  | 
 | ||
|  | # One entry per manual page. List of tuples | ||
|  | # (source start file, name, description, authors, manual section). | ||
|  | man_pages = [(master_doc, "pybind11", "pybind11 Documentation", [author], 1)] | ||
|  | 
 | ||
|  | # If true, show URL addresses after external links. | ||
|  | # man_show_urls = False | ||
|  | 
 | ||
|  | 
 | ||
|  | # -- Options for Texinfo output ------------------------------------------- | ||
|  | 
 | ||
|  | # Grouping the document tree into Texinfo files. List of tuples | ||
|  | # (source start file, target name, title, author, | ||
|  | #  dir menu entry, description, category) | ||
|  | texinfo_documents = [ | ||
|  |     ( | ||
|  |         master_doc, | ||
|  |         "pybind11", | ||
|  |         "pybind11 Documentation", | ||
|  |         author, | ||
|  |         "pybind11", | ||
|  |         "One line description of project.", | ||
|  |         "Miscellaneous", | ||
|  |     ), | ||
|  | ] | ||
|  | 
 | ||
|  | # Documents to append as an appendix to all manuals. | ||
|  | # texinfo_appendices = [] | ||
|  | 
 | ||
|  | # If false, no module index is generated. | ||
|  | # texinfo_domain_indices = True | ||
|  | 
 | ||
|  | # How to display URL addresses: 'footnote', 'no', or 'inline'. | ||
|  | # texinfo_show_urls = 'footnote' | ||
|  | 
 | ||
|  | # If true, do not generate a @detailmenu in the "Top" node's menu. | ||
|  | # texinfo_no_detailmenu = False | ||
|  | 
 | ||
|  | primary_domain = "cpp" | ||
|  | highlight_language = "cpp" | ||
|  | 
 | ||
|  | 
 | ||
|  | def generate_doxygen_xml(app): | ||
|  |     build_dir = os.path.join(app.confdir, ".build") | ||
|  |     if not os.path.exists(build_dir): | ||
|  |         os.mkdir(build_dir) | ||
|  | 
 | ||
|  |     try: | ||
|  |         subprocess.call(["doxygen", "--version"]) | ||
|  |         retcode = subprocess.call(["doxygen"], cwd=app.confdir) | ||
|  |         if retcode < 0: | ||
|  |             sys.stderr.write(f"doxygen error code: {-retcode}\n") | ||
|  |     except OSError as e: | ||
|  |         sys.stderr.write(f"doxygen execution failed: {e}\n") | ||
|  | 
 | ||
|  | 
 | ||
|  | def prepare(app): | ||
|  |     with open(DIR.parent / "README.rst") as f: | ||
|  |         contents = f.read() | ||
|  | 
 | ||
|  |     if app.builder.name == "latex": | ||
|  |         # Remove badges and stuff from start | ||
|  |         contents = contents[contents.find(r".. start") :] | ||
|  | 
 | ||
|  |         # Filter out section titles for index.rst for LaTeX | ||
|  |         contents = re.sub(r"^(.*)\n[-~]{3,}$", r"**\1**", contents, flags=re.MULTILINE) | ||
|  | 
 | ||
|  |     with open(DIR / "readme.rst", "w") as f: | ||
|  |         f.write(contents) | ||
|  | 
 | ||
|  | 
 | ||
|  | def clean_up(app, exception):  # noqa: ARG001 | ||
|  |     (DIR / "readme.rst").unlink() | ||
|  | 
 | ||
|  | 
 | ||
|  | def setup(app): | ||
|  |     # Add hook for building doxygen xml when needed | ||
|  |     app.connect("builder-inited", generate_doxygen_xml) | ||
|  | 
 | ||
|  |     # Copy the readme in | ||
|  |     app.connect("builder-inited", prepare) | ||
|  | 
 | ||
|  |     # Clean up the generated readme | ||
|  |     app.connect("build-finished", clean_up) |