mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Fixed #5940: distutils.command.build_clib.check_library_list is doing the right checkings again
This commit is contained in:
		
							parent
							
								
									bcf8506dcd
								
							
						
					
					
						commit
						dd9f65f23e
					
				
					 3 changed files with 65 additions and 10 deletions
				
			
		|  | @ -118,13 +118,15 @@ def run(self): | |||
| 
 | ||||
| 
 | ||||
|     def check_library_list(self, libraries): | ||||
|         """Ensure that the list of libraries (presumably provided as a | ||||
|            command option 'libraries') is valid, i.e. it is a list of | ||||
|            2-tuples, where the tuples are (library_name, build_info_dict). | ||||
|         """Ensure that the list of libraries is valid. | ||||
| 
 | ||||
|         `library` is presumably provided as a command option 'libraries'. | ||||
|         This method checks that it is a list of 2-tuples, where the tuples | ||||
|         are (library_name, build_info_dict). | ||||
| 
 | ||||
|         Raise DistutilsSetupError if the structure is invalid anywhere; | ||||
|            just returns otherwise.""" | ||||
|         # Yechh, blecch, ackk: this is ripped straight out of build_ext.py, | ||||
|         # with only names changed to protect the innocent! | ||||
|         just returns otherwise. | ||||
|         """ | ||||
|         if not isinstance(libraries, list): | ||||
|             raise DistutilsSetupError( | ||||
|                   "'libraries' option must be a list of tuples") | ||||
|  | @ -134,15 +136,18 @@ def check_library_list(self, libraries): | |||
|                 raise DistutilsSetupError( | ||||
|                       "each element of 'libraries' must a 2-tuple") | ||||
| 
 | ||||
|             if isinstance(lib[0], str): | ||||
|             name, build_info = lib | ||||
| 
 | ||||
|             if not isinstance(name, str): | ||||
|                 raise DistutilsSetupError( | ||||
|                       "first element of each tuple in 'libraries' " | ||||
|                       "must be a string (the library name)") | ||||
|             if '/' in lib[0] or (os.sep != '/' and os.sep in lib[0]): | ||||
| 
 | ||||
|             if '/' in name or (os.sep != '/' and os.sep in name): | ||||
|                 raise DistutilsSetupError("bad library name '%s': " | ||||
|                        "may not contain directory separators" % lib[0]) | ||||
| 
 | ||||
|             if not isinstance(lib[1], dict): | ||||
|             if not isinstance(build_info, dict): | ||||
|                 raise DistutilsSetupError( | ||||
|                       "second element of each tuple in 'libraries' " | ||||
|                       "must be a dictionary (build info)") | ||||
|  |  | |||
							
								
								
									
										47
									
								
								Lib/distutils/tests/test_build_clib.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								Lib/distutils/tests/test_build_clib.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | |||
| """Tests for distutils.command.build_clib.""" | ||||
| import unittest | ||||
| 
 | ||||
| from distutils.command.build_clib import build_clib | ||||
| from distutils.errors import DistutilsSetupError | ||||
| from distutils.tests import support | ||||
| 
 | ||||
| class BuildCLibTestCase(support.TempdirManager, | ||||
|                         support.LoggingSilencer, | ||||
|                         unittest.TestCase): | ||||
| 
 | ||||
|     def test_check_library_dist(self): | ||||
|         pkg_dir, dist = self.create_dist() | ||||
|         cmd = build_clib(dist) | ||||
| 
 | ||||
|         # 'libraries' option must be a list | ||||
|         self.assertRaises(DistutilsSetupError, cmd.check_library_list, 'foo') | ||||
| 
 | ||||
|         # each element of 'libraries' must a 2-tuple | ||||
|         self.assertRaises(DistutilsSetupError, cmd.check_library_list, | ||||
|                           ['foo1', 'foo2']) | ||||
| 
 | ||||
|         # first element of each tuple in 'libraries' | ||||
|         # must be a string (the library name) | ||||
|         self.assertRaises(DistutilsSetupError, cmd.check_library_list, | ||||
|                           [(1, 'foo1'), ('name', 'foo2')]) | ||||
| 
 | ||||
|         # library name may not contain directory separators | ||||
|         self.assertRaises(DistutilsSetupError, cmd.check_library_list, | ||||
|                           [('name', 'foo1'), | ||||
|                            ('another/name', 'foo2')]) | ||||
| 
 | ||||
|         # second element of each tuple must be a dictionary (build info) | ||||
|         self.assertRaises(DistutilsSetupError, cmd.check_library_list, | ||||
|                           [('name', {}), | ||||
|                            ('another', 'foo2')]) | ||||
| 
 | ||||
|         # those work | ||||
|         libs = [('name', {}), ('name', {'ok': 'good'})] | ||||
|         cmd.check_library_list(libs) | ||||
| 
 | ||||
| 
 | ||||
| def test_suite(): | ||||
|     return unittest.makeSuite(BuildCLibTestCase) | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     unittest.main(defaultTest="test_suite") | ||||
|  | @ -127,6 +127,9 @@ Installation | |||
| Library | ||||
| ------- | ||||
| 
 | ||||
| - Issue #5940: distutils.command.build_clib.check_library_list was not doing  | ||||
|   the right type checkings anymore. | ||||
| 
 | ||||
| - Issue #4875: On win32, ctypes.util.find_library does no longer | ||||
|   return directories. | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Tarek Ziadé
						Tarek Ziadé