Skip to content

Commit a8e52b3

Browse files
authored
Merge pull request #9 from priv-kweihmann/system-provided-better-override
Allow user to override path assumption for system-provided modules
2 parents 88e6154 + 627608d commit a8e52b3

6 files changed

Lines changed: 103 additions & 67 deletions

File tree

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
A ScanCode Toolkit plugin to use pre-installed system binary libraries and utilities.
1+
A ScanCode Toolkit plugin to use pre-installed 7zip executables
2+
===============================================================
3+
4+
the path of 7zip is either determined by distro data or explicitily
5+
taken from ``EXTRACTCODE_7Z_PATH`` environment variable

builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010

1111
import platform
12+
from os import environ
1213
from os import path
1314

1415
from plugincode.location_provider import LocationProviderPlugin
@@ -22,26 +23,31 @@ def get_locations(self):
2223
locations of the 7zip exe and shared libraries as installed on various
2324
Linux distros or on FreeBSD.
2425
"""
25-
mainstream_system = platform.system().lower()
26-
if mainstream_system == 'linux':
27-
distribution = platform.linux_distribution()[0].lower()
28-
debian_based_distro = ['ubuntu', 'mint', 'debian']
29-
rpm_based_distro = ['fedora', 'redhat']
30-
31-
if distribution in debian_based_distro:
32-
lib_dir = '/usr/lib/p7zip'
33-
34-
elif distribution in rpm_based_distro:
35-
lib_dir = '/usr/libexec/p7zip'
36-
37-
else:
38-
raise Exception('Unsupported system: {}'.format(distribution))
39-
elif mainstream_system == 'freebsd':
40-
lib_dir = '/usr/local/libexec/p7zip'
26+
lib_7z = environ.get('EXTRACTCODE_7Z_PATH')
27+
if not lib_7z:
28+
mainstream_system = platform.system().lower()
29+
if mainstream_system == 'linux':
30+
distribution = platform.linux_distribution()[0].lower()
31+
debian_based_distro = ['ubuntu', 'mint', 'debian']
32+
rpm_based_distro = ['fedora', 'redhat']
33+
34+
if distribution in debian_based_distro:
35+
lib_dir = '/usr/lib/p7zip'
36+
37+
elif distribution in rpm_based_distro:
38+
lib_dir = '/usr/libexec/p7zip'
39+
40+
else:
41+
raise Exception('Unsupported system: {}'.format(distribution))
42+
elif mainstream_system == 'freebsd':
43+
lib_dir = '/usr/local/libexec/p7zip'
44+
lib_7z = path.join(lib_dir, '7z')
45+
else:
46+
lib_dir = path.dirname(lib_7z)
4147

4248
locations = {
4349
'extractcode.sevenzip.libdir': lib_dir,
44-
'extractcode.sevenzip.exe': path.join(lib_dir, '7z'),
50+
'extractcode.sevenzip.exe': lib_7z,
4551
}
4652

4753
return locations
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
A ScanCode Toolkit plugin to use pre-installed system binary libraries and utilities.
1+
A ScanCode Toolkit plugin to use pre-installed libarchive library
2+
=================================================================
3+
4+
the path of libarchive.so is either determined by distro data or explicitily
5+
taken from ``EXTRACTCODE_LIBARCHIVE_PATH`` environment variable

builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
# See https://aboutcode.org for more information about nexB OSS projects.
88
#
99

10-
from os import path
1110
import platform
11+
from os import environ
12+
from os import path
1213

1314
from plugincode.location_provider import LocationProviderPlugin
1415

@@ -20,30 +21,35 @@ def get_locations(self):
2021
locations of the libarchive shared library as installed on various Linux
2122
distros or on FreeBSD.
2223
"""
23-
system_arch = platform.machine()
24-
mainstream_system = platform.system().lower()
25-
if mainstream_system == 'linux':
26-
distribution = platform.linux_distribution()[0].lower()
27-
debian_based_distro = ['ubuntu', 'mint', 'debian']
28-
rpm_based_distro = ['fedora', 'redhat']
29-
30-
if distribution in debian_based_distro:
31-
lib_dir = '/usr/lib/'+system_arch+'-linux-gnu'
32-
33-
elif distribution in rpm_based_distro:
34-
lib_dir = '/usr/lib64'
35-
36-
else:
37-
raise Exception('Unsupported system: {}'.format(distribution))
38-
39-
elif mainstream_system == 'freebsd':
40-
if path.isdir('/usr/local/'):
41-
lib_dir = '/usr/local/lib'
42-
else:
43-
lib_dir = '/usr/lib'
24+
lib_archive = environ.get('EXTRACTCODE_LIBARCHIVE_PATH')
25+
if not lib_archive:
26+
system_arch = platform.machine()
27+
mainstream_system = platform.system().lower()
28+
if mainstream_system == 'linux':
29+
distribution = platform.linux_distribution()[0].lower()
30+
debian_based_distro = ['ubuntu', 'mint', 'debian']
31+
rpm_based_distro = ['fedora', 'redhat']
32+
33+
if distribution in debian_based_distro:
34+
lib_dir = '/usr/lib/'+system_arch+'-linux-gnu'
35+
36+
elif distribution in rpm_based_distro:
37+
lib_dir = '/usr/lib64'
38+
39+
else:
40+
raise Exception('Unsupported system: {}'.format(distribution))
41+
42+
elif mainstream_system == 'freebsd':
43+
if path.isdir('/usr/local/'):
44+
lib_dir = '/usr/local/lib'
45+
else:
46+
lib_dir = '/usr/lib'
47+
lib_archive = path.join(lib_dir, 'libarchive.so')
48+
else:
49+
lib_dir = path.dirname(lib_archive)
4450

