Skip to content

Commit 9ee0cd0

Browse files
libmagic-sys-provided: let user override paths
let the user override assumed paths via environment. lib_dir is probed first from LD_LIBRARY_PATH. Location on libmagic.so can be overriden by passing path via LIBMAGIC environment variable. If not found it falls back to lib_dir/libmagic.so. Location of the magic database can be specified via MAGIC environment variable. If not found it falls back to the previous bevahior. With this patch it possible to run scancode is buildsystems like YOCTO, which heaviily rely on overriding paths via environment to pick the correct implementation from the build workspace Signed-off-by: Konrad Weihmann <kweihmann@outlook.com>
1 parent 42a870a commit 9ee0cd0

File tree

1 file changed

+31
-26
lines changed
  • builtins/typecode_libmagic_system_provided/src/typecode_libmagic

1 file changed

+31
-26
lines changed

builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@
2222
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2323

2424

25-
from os import path
2625
import platform
26+
from os import environ
27+
from os import path
2728

2829
from plugincode.location_provider import LocationProviderPlugin
2930

@@ -35,38 +36,42 @@ def get_locations(self):
3536
locations of the libmagic shared library as installed on various Linux
3637
distros or on FreeBSD.
3738
"""
38-
system_arch = platform.machine()
39-
mainstream_system = platform.system().lower()
40-
if mainstream_system == 'linux':
41-
distribution = platform.linux_distribution()[0].lower()
42-
debian_based_distro = ['ubuntu', 'mint', 'debian']
43-
rpm_based_distro = ['fedora', 'redhat']
44-
45-
if distribution in debian_based_distro:
46-
data_dir = '/usr/lib/file'
47-
lib_dir = '/usr/lib/'+system_arch+'-linux-gnu'
39+
lib_dir = environ.get('LD_LIBRARY_PATH')
40+
lib_dll = path.join(lib_dir, 'libmagic.so')
41+
data_dir = '/usr/share'
42+
if not lib_dir:
43+
system_arch = platform.machine()
44+
mainstream_system = platform.system().lower()
45+
if mainstream_system == 'linux':
46+
distribution = platform.linux_distribution()[0].lower()
47+
debian_based_distro = ['ubuntu', 'mint', 'debian']
48+
rpm_based_distro = ['fedora', 'redhat']
4849

49-
elif distribution in rpm_based_distro:
50-
data_dir = '/usr/share/misc'
51-
lib_dir = '/usr/lib64'
50+
if distribution in debian_based_distro:
51+
data_dir = '/usr/lib/file'
52+
lib_dir = '/usr/lib/'+system_arch+'-linux-gnu'
5253

53-
else:
54-
raise Exception('Unsupported system: {}'.format(distribution))
54+
elif distribution in rpm_based_distro:
55+
data_dir = '/usr/share/misc'
56+
lib_dir = '/usr/lib64'
5557

56-
lib_dll = path.join(lib_dir, 'libmagic.so');
58+
else:
59+
raise Exception('Unsupported system: {}'.format(distribution))
5760

58-
elif mainstream_system == 'freebsd':
59-
if path.isdir('/usr/local/'):
60-
lib_dir = '/usr/local'
61-
else:
62-
lib_dir = '/usr'
61+
elif mainstream_system == 'freebsd':
62+
if path.isdir('/usr/local/'):
63+
lib_dir = '/usr/local'
64+
else:
65+
lib_dir = '/usr'
6366

64-
lib_dll = path.join(lib_dir, 'lib/libmagic.so')
65-
data_dir = path.join(lib_dir,'share/file')
67+
lib_dll = path.join(lib_dir, 'lib/libmagic.so')
68+
data_dir = path.join(lib_dir,'share/file')
69+
lib_magic = environ.get('LIBMAGIC', lib_dll)
70+
file_magic_data = environ.get('MAGIC', path.join(data_dir, 'magic.mgc'))
6671

6772
locations = {
6873
'typecode.libmagic.libdir': lib_dir,
69-
'typecode.libmagic.dll': lib_dll,
70-
'typecode.libmagic.db': path.join(data_dir, 'magic.mgc'),
74+
'typecode.libmagic.dll': lib_magic,
75+
'typecode.libmagic.db': file_magic_data,
7176
}
7277
return locations

0 commit comments

Comments
 (0)