[packages/cyrus-imapd] fix docs generation with sphinx2

atler atler at pld-linux.org
Thu Jul 2 11:13:02 CEST 2020


commit 448261a803a14b25b020df9b4a9da0ddb834e303
Author: Jan Palus <atler at pld-linux.org>
Date:   Thu Jul 2 11:12:10 2020 +0200

    fix docs generation with sphinx2

 cyrus-imapd-sphinx2.patch | 170 ++++++++++++++++++++++++++++++++++++++++++++++
 cyrus-imapd.spec          |   2 +
 2 files changed, 172 insertions(+)
---
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index c9c8347..ccc4fd0 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -41,6 +41,7 @@ Patch2:		%{name}-clamav-0.101.patch
 Patch3:		%{name}-icu.patch
 Patch4:		%{name}-libcap.patch
 Patch5:		%{name}-gcc10.patch
+Patch6:		%{name}-sphinx2.patch
 URL:		http://www.cyrusimap.org/
 BuildRequires:	autoconf >= 2.63
 BuildRequires:	automake
@@ -209,6 +210,7 @@ Perlowy interfejs do biblioteki cyrus-imapd.
 %patch3 -p1
 %patch4 -p1
 %patch5 -p1
+%patch6 -p1
 
 cp -p %{SOURCE1} %{SOURCE2} %{SOURCE4} %{SOURCE5} .
 
