[Python-checkins] cpython: Issue #21042: Revert Linux find_library() to return just filename

martin.panter python-checkins at python.org
Wed Mar 16 04:41:46 EDT 2016


https://hg.python.org/cpython/rev/811ec2860dc4
changeset:   100557:811ec2860dc4
user:        Martin Panter <vadmium+py at gmail.com>
date:        Thu Mar 17 07:50:22 2016 +0000
summary:
  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.

files:
  Doc/library/ctypes.rst       |  11 ++----
  Lib/ctypes/test/test_find.py |  40 +++++++++--------------
  Lib/ctypes/util.py           |   2 +-
  Misc/NEWS                    |   3 -
  4 files changed, 21 insertions(+), 35 deletions(-)


diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -1258,15 +1258,15 @@
 
 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 @@
 
    The exact functionality is system dependent.
 
-   .. versionchanged:: 3.6
-      On Linux it returns an absolute path.
-
 
 .. function:: find_msvcrt()
    :module: ctypes.util
diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py
--- a/Lib/ctypes/test/test_find.py
+++ b/Lib/ctypes/test/test_find.py
@@ -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 @@
             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
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
--- a/Lib/ctypes/util.py
+++ b/Lib/ctypes/util.py
@@ -221,7 +221,7 @@
             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'],
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -245,9 +245,6 @@
 
 - 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.
 

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list