diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2016-08-04 07:05:36 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-04 07:05:36 -0400 |
commit | 859a62a61bd5c24a070500eb103608959c670bff (patch) | |
tree | b3cf811af20f898d6a1097b1c6e9df09a07ddc55 /setuptools/msvc.py | |
parent | 07671cdc72f4cf7d729adf5d1321b718c66fb2a7 (diff) | |
parent | 3ebd9363b715b4dd1a0aa1d89a596d08e4b41d84 (diff) | |
download | external_python_setuptools-859a62a61bd5c24a070500eb103608959c670bff.tar.gz external_python_setuptools-859a62a61bd5c24a070500eb103608959c670bff.tar.bz2 external_python_setuptools-859a62a61bd5c24a070500eb103608959c670bff.zip |
Merge pull request #716 from JGoutin/patch-2
#707 MSVC patch and Python 2
Diffstat (limited to 'setuptools/msvc.py')
-rw-r--r-- | setuptools/msvc.py | 67 |
1 files changed, 39 insertions, 28 deletions
diff --git a/setuptools/msvc.py b/setuptools/msvc.py index da26371c..2700a2b0 100644 --- a/setuptools/msvc.py +++ b/setuptools/msvc.py @@ -384,22 +384,11 @@ class RegistryInfo: self.pi = platform_info @property - def microsoft(self): - """ - Microsoft software registry key. - """ - return os.path.join( - 'Software', - '' if self.pi.current_is_x86() else 'Wow6432Node', - 'Microsoft', - ) - - @property def visualstudio(self): """ Microsoft Visual Studio root registry key. """ - return os.path.join(self.microsoft, 'VisualStudio') + return 'VisualStudio' @property def sxs(self): @@ -427,15 +416,14 @@ class RegistryInfo: """ Microsoft Visual C++ for Python registry key. """ - path = r'DevDiv\VCForPython' - return os.path.join(self.microsoft, path) + return r'DevDiv\VCForPython' @property def microsoft_sdk(self): """ Microsoft SDK registry key. """ - return os.path.join(self.microsoft, 'Microsoft SDKs') + return 'Microsoft SDKs' @property def windows_sdk(self): @@ -456,11 +444,29 @@ class RegistryInfo: """ Microsoft Windows Kits Roots registry key. """ - return os.path.join(self.microsoft, r'Windows Kits\Installed Roots') + return r'Windows Kits\Installed Roots' + + def microsoft(self, key, x86=False): + """ + Return key in Microsoft software registry. + + Parameters + ---------- + key: str + Registry key path where look. + x86: str + Force x86 software registry. + + Return + ------ + str: value + """ + node64 = '' if self.pi.current_is_x86() or x86 else r'\Wow6432Node' + return os.path.join('Software', node64, 'Microsoft', key) def lookup(self, key, name): """ - Look for values in registry. + Look for values in registry in Microsoft software registry. Parameters ---------- @@ -473,18 +479,23 @@ class RegistryInfo: ------ str: value """ + KEY_READ = winreg.KEY_READ + openkey = winreg.OpenKey + ms = self.microsoft for hkey in self.HKEYS: try: - bkey = winreg.OpenKey(hkey, key, 0, winreg.KEY_READ) - except OSError: - continue - except IOError: - continue + bkey = openkey(hkey, ms(key), 0, KEY_READ) + except (OSError, IOError): + if not self.pi.current_is_x86(): + try: + bkey = openkey(hkey, ms(key, True), 0, KEY_READ) + except (OSError, IOError): + continue + else: + continue try: return winreg.QueryValueEx(bkey, name)[0] - except OSError: - pass - except IOError: + except (OSError, IOError): pass @@ -527,7 +538,7 @@ class SystemInfo: for key in vckeys: try: bkey = winreg.OpenKey(hkey, key, 0, winreg.KEY_READ) - except IOError: + except (OSError, IOError): continue subkeys, values, _ = winreg.QueryInfoKey(bkey) for i in range(values): @@ -840,7 +851,7 @@ class EnvironmentInfo: Microsoft Visual C++ & Microsoft Foundation Class Includes """ return [os.path.join(self.si.VCInstallDir, 'Include'), - os.path.join(self.si.VCInstallDir, 'ATLMFC\Include')] + os.path.join(self.si.VCInstallDir, r'ATLMFC\Include')] @property def VCLibraries(self): @@ -1226,5 +1237,5 @@ class EnvironmentInfo: if name: return '%s\\' % name[0] return '' - except IOError: + except (OSError, IOError): return '' |