Skip to content

Commit 4ea839b

Browse files
authored
feat: add sysconfig helpers (#21)
Signed-off-by: Henry Schreiner <[email protected]> Signed-off-by: Henry Schreiner <[email protected]>
1 parent f6ba426 commit 4ea839b

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from __future__ import annotations
2+
3+
import os
4+
import sysconfig
5+
from pathlib import Path
6+
7+
from .._logging import logger
8+
9+
__all__ = ["get_python_include_dir", "get_python_library"]
10+
11+
12+
def __dir__() -> list[str]:
13+
return __all__
14+
15+
16+
def get_python_library() -> Path | None:
17+
libdirstr = sysconfig.get_config_var("LIBDIR")
18+
ldlibrarystr = sysconfig.get_config_var("LDLIBRARY")
19+
libdir = libdirstr and Path(libdirstr)
20+
ldlibrary = ldlibrarystr and Path(ldlibrarystr)
21+
multiarch = sysconfig.get_config_var("MULTIARCH")
22+
masd = sysconfig.get_config_var("multiarchsubdir")
23+
24+
if libdir and ldlibrary and libdir.is_dir():
25+
if multiarch:
26+
if masd:
27+
if masd.startswith(os.sep):
28+
masd = masd[len(os.sep) :]
29+
libdir_masd = libdir / masd
30+
if libdir_masd.is_dir():
31+
libdir = libdir_masd
32+
libpath = Path(libdir) / ldlibrary
33+
if libpath.is_file():
34+
return libpath
35+
36+
framework_prefix = sysconfig.get_config_var("PYTHONFRAMEWORKPREFIX")
37+
if framework_prefix and Path(framework_prefix).is_dir() and ldlibrary:
38+
libpath = Path(framework_prefix) / ldlibrary
39+
if libpath.is_file():
40+
return libpath
41+
42+
logger.error(
43+
"Can't find a Python library, got libdir={}, ldlibrary={}, multiarch={}, masd={}",
44+
libdir,
45+
ldlibrary,
46+
multiarch,
47+
masd,
48+
)
49+
return None
50+
51+
52+
def get_python_include_dir() -> Path:
53+
return Path(sysconfig.get_path("include"))

tests/test_builder.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
import platform
2+
import pprint
3+
import sys
4+
import sysconfig
25

36
import pytest
47

58
from scikit_build_core.builder.macos import get_macosx_deployment_target
9+
from scikit_build_core.builder.sysconfig import (
10+
get_python_include_dir,
11+
get_python_library,
12+
)
613

714

815
@pytest.mark.parametrize(
@@ -26,3 +33,18 @@ def test_macos_version(monkeypatch, pycom, envvar, answer):
2633
monkeypatch.setenv("MACOSX_DEPLOYMENT_TARGET", envvar)
2734

2835
assert get_macosx_deployment_target() == answer
36+
37+
38+
def test_get_python_include_dir():
39+
assert get_python_include_dir().is_dir()
40+
41+
42+
def test_get_python_library():
43+
pprint.pprint(sysconfig.get_config_vars())
44+
45+
lib = get_python_library()
46+
if sys.platform.startswith("win"):
47+
assert lib is None
48+
else:
49+
assert lib
50+
assert lib.is_file()

0 commit comments

Comments
 (0)