mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Patch from John Anderson to enable VC 7.1 support.
I tested against VC 7.0 and it caused no problems there.
This commit is contained in:
parent
de7cdb26d1
commit
e9a92aa03a
1 changed files with 27 additions and 12 deletions
|
@ -45,6 +45,10 @@ except ImportError:
|
||||||
RegError = win32api.error
|
RegError = win32api.error
|
||||||
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
log.info("Warning: Can't read registry to find the "
|
||||||
|
"necessary compiler setting\n"
|
||||||
|
"Make sure that Python modules _winreg, "
|
||||||
|
"win32api or win32con are installed.")
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if _can_read_reg:
|
if _can_read_reg:
|
||||||
|
@ -115,11 +119,14 @@ class MacroExpander:
|
||||||
break
|
break
|
||||||
|
|
||||||
def load_macros(self, version):
|
def load_macros(self, version):
|
||||||
vsbase = r"Software\Microsoft\VisualStudio\%s.0" % version
|
vsbase = r"Software\Microsoft\VisualStudio\%0.1f" % version
|
||||||
self.set_macro("VCInstallDir", vsbase + r"\Setup\VC", "productdir")
|
self.set_macro("VCInstallDir", vsbase + r"\Setup\VC", "productdir")
|
||||||
self.set_macro("VSInstallDir", vsbase + r"\Setup\VS", "productdir")
|
self.set_macro("VSInstallDir", vsbase + r"\Setup\VS", "productdir")
|
||||||
net = r"Software\Microsoft\.NETFramework"
|
net = r"Software\Microsoft\.NETFramework"
|
||||||
self.set_macro("FrameworkDir", net, "installroot")
|
self.set_macro("FrameworkDir", net, "installroot")
|
||||||
|
if version > 7.0:
|
||||||
|
self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv1.1")
|
||||||
|
else:
|
||||||
self.set_macro("FrameworkSDKDir", net, "sdkinstallroot")
|
self.set_macro("FrameworkSDKDir", net, "sdkinstallroot")
|
||||||
|
|
||||||
p = r"Software\Microsoft\NET Framework Setup\Product"
|
p = r"Software\Microsoft\NET Framework Setup\Product"
|
||||||
|
@ -150,11 +157,13 @@ def get_build_version():
|
||||||
return 6
|
return 6
|
||||||
i = i + len(prefix)
|
i = i + len(prefix)
|
||||||
s, rest = sys.version[i:].split(" ", 1)
|
s, rest = sys.version[i:].split(" ", 1)
|
||||||
n = int(s[:-2])
|
majorVersion = int(s[:-2]) - 6
|
||||||
if n == 12:
|
minorVersion = int(s[2:3]) / 10.0
|
||||||
return 6
|
# I don't think paths are affected by minor version in version 6
|
||||||
elif n == 13:
|
if majorVersion == 6:
|
||||||
return 7
|
minorVersion = 0
|
||||||
|
if majorVersion >= 6:
|
||||||
|
return majorVersion + minorVersion
|
||||||
# else we don't know what version of the compiler this is
|
# else we don't know what version of the compiler this is
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -192,13 +201,19 @@ class MSVCCompiler (CCompiler) :
|
||||||
def __init__ (self, verbose=0, dry_run=0, force=0):
|
def __init__ (self, verbose=0, dry_run=0, force=0):
|
||||||
CCompiler.__init__ (self, verbose, dry_run, force)
|
CCompiler.__init__ (self, verbose, dry_run, force)
|
||||||
self.__version = get_build_version()
|
self.__version = get_build_version()
|
||||||
if self.__version == 7:
|
if self.__version >= 7:
|
||||||
self.__root = r"Software\Microsoft\VisualStudio"
|
self.__root = r"Software\Microsoft\VisualStudio"
|
||||||
self.__macros = MacroExpander(self.__version)
|
self.__macros = MacroExpander(self.__version)
|
||||||
else:
|
else:
|
||||||
self.__root = r"Software\Microsoft\Devstudio"
|
self.__root = r"Software\Microsoft\Devstudio"
|
||||||
self.__paths = self.get_msvc_paths("path")
|
self.__paths = self.get_msvc_paths("path")
|
||||||
|
|
||||||
|
if len (self.__paths) == 0:
|
||||||
|
raise DistutilsPlatformError, \
|
||||||
|
("Python was built with version %s of Visual Studio, "
|
||||||
|
"and extensions need to be built with the same "
|
||||||
|
"version of the compiler, but it isn't installed." % self.__version)
|
||||||
|
|
||||||
self.cc = self.find_exe("cl.exe")
|
self.cc = self.find_exe("cl.exe")
|
||||||
self.linker = self.find_exe("link.exe")
|
self.linker = self.find_exe("link.exe")
|
||||||
self.lib = self.find_exe("lib.exe")
|
self.lib = self.find_exe("lib.exe")
|
||||||
|
@ -518,9 +533,9 @@ class MSVCCompiler (CCompiler) :
|
||||||
return []
|
return []
|
||||||
|
|
||||||
path = path + " dirs"
|
path = path + " dirs"
|
||||||
if self.__version == 7:
|
if self.__version >= 7:
|
||||||
key = (r"%s\7.0\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directories"
|
key = (r"%s\%0.1f\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directories"
|
||||||
% (self.__root,))
|
% (self.__root, self.__version))
|
||||||
else:
|
else:
|
||||||
key = (r"%s\6.0\Build System\Components\Platforms"
|
key = (r"%s\6.0\Build System\Components\Platforms"
|
||||||
r"\Win32 (%s)\Directories" % (self.__root, platform))
|
r"\Win32 (%s)\Directories" % (self.__root, platform))
|
||||||
|
@ -528,7 +543,7 @@ class MSVCCompiler (CCompiler) :
|
||||||
for base in HKEYS:
|
for base in HKEYS:
|
||||||
d = read_values(base, key)
|
d = read_values(base, key)
|
||||||
if d:
|
if d:
|
||||||
if self.__version == 7:
|
if self.__version >= 7:
|
||||||
return string.split(self.__macros.sub(d[path]), ";")
|
return string.split(self.__macros.sub(d[path]), ";")
|
||||||
else:
|
else:
|
||||||
return string.split(d[path], ";")
|
return string.split(d[path], ";")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue