Skip to content

Commit 1b26f84

Browse files
Support "macosx_10_9_universal2" wheels (#380)
1 parent 28d2fa0 commit 1b26f84

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

packaging/tags.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -458,14 +458,28 @@ def mac_platforms(version=None, arch=None):
458458
major=major_version, minor=0, binary_format=binary_format
459459
)
460460

461-
if version >= (11, 0) and arch == "x86_64":
461+
if version >= (11, 0):
462462
# Mac OS 11 on x86_64 is compatible with binaries from previous releases.
463463
# Arm64 support was introduced in 11.0, so no Arm binaries from previous
464464
# releases exist.
465-
for minor_version in range(16, 3, -1):
466-
compat_version = 10, minor_version
467-
binary_formats = _mac_binary_formats(compat_version, arch)
468-
for binary_format in binary_formats:
465+
#
466+
# However, the "universal2" binary format can have a
467+
# macOS version earlier than 11.0 when the x86_64 part of the binary supports
468+
# that version of macOS.
469+
if arch == "x86_64":
470+
for minor_version in range(16, 3, -1):
471+
compat_version = 10, minor_version
472+
binary_formats = _mac_binary_formats(compat_version, arch)
473+
for binary_format in binary_formats:
474+
yield "macosx_{major}_{minor}_{binary_format}".format(
475+
major=compat_version[0],
476+
minor=compat_version[1],
477+
binary_format=binary_format,
478+
)
479+
else:
480+
for minor_version in range(16, 3, -1):
481+
compat_version = 10, minor_version
482+
binary_format = "universal2"
469483
yield "macosx_{major}_{minor}_{binary_format}".format(
470484
major=compat_version[0],
471485
minor=compat_version[1],

tests/test_tags.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,14 @@ def test_version_detection(self, monkeypatch):
264264
platform, "mac_ver", lambda: ("10.14", ("", "", ""), "x86_64")
265265
)
266266
version = platform.mac_ver()[0].split(".")
267-
expected = "macosx_{major}_{minor}".format(major=version[0], minor=version[1])
267+
if version[0] == "10":
268+
expected = "macosx_{major}_{minor}".format(
269+
major=version[0], minor=version[1]
270+
)
271+
else:
272+
expected = "macosx_{major}_{minor}".format(major=version[0], minor=0)
268273
platforms = list(tags.mac_platforms(arch="x86_64"))
274+
print(platforms, expected)
269275
assert platforms[0].startswith(expected)
270276

271277
@pytest.mark.parametrize("arch", ["x86_64", "i386"])
@@ -311,6 +317,7 @@ def test_macos_11(self, major, minor):
311317
# with the environment variable SYSTEM_VERSION_COMPAT=1.
312318
assert "macosx_10_16_x86_64" in platforms
313319
assert "macosx_10_15_x86_64" in platforms
320+
assert "macosx_10_15_universal2" in platforms
314321
assert "macosx_10_4_x86_64" in platforms
315322
assert "macosx_10_3_x86_64" not in platforms
316323
if major >= 12:
@@ -323,6 +330,7 @@ def test_macos_11(self, major, minor):
323330
assert "macosx_11_3_arm64" not in platforms
324331
assert "macosx_11_0_universal" not in platforms
325332
assert "macosx_11_0_universal2" in platforms
333+
assert "macosx_10_15_universal2" in platforms
326334
assert "macosx_10_15_x86_64" not in platforms
327335
assert "macosx_10_4_x86_64" not in platforms
328336
assert "macosx_10_3_x86_64" not in platforms

0 commit comments

Comments
 (0)