public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-3841] sphinx: add update_web_docs_git.py script
@ 2022-11-09  8:34 Martin Liska
  0 siblings, 0 replies; only message in thread
From: Martin Liska @ 2022-11-09  8:34 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:6373b1fdf75ea0908dfaebdbfc54d8b55b08d409

commit r13-3841-g6373b1fdf75ea0908dfaebdbfc54d8b55b08d409
Author: Martin Liska <mliska@suse.cz>
Date:   Mon Nov 7 22:07:47 2022 +0100

    sphinx: add update_web_docs_git.py script
    
    maintainer-scripts/ChangeLog:
    
            * update_web_docs_git.py: New file.

Diff:
---
 maintainer-scripts/update_web_docs_git.py | 81 +++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)

diff --git a/maintainer-scripts/update_web_docs_git.py b/maintainer-scripts/update_web_docs_git.py
new file mode 100755
index 00000000000..f3f59953ac0
--- /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')

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-11-09  8:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-09  8:34 [gcc r13-3841] sphinx: add update_web_docs_git.py script Martin Liska

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).