aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTarek Ziadé <ziade.tarek@gmail.com>2009-12-21 23:12:41 +0000
committerTarek Ziadé <ziade.tarek@gmail.com>2009-12-21 23:12:41 +0000
commitc60ea329a4f40791139c24fbb25c8514cc40eeb2 (patch)
treed0ce7cd7f83c120357ca69fc07f5b5748ea1afe7 /Lib/distutils/msvc9compiler.py
parentBlocked revisions 76984 via svnmerge (diff)
downloadcpython-c60ea329a4f40791139c24fbb25c8514cc40eeb2.tar.gz
cpython-c60ea329a4f40791139c24fbb25c8514cc40eeb2.tar.bz2
cpython-c60ea329a4f40791139c24fbb25c8514cc40eeb2.zip
Fixed #7556: editing the MSVC manifest file with a regexp was throwing an error
Diffstat (limited to 'Lib/distutils/msvc9compiler.py')
-rw-r--r--Lib/distutils/msvc9compiler.py51
1 files changed, 29 insertions, 22 deletions
diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py
index 4d05a445229..6455fffa1f6 100644
--- a/Lib/distutils/msvc9compiler.py
+++ b/Lib/distutils/msvc9compiler.py
@@ -645,28 +645,8 @@ class MSVCCompiler(CCompiler) :
mfid = 1
else:
mfid = 2
- try:
- # Remove references to the Visual C runtime, so they will
- # fall through to the Visual C dependency of Python.exe.
- # This way, when installed for a restricted user (e.g.
- # runtimes are not in WinSxS folder, but in Python's own
- # folder), the runtimes do not need to be in every folder
- # with .pyd's.
- manifest_f = open(temp_manifest, "rb")
- manifest_buf = manifest_f.read()
- manifest_f.close()
- pattern = re.compile(
- r"""<assemblyIdentity.*?name=("|')Microsoft\."""\
- r"""VC\d{2}\.CRT("|').*?(/>|</assemblyIdentity>)""",
- re.DOTALL)
- manifest_buf = re.sub(pattern, "", manifest_buf)
- pattern = "<dependentAssembly>\s*</dependentAssembly>"
- manifest_buf = re.sub(pattern, "", manifest_buf)
- manifest_f = open(temp_manifest, "wb")
- manifest_f.write(manifest_buf)
- manifest_f.close()
- except IOError:
- pass
+ # Remove references to the Visual C runtime
+ self._remove_visual_c_ref(temp_manifest)
out_arg = '-outputresource:%s;%s' % (output_filename, mfid)
try:
self.spawn(['mt.exe', '-nologo', '-manifest',
@@ -676,6 +656,33 @@ class MSVCCompiler(CCompiler) :
else:
log.debug("skipping %s (up-to-date)", output_filename)
+ def _remove_visual_c_ref(self, manifest_file):
+ try:
+ # Remove references to the Visual C runtime, so they will
+ # fall through to the Visual C dependency of Python.exe.
+ # This way, when installed for a restricted user (e.g.
+ # runtimes are not in WinSxS folder, but in Python's own
+ # folder), the runtimes do not need to be in every folder
+ # with .pyd's.
+ manifest_f = open(manifest_file)
+ try:
+ manifest_buf = manifest_f.read()
+ finally:
+ manifest_f.close()
+ pattern = re.compile(
+ r"""<assemblyIdentity.*?name=("|')Microsoft\."""\
+ r"""VC\d{2}\.CRT("|').*?(/>|</assemblyIdentity>)""",
+ re.DOTALL)
+ manifest_buf = re.sub(pattern, "", manifest_buf)
+ pattern = "<dependentAssembly>\s*</dependentAssembly>"
+ manifest_buf = re.sub(pattern, "", manifest_buf)
+ manifest_f = open(manifest_file, 'w')
+ try:
+ manifest_f.write(manifest_buf)
+ finally:
+ manifest_f.close()
+ except IOError:
+ pass
# -- Miscellaneous methods -----------------------------------------
# These are all used by the 'gen_lib_options() function, in