| # Copyright 2012 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| try: |
| import ctypes |
| import ctypes.util |
| except ImportError: |
| ctypes = None |
| else: |
| try: |
| ctypes.cdll |
| except AttributeError: |
| ctypes = None |
| |
| _library_names = {} |
| |
| def find_library(name): |
| """ |
| Calls ctype.util.find_library() if the ctypes module is available, |
| and otherwise returns None. Results are cached for future invocations. |
| """ |
| filename = _library_names.get(name) |
| if filename is None: |
| if ctypes is not None: |
| filename = ctypes.util.find_library(name) |
| if filename is None: |
| filename = False |
| _library_names[name] = filename |
| |
| if filename is False: |
| return None |
| return filename |
| |
| _library_handles = {} |
| |
| def LoadLibrary(name): |
| """ |
| Calls ctypes.cdll.LoadLibrary(name) if the ctypes module is available, |
| and otherwise returns None. Results are cached for future invocations. |
| """ |
| handle = _library_handles.get(name) |
| |
| if handle is None and ctypes is not None: |
| handle = ctypes.CDLL(name, use_errno=True) |
| _library_handles[name] = handle |
| |
| return handle |