summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/distutils/msvc9compiler.py36
-rw-r--r--Lib/distutils/tests/test_msvc9compiler.py22
-rw-r--r--Misc/NEWS3
3 files changed, 45 insertions, 16 deletions
diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py
index 68b7775..00d76d4 100644
--- a/Lib/distutils/msvc9compiler.py
+++ b/Lib/distutils/msvc9compiler.py
@@ -17,10 +17,11 @@ __revision__ = "$Id$"
import os
import subprocess
import sys
-from distutils.errors import (DistutilsExecError, DistutilsPlatformError,
- CompileError, LibError, LinkError)
-from distutils.ccompiler import (CCompiler, gen_preprocess_options,
- gen_lib_options)
+
+from distutils.errors import DistutilsExecError, DistutilsPlatformError, \
+ CompileError, LibError, LinkError
+from distutils.ccompiler import CCompiler, gen_preprocess_options, \
+ gen_lib_options
from distutils import log
from distutils.util import get_platform
@@ -53,15 +54,14 @@ class Reg:
"""Helper class to read values from the registry
"""
- @classmethod
def get_value(cls, path, key):
for base in HKEYS:
d = cls.read_values(base, path)
if d and key in d:
return d[key]
raise KeyError(key)
+ get_value = classmethod(get_value)
- @classmethod
def read_keys(cls, base, key):
"""Return list of registry keys."""
try:
@@ -78,8 +78,8 @@ class Reg:
L.append(k)
i += 1
return L
+ read_keys = classmethod(read_keys)
- @classmethod
def read_values(cls, base, key):
"""Return dict of registry keys and values.
@@ -100,8 +100,8 @@ class Reg:
d[cls.convert_mbcs(name)] = cls.convert_mbcs(value)
i += 1
return d
+ read_values = classmethod(read_values)
- @staticmethod
def convert_mbcs(s):
dec = getattr(s, "decode", None)
if dec is not None:
@@ -110,6 +110,7 @@ class Reg:
except UnicodeError:
pass
return s
+ convert_mbcs = staticmethod(convert_mbcs)
class MacroExpander:
@@ -131,7 +132,7 @@ class MacroExpander:
"sdkinstallrootv2.0")
else:
raise KeyError("sdkinstallrootv2.0")
- except KeyError as exc: #
+ except KeyError:
raise DistutilsPlatformError(
"""Python was built with Visual Studio 2008;
extensions must be built with a compiler than can generate compatible binaries.
@@ -479,7 +480,7 @@ class MSVCCompiler(CCompiler) :
try:
self.spawn([self.rc] + pp_opts +
[output_opt] + [input_opt])
- except DistutilsExecError as msg:
+ except DistutilsExecError, msg:
raise CompileError(msg)
continue
elif ext in self._mc_extensions:
@@ -506,7 +507,7 @@ class MSVCCompiler(CCompiler) :
self.spawn([self.rc] +
["/fo" + obj] + [rc_file])
- except DistutilsExecError as msg:
+ except DistutilsExecError, msg:
raise CompileError(msg)
continue
else:
@@ -519,7 +520,7 @@ class MSVCCompiler(CCompiler) :
self.spawn([self.cc] + compile_opts + pp_opts +
[input_opt, output_opt] +
extra_postargs)
- except DistutilsExecError as msg:
+ except DistutilsExecError, msg:
raise CompileError(msg)
return objects
@@ -544,7 +545,7 @@ class MSVCCompiler(CCompiler) :
pass # XXX what goes here?
try:
self.spawn([self.lib] + lib_args)
- except DistutilsExecError as msg:
+ except DistutilsExecError, msg:
raise LibError(msg)
else:
log.debug("skipping %s (up-to-date)", output_filename)
@@ -633,7 +634,7 @@ class MSVCCompiler(CCompiler) :
self.mkpath(os.path.dirname(output_filename))
try:
self.spawn([self.linker] + ld_args)
- except DistutilsExecError as msg:
+ except DistutilsExecError, msg:
raise LinkError(msg)
# embed the manifest
@@ -641,12 +642,15 @@ class MSVCCompiler(CCompiler) :
# will still consider the DLL up-to-date, but it will not have a
# manifest. Maybe we should link to a temp file? OTOH, that
# implies a build environment error that shouldn't go undetected.
- mfid = 1 if target_desc == CCompiler.EXECUTABLE else 2
+ if target_desc == CCompiler.EXECUTABLE:
+ mfid = 1
+ else:
+ mfid = 2
out_arg = '-outputresource:%s;%s' % (output_filename, mfid)
try:
self.spawn(['mt.exe', '-nologo', '-manifest',
temp_manifest, out_arg])
- except DistutilsExecError as msg:
+ except DistutilsExecError, msg:
raise LinkError(msg)
else:
log.debug("skipping %s (up-to-date)", output_filename)
diff --git a/Lib/distutils/tests/test_msvc9compiler.py b/Lib/distutils/tests/test_msvc9compiler.py
index 0c8bd6e..bde614e 100644
--- a/Lib/distutils/tests/test_msvc9compiler.py
+++ b/Lib/distutils/tests/test_msvc9compiler.py
@@ -30,6 +30,28 @@ class msvc9compilerTestCase(unittest.TestCase):
finally:
msvc9compiler.find_vcvarsall = old_find_vcvarsall
+ def test_reg_class(self):
+ if sys.platform != 'win32':
+ # this test is only for win32
+ return
+
+ from distutils.msvc9compiler import Reg
+ self.assertRaises(KeyError, Reg.get_value, 'xxx', 'xxx')
+
+ # looking for values that should exist on all
+ # windows registeries versions.
+ path = r'Software\Microsoft\Notepad'
+ v = Reg.get_value(path, u"lfitalic")
+ self.assert_(v in (0, 1))
+
+ import _winreg
+ HKCU = _winreg.HKEY_CURRENT_USER
+ keys = Reg.read_keys(HKCU, 'xxxx')
+ self.assertEquals(keys, None)
+
+ keys = Reg.read_keys(HKCU, r'Software\Microsoft')
+ self.assert_('Notepad' in keys)
+
def test_suite():
return unittest.makeSuite(msvc9compilerTestCase)
diff --git a/Misc/NEWS b/Misc/NEWS
index d03ed95..13ace63 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -168,6 +168,9 @@ Core and Builtins
Library
-------
+- Issue #5394: removed > 2.3 syntax from distutils.msvc9compiler.
+ Original patch by Akira Kitada.
+
- Issue #5385: Fixed mmap crash after resize failure on windows.
- Issue #5179: Fixed subprocess handle leak on failure on windows.