Skip to content

Commit

Permalink
Support "macosx_10_9_universal2" wheels (#380)
Browse files Browse the repository at this point in the history
  • Loading branch information
ronaldoussoren authored Jan 4, 2021
1 parent 28d2fa0 commit 1b26f84
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
24 changes: 19 additions & 5 deletions packaging/tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -458,14 +458,28 @@ def mac_platforms(version=None, arch=None):
major=major_version, minor=0, binary_format=binary_format
)

if version >= (11, 0) and arch == "x86_64":
if version >= (11, 0):
# Mac OS 11 on x86_64 is compatible with binaries from previous releases.
# Arm64 support was introduced in 11.0, so no Arm binaries from previous
# releases exist.
for minor_version in range(16, 3, -1):
compat_version = 10, minor_version
binary_formats = _mac_binary_formats(compat_version, arch)
for binary_format in binary_formats:
#
# However, the "universal2" binary format can have a
# macOS version earlier than 11.0 when the x86_64 part of the binary supports
# that version of macOS.
if arch == "x86_64":
for minor_version in range(16, 3, -1):
compat_version = 10, minor_version
binary_formats = _mac_binary_formats(compat_version, arch)
for binary_format in binary_formats:
yield "macosx_{major}_{minor}_{binary_format}".format(
major=compat_version[0],
minor=compat_version[1],
binary_format=binary_format,
)
else:
for minor_version in range(16, 3, -1):
compat_version = 10, minor_version
binary_format = "universal2"
yield "macosx_{major}_{minor}_{binary_format}".format(
major=compat_version[0],
minor=compat_version[1],
Expand Down
10 changes: 9 additions & 1 deletion tests/test_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,8 +264,14 @@ def test_version_detection(self, monkeypatch):
platform, "mac_ver", lambda: ("10.14", ("", "", ""), "x86_64")
)
version = platform.mac_ver()[0].split(".")
expected = "macosx_{major}_{minor}".format(major=version[0], minor=version[1])
if version[0] == "10":
expected = "macosx_{major}_{minor}".format(
major=version[0], minor=version[1]
)
else:
expected = "macosx_{major}_{minor}".format(major=version[0], minor=0)
platforms = list(tags.mac_platforms(arch="x86_64"))
print(platforms, expected)
assert platforms[0].startswith(expected)

@pytest.mark.parametrize("arch", ["x86_64", "i386"])
Expand Down Expand Up @@ -311,6 +317,7 @@ def test_macos_11(self, major, minor):
# with the environment variable SYSTEM_VERSION_COMPAT=1.
assert "macosx_10_16_x86_64" in platforms
assert "macosx_10_15_x86_64" in platforms
assert "macosx_10_15_universal2" in platforms
assert "macosx_10_4_x86_64" in platforms
assert "macosx_10_3_x86_64" not in platforms
if major >= 12:
Expand All @@ -323,6 +330,7 @@ def test_macos_11(self, major, minor):
assert "macosx_11_3_arm64" not in platforms
assert "macosx_11_0_universal" not in platforms
assert "macosx_11_0_universal2" in platforms
assert "macosx_10_15_universal2" in platforms
assert "macosx_10_15_x86_64" not in platforms
assert "macosx_10_4_x86_64" not in platforms
assert "macosx_10_3_x86_64" not in platforms
Expand Down

0 comments on commit 1b26f84

Please sign in to comment.