mirror of https://github.com/python/cpython
Fixed #5940: distutils.command.build_clib.check_library_list is doing the right checkings again
This commit is contained in:
parent
bcf8506dcd
commit
dd9f65f23e
|
@ -118,13 +118,15 @@ class build_clib(Command):
|
||||||
|
|
||||||
|
|
||||||
def check_library_list(self, libraries):
|
def check_library_list(self, libraries):
|
||||||
"""Ensure that the list of libraries (presumably provided as a
|
"""Ensure that the list of libraries is valid.
|
||||||
command option 'libraries') is valid, i.e. it is a list of
|
|
||||||
2-tuples, where the tuples are (library_name, build_info_dict).
|
`library` is presumably provided as a command option 'libraries'.
|
||||||
Raise DistutilsSetupError if the structure is invalid anywhere;
|
This method checks that it is a list of 2-tuples, where the tuples
|
||||||
just returns otherwise."""
|
are (library_name, build_info_dict).
|
||||||
# Yechh, blecch, ackk: this is ripped straight out of build_ext.py,
|
|
||||||
# with only names changed to protect the innocent!
|
Raise DistutilsSetupError if the structure is invalid anywhere;
|
||||||
|
just returns otherwise.
|
||||||
|
"""
|
||||||
if not isinstance(libraries, list):
|
if not isinstance(libraries, list):
|
||||||
raise DistutilsSetupError(
|
raise DistutilsSetupError(
|
||||||
"'libraries' option must be a list of tuples")
|
"'libraries' option must be a list of tuples")
|
||||||
|
@ -134,15 +136,18 @@ class build_clib(Command):
|
||||||
raise DistutilsSetupError(
|
raise DistutilsSetupError(
|
||||||
"each element of 'libraries' must a 2-tuple")
|
"each element of 'libraries' must a 2-tuple")
|
||||||
|
|
||||||
if isinstance(lib[0], str):
|
name, build_info = lib
|
||||||
|
|
||||||
|
if not isinstance(name, str):
|
||||||
raise DistutilsSetupError(
|
raise DistutilsSetupError(
|
||||||
"first element of each tuple in 'libraries' "
|
"first element of each tuple in 'libraries' "
|
||||||
"must be a string (the library name)")
|
"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': "
|
raise DistutilsSetupError("bad library name '%s': "
|
||||||
"may not contain directory separators" % lib[0])
|
"may not contain directory separators" % lib[0])
|
||||||
|
|
||||||
if not isinstance(lib[1], dict):
|
if not isinstance(build_info, dict):
|
||||||
raise DistutilsSetupError(
|
raise DistutilsSetupError(
|
||||||
"second element of each tuple in 'libraries' "
|
"second element of each tuple in 'libraries' "
|
||||||
"must be a dictionary (build info)")
|
"must be a dictionary (build info)")
|
||||||
|
|
|
@ -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
|
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
|
- Issue #4875: On win32, ctypes.util.find_library does no longer
|
||||||
return directories.
|
return directories.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue