Fix build with Python 3 on Windows

This commit is contained in:
Matthias Hoelzl 2017-10-29 17:55:05 +01:00
parent 277e730d34
commit a6d53effa5
2 changed files with 11 additions and 5 deletions

View file

@ -12,6 +12,8 @@ if sys.version_info < (3,):
return cStringIO.StringIO() return cStringIO.StringIO()
def encode_utf8(x): def encode_utf8(x):
return x return x
def decode_utf8(x):
return x
def iteritems(d): def iteritems(d):
return d.iteritems() return d.iteritems()
def escape_string(s): def escape_string(s):
@ -38,6 +40,8 @@ else:
import codecs import codecs
def encode_utf8(x): def encode_utf8(x):
return codecs.utf_8_encode(x)[0] return codecs.utf_8_encode(x)[0]
def decode_utf8(x):
return codecs.utf_8_decode(x)[0]
def iteritems(d): def iteritems(d):
return iter(d.items()) return iter(d.items())
def charcode_to_c_escapes(c): def charcode_to_c_escapes(c):

View file

@ -1,6 +1,8 @@
import os import os
import platform import platform
from compat import decode_utf8
if os.name == 'nt': if os.name == 'nt':
import sys import sys
if sys.version_info < (3,): if sys.version_info < (3,):
@ -12,7 +14,7 @@ if os.name == 'nt':
def _reg_open_key(key, subkey): def _reg_open_key(key, subkey):
try: try:
return winreg.OpenKey(key, subkey) return winreg.OpenKey(key, subkey)
except WindowsError, OSError: except (WindowsError, OSError):
if platform.architecture()[0] == '32bit': if platform.architecture()[0] == '32bit':
bitness_sam = winreg.KEY_WOW64_64KEY bitness_sam = winreg.KEY_WOW64_64KEY
else: else:
@ -40,7 +42,7 @@ def _find_mono_in_reg(subkey, bits):
with _reg_open_key_bits(winreg.HKEY_LOCAL_MACHINE, subkey, bits) as hKey: with _reg_open_key_bits(winreg.HKEY_LOCAL_MACHINE, subkey, bits) as hKey:
value, regtype = winreg.QueryValueEx(hKey, 'SdkInstallRoot') value, regtype = winreg.QueryValueEx(hKey, 'SdkInstallRoot')
return value return value
except WindowsError, OSError: except (WindowsError, OSError):
return None return None
@ -79,7 +81,7 @@ def find_msbuild_tools_path_reg():
lines = subprocess.check_output([vswhere] + vswhere_args).splitlines() lines = subprocess.check_output([vswhere] + vswhere_args).splitlines()
for line in lines: for line in lines:
parts = line.split(':', 1) parts = decode_utf8(line).split(':', 1)
if len(parts) < 2 or parts[0] != 'installationPath': if len(parts) < 2 or parts[0] != 'installationPath':
continue continue
@ -96,7 +98,7 @@ def find_msbuild_tools_path_reg():
print('Error reading output from vswhere: ' + e.message) print('Error reading output from vswhere: ' + e.message)
except WindowsError: except WindowsError:
pass # Fine, vswhere not found pass # Fine, vswhere not found
except subprocess.CalledProcessError, OSError: except (subprocess.CalledProcessError, OSError):
pass pass
# Try to find 14.0 in the Registry # Try to find 14.0 in the Registry
@ -106,7 +108,7 @@ def find_msbuild_tools_path_reg():
with _reg_open_key(winreg.HKEY_LOCAL_MACHINE, subkey) as hKey: with _reg_open_key(winreg.HKEY_LOCAL_MACHINE, subkey) as hKey:
value, regtype = winreg.QueryValueEx(hKey, 'MSBuildToolsPath') value, regtype = winreg.QueryValueEx(hKey, 'MSBuildToolsPath')
return value return value
except WindowsError, OSError: except (WindowsError, OSError):
return '' return ''
return '' return ''