aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2022-11-07 22:07:47 +0100
committerMartin Liska <mliska@suse.cz>2022-11-09 09:33:17 +0100
commit6373b1fdf75ea0908dfaebdbfc54d8b55b08d409 (patch)
tree16a52b18629098654dd5d595397b32c32dbc3736
parente5821d3f62b5bf532db1be661459b7553a956fa2 (diff)
downloadgcc-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-xmaintainer-scripts/update_web_docs_git.py81
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')