| #!/usr/bin/env python3 |
| """Build the TinyUSB Sphinx documentation locally. |
| |
| Thin wrapper around `sphinx-build` so a manual doc build is one command. |
| `conf.py` auto-collects example READMEs, so no extra steps are needed. |
| |
| python3 tools/build_doc.py # build docs/_build/ |
| python3 tools/build_doc.py -c -W -o # clean, fail on warnings, open result |
| """ |
| import argparse |
| import shutil |
| import subprocess |
| import sys |
| import webbrowser |
| from pathlib import Path |
| |
| TOP = Path(__file__).parent.parent.resolve() |
| DOCS = TOP / "docs" |
| BUILD = DOCS / "_build" |
| |
| |
| def main(): |
| p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) |
| p.add_argument("-c", "--clean", action="store_true", help="remove docs/_build first") |
| p.add_argument("-W", "--strict", action="store_true", help="treat warnings as errors") |
| p.add_argument("-o", "--open", action="store_true", help="open the built docs in a browser") |
| args = p.parse_args() |
| |
| if args.clean and BUILD.exists(): |
| shutil.rmtree(BUILD) |
| |
| cmd = ["sphinx-build", "-b", "html"] |
| if args.strict: |
| cmd.append("-W") |
| cmd += [str(DOCS), str(BUILD)] |
| |
| print("+", " ".join(cmd)) |
| rc = subprocess.call(cmd) |
| if rc != 0: |
| return rc |
| |
| index = BUILD / "index.html" |
| print(f"\nDocs built: {index}") |
| if args.open: |
| webbrowser.open(index.as_uri()) |
| return 0 |
| |
| |
| if __name__ == "__main__": |
| sys.exit(main()) |