public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Martin Liska <marxin@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc(refs/users/marxin/heads/sphinx-final)] sphinx: add update_web_docs_git.py script
Date: Tue,  8 Nov 2022 10:21:49 +0000 (GMT)	[thread overview]
Message-ID: <20221108102149.6173E38582A6@sourceware.org> (raw)

https://gcc.gnu.org/g:5562f1d9e96fd4b12bedfa462c805fa1a0776504

commit 5562f1d9e96fd4b12bedfa462c805fa1a0776504
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..a02d0d1e6b0
--- /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')
+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)
+    # TODO: remove
+    os.chdir('gcc')
+    cmd = 'git fetch origin refs/users/marxin/heads/sphinx-final --depth=1'
+    subprocess.check_output(cmd, shell=True)
+    subprocess.check_output('git checkout FETCH_HEAD', shell=True)
+    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 config_folder, docname in sorted(configs):
+        print('=== BUILDING:', config_folder, 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.check_output(cmd, shell=True, env=childenv)
+        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.check_output(cmd, shell=True, env=childenv)
+        shutil.copyfile(f'{temp}/pdf/{docname}/latex/{docname}.pdf',
+                        f'{output}/{docname}.pdf')

             reply	other threads:[~2022-11-08 10:21 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-08 10:21 Martin Liska [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-11-07 21:08 Martin Liska

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221108102149.6173E38582A6@sourceware.org \
    --to=marxin@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).