diff options
| author | robot-piglet <[email protected]> | 2023-12-02 01:45:21 +0300 |
|---|---|---|
| committer | robot-piglet <[email protected]> | 2023-12-02 02:42:50 +0300 |
| commit | 9c43d58f75cf086b744cf4fe2ae180e8f37e4a0c (patch) | |
| tree | 9f88a486917d371d099cd712efd91b4c122d209d /contrib/python/python-magic/py3/magic/loader.py | |
| parent | 32fb6dda1feb24f9ab69ece5df0cb9ec238ca5e6 (diff) | |
Intermediate changes
Diffstat (limited to 'contrib/python/python-magic/py3/magic/loader.py')
| -rw-r--r-- | contrib/python/python-magic/py3/magic/loader.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/contrib/python/python-magic/py3/magic/loader.py b/contrib/python/python-magic/py3/magic/loader.py new file mode 100644 index 00000000000..931f16193e4 --- /dev/null +++ b/contrib/python/python-magic/py3/magic/loader.py @@ -0,0 +1,50 @@ +from ctypes.util import find_library +import ctypes +import sys +import glob +import os.path + +def _lib_candidates(): + + yield find_library('magic') + + if sys.platform == 'darwin': + + paths = [ + '/opt/local/lib', + '/usr/local/lib', + '/opt/homebrew/lib', + ] + glob.glob('/usr/local/Cellar/libmagic/*/lib') + + for i in paths: + yield os.path.join(i, 'libmagic.dylib') + + elif sys.platform in ('win32', 'cygwin'): + + prefixes = ['libmagic', 'magic1', 'cygmagic-1', 'libmagic-1', 'msys-magic-1'] + + for i in prefixes: + # find_library searches in %PATH% but not the current directory, + # so look for both + yield './%s.dll' % (i,) + yield find_library(i) + + elif sys.platform == 'linux': + # This is necessary because alpine is bad + yield 'libmagic.so.1' + + +def load_lib(): + + for lib in _lib_candidates(): + # find_library returns None when lib not found + if lib is None: + continue + try: + return ctypes.CDLL(lib) + except OSError: + pass + else: + # It is better to raise an ImportError since we are importing magic module + raise ImportError('failed to find libmagic. Check your installation') + |
