summaryrefslogtreecommitdiffstats
path: root/Lib/distutils
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2009-12-03 20:56:15 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2009-12-03 20:56:15 (GMT)
commitcc0c7fbc2219c8088311950f4504bcffcc6c0db6 (patch)
treec20c24345f0248dee4a2f287819d1f70d24d4634 /Lib/distutils
parent02293269803ce6505206589b01e5e0ff7d64d5c0 (diff)
downloadcpython-cc0c7fbc2219c8088311950f4504bcffcc6c0db6.zip
cpython-cc0c7fbc2219c8088311950f4504bcffcc6c0db6.tar.gz
cpython-cc0c7fbc2219c8088311950f4504bcffcc6c0db6.tar.bz2
Merged revisions 76651 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r76651 | martin.v.loewis | 2009-12-03 21:53:51 +0100 (Do, 03 Dez 2009) | 3 lines Issue #4120: Drop reference to CRT from manifest when building extensions with msvc9compiler. ........
Diffstat (limited to 'Lib/distutils')
-rw-r--r--Lib/distutils/msvc9compiler.py28
1 files changed, 27 insertions, 1 deletions
diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py
index 68b7775..9bf54c1 100644
--- a/Lib/distutils/msvc9compiler.py
+++ b/Lib/distutils/msvc9compiler.py
@@ -17,6 +17,7 @@ __revision__ = "$Id$"
import os
import subprocess
import sys
+import re
from distutils.errors import (DistutilsExecError, DistutilsPlatformError,
CompileError, LibError, LinkError)
from distutils.ccompiler import (CCompiler, gen_preprocess_options,
@@ -641,7 +642,32 @@ 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
+ 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
out_arg = '-outputresource:%s;%s' % (output_filename, mfid)
try:
self.spawn(['mt.exe', '-nologo', '-manifest',