From 219c3f7d9ff7f4b23e4d5fc3802ae1a06929aa39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Robert?= Date: Sat, 1 Nov 2025 11:58:56 +0100 Subject: [PATCH] FEAT: add support for automatic abi3 version selection --- extension_helpers/_utils.py | 17 ++++++++++++++++- pyproject.toml | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/extension_helpers/_utils.py b/extension_helpers/_utils.py index f784a17..991f31e 100644 --- a/extension_helpers/_utils.py +++ b/extension_helpers/_utils.py @@ -3,12 +3,15 @@ import os import re import sys +import sysconfig import tempfile from configparser import ConfigParser from importlib import machinery as import_machinery from importlib.util import module_from_spec, spec_from_file_location from pathlib import Path +from packaging import tags + if sys.version_info >= (3, 11): import tomllib else: @@ -157,8 +160,20 @@ def get_limited_api_option(srcdir): py_limited_api = os.environ.get("EXTENSION_HELPERS_PY_LIMITED_API") - if py_limited_api is not None: + if py_limited_api == "auto": + template = "{interpreter}-{abi}-{platform}" + interpreter_id = f"{tags.interpreter_name()}{tags.interpreter_version()}" + abi3_tag = template.format( + interpreter=interpreter_id, + abi="abi3", + platform=sysconfig.get_platform(), + ) + if abi3_tag in tags.compatible_tags(): + py_limited_api = interpreter_id + else: + py_limited_api = None + if py_limited_api is not None: if "DIST_EXTRA_CONFIG" in os.environ: raise ValueError( "Cannot use EXTENSION_HELPERS_PY_LIMITED_API if DIST_EXTRA_CONFIG is already defined" diff --git a/pyproject.toml b/pyproject.toml index 862ac63..97ea1de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,7 @@ classifiers = [ ] requires-python = ">=3.10" dependencies = [ + "packaging>=25.0", "setuptools>=64", "tomli>=1.0.0 ; python_version < '3.11'", ]