From: Tarek Ziadé Date: Wed, 6 May 2009 07:30:47 +0000 (+0000) Subject: Merged revisions 72379 via svnmerge from X-Git-Tag: 3.0~124 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5020e3438912a866ef6e976f7a5526b7b0833efd;p=thirdparty%2FPython%2Fcpython.git Merged revisions 72379 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r72379 | tarek.ziade | 2009-05-06 09:26:24 +0200 (Wed, 06 May 2009) | 1 line Fixed #5940: distutils.command.build_clib.check_library_list is doing the right checkings again ........ --- diff --git a/Lib/distutils/command/build_clib.py b/Lib/distutils/command/build_clib.py index 34f4983689c0..258d7c10be48 100644 --- a/Lib/distutils/command/build_clib.py +++ b/Lib/distutils/command/build_clib.py @@ -118,13 +118,15 @@ class build_clib(Command): 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). - 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! + """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. + """ if not isinstance(libraries, list): raise DistutilsSetupError( "'libraries' option must be a list of tuples") @@ -134,15 +136,18 @@ class build_clib(Command): 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)") diff --git a/Lib/distutils/tests/test_build_clib.py b/Lib/distutils/tests/test_build_clib.py new file mode 100644 index 000000000000..9c87722b9aa3 --- /dev/null +++ b/Lib/distutils/tests/test_build_clib.py @@ -0,0 +1,52 @@ +"""Tests for distutils.command.build_clib.""" +import unittest +import os + +from distutils.dist import Distribution +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): + tmp_dir = self.mkdtemp() + pkg_dir = os.path.join(tmp_dir, 'foo') + os.mkdir(pkg_dir) + dist = Distribution() + 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") diff --git a/Misc/NEWS b/Misc/NEWS index 2f9d99e0bfb5..8cdc90505beb 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -55,6 +55,9 @@ Core and Builtins 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.