diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2009-12-03 20:56:15 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2009-12-03 20:56:15 (GMT) |
commit | cc0c7fbc2219c8088311950f4504bcffcc6c0db6 (patch) | |
tree | c20c24345f0248dee4a2f287819d1f70d24d4634 /Lib/distutils | |
parent | 02293269803ce6505206589b01e5e0ff7d64d5c0 (diff) | |
download | cpython-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.py | 28 |
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', |