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 a34b370..5de0dc1 100755 --- a/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py +++ b/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py @@ -17,6 +17,15 @@ class SevenzipPaths(LocationProviderPlugin): + def get_like_distro(self): + info = platform.freedesktop_os_release() + ids = [info["ID"]] + if "ID_LIKE" in info: + # ids are space separated and ordered by precedence + ids.extend(info["ID_LIKE"].split()) + return ids + + def get_locations(self): """ Return a mapping of {location key: location} providing the installation @@ -28,14 +37,14 @@ def get_locations(self): if not lib_7z: mainstream_system = platform.system().lower() if mainstream_system == 'linux': - distribution = platform.linux_distribution()[0].lower() + distribution = self.get_like_distro() debian_based_distro = ['ubuntu', 'mint', 'debian'] - rpm_based_distro = ['fedora', 'redhat'] + rpm_based_distro = ['fedora', 'rhel'] - if distribution in debian_based_distro: + if any(dist in debian_based_distro for dist in distribution): lib_dir = '/usr/lib/p7zip' - elif distribution in rpm_based_distro: + elif any(dist in rpm_based_distro for dist in distribution): lib_dir = '/usr/libexec/p7zip' else: 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 4f040a1..b082849 100755 --- a/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py +++ b/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py @@ -15,6 +15,15 @@ class LibarchivePaths(LocationProviderPlugin): + + def get_like_distro(self): + info = platform.freedesktop_os_release() + ids = [info["ID"]] + if "ID_LIKE" in info: + # ids are space separated and ordered by precedence + ids.extend(info["ID_LIKE"].split()) + return ids + def get_locations(self): """ Return a mapping of {location key: location} providing the installation @@ -26,15 +35,17 @@ def get_locations(self): system_arch = platform.machine() mainstream_system = platform.system().lower() if mainstream_system == 'linux': - distribution = platform.linux_distribution()[0].lower() + distribution = self.get_like_distro() debian_based_distro = ['ubuntu', 'mint', 'debian'] - rpm_based_distro = ['fedora', 'redhat'] + rpm_based_distro = ['fedora', 'rhel'] - if distribution in debian_based_distro: - lib_dir = '/usr/lib/'+system_arch+'-linux-gnu' + if any(dist in debian_based_distro for dist in distribution): + db_dir = '/usr/lib/file' + lib_dir = '/usr/lib' if platform.architecture()[0] == '32bit' else '/usr/lib/'+system_arch+'-linux-gnu' - elif distribution in rpm_based_distro: - lib_dir = '/usr/lib64' + elif any(dist in rpm_based_distro for dist in distribution): + db_dir = '/usr/share/misc' + lib_dir = '/usr/lib' if platform.architecture()[0] == '32bit' else '/usr/lib64' else: raise Exception('Unsupported system: {}'.format(distribution)) 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 040ea96..87f3698 100755 --- a/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py +++ b/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py @@ -30,6 +30,15 @@ class LibmagicPaths(LocationProviderPlugin): + + def get_like_distro(self): + info = platform.freedesktop_os_release() + ids = [info["ID"]] + if "ID_LIKE" in info: + # ids are space separated and ordered by precedence + ids.extend(info["ID_LIKE"].split()) + return ids + def get_locations(self): """ Return a mapping of {location key: location} providing the installation @@ -40,17 +49,17 @@ def get_locations(self): system_arch = platform.machine() mainstream_system = platform.system().lower() if mainstream_system == 'linux': - distribution = platform.linux_distribution()[0].lower() + distribution = self.get_like_distro() debian_based_distro = ['ubuntu', 'mint', 'debian'] - rpm_based_distro = ['fedora', 'redhat'] + rpm_based_distro = ['fedora', 'rhel'] - if distribution in debian_based_distro: + if any(dist in debian_based_distro for dist in distribution): db_dir = '/usr/lib/file' - lib_dir = '/usr/lib/'+system_arch+'-linux-gnu' + lib_dir = '/usr/lib' if platform.architecture()[0] == '32bit' else '/usr/lib/'+system_arch+'-linux-gnu' - elif distribution in rpm_based_distro: + elif any(dist in rpm_based_distro for dist in distribution): db_dir = '/usr/share/misc' - lib_dir = '/usr/lib64' + lib_dir = '/usr/lib' if platform.architecture()[0] == '32bit' else '/usr/lib64' else: raise Exception('Unsupported system: {}'.format(distribution))