1 From 096ea522e84ea68f8e6c41e5e7294731a81e29bc Mon Sep 17 00:00:00 2001
2 From: Jonathan Corbet <corbet@lwn.net>
3 Date: Tue, 21 May 2019 14:23:43 -0600
4 Subject: doc: Cope with Sphinx logging deprecations
6 From: Jonathan Corbet <corbet@lwn.net>
8 commit 096ea522e84ea68f8e6c41e5e7294731a81e29bc upstream.
10 Recent versions of sphinx will emit messages like:
12 Documentation/sphinx/kerneldoc.py:103:
13 RemovedInSphinx20Warning: app.warning() is now deprecated.
14 Use sphinx.util.logging instead.
16 Switch to sphinx.util.logging to make this unsightly message go away.
17 Alas, that interface was only added in version 1.6, so we have to add a
18 version check to keep things working with older sphinxes.
20 Cc: stable@vger.kernel.org
21 Signed-off-by: Jonathan Corbet <corbet@lwn.net>
22 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
25 Documentation/sphinx/kerneldoc.py | 12 +++++++----
26 Documentation/sphinx/kernellog.py | 28 ++++++++++++++++++++++++++
27 Documentation/sphinx/kfigure.py | 40 +++++++++++++++++++++-----------------
28 3 files changed, 59 insertions(+), 21 deletions(-)
30 --- a/Documentation/sphinx/kerneldoc.py
31 +++ b/Documentation/sphinx/kerneldoc.py
32 @@ -49,6 +49,8 @@ if Use_SSI:
34 from sphinx.ext.autodoc import AutodocReporter
40 class KernelDocDirective(Directive):
41 @@ -96,7 +98,8 @@ class KernelDocDirective(Directive):
45 - env.app.verbose('calling kernel-doc \'%s\'' % (" ".join(cmd)))
46 + kernellog.verbose(env.app,
47 + 'calling kernel-doc \'%s\'' % (" ".join(cmd)))
49 p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
50 out, err = p.communicate()
51 @@ -106,7 +109,8 @@ class KernelDocDirective(Directive):
55 - env.app.warn('kernel-doc \'%s\' failed with return code %d' % (" ".join(cmd), p.returncode))
56 + kernellog.warn(env.app,
57 + 'kernel-doc \'%s\' failed with return code %d' % (" ".join(cmd), p.returncode))
58 return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
59 elif env.config.kerneldoc_verbosity > 0:
61 @@ -132,8 +136,8 @@ class KernelDocDirective(Directive):
64 except Exception as e: # pylint: disable=W0703
65 - env.app.warn('kernel-doc \'%s\' processing failed with: %s' %
66 - (" ".join(cmd), str(e)))
67 + kernellog.warn(env.app, 'kernel-doc \'%s\' processing failed with: %s' %
68 + (" ".join(cmd), str(e)))
69 return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
71 def do_parse(self, result, node):
73 +++ b/Documentation/sphinx/kernellog.py
75 +# SPDX-License-Identifier: GPL-2.0
77 +# Sphinx has deprecated its older logging interface, but the replacement
78 +# only goes back to 1.6. So here's a wrapper layer to keep around for
79 +# as long as we support 1.4.
83 +if sphinx.__version__[:3] >= '1.6':
85 + from sphinx.util import logging
86 + logger = logging.getLogger('kerneldoc')
90 +def warn(app, message):
92 + logger.warning(message)
96 +def verbose(app, message):
98 + logger.verbose(message)
100 + app.verbose(message)
103 --- a/Documentation/sphinx/kfigure.py
104 +++ b/Documentation/sphinx/kfigure.py
105 @@ -60,6 +60,8 @@ import sphinx
106 from sphinx.util.nodes import clean_astext
107 from six import iteritems
111 PY3 = sys.version_info[0] == 3
114 @@ -171,20 +173,20 @@ def setupTools(app):
115 This function is called once, when the builder is initiated.
117 global dot_cmd, convert_cmd # pylint: disable=W0603
118 - app.verbose("kfigure: check installed tools ...")
119 + kernellog.verbose(app, "kfigure: check installed tools ...")
121 dot_cmd = which('dot')
122 convert_cmd = which('convert')
125 - app.verbose("use dot(1) from: " + dot_cmd)
126 + kernellog.verbose(app, "use dot(1) from: " + dot_cmd)
128 - app.warn("dot(1) not found, for better output quality install "
129 - "graphviz from http://www.graphviz.org")
130 + kernellog.warn(app, "dot(1) not found, for better output quality install "
131 + "graphviz from http://www.graphviz.org")
133 - app.verbose("use convert(1) from: " + convert_cmd)
134 + kernellog.verbose(app, "use convert(1) from: " + convert_cmd)
137 + kernellog.warn(app,
138 "convert(1) not found, for SVG to PDF conversion install "
139 "ImageMagick (https://www.imagemagick.org)")
141 @@ -220,12 +222,13 @@ def convert_image(img_node, translator,
143 # in kernel builds, use 'make SPHINXOPTS=-v' to see verbose messages
145 - app.verbose('assert best format for: ' + img_node['uri'])
146 + kernellog.verbose(app, 'assert best format for: ' + img_node['uri'])
151 - app.verbose("dot from graphviz not available / include DOT raw.")
152 + kernellog.verbose(app,
153 + "dot from graphviz not available / include DOT raw.")
154 img_node.replace_self(file2literal(src_fname))
156 elif translator.builder.format == 'latex':
157 @@ -252,7 +255,8 @@ def convert_image(img_node, translator,
159 if translator.builder.format == 'latex':
160 if convert_cmd is None:
161 - app.verbose("no SVG to PDF conversion available / include SVG raw.")
162 + kernellog.verbose(app,
163 + "no SVG to PDF conversion available / include SVG raw.")
164 img_node.replace_self(file2literal(src_fname))
166 dst_fname = path.join(translator.builder.outdir, fname + '.pdf')
167 @@ -265,18 +269,19 @@ def convert_image(img_node, translator,
168 _name = dst_fname[len(translator.builder.outdir) + 1:]
170 if isNewer(dst_fname, src_fname):
171 - app.verbose("convert: {out}/%s already exists and is newer" % _name)
172 + kernellog.verbose(app,
173 + "convert: {out}/%s already exists and is newer" % _name)
177 mkdir(path.dirname(dst_fname))
180 - app.verbose('convert DOT to: {out}/' + _name)
181 + kernellog.verbose(app, 'convert DOT to: {out}/' + _name)
182 ok = dot2format(app, src_fname, dst_fname)
184 elif in_ext == '.svg':
185 - app.verbose('convert SVG to: {out}/' + _name)
186 + kernellog.verbose(app, 'convert SVG to: {out}/' + _name)
187 ok = svg2pdf(app, src_fname, dst_fname)
190 @@ -305,7 +310,8 @@ def dot2format(app, dot_fname, out_fname
191 with open(out_fname, "w") as out:
192 exit_code = subprocess.call(cmd, stdout = out)
194 - app.warn("Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
195 + kernellog.warn(app,
196 + "Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
197 return bool(exit_code == 0)
199 def svg2pdf(app, svg_fname, pdf_fname):
200 @@ -322,7 +328,7 @@ def svg2pdf(app, svg_fname, pdf_fname):
201 # use stdout and stderr from parent
202 exit_code = subprocess.call(cmd)
204 - app.warn("Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
205 + kernellog.warn(app, "Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
206 return bool(exit_code == 0)
209 @@ -415,15 +421,15 @@ def visit_kernel_render(self, node):
210 app = self.builder.app
211 srclang = node.get('srclang')
213 - app.verbose('visit kernel-render node lang: "%s"' % (srclang))
214 + kernellog.verbose('visit kernel-render node lang: "%s"' % (srclang))
216 tmp_ext = RENDER_MARKUP_EXT.get(srclang, None)
218 - app.warn('kernel-render: "%s" unknow / include raw.' % (srclang))
219 + kernellog.warn('kernel-render: "%s" unknow / include raw.' % (srclang))
222 if not dot_cmd and tmp_ext == '.dot':
223 - app.verbose("dot from graphviz not available / include raw.")
224 + kernellog.verbose("dot from graphviz not available / include raw.")
227 literal_block = node[0]