From 2d64305df68bbd5adf328e33154c431c646ea3bd Mon Sep 17 00:00:00 2001 From: Henrik Tunedal Date: Sat, 11 May 2024 02:11:15 +0200 Subject: [PATCH 1/3] Add FreeBSD support using the same API as on Linux This requires FreeBSD 13.3 or later, as explained here: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=272992 --- dllist/__init__.py | 2 +- test/test_linux.py | 5 +++-- test/test_other.py | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dllist/__init__.py b/dllist/__init__.py index b8f3919..34883ac 100644 --- a/dllist/__init__.py +++ b/dllist/__init__.py @@ -7,7 +7,7 @@ __version__ = "1.1.0" _system = platform.system() -if _system.startswith("Linux"): +if _system.startswith("Linux") or _system.startswith("FreeBSD"): from .linux import _platform_specific_dllist elif _system.startswith("Darwin"): from .macos import _platform_specific_dllist diff --git a/test/test_linux.py b/test/test_linux.py index 854b276..618f1a7 100644 --- a/test/test_linux.py +++ b/test/test_linux.py @@ -2,8 +2,9 @@ import pytest -if not platform.system().startswith("Linux"): - pytest.skip(reason="Linux only", allow_module_level=True) +system = platform.system() +if not (system.startswith("Linux") or system.startswith("FreeBSD")): + pytest.skip(reason="Linux and FreeBSD only", allow_module_level=True) from test import print_list diff --git a/test/test_other.py b/test/test_other.py index d83cb69..50959bb 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -8,6 +8,7 @@ if ( system.startswith("Linux") + or system.startswith("FreeBSD") or system.startswith("Darwin") or system.startswith("Windows") ): From b6e4ab2a1bf56bb0dd39522c6a184cf5b8261c76 Mon Sep 17 00:00:00 2001 From: Brian Ward Date: Tue, 14 May 2024 11:02:52 -0400 Subject: [PATCH 2/3] Rename to unix_like --- README.md | 6 +++++- dllist/__init__.py | 19 ++++++++++++------- dllist/{linux.py => unix_like.py} | 4 ++++ 3 files changed, 21 insertions(+), 8 deletions(-) rename dllist/{linux.py => unix_like.py} (81%) diff --git a/README.md b/README.md index 04029c5..1964e7d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,11 @@ A very small Python library to list the DLLs loaded by the current process. This is equivalent to the [`dllist`](https://docs.julialang.org/en/v1/stdlib/Libdl/#Base.Libc.Libdl.dllist) function in Julia. -*Note*: This library is intended to work on macOS, Linux, and Windows. Other platforms will return an empty list and raise a warning. +*Note*: This library is tested on macOS, Linux, and Windows. + +Some platforms which provide the same API as Linux (e.g. FreeBSD) may also work. + +Any other platform will return an empty list and raise a warning. ## Installation diff --git a/dllist/__init__.py b/dllist/__init__.py index 34883ac..c08d1d7 100644 --- a/dllist/__init__.py +++ b/dllist/__init__.py @@ -4,14 +4,19 @@ import warnings from typing import List -__version__ = "1.1.0" - -_system = platform.system() -if _system.startswith("Linux") or _system.startswith("FreeBSD"): - from .linux import _platform_specific_dllist -elif _system.startswith("Darwin"): +__version__ = "1.2.0" + +_system = platform.system().lower() +if ( + _system.startswith("linux") + or _system.startswith("freebsd") + or _system.startswith("openbsd") + or _system.startswith("solaris") +): + from .unix_like import _platform_specific_dllist +elif _system.startswith("darwin"): from .macos import _platform_specific_dllist -elif _system.startswith("Windows"): +elif _system.startswith("windows"): from .windows import _platform_specific_dllist else: diff --git a/dllist/linux.py b/dllist/unix_like.py similarity index 81% rename from dllist/linux.py rename to dllist/unix_like.py index fb1433e..40ba935 100644 --- a/dllist/linux.py +++ b/dllist/unix_like.py @@ -3,7 +3,11 @@ from ctypes.util import find_library from typing import List +# this uses functions common to Linux and a few other Unix-like systems # https://man7.org/linux/man-pages/man3/dl_iterate_phdr.3.html +# https://man.freebsd.org/cgi/man.cgi?query=dl_iterate_phdr +# https://man.openbsd.org/dl_iterate_phdr +# https://docs.oracle.com/cd/E88353_01/html/E37843/dl-iterate-phdr-3c.html class dl_phdr_info(ctypes.Structure): From ee5b80e457c43aa4cfe706ae003027f33e7e5db7 Mon Sep 17 00:00:00 2001 From: Brian Ward Date: Tue, 14 May 2024 11:06:43 -0400 Subject: [PATCH 3/3] Good-faith attempt at detecting Solaris --- dllist/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dllist/__init__.py b/dllist/__init__.py index c08d1d7..c47b344 100644 --- a/dllist/__init__.py +++ b/dllist/__init__.py @@ -11,6 +11,7 @@ _system.startswith("linux") or _system.startswith("freebsd") or _system.startswith("openbsd") + or _system.startswith("sunos") or _system.startswith("solaris") ): from .unix_like import _platform_specific_dllist