From: Otto Moerbeek Date: Mon, 17 Feb 2025 11:46:47 +0000 (+0100) Subject: rec: generate html-docs using meson compile html-docs X-Git-Tag: dnsdist-2.0.0-alpha1~48^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ce5610a2453d45992a8fff22900c78c513e8a6a0;p=thirdparty%2Fpdns.git rec: generate html-docs using meson compile html-docs --- diff --git a/docs/generate-docs.py b/docs/generate-docs.py new file mode 100755 index 0000000000..f820aabee0 --- /dev/null +++ b/docs/generate-docs.py @@ -0,0 +1,105 @@ +"""Generate docs using sphinx in a venv.""" + +import argparse +import glob +import itertools +import subprocess +import sys +import venv +from pathlib import Path + + +def main(): + """Start the script.""" + args = create_argument_parser() + + source_root = args.source_root + build_root = args.build_root + + # Create the venv. + venv_directory = build_root.joinpath(args.venv_name) + venv.create( + venv_directory, + with_pip=True, + clear=True, + upgrade_deps=True, + prompt=args.venv_name, + ) + + # Install some stuff into the venv. + requirements_file = source_root.joinpath(args.requirements_file) + pip = venv_directory.joinpath("bin").joinpath("pip") + subprocess.run([pip, "install", "-U", "pip", "setuptools", "wheel"], check=True) + subprocess.run([pip, "install", "-r", requirements_file], check=True) + + # Run sphinx to generate the man-pages. + source_directory = source_root.joinpath(args.source_directory) + target_directory = build_root.joinpath(args.target_directory) + files = [glob.glob(str(source_root.joinpath(pat))) for pat in args.files] + files = list(itertools.chain.from_iterable(files)) + sphinx_build = venv_directory.joinpath("bin").joinpath("sphinx-build") + subprocess.run( + [ + sphinx_build, + "-b", + "html", + source_directory, + target_directory, + ] + + files, # default is to do all + check=True + ) + + +def create_argument_parser(): + """Create command-line argument parser.""" + parser = argparse.ArgumentParser( + description="Create a virtualenv from a requirements file" + ) + parser.add_argument( + "--build-root", + type=Path, + required=True, + help="Build root", + ) + parser.add_argument( + "--source-root", + type=Path, + required=True, + help="Source root", + ) + parser.add_argument( + "--venv-name", + type=str, + required=True, + help="Name for the virtualenv", + ) + parser.add_argument( + "--requirements-file", + type=Path, + required=True, + help="Package requirements file relative to the source root", + ) + parser.add_argument( + "--source-directory", + type=Path, + required=True, + help="Docs directory relative to the source root (contains conf.py)", + ) + parser.add_argument( + "--target-directory", + type=Path, + required=True, + help="Target directory for man-pages relative to the build root", + ) + parser.add_argument( + "files", + type=Path, + nargs="*", + help="Input files relative to the source root", + ) + return parser.parse_args() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/pdns/recursordist/docs/generate-docs.py b/pdns/recursordist/docs/generate-docs.py new file mode 120000 index 0000000000..4862bfd5bf --- /dev/null +++ b/pdns/recursordist/docs/generate-docs.py @@ -0,0 +1 @@ +../../../docs/generate-docs.py \ No newline at end of file diff --git a/pdns/recursordist/meson.build b/pdns/recursordist/meson.build index e369367bd4..38ce7c09a7 100644 --- a/pdns/recursordist/meson.build +++ b/pdns/recursordist/meson.build @@ -734,3 +734,16 @@ dep_conf_distfile = custom_target( install_dir: get_option('sysconfdir'), ) +run_target( + 'html-docs', + command: [ + python, + product_source_dir / docs_dir / 'generate-docs.py', + '--build-root', '@BUILD_ROOT@', + '--source-root', '@SOURCE_ROOT@', + '--venv-name', 'venv-docs', + '--requirements-file', docs_dir / 'requirements.txt', + '--source-directory', docs_dir, + '--target-directory', '@BUILD_ROOT@' / 'html-docs', + ] +) \ No newline at end of file