Issue #21042: Revert Linux find_library() to return just filename

This reverts most of revision 3092cf163eb4. The change worked on x86
architectures, but did not work on ARM, probably due to extra ABI flags in
the ldconfig output.
This commit is contained in:
Martin Panter 2016-03-17 07:50:22 +00:00
parent ec195fba5b
commit 32f2eb4941
4 changed files with 21 additions and 35 deletions

View file

@ -1258,15 +1258,15 @@ The exact functionality is system dependent.
On Linux, :func:`find_library` tries to run external programs
(``/sbin/ldconfig``, ``gcc``, and ``objdump``) to find the library file. It
returns the absolute path of the library file. Here are some examples::
returns the filename of the library file. Here are some examples::
>>> from ctypes.util import find_library
>>> find_library("m")
'/lib/x86_64-linux-gnu/libm.so.6'
'libm.so.6'
>>> find_library("c")
'/lib/x86_64-linux-gnu/libc.so.6'
'libc.so.6'
>>> find_library("bz2")
'/lib/x86_64-linux-gnu/libbz2.so.1.0'
'libbz2.so.1.0'
>>>
On OS X, :func:`find_library` tries several predefined naming schemes and paths
@ -1835,9 +1835,6 @@ Utility functions
The exact functionality is system dependent.
.. versionchanged:: 3.6
On Linux it returns an absolute path.
.. function:: find_msvcrt()
:module: ctypes.util

View file

@ -9,39 +9,39 @@
class Test_OpenGL_libs(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.lib_gl = cls.lib_glu = cls.lib_gle = None
lib_gl = lib_glu = lib_gle = None
if sys.platform == "win32":
cls.lib_gl = find_library("OpenGL32")
cls.lib_glu = find_library("Glu32")
lib_gl = find_library("OpenGL32")
lib_glu = find_library("Glu32")
elif sys.platform == "darwin":
cls.lib_gl = cls.lib_glu = find_library("OpenGL")
lib_gl = lib_glu = find_library("OpenGL")
else:
cls.lib_gl = find_library("GL")
cls.lib_glu = find_library("GLU")
cls.lib_gle = find_library("gle")
lib_gl = find_library("GL")
lib_glu = find_library("GLU")
lib_gle = find_library("gle")
## print, for debugging
if test.support.verbose:
print("OpenGL libraries:")
for item in (("GL", cls.lib_gl),
("GLU", cls.lib_glu),
("gle", cls.lib_gle)):
for item in (("GL", lib_gl),
("GLU", lib_glu),
("gle", lib_gle)):
print("\t", item)
cls.gl = cls.glu = cls.gle = None
if cls.lib_gl:
if lib_gl:
try:
cls.gl = CDLL(cls.lib_gl, mode=RTLD_GLOBAL)
cls.gl = CDLL(lib_gl, mode=RTLD_GLOBAL)
except OSError:
pass
if cls.lib_glu:
if lib_glu:
try:
cls.glu = CDLL(cls.lib_glu, RTLD_GLOBAL)
cls.glu = CDLL(lib_glu, RTLD_GLOBAL)
except OSError:
pass
if cls.lib_gle:
if lib_gle:
try:
cls.gle = CDLL(cls.lib_gle)
cls.gle = CDLL(lib_gle)
except OSError:
pass
@ -64,14 +64,6 @@ def test_gle(self):
self.skipTest('lib_gle not available')
self.gle.gleGetJoinStyle
def test_abspath(self):
if self.lib_gl:
self.assertTrue(os.path.isabs(self.lib_gl))
if self.lib_glu:
self.assertTrue(os.path.isabs(self.lib_glu))
if self.lib_gle:
self.assertTrue(os.path.isabs(self.lib_gle))
# On platforms where the default shared library suffix is '.so',
# at least some libraries can be loaded as attributes of the cdll
# object, since ctypes now tries loading the lib again

View file

@ -221,7 +221,7 @@ def _findSoname_ldconfig(name):
abi_type = mach_map.get(machine, 'libc6')
# XXX assuming GLIBC's ldconfig (with option -p)
regex = r'lib%s\.[^\s]+\s\(%s(?:,\s.*)?\)\s=>\s(.*)'
regex = r'\s+(lib%s\.[^\s]+)\s+\(%s'
regex = os.fsencode(regex % (re.escape(name), abi_type))
try:
with subprocess.Popen(['/sbin/ldconfig', '-p'],

View file

@ -245,9 +245,6 @@ Library
- Issue #26177: Fixed the keys() method for Canvas and Scrollbar widgets.
- Issue #21042: Make ctypes.util.find_library() return the full path on
Linux, similar to other platforms. Patch by Tamás Bence Gedai.
- Issue #15068: Got rid of excessive buffering in fileinput.
The bufsize parameter is now deprecated and ignored.