summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Liechti <cliechti@gmx.net>2020-09-15 20:13:39 +0200
committerChris Liechti <cliechti@gmx.net>2020-09-15 20:13:39 +0200
commitb2b36cfc956e86d54e681bf25059a5bcb28d7ce5 (patch)
tree13883609b9dc081035427c49e3e52775b6308f8a
parent690a8d0992c6374c1892308ea798acc379c736f6 (diff)
downloadpyserial-git-518-osx-workaround.tar.gz
osx: possible workaround for loading libraries on Mac OS 11518-osx-workaround
try different paths before using find_libary() related to #518
-rw-r--r--serial/tools/list_ports_osx.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/serial/tools/list_ports_osx.py b/serial/tools/list_ports_osx.py
index 34a7f5a..712964e 100644
--- a/serial/tools/list_ports_osx.py
+++ b/serial/tools/list_ports_osx.py
@@ -28,8 +28,23 @@ import ctypes.util
from serial.tools import list_ports_common
-iokit = ctypes.cdll.LoadLibrary(ctypes.util.find_library('IOKit'))
-cf = ctypes.cdll.LoadLibrary(ctypes.util.find_library('CoreFoundation'))
+
+def load_library(name):
+ # osx changed some things which triggers a python issue (python/cpython#21241)
+ # try loading with paths first before falling back to find_library
+ for candidate in [
+ '/System/Library/Frameworks/{0}.framework/{0}'.format(name),
+ '/System/Library/Frameworks/{0}.framework/Versions/A/{0}'.format(name),
+ ]:
+ try:
+ return ctypes.cdll.LoadLibrary(candidate)
+ except OSError:
+ pass
+ return ctypes.cdll.LoadLibrary(ctypes.util.find_library(name))
+
+
+iokit = load_library('IOKit')
+cf = load_library('CoreFoundation')
kIOMasterPortDefault = ctypes.c_void_p.in_dll(iokit, "kIOMasterPortDefault")
kCFAllocatorDefault = ctypes.c_void_p.in_dll(cf, "kCFAllocatorDefault")