From 1e5cf97c3f74b4db400d1e4d97ff5a5fefb13a62 Mon Sep 17 00:00:00 2001 From: Jono Yang Date: Sun, 29 Mar 2026 21:33:11 -0700 Subject: [PATCH 1/4] Add sunos magic, libarchive, and 7z locations Signed-off-by: Jono Yang --- .../src/extractcode_7z/__init__.py | 3 +++ .../src/extractcode_libarchive/__init__.py | 3 +++ .../src/typecode_libmagic/__init__.py | 4 ++++ 3 files changed, 10 insertions(+) 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 3708973..2984042 100755 --- a/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py +++ b/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py @@ -62,6 +62,9 @@ def get_locations(self): # This assumes that 7zip was installed using Homebrew lib_dir = '/opt/homebrew/bin' lib_7z = path.join(lib_dir, '7zz') + elif mainstream_system == 'sunos': + lib_dir = '/usr/bin' + lib_7z = path.join(lib_dir, '7z') else: lib_dir = path.dirname(lib_7z) 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 41ba7f6..d7f2694 100755 --- a/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py +++ b/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py @@ -68,6 +68,9 @@ def get_locations(self): # This assumes that libarchive was installed using Homebrew lib_dir = '/opt/homebrew/opt/libarchive/lib' lib_archive = path.join(lib_dir, 'libarchive.dylib') + elif mainstream_system == 'sunos': + lib_dir = '/usr' + lib_archive = path.join(lib_dir, 'lib/amd64/libarchive.so') else: lib_dir = path.dirname(lib_archive) 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 b1dd5aa..4ccb259 100755 --- a/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py +++ b/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py @@ -84,6 +84,10 @@ def get_locations(self): lib_dir = '/opt/homebrew' dll_loc = path.join(lib_dir, 'lib/libmagic.dylib') db_dir = path.join(lib_dir, 'share/misc') + elif mainstream_system == 'sunos': + lib_dir = '/usr' + dll_loc = path.join(lib_dir, 'lib/amd64/libmagic.so') + db_dir = path.join(lib_dir, 'share/misc') magicdb_loc = path.join(db_dir, 'magic.mgc') From 96551ffe9b1e2e3e50a7d3937448579d44dc4d59 Mon Sep 17 00:00:00 2001 From: Jono Yang Date: Tue, 7 Apr 2026 19:09:31 -0700 Subject: [PATCH 2/4] Add support for haiku os Signed-off-by: Jono Yang --- .../src/extractcode_7z/__init__.py | 3 +++ .../src/extractcode_libarchive/__init__.py | 3 +++ .../src/typecode_libmagic/__init__.py | 4 ++++ 3 files changed, 10 insertions(+) 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 2984042..9e543d8 100755 --- a/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py +++ b/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py @@ -65,6 +65,9 @@ def get_locations(self): elif mainstream_system == 'sunos': lib_dir = '/usr/bin' lib_7z = path.join(lib_dir, '7z') + elif mainstream_system == 'haiku': + lib_dir = '/bin' + lib_7z = path.join(lib_dir, '7z') else: lib_dir = path.dirname(lib_7z) 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 d7f2694..0299c70 100755 --- a/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py +++ b/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py @@ -71,6 +71,9 @@ def get_locations(self): elif mainstream_system == 'sunos': lib_dir = '/usr' lib_archive = path.join(lib_dir, 'lib/amd64/libarchive.so') + elif mainstream_system == 'haiku': + lib_dir = '/system/lib' + lib_archive = path.join(lib_dir, 'libarchive.so.13') else: lib_dir = path.dirname(lib_archive) 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 4ccb259..71128ef 100755 --- a/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py +++ b/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py @@ -88,6 +88,10 @@ def get_locations(self): lib_dir = '/usr' dll_loc = path.join(lib_dir, 'lib/amd64/libmagic.so') db_dir = path.join(lib_dir, 'share/misc') + elif mainstream_system == 'haiku': + lib_dir = '/system' + dll_loc = path.join(lib_dir, 'lib/libmagic.so.1') + db_dir = path.join(lib_dir, 'data/misc') magicdb_loc = path.join(db_dir, 'magic.mgc') From f8851eb6c7d17c7d09a04deb37c04330a1e69158 Mon Sep 17 00:00:00 2001 From: Jono Yang Date: Tue, 7 Apr 2026 20:50:00 -0700 Subject: [PATCH 3/4] Update docstring Signed-off-by: Jono Yang --- .../src/extractcode_7z/__init__.py | 2 +- .../src/extractcode_libarchive/__init__.py | 2 +- .../src/typecode_libmagic/__init__.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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 9e543d8..7d448b9 100755 --- a/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py +++ b/builtins/extractcode_7z_system_provided/src/extractcode_7z/__init__.py @@ -30,7 +30,7 @@ def get_locations(self): """ Return a mapping of {location key: location} providing the installation locations of the 7zip exe and shared libraries as installed on various - Linux distros or on FreeBSD. + Linux distros, FreeBSD, macOS, and other POSIX. """ lib_dir = None lib_7z = environ.get('EXTRACTCODE_7Z_PATH') 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 0299c70..d253b02 100755 --- a/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py +++ b/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py @@ -28,7 +28,7 @@ def get_locations(self): """ Return a mapping of {location key: location} providing the installation locations of the libarchive shared library as installed on various Linux - distros or on FreeBSD. + distros, FreeBSD, macOS, and other POSIX. """ lib_archive = environ.get('EXTRACTCODE_LIBARCHIVE_PATH') if not lib_archive: 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 71128ef..f1349f9 100755 --- a/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py +++ b/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py @@ -42,7 +42,7 @@ def get_locations(self): """ Return a mapping of {location key: location} providing the installation locations of the libmagic shared library as installed on various Linux - distros or on FreeBSD. + distros, FreeBSD, macOS, and other POSIX. """ mainstream_system = platform.system().lower() if mainstream_system == 'linux': From da3b8ddb1bb2293e6fafbe7fd6c52d3040d6c247 Mon Sep 17 00:00:00 2001 From: Jono Yang Date: Sat, 11 Apr 2026 17:05:19 -0700 Subject: [PATCH 4/4] Properly set lib_dir Signed-off-by: Jono Yang --- .../src/extractcode_libarchive/__init__.py | 15 ++++---- .../src/typecode_libmagic/__init__.py | 37 ++++++++++--------- 2 files changed, 28 insertions(+), 24 deletions(-) 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 d253b02..91c4f6d 100755 --- a/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py +++ b/builtins/extractcode_libarchive_system_provided/src/extractcode_libarchive/__init__.py @@ -32,8 +32,9 @@ def get_locations(self): """ lib_archive = environ.get('EXTRACTCODE_LIBARCHIVE_PATH') if not lib_archive: - system_arch = platform.machine() mainstream_system = platform.system().lower() + system_arch = platform.machine() + system_arch_bit_width = platform.architecture()[0] if mainstream_system == 'linux': distribution = self.get_like_distro() @@ -42,16 +43,14 @@ def get_locations(self): if any(dist in debian_based_distro for dist in distribution): lib_dir = ( - '/usr/lib' if platform.architecture()[0] == '32bit' + '/usr/lib' if system_arch_bit_width == '32bit' else f'/usr/lib/{system_arch}-linux-gnu' ) - elif any(dist in rpm_based_distro for dist in distribution): lib_dir = ( - '/usr/lib' if platform.architecture()[0] == '32bit' + '/usr/lib' if system_arch_bit_width == '32bit' else '/usr/lib64' ) - else: raise Exception( 'Unsupported system: {}'.format(distribution)) @@ -69,8 +68,10 @@ def get_locations(self): lib_dir = '/opt/homebrew/opt/libarchive/lib' lib_archive = path.join(lib_dir, 'libarchive.dylib') elif mainstream_system == 'sunos': - lib_dir = '/usr' - lib_archive = path.join(lib_dir, 'lib/amd64/libarchive.so') + lib_dir = '/usr/lib' + if system_arch == 'i86pc' and system_arch_bit_width == '64bit': + lib_dir = path.join(lib_dir, 'amd64') + lib_archive = path.join(lib_dir, 'libarchive.so') elif mainstream_system == 'haiku': lib_dir = '/system/lib' lib_archive = path.join(lib_dir, 'libarchive.so.13') 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 f1349f9..443a3f3 100755 --- a/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py +++ b/builtins/typecode_libmagic_system_provided/src/typecode_libmagic/__init__.py @@ -45,26 +45,26 @@ def get_locations(self): distros, FreeBSD, macOS, and other POSIX. """ mainstream_system = platform.system().lower() + system_arch = platform.machine() + system_arch_bit_width = platform.architecture()[0] + if mainstream_system == 'linux': distribution = self.get_like_distro() debian_based_distro = ['ubuntu', 'mint', 'debian'] rpm_based_distro = ['fedora', 'rhel'] - system_arch = platform.machine() 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' + '/usr/lib' if system_arch_bit_width == '32bit' else f'/usr/lib/{system_arch}-linux-gnu' ) - 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' + '/usr/lib' if system_arch_bit_width == '32bit' else '/usr/lib64' ) - else: raise Exception('Unsupported system: {}'.format(distribution)) @@ -72,26 +72,29 @@ def get_locations(self): elif mainstream_system == 'freebsd': dll_loc = '' db_dir = '' - for lib_dir in ('/usr/local/', '/usr'): - possible_dll_loc = path.join(lib_dir, 'lib/libmagic.so') - possible_db_loc = path.join(lib_dir, 'share/misc/magic.mgc') + for usr_dir in ('/usr/local', '/usr'): + lib_dir = path.join(usr_dir, 'lib') + possible_dll_loc = path.join(lib_dir, 'libmagic.so') + possible_db_loc = path.join(usr_dir, 'share/misc/magic.mgc') if path.exists(possible_dll_loc) and path.exists(possible_db_loc): dll_loc = possible_dll_loc db_dir = path.dirname(possible_db_loc) break elif mainstream_system == 'darwin': # This assumes that libmagic was installed using Homebrew - lib_dir = '/opt/homebrew' - dll_loc = path.join(lib_dir, 'lib/libmagic.dylib') - db_dir = path.join(lib_dir, 'share/misc') + lib_dir = '/opt/homebrew/lib' + dll_loc = path.join(lib_dir, 'libmagic.dylib') + db_dir = '/opt/homebrew/share/misc' elif mainstream_system == 'sunos': - lib_dir = '/usr' - dll_loc = path.join(lib_dir, 'lib/amd64/libmagic.so') - db_dir = path.join(lib_dir, 'share/misc') + lib_dir = '/usr/lib' + if system_arch == 'i86pc' and system_arch_bit_width == '64bit': + lib_dir = path.join(lib_dir, 'amd64') + dll_loc = path.join(lib_dir, 'libmagic.so') + db_dir = '/usr/share/misc' elif mainstream_system == 'haiku': - lib_dir = '/system' - dll_loc = path.join(lib_dir, 'lib/libmagic.so.1') - db_dir = path.join(lib_dir, 'data/misc') + lib_dir = '/system/lib' + dll_loc = path.join(lib_dir, 'libmagic.so.1') + db_dir = '/system/data/misc' magicdb_loc = path.join(db_dir, 'magic.mgc')