summaryrefslogtreecommitdiffstats
path: root/Lib/distutils
diff options
context:
space:
mode:
authorTarek Ziadé <ziade.tarek@gmail.com>2009-05-06 07:26:24 (GMT)
committerTarek Ziadé <ziade.tarek@gmail.com>2009-05-06 07:26:24 (GMT)
commitdd9f65f23e68d3554dd614190c37478351680889 (patch)
tree4c780719ef69058917d1f2dd740e6ed19430f653 /Lib/distutils
parentbcf8506dcd149eaff626512adc377f49aae93de3 (diff)
downloadcpython-dd9f65f23e68d3554dd614190c37478351680889.zip
cpython-dd9f65f23e68d3554dd614190c37478351680889.tar.gz
cpython-dd9f65f23e68d3554dd614190c37478351680889.tar.bz2
Fixed #5940: distutils.command.build_clib.check_library_list is doing the right checkings again
Diffstat (limited to 'Lib/distutils')
-rw-r--r--Lib/distutils/command/build_clib.py25
-rw-r--r--Lib/distutils/tests/test_build_clib.py47
2 files changed, 62 insertions, 10 deletions
diff --git a/Lib/distutils/command/build_clib.py b/Lib/distutils/command/build_clib.py
index 34f4983..258d7c1 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 0000000..36c07b7
--- /dev/null
+++ b/Lib/distutils/tests/test_build_clib.py
@@ -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")