4551
locations = {
4652
'extractcode.libarchive.libdir': lib_dir,
47-
'extractcode.libarchive.dll': path.join(lib_dir, 'libarchive.so'),
53+
'extractcode.libarchive.dll': lib_archive,
4854
}
4955
return locations
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,8 @@
1-
A ScanCode Toolkit plugin to use pre-installed system binary libraries and utilities.
1+
A ScanCode Toolkit plugin to use pre-installed libmagic library and data file
2+
=============================================================================
3+
4+
the path of libmagic is either determined by distro data or explicitly
5+
taken from ``TYPECODE_LIBMAGIC_PATH`` environment variable. additionally
6+
the path to ``magic.mgc`` file can be explicitly set by using
7+
``TYPECODE_LIBMAGIC_DB_PATH`` environment variable, otherwise it is
8+
calculated from distro data

builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py

Lines changed: 33 additions & 24 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,46 @@ 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']
39+
lib_dll = environ.get('TYPECODE_LIBMAGIC_PATH')
40+
if not lib_dll:
41+
system_arch = platform.machine()
42+
mainstream_system = platform.system().lower()
43+
if mainstream_system == 'linux':
44+
distribution = platform.linux_distribution()[0].lower()
45+
debian_based_distro = ['ubuntu', 'mint', 'debian']
46+
rpm_based_distro = ['fedora', 'redhat']
47+
48+
if distribution in debian_based_distro:
49+
data_dir = '/usr/lib/file'
50+
lib_dir = '/usr/lib/'+system_arch+'-linux-gnu'
4451

45-
if distribution in debian_based_distro:
46-
data_dir = '/usr/lib/file'
47-
lib_dir = '/usr/lib/'+system_arch+'-linux-gnu'
52+
elif distribution in rpm_based_distro:
53+
data_dir = '/usr/share/misc'
54+
lib_dir = '/usr/lib64'
4855

49-
elif distribution in rpm_based_distro:
50-
data_dir = '/usr/share/misc'
51-
lib_dir = '/usr/lib64'
56+
else:
57+
raise Exception('Unsupported system: {}'.format(distribution))
5258

53-
else:
54-
raise Exception('Unsupported system: {}'.format(distribution))
59+
lib_dll = path.join(lib_dir, 'libmagic.so')
5560

56-
lib_dll = path.join(lib_dir, 'libmagic.so');
61+
elif mainstream_system == 'freebsd':
62+
if path.isdir('/usr/local/'):
63+
lib_dir = '/usr/local'
64+
else:
65+
lib_dir = '/usr'
5766

58-
elif mainstream_system == 'freebsd':
59-
if path.isdir('/usr/local/'):
60-
lib_dir = '/usr/local'
61-
else:
62-
lib_dir = '/usr'
67+
lib_dll = path.join(lib_dir, 'lib/libmagic.so')
68+
data_dir = path.join(lib_dir,'share/file')
69+
else:
70+
lib_dir = path.dirname(lib_dll)
6371

64-
lib_dll = path.join(lib_dir, 'lib/libmagic.so')
65-
data_dir = path.join(lib_dir,'share/file')
72+
file_magic_data = environ.get('TYPECODE_LIBMAGIC_DB_PATH')
73+
if not file_magic_data:
74+
file_magic_data = path.join(data_dir, 'magic.mgc')
6675

6776
locations = {
6877
'typecode.libmagic.libdir': lib_dir,
6978
'typecode.libmagic.dll': lib_dll,
70-
'typecode.libmagic.db': path.join(data_dir, 'magic.mgc'),
79+
'typecode.libmagic.db': file_magic_data,
7180
}
7281
return locations

0 commit comments

Comments
 (0)