Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(4428)

Side by Side Diff: Lib/ctypes/util.py

Issue 21042: ctypes.util.find_library() should return full pathname instead of filename in linux
Patch Set: Created 3 years, 8 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 import sys, os 1 import sys, os
2 import contextlib 2 import contextlib
3 import subprocess 3 import subprocess
4 4
5 # find_library(name) returns the pathname of a library, or None. 5 # find_library(name) returns the pathname of a library, or None.
6 if os.name == "nt": 6 if os.name == "nt":
7 7
8 def _get_build_version(): 8 def _get_build_version():
9 """Return the version of MSVC that was used to build Python. 9 """Return the version of MSVC that was used to build Python.
10 10
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 return _get_soname(_findLib_crle(name, is64) or _findLib_gcc(name)) 204 return _get_soname(_findLib_crle(name, is64) or _findLib_gcc(name))
205 205
206 else: 206 else:
207 207
208 def _findSoname_ldconfig(name): 208 def _findSoname_ldconfig(name):
209 import struct 209 import struct
210 if struct.calcsize('l') == 4: 210 if struct.calcsize('l') == 4:
211 machine = os.uname().machine + '-32' 211 machine = os.uname().machine + '-32'
212 else: 212 else:
213 machine = os.uname().machine + '-64' 213 machine = os.uname().machine + '-64'
214 mach_map = {
215 'x86_64-64': 'libc6,x86-64',
216 'ppc64-64': 'libc6,64bit',
217 'sparc64-64': 'libc6,64bit',
218 's390x-64': 'libc6,64bit',
219 'ia64-64': 'libc6,IA-64',
220 }
221 abi_type = mach_map.get(machine, 'libc6')
222 214
223 # XXX assuming GLIBC's ldconfig (with option -p) 215 # XXX assuming GLIBC's ldconfig (with option -p)
224 regex = os.fsencode( 216 regex = os.fsencode(
225 '\s+(lib%s\.[^\s]+)\s+\(%s' % (re.escape(name), abi_type)) 217 '([^\s]+lib%s\.[^\s]+)' % (re.escape(name)))
Martin Panter 2016/02/04 04:27:52 Why did you remove the ABI checking? What if I onl
226 try: 218 try:
227 with subprocess.Popen(['/sbin/ldconfig', '-p'], 219 with subprocess.Popen(['/sbin/ldconfig', '-p'],
228 stdin=subprocess.DEVNULL, 220 stdin=subprocess.DEVNULL,
229 stderr=subprocess.DEVNULL, 221 stderr=subprocess.DEVNULL,
230 stdout=subprocess.PIPE, 222 stdout=subprocess.PIPE,
231 env={'LC_ALL': 'C', 'LANG': 'C'}) as p: 223 env={'LC_ALL': 'C', 'LANG': 'C'}) as p:
232 res = re.search(regex, p.stdout.read()) 224 res = re.search(regex, p.stdout.read())
233 if res: 225 if res:
234 return os.fsdecode(res.group(1)) 226 return os.fsdecode(res.group(1))
235 except OSError: 227 except OSError:
(...skipping 28 matching lines...) Expand all
264 print(cdll.LoadLibrary("libcrypto.dylib")) 256 print(cdll.LoadLibrary("libcrypto.dylib"))
265 print(cdll.LoadLibrary("libSystem.dylib")) 257 print(cdll.LoadLibrary("libSystem.dylib"))
266 print(cdll.LoadLibrary("System.framework/System")) 258 print(cdll.LoadLibrary("System.framework/System"))
267 else: 259 else:
268 print(cdll.LoadLibrary("libm.so")) 260 print(cdll.LoadLibrary("libm.so"))
269 print(cdll.LoadLibrary("libcrypt.so")) 261 print(cdll.LoadLibrary("libcrypt.so"))
270 print(find_library("crypt")) 262 print(find_library("crypt"))
271 263
272 if __name__ == "__main__": 264 if __name__ == "__main__":
273 test() 265 test()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

RSS Feeds Recent Issues | This issue
This is Rietveld 894c83f36cb7+