From 0badaa85abc3f6843ed07e4960140b0454f8b05e Mon Sep 17 00:00:00 2001 From: Konrad Weihmann Date: Wed, 7 Apr 2021 20:43:01 +0200 Subject: [PATCH 1/3] 7z-sys-provided: let user override paths let the user override assumed paths via environment. EXTRACTCODE_7Z_PATH is used to determine the path of the 7z executable. If not specified it falls back to previously used probe of distro data. 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 --- .../extractcode_7z_system_provided/README.rst | 6 ++- .../src/extractcode_7z/__init__.py | 40 +++++++++++-------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/builtins/extractcode_7z_system_provided/README.rst b/builtins/extractcode_7z_system_provided/README.rst index 49a1e11..9482cc4 100755 --- a/builtins/extractcode_7z_system_provided/README.rst +++ b/builtins/extractcode_7z_system_provided/README.rst @@ -1 +1,5 @@ -A ScanCode Toolkit plugin to use pre-installed system binary libraries and utilities. +A ScanCode Toolkit plugin to use pre-installed 7zip executables +=============================================================== + +the path of 7zip is either determined by distro data or explicitily +taken from ``EXTRACTCODE_7Z_PATH`` environment variable diff --git a/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py b/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py index 74eb8de..63f02b9 100755 --- a/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py +++ b/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py @@ -9,6 +9,7 @@ import platform +from os import environ from os import path from plugincode.location_provider import LocationProviderPlugin @@ -22,26 +23,31 @@ def get_locations(self): locations of the 7zip exe and shared libraries as installed on various Linux distros or on FreeBSD. """ - mainstream_system = platform.system().lower() - if mainstream_system == 'linux': - distribution = platform.linux_distribution()[0].lower() - debian_based_distro = ['ubuntu', 'mint', 'debian'] - rpm_based_distro = ['fedora', 'redhat'] - - if distribution in debian_based_distro: - lib_dir = '/usr/lib/p7zip' - - elif distribution in rpm_based_distro: - lib_dir = '/usr/libexec/p7zip' - - else: - raise Exception('Unsupported system: {}'.format(distribution)) - elif mainstream_system == 'freebsd': - lib_dir = '/usr/local/libexec/p7zip' + lib_7z = environ.get('EXTRACTCODE_7Z_PATH') + if not lib_7z: + mainstream_system = platform.system().lower() + if mainstream_system == 'linux': + distribution = platform.linux_distribution()[0].lower() + debian_based_distro = ['ubuntu', 'mint', 'debian'] + rpm_based_distro = ['fedora', 'redhat'] + + if distribution in debian_based_distro: + lib_dir = '/usr/lib/p7zip' + + elif distribution in rpm_based_distro: + lib_dir = '/usr/libexec/p7zip' + + else: + raise Exception('Unsupported system: {}'.format(distribution)) + elif mainstream_system == 'freebsd': + lib_dir = '/usr/local/libexec/p7zip' + lib_7z = path.join(lib_dir, '7z') + else: + lib_dir = path.dirname(lib_7z) locations = { 'extractcode.sevenzip.libdir': lib_dir, - 'extractcode.sevenzip.exe': path.join(lib_dir, '7z'), + 'extractcode.sevenzip.exe': lib_7z, } return locations From 54790d1799f0257aa282cb582a0e98266b078da4 Mon Sep 17 00:00:00 2001 From: Konrad Weihmann Date: Wed, 7 Apr 2021 20:46:20 +0200 Subject: [PATCH 2/3] libmagic-sys-provided: let user override paths let the user override assumed paths via environment. TYPECODE_LIBMAGIC_PATH environment variable can be used to explicitly set the path to libmagic.so. If not specified it falls back to previously used calculation from distro data. Location of the magic database can be specified via TYPECODE_LIBMAGIC_DB_PATH 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 --- .../README.rst | 9 ++- .../src/typecode_libmagic/__init__.py | 57 +++++++++++-------- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/builtins/typecode_libmagic_system_provided/README.rst b/builtins/typecode_libmagic_system_provided/README.rst index 49a1e11..1eacbcf 100755 --- a/builtins/typecode_libmagic_system_provided/README.rst +++ b/builtins/typecode_libmagic_system_provided/README.rst @@ -1 +1,8 @@ -A ScanCode Toolkit plugin to use pre-installed system binary libraries and utilities. +A ScanCode Toolkit plugin to use pre-installed libmagic library and data file +============================================================================= + +the path of libmagic is either determined by distro data or explicitly +taken from ``TYPECODE_LIBMAGIC_PATH`` environment variable. additionally +the path to ``magic.mgc`` file can be explicitly set by using +``TYPECODE_LIBMAGIC_DB_PATH`` environment variable, otherwise it is +calculated from distro data diff --git a/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py b/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py index 84fb1c5..3a58fba 100755 --- a/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py +++ b/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py @@ -22,8 +22,9 @@ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -from os import path import platform +from os import environ +from os import path from plugincode.location_provider import LocationProviderPlugin @@ -35,38 +36,46 @@ def get_locations(self): locations of the libmagic shared library as installed on various Linux distros or on FreeBSD. """ - system_arch = platform.machine() - mainstream_system = platform.system().lower() - if mainstream_system == 'linux': - distribution = platform.linux_distribution()[0].lower() - debian_based_distro = ['ubuntu', 'mint', 'debian'] - rpm_based_distro = ['fedora', 'redhat'] + lib_dll = environ.get('TYPECODE_LIBMAGIC_PATH') + if not lib_dll: + system_arch = platform.machine() + mainstream_system = platform.system().lower() + if mainstream_system == 'linux': + distribution = platform.linux_distribution()[0].lower() + debian_based_distro = ['ubuntu', 'mint', 'debian'] + rpm_based_distro = ['fedora', 'redhat'] + + if distribution in debian_based_distro: + data_dir = '/usr/lib/file' + lib_dir = '/usr/lib/'+system_arch+'-linux-gnu' - if distribution in debian_based_distro: - data_dir = '/usr/lib/file' - lib_dir = '/usr/lib/'+system_arch+'-linux-gnu' + elif distribution in rpm_based_distro: + data_dir = '/usr/share/misc' + lib_dir = '/usr/lib64' - elif distribution in rpm_based_distro: - data_dir = '/usr/share/misc' - lib_dir = '/usr/lib64' + else: + raise Exception('Unsupported system: {}'.format(distribution)) - else: - raise Exception('Unsupported system: {}'.format(distribution)) + lib_dll = path.join(lib_dir, 'libmagic.so') - lib_dll = path.join(lib_dir, 'libmagic.so'); + elif mainstream_system == 'freebsd': + if path.isdir('/usr/local/'): + lib_dir = '/usr/local' + else: + lib_dir = '/usr' - elif mainstream_system == 'freebsd': - if path.isdir('/usr/local/'): - lib_dir = '/usr/local' - else: - lib_dir = '/usr' + lib_dll = path.join(lib_dir, 'lib/libmagic.so') + data_dir = path.join(lib_dir,'share/file') + else: + lib_dir = path.dirname(lib_dll) - lib_dll = path.join(lib_dir, 'lib/libmagic.so') - data_dir = path.join(lib_dir,'share/file') + file_magic_data = environ.get('TYPECODE_LIBMAGIC_DB_PATH') + if not file_magic_data: + file_magic_data = path.join(data_dir, 'magic.mgc') locations = { 'typecode.libmagic.libdir': lib_dir, 'typecode.libmagic.dll': lib_dll, - 'typecode.libmagic.db': path.join(data_dir, 'magic.mgc'), + 'typecode.libmagic.db': file_magic_data, } return locations From 627608d0d02930169d09425570f887a750f039a2 Mon Sep 17 00:00:00 2001 From: Konrad Weihmann Date: Wed, 7 Apr 2021 20:48:22 +0200 Subject: [PATCH 3/3] libarchive-sys-provided: let user override paths let the user override assumed paths via environment. Path to libarchive can be specified via EXTRACTCODE_LIBARCHIVE_PATH environment variable. If not found it falls back to previously calculation from distro data. 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 --- .../README.rst | 6 ++- .../src/extractcode_libarchive/__init__.py | 52 +++++++++++-------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/builtins/extractcode_libarchive_system_provided/README.rst b/builtins/extractcode_libarchive_system_provided/README.rst index 49a1e11..cb0da21 100755 --- a/builtins/extractcode_libarchive_system_provided/README.rst +++ b/builtins/extractcode_libarchive_system_provided/README.rst @@ -1 +1,5 @@ -A ScanCode Toolkit plugin to use pre-installed system binary libraries and utilities. +A ScanCode Toolkit plugin to use pre-installed libarchive library +================================================================= + +the path of libarchive.so is either determined by distro data or explicitily +taken from ``EXTRACTCODE_LIBARCHIVE_PATH`` environment variable diff --git a/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py b/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py index 9496daa..9af1721 100755 --- a/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py +++ b/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py @@ -7,8 +7,9 @@ # See https://aboutcode.org for more information about nexB OSS projects. # -from os import path import platform +from os import environ +from os import path from plugincode.location_provider import LocationProviderPlugin @@ -20,30 +21,35 @@ def get_locations(self): locations of the libarchive shared library as installed on various Linux distros or on FreeBSD. """ - system_arch = platform.machine() - mainstream_system = platform.system().lower() - if mainstream_system == 'linux': - distribution = platform.linux_distribution()[0].lower() - debian_based_distro = ['ubuntu', 'mint', 'debian'] - rpm_based_distro = ['fedora', 'redhat'] - - if distribution in debian_based_distro: - lib_dir = '/usr/lib/'+system_arch+'-linux-gnu' - - elif distribution in rpm_based_distro: - lib_dir = '/usr/lib64' - - else: - raise Exception('Unsupported system: {}'.format(distribution)) - - elif mainstream_system == 'freebsd': - if path.isdir('/usr/local/'): - lib_dir = '/usr/local/lib' - else: - lib_dir = '/usr/lib' + lib_archive = environ.get('EXTRACTCODE_LIBARCHIVE_PATH') + if not lib_archive: + system_arch = platform.machine() + mainstream_system = platform.system().lower() + if mainstream_system == 'linux': + distribution = platform.linux_distribution()[0].lower() + debian_based_distro = ['ubuntu', 'mint', 'debian'] + rpm_based_distro = ['fedora', 'redhat'] + + if distribution in debian_based_distro: + lib_dir = '/usr/lib/'+system_arch+'-linux-gnu' + + elif distribution in rpm_based_distro: + lib_dir = '/usr/lib64' + + else: + raise Exception('Unsupported system: {}'.format(distribution)) + + elif mainstream_system == 'freebsd': + if path.isdir('/usr/local/'): + lib_dir = '/usr/local/lib' + else: + lib_dir = '/usr/lib' + lib_archive = path.join(lib_dir, 'libarchive.so') + else: + lib_dir = path.dirname(lib_archive) locations = { 'extractcode.libarchive.libdir': lib_dir, - 'extractcode.libarchive.dll': path.join(lib_dir, 'libarchive.so'), + 'extractcode.libarchive.dll': lib_archive, } return locations