summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-09-19 22:05:11 +0300
committerGitHub <noreply@github.com>2017-09-19 22:05:11 +0300
commit898b723ee5875ee62c9c9c955f7146e847c1fa6a (patch)
treec2dfbaf78ab4b2d1b9e87a2721bb01c03c191466
parent307b69b69a153f9547d15c5919e2e48f0423b36a (diff)
parent288ccb2c5812c091ae49833aacaddeb1278e291e (diff)
downloadmeson-898b723ee5875ee62c9c9c955f7146e847c1fa6a.tar.gz
Merge pull request #2331 from mesonbuild/winencode
Do not use universal newlines on old Python versions.
-rw-r--r--.appveyor.yml8
-rw-r--r--mesonbuild/mesonlib.py22
2 files changed, 30 insertions, 0 deletions
diff --git a/.appveyor.yml b/.appveyor.yml
index ac69dd457..60a6fd3fd 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -49,6 +49,14 @@ branches:
only:
- master
+init:
+ - ps: |
+ If($Env:compiler -like 'msvc2010') {
+ Set-WinSystemLocale de-DE
+ Start-Sleep -s 5
+ Restart-Computer
+ }
+
install:
- cmd: set "ORIG_PATH=%PATH%"
# Boost 1.56.0: https://www.appveyor.com/docs/build-environment/#boost
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py
index b5a63189c..71134a8a9 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.