Skip to content

Commit

Permalink
Check _PYTHON_HOST_PLATFORM for specific platform tag
Browse files Browse the repository at this point in the history
  • Loading branch information
tttapa committed Feb 2, 2025
1 parent 0342034 commit 1dce326
Showing 1 changed file with 20 additions and 5 deletions.
25 changes: 20 additions & 5 deletions src/py_build_cmake/common/platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,19 @@ def _get_python_prefixes():
}


def _get_specific_platform():
def _get_specific_platform(env: Mapping[str, str] | None = None) -> str:
"""Get the most specific platform for the current interpreter from
packaging.tags. On Linux, this will include the glibc version, which is not
the case for sysconfig.platform()."""
if env is None:
env = os.environ
host_plat = env.get("_PYTHON_HOST_PLATFORM")
if host_plat:
return platform_to_platform_tag(host_plat)
try:
return next(packaging.tags.sys_tags()).platform
except StopIteration:
platform_to_platform_tag(sysconfig.get_platform())
return platform_to_platform_tag(sysconfig.get_platform())


@dataclass
Expand All @@ -60,7 +65,7 @@ class BuildPlatformInfo:
python_abiflags: str = field(default_factory=lambda: getattr(sys, "abiflags", ""))
python_prefixes: dict[str, Path] = field(default_factory=_get_python_prefixes)
sysconfig_platform: str = field(default_factory=sysconfig.get_platform)
specific_platform: str = field(default_factory=_get_specific_platform)
specific_platform_tag: str = field(default_factory=_get_specific_platform)
python_tag: str = field(default_factory=get_python_tag)
abi_tag: str = field(default_factory=get_abi_tag)
system: str = field(default_factory=platform.system)
Expand Down Expand Up @@ -104,7 +109,7 @@ def get_native_tags(self, guess=False) -> WheelTags:
return {
"pyver": [self.python_tag],
"abi": [self.abi_tag],
"arch": [self.specific_platform if guess else self.platform_tag],
"arch": [self.specific_platform_tag if guess else self.platform_tag],
}

def _platform_tag_linux(self):
Expand Down Expand Up @@ -208,6 +213,7 @@ def _determine_macos_version_archs(
def determine_build_platform_info(env: Mapping[str, str] | None = None, **kwargs):
if env is None:
env = os.environ
kwargs.setdefault("specific_platform_tag", _get_specific_platform(env))
r = BuildPlatformInfo(**kwargs)

# Determine CMake generator platform (i.e. whether to use Visual Studio to
Expand All @@ -224,6 +230,15 @@ def determine_build_platform_info(env: Mapping[str, str] | None = None, **kwargs
# MACOSX_DEPLOYMENT_TARGET and ARCHFLAGS.
elif r.system == "Darwin":
r.macos_version, r.archs = _determine_macos_version_archs(env)
r.specific_platform = r._platform_tag_macos()
if "_PYTHON_HOST_PLATFORM" in env:
host_plat = env["_PYTHON_HOST_PLATFORM"]
if host_plat != r._platform_tag_macos():
msg = "Computed platform tag (%s) does not match "
msg += "environment variable _PYTHON_HOST_PLATFORM (%s). "
msg += "Please make sure that the values of the ARCHFLAGS "
msg += "and MACOSX_DEPLOYMENT_TARGET variables are consistent "
msg += "with _PYTHON_HOST_PLATFORM."
logger.warning(msg, r._platform_tag_macos(), host_plat)
r.specific_platform_tag = r._platform_tag_macos()

return r

0 comments on commit 1dce326

Please sign in to comment.