diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2017-09-19 22:05:11 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-19 22:05:11 +0300 |
commit | 898b723ee5875ee62c9c9c955f7146e847c1fa6a (patch) | |
tree | c2dfbaf78ab4b2d1b9e87a2721bb01c03c191466 /mesonbuild/mesonlib.py | |
parent | 307b69b69a153f9547d15c5919e2e48f0423b36a (diff) | |
parent | 288ccb2c5812c091ae49833aacaddeb1278e291e (diff) | |
download | meson-898b723ee5875ee62c9c9c955f7146e847c1fa6a.zip meson-898b723ee5875ee62c9c9c955f7146e847c1fa6a.tar.gz meson-898b723ee5875ee62c9c9c955f7146e847c1fa6a.tar.bz2 |
Merge pull request #2331 from mesonbuild/winencode
Do not use universal newlines on old Python versions.
Diffstat (limited to 'mesonbuild/mesonlib.py')
-rw-r--r-- | mesonbuild/mesonlib.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index b5a6318..71134a8 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -14,6 +14,7 @@ """A library of random helper functionality.""" +import sys import stat import time import platform, subprocess, operator, os, shutil, re @@ -529,6 +530,8 @@ def expand_arguments(args): return expended_args def Popen_safe(args, write=None, stderr=subprocess.PIPE, **kwargs): + if sys.version_info < (3, 6) or not sys.stdout.encoding: + return Popen_safe_legacy(args, write=write, stderr=stderr, **kwargs) p = subprocess.Popen(args, universal_newlines=True, close_fds=False, stdout=subprocess.PIPE, @@ -536,6 +539,25 @@ def Popen_safe(args, write=None, stderr=subprocess.PIPE, **kwargs): o, e = p.communicate(write) return p, o, e +def Popen_safe_legacy(args, write=None, stderr=subprocess.PIPE, **kwargs): + p = subprocess.Popen(args, universal_newlines=False, + stdout=subprocess.PIPE, + stderr=stderr, **kwargs) + if write is not None: + write = write.encode('utf-8') + o, e = p.communicate(write) + if o is not None: + if sys.stdout.encoding: + o = o.decode(encoding=sys.stdout.encoding, errors='replace').replace('\r\n', '\n') + else: + o = o.decode(errors='replace').replace('\r\n', '\n') + if e is not None: + if sys.stderr.encoding: + e = e.decode(encoding=sys.stderr.encoding, errors='replace').replace('\r\n', '\n') + else: + e = e.decode(errors='replace').replace('\r\n', '\n') + return p, o, e + def commonpath(paths): ''' For use on Python 3.4 where os.path.commonpath is not available. |