summaryrefslogtreecommitdiffstats
path: root/contrib/python/python-magic/py3/magic/loader.py
diff options
context:
space:
mode:
authorrobot-piglet <[email protected]>2023-12-02 01:45:21 +0300
committerrobot-piglet <[email protected]>2023-12-02 02:42:50 +0300
commit9c43d58f75cf086b744cf4fe2ae180e8f37e4a0c (patch)
tree9f88a486917d371d099cd712efd91b4c122d209d /contrib/python/python-magic/py3/magic/loader.py
parent32fb6dda1feb24f9ab69ece5df0cb9ec238ca5e6 (diff)
Intermediate changes
Diffstat (limited to 'contrib/python/python-magic/py3/magic/loader.py')
-rw-r--r--contrib/python/python-magic/py3/magic/loader.py50
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')
+