mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	Merged revisions 76993-76994 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r76993 | tarek.ziade | 2009-12-22 00:12:41 +0100 (Tue, 22 Dec 2009) | 1 line Fixed #7556: editing the MSVC manifest file with a regexp was throwing an error ........ r76994 | tarek.ziade | 2009-12-22 00:16:09 +0100 (Tue, 22 Dec 2009) | 1 line forgot to add the win32 test in the unittest skip call ........
This commit is contained in:
		
							parent
							
								
									35ce4a07ee
								
							
						
					
					
						commit
						b7e82bb7dd
					
				
					 3 changed files with 113 additions and 29 deletions
				
			
		|  | @ -646,28 +646,8 @@ def link(self, | ||||||
|                 mfid = 1 |                 mfid = 1 | ||||||
|             else: |             else: | ||||||
|                 mfid = 2 |                 mfid = 2 | ||||||
|                 try: |                 # Remove references to the Visual C runtime | ||||||
|                     # Remove references to the Visual C runtime, so they will |                 self._remove_visual_c_ref(temp_manifest) | ||||||
|                     # 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) |             out_arg = '-outputresource:%s;%s' % (output_filename, mfid) | ||||||
|             try: |             try: | ||||||
|                 self.spawn(['mt.exe', '-nologo', '-manifest', |                 self.spawn(['mt.exe', '-nologo', '-manifest', | ||||||
|  | @ -677,6 +657,33 @@ def link(self, | ||||||
|         else: |         else: | ||||||
|             log.debug("skipping %s (up-to-date)", output_filename) |             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 ----------------------------------------- |     # -- Miscellaneous methods ----------------------------------------- | ||||||
|     # These are all used by the 'gen_lib_options() function, in |     # These are all used by the 'gen_lib_options() function, in | ||||||
|  |  | ||||||
|  | @ -1,18 +1,73 @@ | ||||||
| """Tests for distutils.msvc9compiler.""" | """Tests for distutils.msvc9compiler.""" | ||||||
| import sys | import sys | ||||||
| import unittest | import unittest | ||||||
|  | import os | ||||||
| 
 | 
 | ||||||
| from distutils.errors import DistutilsPlatformError | from distutils.errors import DistutilsPlatformError | ||||||
|  | from distutils.tests import support | ||||||
| 
 | 
 | ||||||
| class msvc9compilerTestCase(unittest.TestCase): | _MANIFEST = """\ | ||||||
|  | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||||
|  | <assembly xmlns="urn:schemas-microsoft-com:asm.v1" | ||||||
|  |           manifestVersion="1.0"> | ||||||
|  |   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> | ||||||
|  |     <security> | ||||||
|  |       <requestedPrivileges> | ||||||
|  |         <requestedExecutionLevel level="asInvoker" uiAccess="false"> | ||||||
|  |         </requestedExecutionLevel> | ||||||
|  |       </requestedPrivileges> | ||||||
|  |     </security> | ||||||
|  |   </trustInfo> | ||||||
|  |   <dependency> | ||||||
|  |     <dependentAssembly> | ||||||
|  |       <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" | ||||||
|  |          version="9.0.21022.8" processorArchitecture="x86" | ||||||
|  |          publicKeyToken="XXXX"> | ||||||
|  |       </assemblyIdentity> | ||||||
|  |     </dependentAssembly> | ||||||
|  |   </dependency> | ||||||
|  |   <dependency> | ||||||
|  |     <dependentAssembly> | ||||||
|  |       <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" | ||||||
|  |         version="9.0.21022.8" processorArchitecture="x86" | ||||||
|  |         publicKeyToken="XXXX"></assemblyIdentity> | ||||||
|  |     </dependentAssembly> | ||||||
|  |   </dependency> | ||||||
|  | </assembly> | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | _CLEANED_MANIFEST = """\ | ||||||
|  | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||||
|  | <assembly xmlns="urn:schemas-microsoft-com:asm.v1" | ||||||
|  |           manifestVersion="1.0"> | ||||||
|  |   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> | ||||||
|  |     <security> | ||||||
|  |       <requestedPrivileges> | ||||||
|  |         <requestedExecutionLevel level="asInvoker" uiAccess="false"> | ||||||
|  |         </requestedExecutionLevel> | ||||||
|  |       </requestedPrivileges> | ||||||
|  |     </security> | ||||||
|  |   </trustInfo> | ||||||
|  |   <dependency> | ||||||
|  | 
 | ||||||
|  |   </dependency> | ||||||
|  |   <dependency> | ||||||
|  |     <dependentAssembly> | ||||||
|  |       <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" | ||||||
|  |         version="9.0.21022.8" processorArchitecture="x86" | ||||||
|  |         publicKeyToken="XXXX"></assemblyIdentity> | ||||||
|  |     </dependentAssembly> | ||||||
|  |   </dependency> | ||||||
|  | </assembly>""" | ||||||
|  | 
 | ||||||
|  | @unittest.skipUnless(sys.platform=="win32", "These tests are only for win32") | ||||||
|  | class msvc9compilerTestCase(support.TempdirManager, | ||||||
|  |                             unittest.TestCase): | ||||||
| 
 | 
 | ||||||
|     def test_no_compiler(self): |     def test_no_compiler(self): | ||||||
|         # makes sure query_vcvarsall throws |         # makes sure query_vcvarsall throws | ||||||
|         # a DistutilsPlatformError if the compiler |         # a DistutilsPlatformError if the compiler | ||||||
|         # is not found |         # is not found | ||||||
|         if sys.platform != 'win32': |  | ||||||
|             # this test is only for win32 |  | ||||||
|             return |  | ||||||
|         from distutils.msvccompiler import get_build_version |         from distutils.msvccompiler import get_build_version | ||||||
|         if get_build_version() < 8.0: |         if get_build_version() < 8.0: | ||||||
|             # this test is only for MSVC8.0 or above |             # this test is only for MSVC8.0 or above | ||||||
|  | @ -31,9 +86,6 @@ def _find_vcvarsall(version): | ||||||
|             msvc9compiler.find_vcvarsall = old_find_vcvarsall |             msvc9compiler.find_vcvarsall = old_find_vcvarsall | ||||||
| 
 | 
 | ||||||
|     def test_reg_class(self): |     def test_reg_class(self): | ||||||
|         if sys.platform != 'win32': |  | ||||||
|             # this test is only for win32 |  | ||||||
|             return |  | ||||||
|         from distutils.msvccompiler import get_build_version |         from distutils.msvccompiler import get_build_version | ||||||
|         if get_build_version() < 8.0: |         if get_build_version() < 8.0: | ||||||
|             # this test is only for MSVC8.0 or above |             # this test is only for MSVC8.0 or above | ||||||
|  | @ -56,6 +108,27 @@ def test_reg_class(self): | ||||||
|         keys = Reg.read_keys(HKCU, r'Control Panel') |         keys = Reg.read_keys(HKCU, r'Control Panel') | ||||||
|         self.assertTrue('Desktop' in keys) |         self.assertTrue('Desktop' in keys) | ||||||
| 
 | 
 | ||||||
|  |     def test_remove_visual_c_ref(self): | ||||||
|  |         from distutils.msvc9compiler import MSVCCompiler | ||||||
|  |         tempdir = self.mkdtemp() | ||||||
|  |         manifest = os.path.join(tempdir, 'manifest') | ||||||
|  |         f = open(manifest, 'w') | ||||||
|  |         f.write(_MANIFEST) | ||||||
|  |         f.close() | ||||||
|  | 
 | ||||||
|  |         compiler = MSVCCompiler() | ||||||
|  |         compiler._remove_visual_c_ref(manifest) | ||||||
|  | 
 | ||||||
|  |         # see what we got | ||||||
|  |         f = open(manifest) | ||||||
|  |         # removing trailing spaces | ||||||
|  |         content = '\n'.join([line.rstrip() for line in f.readlines()]) | ||||||
|  |         f.close() | ||||||
|  | 
 | ||||||
|  |         # makes sure the manifest was properly cleaned | ||||||
|  |         self.assertEquals(content, _CLEANED_MANIFEST) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def test_suite(): | def test_suite(): | ||||||
|     return unittest.makeSuite(msvc9compilerTestCase) |     return unittest.makeSuite(msvc9compilerTestCase) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -58,6 +58,10 @@ Core and Builtins | ||||||
| Library | Library | ||||||
| ------- | ------- | ||||||
| 
 | 
 | ||||||
|  | - Issue #7556: Make sure Distutils' msvc9compile reads and writes the | ||||||
|  |   MSVC XML Manifest file in text mode so string patterns can be used  | ||||||
|  |   in regular expressions. | ||||||
|  | 
 | ||||||
| - Issue #7552: Removed line feed in the base64 Authorization header in | - Issue #7552: Removed line feed in the base64 Authorization header in | ||||||
|   the Distutils upload command to avoid an error when PyPI reads it. |   the Distutils upload command to avoid an error when PyPI reads it. | ||||||
|   This occurs on long passwords. Initial patch by JP St. Pierre. |   This occurs on long passwords. Initial patch by JP St. Pierre. | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Tarek Ziadé
						Tarek Ziadé