diff options
author | Martin Liska <mliska@suse.cz> | 2022-11-07 22:07:47 +0100 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2022-11-09 09:33:17 +0100 |
commit | 6373b1fdf75ea0908dfaebdbfc54d8b55b08d409 (patch) | |
tree | 16a52b18629098654dd5d595397b32c32dbc3736 | |
parent | e5821d3f62b5bf532db1be661459b7553a956fa2 (diff) | |
download | gcc-6373b1fdf75ea0908dfaebdbfc54d8b55b08d409.zip gcc-6373b1fdf75ea0908dfaebdbfc54d8b55b08d409.tar.gz gcc-6373b1fdf75ea0908dfaebdbfc54d8b55b08d409.tar.bz2 |
sphinx: add update_web_docs_git.py script
maintainer-scripts/ChangeLog:
* update_web_docs_git.py: New file.
-rwxr-xr-x | maintainer-scripts/update_web_docs_git.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/maintainer-scripts/update_web_docs_git.py b/maintainer-scripts/update_web_docs_git.py new file mode 100755 index 0000000..f3f5995 --- /dev/null +++ b/maintainer-scripts/update_web_docs_git.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 + +# Generate documentation from Sphinx files. + +import argparse +import os +import shutil +import subprocess +import tempfile +from pathlib import Path + +GITROOT = '/git/gcc.git' +BUGURL = 'https://gcc.gnu.org/bugs/' + +parser = argparse.ArgumentParser(description='Update web documentation.') +parser.add_argument('output_folder', help='Output folder') +parser.add_argument('--gitrepo', help=f'Git repository (default: {GITROOT})', + default=GITROOT) +parser.add_argument('--sphinx-build', help='Path to sphinx-build binary') +parser.add_argument('-v', '--verbose', action='store_true', + help='Verbose output') +args = parser.parse_args() + + +def find_configs(): + for root, _, files in os.walk('.'): + for f in files: + full = os.path.join(root, f) + if f == 'conf.py': + # find name of the documentation + lines = open(full).read().splitlines() + docname = None + for line in lines: + if line.startswith('name = '): + docname = line.split()[-1].strip("'") + break + assert docname + yield (Path(root).resolve(), docname) + + +with tempfile.TemporaryDirectory() as folder: + print(f'Using {folder} as temporary directory') + os.chdir(folder) + subprocess.check_output(f'git clone {args.gitrepo} --depth=1', shell=True) + os.chdir('gcc') + configs = list(find_configs()) + + # Prepare folders + output = Path(args.output_folder) + if not output.exists(): + output.mkdir() + + temp = Path('tmp').resolve() + temp.mkdir() + + # Prepare default env. variables + childenv = os.environ.copy() + childenv['BUGURL'] = BUGURL + + # Build and copy the documentation + for i, (config_folder, docname) in enumerate(sorted(configs)): + print(f'=== building {i + 1}/{len(configs)}: {docname} ===') + + # Build HTML + cmd = f'make -C doc html SOURCEDIR={config_folder} BUILDDIR={temp}/{docname}' + if args.sphinx_build: + cmd += f' SPHINXBUILD={args.sphinx_build}' + subprocess.run(cmd, shell=True, env=childenv, check=True, + capture_output=not args.verbose) + os.unlink(f'{temp}/{docname}/html/.buildinfo') + shutil.copytree(f'{temp}/{docname}/html', f'{output}/{docname}', + dirs_exist_ok=True) + + # Build PDF + cmd = f'make -C doc latexpdf SOURCEDIR={config_folder} BUILDDIR={temp}/pdf/{docname}' + if args.sphinx_build: + cmd += f' SPHINXBUILD={args.sphinx_build}' + subprocess.run(cmd, shell=True, env=childenv, check=True, + capture_output=not args.verbose) + shutil.copyfile(f'{temp}/pdf/{docname}/latex/{docname}.pdf', + f'{output}/{docname}.pdf') |