From b2b36cfc956e86d54e681bf25059a5bcb28d7ce5 Mon Sep 17 00:00:00 2001 From: Chris Liechti Date: Tue, 15 Sep 2020 20:13:39 +0200 Subject: osx: possible workaround for loading libraries on Mac OS 11 try different paths before using find_libary() related to #518 --- serial/tools/list_ports_osx.py | 19 +++++++++++++++++-- 1 file 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") -- cgit v1.2.1