Commit efe5ba3a authored by Tarek Ziadé's avatar Tarek Ziadé

Merged revisions 70212 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r70212 | tarek.ziade | 2009-03-07 01:32:45 +0100 (Sat, 07 Mar 2009) | 1 line

  Issue #5394: removed > 2.3 syntax from distutils.msvc9compiler
........
parent d3c376f3
...@@ -17,10 +17,11 @@ __revision__ = "$Id$" ...@@ -17,10 +17,11 @@ __revision__ = "$Id$"
import os import os
import subprocess import subprocess
import sys import sys
from distutils.errors import (DistutilsExecError, DistutilsPlatformError,
CompileError, LibError, LinkError) from distutils.errors import DistutilsExecError, DistutilsPlatformError, \
from distutils.ccompiler import (CCompiler, gen_preprocess_options, CompileError, LibError, LinkError
gen_lib_options) from distutils.ccompiler import CCompiler, gen_preprocess_options, \
gen_lib_options
from distutils import log from distutils import log
from distutils.util import get_platform from distutils.util import get_platform
...@@ -53,15 +54,14 @@ class Reg: ...@@ -53,15 +54,14 @@ class Reg:
"""Helper class to read values from the registry """Helper class to read values from the registry
""" """
@classmethod
def get_value(cls, path, key): def get_value(cls, path, key):
for base in HKEYS: for base in HKEYS:
d = cls.read_values(base, path) d = cls.read_values(base, path)
if d and key in d: if d and key in d:
return d[key] return d[key]
raise KeyError(key) raise KeyError(key)
get_value = classmethod(get_value)
@classmethod
def read_keys(cls, base, key): def read_keys(cls, base, key):
"""Return list of registry keys.""" """Return list of registry keys."""
try: try:
...@@ -78,8 +78,8 @@ class Reg: ...@@ -78,8 +78,8 @@ class Reg:
L.append(k) L.append(k)
i += 1 i += 1
return L return L
read_keys = classmethod(read_keys)
@classmethod
def read_values(cls, base, key): def read_values(cls, base, key):
"""Return dict of registry keys and values. """Return dict of registry keys and values.
...@@ -100,8 +100,8 @@ class Reg: ...@@ -100,8 +100,8 @@ class Reg:
d[cls.convert_mbcs(name)] = cls.convert_mbcs(value) d[cls.convert_mbcs(name)] = cls.convert_mbcs(value)
i += 1 i += 1
return d return d
read_values = classmethod(read_values)
@staticmethod
def convert_mbcs(s): def convert_mbcs(s):
dec = getattr(s, "decode", None) dec = getattr(s, "decode", None)
if dec is not None: if dec is not None:
...@@ -110,6 +110,7 @@ class Reg: ...@@ -110,6 +110,7 @@ class Reg:
except UnicodeError: except UnicodeError:
pass pass
return s return s
convert_mbcs = staticmethod(convert_mbcs)
class MacroExpander: class MacroExpander:
...@@ -131,7 +132,7 @@ class MacroExpander: ...@@ -131,7 +132,7 @@ class MacroExpander:
"sdkinstallrootv2.0") "sdkinstallrootv2.0")
else: else:
raise KeyError("sdkinstallrootv2.0") raise KeyError("sdkinstallrootv2.0")
except KeyError as exc: # except KeyError:
raise DistutilsPlatformError( raise DistutilsPlatformError(
"""Python was built with Visual Studio 2008; """Python was built with Visual Studio 2008;
extensions must be built with a compiler than can generate compatible binaries. extensions must be built with a compiler than can generate compatible binaries.
...@@ -478,7 +479,7 @@ class MSVCCompiler(CCompiler) : ...@@ -478,7 +479,7 @@ class MSVCCompiler(CCompiler) :
try: try:
self.spawn([self.rc] + pp_opts + self.spawn([self.rc] + pp_opts +
[output_opt] + [input_opt]) [output_opt] + [input_opt])
except DistutilsExecError as msg: except DistutilsExecError, msg:
raise CompileError(msg) raise CompileError(msg)
continue continue
elif ext in self._mc_extensions: elif ext in self._mc_extensions:
...@@ -505,7 +506,7 @@ class MSVCCompiler(CCompiler) : ...@@ -505,7 +506,7 @@ class MSVCCompiler(CCompiler) :
self.spawn([self.rc] + self.spawn([self.rc] +
["/fo" + obj] + [rc_file]) ["/fo" + obj] + [rc_file])
except DistutilsExecError as msg: except DistutilsExecError, msg:
raise CompileError(msg) raise CompileError(msg)
continue continue
else: else:
...@@ -518,7 +519,7 @@ class MSVCCompiler(CCompiler) : ...@@ -518,7 +519,7 @@ class MSVCCompiler(CCompiler) :
self.spawn([self.cc] + compile_opts + pp_opts + self.spawn([self.cc] + compile_opts + pp_opts +
[input_opt, output_opt] + [input_opt, output_opt] +
extra_postargs) extra_postargs)
except DistutilsExecError as msg: except DistutilsExecError, msg:
raise CompileError(msg) raise CompileError(msg)
return objects return objects
...@@ -543,7 +544,7 @@ class MSVCCompiler(CCompiler) : ...@@ -543,7 +544,7 @@ class MSVCCompiler(CCompiler) :
pass # XXX what goes here? pass # XXX what goes here?
try: try:
self.spawn([self.lib] + lib_args) self.spawn([self.lib] + lib_args)
except DistutilsExecError as msg: except DistutilsExecError, msg:
raise LibError(msg) raise LibError(msg)
else: else:
log.debug("skipping %s (up-to-date)", output_filename) log.debug("skipping %s (up-to-date)", output_filename)
...@@ -632,7 +633,7 @@ class MSVCCompiler(CCompiler) : ...@@ -632,7 +633,7 @@ class MSVCCompiler(CCompiler) :
self.mkpath(os.path.dirname(output_filename)) self.mkpath(os.path.dirname(output_filename))
try: try:
self.spawn([self.linker] + ld_args) self.spawn([self.linker] + ld_args)
except DistutilsExecError as msg: except DistutilsExecError, msg:
raise LinkError(msg) raise LinkError(msg)
# embed the manifest # embed the manifest
...@@ -640,12 +641,15 @@ class MSVCCompiler(CCompiler) : ...@@ -640,12 +641,15 @@ class MSVCCompiler(CCompiler) :
# will still consider the DLL up-to-date, but it will not have a # 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 # manifest. Maybe we should link to a temp file? OTOH, that
# implies a build environment error that shouldn't go undetected. # 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) out_arg = '-outputresource:%s;%s' % (output_filename, mfid)
try: try:
self.spawn(['mt.exe', '-nologo', '-manifest', self.spawn(['mt.exe', '-nologo', '-manifest',
temp_manifest, out_arg]) temp_manifest, out_arg])
except DistutilsExecError as msg: except DistutilsExecError, msg:
raise LinkError(msg) raise LinkError(msg)
else: else:
log.debug("skipping %s (up-to-date)", output_filename) log.debug("skipping %s (up-to-date)", output_filename)
......
...@@ -30,6 +30,28 @@ class msvc9compilerTestCase(unittest.TestCase): ...@@ -30,6 +30,28 @@ class msvc9compilerTestCase(unittest.TestCase):
finally: finally:
msvc9compiler.find_vcvarsall = old_find_vcvarsall 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, "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(): def test_suite():
return unittest.makeSuite(msvc9compilerTestCase) return unittest.makeSuite(msvc9compilerTestCase)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment