mirror of https://github.com/python/cpython
gh-71052: Implement `ctypes.util.find_library` on Android (GH-116379)
This commit is contained in:
parent
d16c9d1278
commit
1f8b24ef69
|
@ -1334,8 +1334,9 @@ Here are some examples::
|
|||
'libbz2.so.1.0'
|
||||
>>>
|
||||
|
||||
On macOS, :func:`~ctypes.util.find_library` tries several predefined naming schemes and paths
|
||||
to locate the library, and returns a full pathname if successful::
|
||||
On macOS and Android, :func:`~ctypes.util.find_library` uses the system's
|
||||
standard naming schemes and paths to locate the library, and returns a full
|
||||
pathname if successful::
|
||||
|
||||
>>> from ctypes.util import find_library
|
||||
>>> find_library("c")
|
||||
|
|
|
@ -89,6 +89,15 @@ elif sys.platform.startswith("aix"):
|
|||
|
||||
from ctypes._aix import find_library
|
||||
|
||||
elif sys.platform == "android":
|
||||
def find_library(name):
|
||||
directory = "/system/lib"
|
||||
if "64" in os.uname().machine:
|
||||
directory += "64"
|
||||
|
||||
fname = f"{directory}/lib{name}.so"
|
||||
return fname if os.path.isfile(fname) else None
|
||||
|
||||
elif os.name == "posix":
|
||||
# Andreas Degert's find functions, using gcc, /sbin/ldconfig, objdump
|
||||
import re, tempfile
|
||||
|
|
|
@ -129,5 +129,28 @@ class FindLibraryLinux(unittest.TestCase):
|
|||
self.assertIsNone(find_library("libc"))
|
||||
|
||||
|
||||
@unittest.skipUnless(sys.platform == 'android', 'Test only valid for Android')
|
||||
class FindLibraryAndroid(unittest.TestCase):
|
||||
def test_find(self):
|
||||
for name in [
|
||||
"c", "m", # POSIX
|
||||
"z", # Non-POSIX, but present on Linux
|
||||
"log", # Not present on Linux
|
||||
]:
|
||||
with self.subTest(name=name):
|
||||
path = find_library(name)
|
||||
self.assertIsInstance(path, str)
|
||||
self.assertEqual(
|
||||
os.path.dirname(path),
|
||||
"/system/lib64" if "64" in os.uname().machine
|
||||
else "/system/lib")
|
||||
self.assertEqual(os.path.basename(path), f"lib{name}.so")
|
||||
self.assertTrue(os.path.isfile(path), path)
|
||||
|
||||
for name in ["libc", "nonexistent"]:
|
||||
with self.subTest(name=name):
|
||||
self.assertIsNone(find_library(name))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Implement :func:`ctypes.util.find_library` on Android.
|
Loading…
Reference in New Issue