diff --git a/cyrus-imapd-sphinx2.patch b/cyrus-imapd-sphinx2.patch
new file mode 100644
index 0000000..9b8ebc9
--- /dev/null
+++ b/cyrus-imapd-sphinx2.patch
@@ -0,0 +1,170 @@
+From a5fce9f3b5bddb166e9be71d9a0120a012d632b7 Mon Sep 17 00:00:00 2001
+From: Jakob Gahde <j5lx at fmail.co.uk>
+Date: Tue, 10 Sep 2019 16:51:32 +0200
+Subject: [PATCH] Add compatibility for Sphinx 2 (fixes #2732)
+
+This allows the documentation to be generated using version 2 of Sphinx.
+Nearly all of the changes are directly based on changes in upstream Sphinx,
+however they have been adapted to also keep compatibility with version 1.3.2
+(which is the minimum version required by the current configuration).
+---
+ docsrc/conf.py                              |  6 +++---
+ docsrc/exts/sphinxlocal/builders/manpage.py | 19 ++++++++++++++-----
+ docsrc/exts/sphinxlocal/roles/cyrusman.py   | 11 ++++++++++-
+ docsrc/exts/sphinxlocal/writers/manpage.py  | 11 ++++++++---
+ 4 files changed, 35 insertions(+), 12 deletions(-)
+
+diff --git a/docsrc/conf.py b/docsrc/conf.py
+index c241cff77..ecb83768e 100644
+--- a/docsrc/conf.py
++++ b/docsrc/conf.py
+@@ -301,7 +301,7 @@
+ for tuple in pathset:
+     os.chdir(tuple[0])
+     for rstfile in glob.glob("*.rst"):
+-        author = [("The Cyrus Team")]
++        authors = [("The Cyrus Team")]
+         orphan = 'False';
+         with io.open(rstfile,'r',encoding="utf8") as f:
+             for line in f:
+@@ -309,14 +309,14 @@
+                     orphan = 'True';
+                     break;
+                 if line.startswith('.. author: '):
+-                    author.append(line[11: len(line.strip())])
++                    authors.append(line[11: len(line.strip())])
+             f.close()
+         if orphan == 'False':
+             man_pages.append(
+                 (os.path.splitext(os.path.join(tuple[0],rstfile))[0],
+                 os.path.splitext(rstfile)[0],
+                 u'Cyrus IMAP documentation',
+-                author,
++                authors,
+                 tuple[1])
+                 )
+ 
+diff --git a/docsrc/exts/sphinxlocal/builders/manpage.py b/docsrc/exts/sphinxlocal/builders/manpage.py
+index a6281f799..856530b62 100644
+--- a/docsrc/exts/sphinxlocal/builders/manpage.py
++++ b/docsrc/exts/sphinxlocal/builders/manpage.py
+@@ -32,6 +32,12 @@
+ # Translater in it.
+ from sphinxlocal.writers.manpage import CyrusManualPageWriter
+ 
++try:
++    from sphinx.util import logging
++    logger = logging.getLogger(__name__)
++except:
++    logger = None
++
+ class CyrusManualPageBuilder(ManualPageBuilder):
+     """
+     Builds groff output in manual page format.
+@@ -44,8 +50,11 @@ class CyrusManualPageBuilder(ManualPageBuilder):
+     #settings_defaults = {}
+ 
+     def init(self):
++        global logger
++        if logger is None:
++            logger = self
+         if not self.config.man_pages:
+-            self.warn('no "man_pages" config value found; no manual pages '
++            logger.warn('no "man_pages" config value found; no manual pages '
+                       'will be written')
+ 
+     def write(self, *ignored):
+@@ -56,7 +65,7 @@ def write(self, *ignored):
+             components=(docwriter,),
+             read_config_files=True).get_default_values()
+ 
+-        self.info(bold('writing... '), nonl=True)
++        logger.info(bold('writing... '), nonl=True)
+ 
+         for info in self.config.man_pages:
+             docname, name, description, authors, section = info
+@@ -67,7 +76,7 @@ def write(self, *ignored):
+                     authors = []
+ 
+             targetname = '%s.%s' % (name, section)
+-            self.info(darkgreen(targetname) + ' { ', nonl=True)
++            logger.info(darkgreen(targetname) + ' { ', nonl=True)
+             destination = FileOutput(
+                 destination_path=path.join(self.outdir, targetname),
+                 encoding='utf-8')
+@@ -76,7 +85,7 @@ def write(self, *ignored):
+             docnames = set()
+             largetree = inline_all_toctrees(self, docnames, docname, tree,
+                                             darkgreen, [docname])
+-            self.info('} ', nonl=True)
++            logger.info('} ', nonl=True)
+             self.env.resolve_references(largetree, docname, self)
+             # remove pending_xref nodes
+             for pendingnode in largetree.traverse(addnodes.pending_xref):
+@@ -89,7 +98,7 @@ def write(self, *ignored):
+             largetree.settings.section = section
+ 
+             docwriter.write(largetree, destination)
+-        self.info()
++        logger.info('')
+ 
+ def setup(app):
+     app.add_builder(CyrusManualPageBuilder)
+diff --git a/docsrc/exts/sphinxlocal/roles/cyrusman.py b/docsrc/exts/sphinxlocal/roles/cyrusman.py
+index 5d7eb6c65..6f2e94a8e 100644
+--- a/docsrc/exts/sphinxlocal/roles/cyrusman.py
++++ b/docsrc/exts/sphinxlocal/roles/cyrusman.py
+@@ -17,8 +17,17 @@
+ from string import Template
+ import re
+ 
++try:
++    from sphinx.util import logging
++    logger = logging.getLogger(__name__)
++except:
++    logger = None
++
+ def setup(app):
+-    app.info('Initializing cyrusman plugin')
++    global logger
++    if logger is None:
++        logger = app
++    logger.info('Initializing cyrusman plugin')
+     app.add_crossref_type('cyrusman', 'cyrusman', '%s', nodes.generated)
+     return
+ 
+diff --git a/docsrc/exts/sphinxlocal/writers/manpage.py b/docsrc/exts/sphinxlocal/writers/manpage.py
+index 13864e0d9..c5dfdfbeb 100644
+--- a/docsrc/exts/sphinxlocal/writers/manpage.py
++++ b/docsrc/exts/sphinxlocal/writers/manpage.py
+@@ -12,13 +12,17 @@
+     :license: BSD, see LICENSE for details.
+ """
+ 
++import docutils
+ from docutils import nodes
+ from sphinx.writers.manpage import (
+-    MACRO_DEF,
+     ManualPageWriter,
+     ManualPageTranslator as BaseTranslator
+ )
+ 
++docutils_version_info = tuple(map(int, docutils.__version__.split('.')))
++if docutils_version_info < (0, 11):
++  from sphinx.writers.manpage import MACRO_DEF
++
+ 
+ from sphinx import addnodes
+ from sphinx.locale import admonitionlabels, _
+@@ -73,8 +77,9 @@ def __init__(self, builder, *args, **kwds):
+         self._docinfo['version'] = builder.config.version
+         self._docinfo['manual_group'] = builder.config.project
+ 
+-        # since self.append_header() is never called, need to do this here
+-        self.body.append(MACRO_DEF)
++        # In docutils < 0.11 self.append_header() was never called
++        if docutils_version_info < (0, 11):
++          self.body.append(MACRO_DEF)
+ 
+         # overwritten -- don't wrap literal_block with font calls
+         self.defs['literal_block'] = ('.sp\n.nf\n', '\n.fi\n')
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/cyrus-imapd.git/commitdiff/1e80cade6a65537af5124c4d04d3b6bfb9faf389



More information about the pld-cvs-commit mailing list