]> granicus.if.org Git - python/commitdiff
Issue #21042: Revert Linux find_library() to return just filename
authorMartin Panter <vadmium+py@gmail.com>
Thu, 17 Mar 2016 07:50:22 +0000 (07:50 +0000)
committerMartin Panter <vadmium+py@gmail.com>
Thu, 17 Mar 2016 07:50:22 +0000 (07:50 +0000)
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.

Doc/library/ctypes.rst
Lib/ctypes/test/test_find.py
Lib/ctypes/util.py
Misc/NEWS

index 4a7309e3a956c9fecee4ade9792f7b7f999b9051..828d7ca4a36d67639734739f0aba9cf8f6f3070b 100644 (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
index 1845bb0e723bdf7577a6cb59fe7e322c8bb9bb85..e6bc19d7dddf98c64abca05656edaace4bf0cb0e 100644 (file)
@@ -9,39 +9,39 @@ from ctypes.util import find_library
 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 @@ class Test_OpenGL_libs(unittest.TestCase):
             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
index d8e3bfac9e39cc07ad851d59400fad4ec2143106..38bd57fddd103f8c802b3ed3eea3bfbf5ddc423c 100644 (file)
@@ -221,7 +221,7 @@ elif os.name == "posix":
             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'],
index 8338a840236436356c61e3335cb7dbc3a67db228..7f93b2bab4c4af1aee7af8537a13392295ebb586 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.