Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/xtc/utils/ext_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ def get_library_path(libname: str) -> str:
return str(candidate)

ldconfig = shutil.which("ldconfig")
if ldconfig is None and Path("/sbin/ldconfig").is_file():
ldconfig = "/sbin/ldconfig"
if ldconfig is not None:
result = subprocess.run([ldconfig, "-p"], capture_output=True, text=True)
for line in result.stdout.splitlines():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def test_get_library_path_uses_environment_search_paths(
assert ext_tools.get_library_path("omp") == str(library)


def test_get_library_path_falls_back_to_ldconfig(
def test_get_library_path_uses_ldconfig_from_path(
monkeypatch: pytest.MonkeyPatch,
) -> None:
library_name = "libomp.so.5"
Expand All @@ -38,6 +38,7 @@ def test_get_library_path_falls_back_to_ldconfig(
)
monkeypatch.delenv("LD_LIBRARY_PATH", raising=False)
monkeypatch.delenv("LIBRARY_PATH", raising=False)
monkeypatch.setenv("PATH", "/usr/bin:/sbin")
monkeypatch.setattr(ext_tools.shutil, "which", lambda _name: "/sbin/ldconfig")
monkeypatch.setattr(
ext_tools.subprocess,
Expand All @@ -50,3 +51,39 @@ def test_get_library_path_falls_back_to_ldconfig(
)

assert ext_tools.get_library_path("omp") == library


def test_get_library_path_falls_back_to_sbin_ldconfig_when_not_on_path(
monkeypatch: pytest.MonkeyPatch,
) -> None:
library_name = "libomp.so.5"
library = "/usr/lib/x86_64-linux-gnu/libomp.so.5"

monkeypatch.setattr(ext_tools.platform, "system", lambda: "Linux")
monkeypatch.setattr(
ext_tools.ctypes.util, "find_library", lambda _name: library_name
)
monkeypatch.delenv("LD_LIBRARY_PATH", raising=False)
monkeypatch.delenv("LIBRARY_PATH", raising=False)
monkeypatch.setenv("PATH", "/usr/bin:/bin")
monkeypatch.setattr(ext_tools.shutil, "which", lambda _name: None)

original_is_file = ext_tools.Path.is_file

def is_file(path: Path) -> bool:
if path == Path("/sbin/ldconfig"):
return True
return original_is_file(path)

monkeypatch.setattr(ext_tools.Path, "is_file", is_file)
monkeypatch.setattr(
ext_tools.subprocess,
"run",
lambda *_args, **_kwargs: CompletedProcess(
args=["/sbin/ldconfig", "-p"],
returncode=0,
stdout=f"\t{library_name} (libc6,x86-64) => {library}\n",
),
)

assert ext_tools.get_library_path("omp") == library
Loading