1515EF_ARM_ABI_VER5 = 0x05000000
1616EF_ARM_ABI_FLOAT_HARD = 0x00000400
1717
18+ _ALLOWED_ARCHS = {
19+ "x86_64" ,
20+ "aarch64" ,
21+ "ppc64" ,
22+ "ppc64le" ,
23+ "s390x" ,
24+ "loongarch64" ,
25+ "riscv64" ,
26+ }
27+
1828
1929# `os.PathLike` not a generic type until Python 3.9, so sticking with `str`
2030# as the type for `path` until then.
@@ -57,16 +67,7 @@ def _have_compatible_abi(executable: str, archs: Sequence[str]) -> bool:
5767 return _is_linux_armhf (executable )
5868 if "i686" in archs :
5969 return _is_linux_i686 (executable )
60- allowed_archs = {
61- "x86_64" ,
62- "aarch64" ,
63- "ppc64" ,
64- "ppc64le" ,
65- "s390x" ,
66- "loongarch64" ,
67- "riscv64" ,
68- }
69- return any (arch in allowed_archs for arch in archs )
70+ return any (arch in _ALLOWED_ARCHS for arch in archs )
7071
7172
7273# If glibc ever changes its major version, we need to know what the last
@@ -106,7 +107,7 @@ def _glibc_version_string_ctypes() -> str | None:
106107 Fallback implementation of glibc_version_string using ctypes.
107108 """
108109 try :
109- import ctypes
110+ import ctypes # noqa: PLC0415
110111 except ImportError :
111112 return None
112113
@@ -150,7 +151,7 @@ def _glibc_version_string() -> str | None:
150151 return _glibc_version_string_confstr () or _glibc_version_string_ctypes ()
151152
152153
153- def _parse_glibc_version (version_str : str ) -> tuple [ int , int ] :
154+ def _parse_glibc_version (version_str : str ) -> _GLibCVersion :
154155 """Parse glibc version.
155156
156157 We use a regexp instead of str.split because we want to discard any
@@ -165,15 +166,15 @@ def _parse_glibc_version(version_str: str) -> tuple[int, int]:
165166 RuntimeWarning ,
166167 stacklevel = 2 ,
167168 )
168- return - 1 , - 1
169- return int (m .group ("major" )), int (m .group ("minor" ))
169+ return _GLibCVersion ( - 1 , - 1 )
170+ return _GLibCVersion ( int (m .group ("major" )), int (m .group ("minor" ) ))
170171
171172
172173@functools .lru_cache
173- def _get_glibc_version () -> tuple [ int , int ] :
174+ def _get_glibc_version () -> _GLibCVersion :
174175 version_str = _glibc_version_string ()
175176 if version_str is None :
176- return (- 1 , - 1 )
177+ return _GLibCVersion (- 1 , - 1 )
177178 return _parse_glibc_version (version_str )
178179
179180
@@ -184,33 +185,34 @@ def _is_compatible(arch: str, version: _GLibCVersion) -> bool:
184185 return False
185186 # Check for presence of _manylinux module.
186187 try :
187- import _manylinux
188+ import _manylinux # noqa: PLC0415
188189 except ImportError :
189190 return True
190191 if hasattr (_manylinux , "manylinux_compatible" ):
191192 result = _manylinux .manylinux_compatible (version [0 ], version [1 ], arch )
192193 if result is not None :
193194 return bool (result )
194195 return True
195- if version == _GLibCVersion (2 , 5 ):
196- if hasattr (_manylinux , "manylinux1_compatible" ):
197- return bool (_manylinux .manylinux1_compatible )
198- if version == _GLibCVersion (2 , 12 ):
199- if hasattr (_manylinux , "manylinux2010_compatible" ):
200- return bool (_manylinux .manylinux2010_compatible )
201- if version == _GLibCVersion (2 , 17 ):
202- if hasattr (_manylinux , "manylinux2014_compatible" ):
203- return bool (_manylinux .manylinux2014_compatible )
196+ if version == _GLibCVersion (2 , 5 ) and hasattr (_manylinux , "manylinux1_compatible" ):
197+ return bool (_manylinux .manylinux1_compatible )
198+ if version == _GLibCVersion (2 , 12 ) and hasattr (
199+ _manylinux , "manylinux2010_compatible"
200+ ):
201+ return bool (_manylinux .manylinux2010_compatible )
202+ if version == _GLibCVersion (2 , 17 ) and hasattr (
203+ _manylinux , "manylinux2014_compatible"
204+ ):
205+ return bool (_manylinux .manylinux2014_compatible )
204206 return True
205207
206208
207- _LEGACY_MANYLINUX_MAP = {
209+ _LEGACY_MANYLINUX_MAP : dict [ _GLibCVersion , str ] = {
208210 # CentOS 7 w/ glibc 2.17 (PEP 599)
209- (2 , 17 ): "manylinux2014" ,
211+ _GLibCVersion (2 , 17 ): "manylinux2014" ,
210212 # CentOS 6 w/ glibc 2.12 (PEP 571)
211- (2 , 12 ): "manylinux2010" ,
213+ _GLibCVersion (2 , 12 ): "manylinux2010" ,
212214 # CentOS 5 w/ glibc 2.5 (PEP 513)
213- (2 , 5 ): "manylinux1" ,
215+ _GLibCVersion (2 , 5 ): "manylinux1" ,
214216}
215217
216218
@@ -252,11 +254,9 @@ def platform_tags(archs: Sequence[str]) -> Iterator[str]:
252254 min_minor = - 1
253255 for glibc_minor in range (glibc_max .minor , min_minor , - 1 ):
254256 glibc_version = _GLibCVersion (glibc_max .major , glibc_minor )
255- tag = "manylinux_{}_{}" .format (* glibc_version )
256257 if _is_compatible (arch , glibc_version ):
257- yield f"{ tag } _{ arch } "
258- # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags.
259- if glibc_version in _LEGACY_MANYLINUX_MAP :
260- legacy_tag = _LEGACY_MANYLINUX_MAP [glibc_version ]
261- if _is_compatible (arch , glibc_version ):
258+ yield "manylinux_{}_{}_{}" .format (* glibc_version , arch )
259+
260+ # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags.
261+ if legacy_tag := _LEGACY_MANYLINUX_MAP .get (glibc_version ):
262262 yield f"{ legacy_tag } _{ arch } "
0 commit comments