Commit 86c0f046 authored by Jani Nikula's avatar Jani Nikula Committed by Jonathan Corbet

Documentation/sphinx: fix kernel-doc decode for non-utf-8 locale

On python3, Popen() universal_newlines=True converts the subprocess
stdout to unicode text using a codec based on user preferences. Given
LANG indicating ascii and utf-8 stdout from the subprocess, you'd get:

WARNING: kernel-doc '../scripts/kernel-doc -rst -enable-lineno
../drivers/media/dvb-core/demux.h' processing failed with: 'ascii' codec can't
decode byte 0xe2 in position 6368: ordinal not in range(128)

Fix this by dropping universal_newlines=True and replacing the implicit
LANG specific decode with an explicit utf-8 decode. This also gets rid
of the annoying conditional code for python 2 vs. 3.

Fixes: ba350185 ("Documentation/sphinx: fix kernel-doc extension on python3")
Reference: http://mid.mail-archive.com/54c23e8e-89c0-5cea-0dcc-e938952c5642@infradead.orgReported-and-tested-by: default avatarRandy Dunlap <rdunlap@infradead.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarJonathan Corbet <corbet@lwn.net>
parent a27bfcab
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
# Please make sure this works on both python2 and python3. # Please make sure this works on both python2 and python3.
# #
import codecs
import os import os
import subprocess import subprocess
import sys import sys
...@@ -88,13 +89,10 @@ class KernelDocDirective(Directive): ...@@ -88,13 +89,10 @@ class KernelDocDirective(Directive):
try: try:
env.app.verbose('calling kernel-doc \'%s\'' % (" ".join(cmd))) env.app.verbose('calling kernel-doc \'%s\'' % (" ".join(cmd)))
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate() out, err = p.communicate()
# python2 needs conversion to unicode. out, err = codecs.decode(out, 'utf-8'), codecs.decode(err, 'utf-8')
# python3 with universal_newlines=True returns strings.
if sys.version_info.major < 3:
out, err = unicode(out, 'utf-8'), unicode(err, 'utf-8')
if p.returncode != 0: if p.returncode != 0:
sys.stderr.write(err) sys.stderr.write(err)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment