diff --git a/packaging/tags.py b/packaging/tags.py index 5b6c5ffd0..d82275119 100644 --- a/packaging/tags.py +++ b/packaging/tags.py @@ -398,9 +398,16 @@ def mac_platforms( compat_version = major_version, 0 binary_formats = _mac_binary_formats(compat_version, arch) for binary_format in binary_formats: - yield "macosx_{major}_{minor}_{binary_format}".format( - major=major_version, minor=0, binary_format=binary_format + yield "macosx_{major}_{binary_format}".format( + major=major_version, binary_format=binary_format ) + # Mac OS 11 and 12 seem to omit the minor version, we will keep + # them for backwards compatibility and avoid generating tags + # with it in the future + if major_version <= 12: + yield "macosx_{major}_{minor}_{binary_format}".format( + major=major_version, minor=0, binary_format=binary_format + ) if version >= (11, 0): # Mac OS 11 on x86_64 is compatible with binaries from previous releases. diff --git a/tests/test_tags.py b/tests/test_tags.py index 06cd3b4a2..c67df14bf 100644 --- a/tests/test_tags.py +++ b/tests/test_tags.py @@ -241,7 +241,7 @@ def test_version_detection(self, monkeypatch): assert int(major) >= 11 assert minor == "0" else: - expected = f"macosx_{major}_{minor}_" + expected = f"macosx_{major}_" print(platforms, expected) assert platforms[0].startswith(expected) @@ -303,7 +303,9 @@ def test_mac_platforms(self): assert not list(tags.mac_platforms((10, 0), "x86_64")) - @pytest.mark.parametrize("major,minor", [(11, 0), (11, 3), (12, 0), (12, 3)]) + @pytest.mark.parametrize( + "major,minor", [(11, 0), (11, 3), (12, 0), (12, 3), (13, 0)] + ) def test_macos_11(self, major, minor): platforms = list(tags.mac_platforms((major, minor), "x86_64")) assert "macosx_11_0_arm64" not in platforms @@ -311,6 +313,10 @@ def test_macos_11(self, major, minor): assert "macosx_11_3_x86_64" not in platforms assert "macosx_11_0_universal" in platforms assert "macosx_11_0_universal2" in platforms + assert "macosx_11_arm64" not in platforms + assert "macosx_11_x86_64" in platforms + assert "macosx_11_universal" in platforms + assert "macosx_11_universal2" in platforms # Mac OS "10.16" is the version number that binaries compiled against an old # (pre 11.0) SDK will see. It can also be enabled explicitly for a process # with the environment variable SYSTEM_VERSION_COMPAT=1. @@ -319,10 +325,22 @@ def test_macos_11(self, major, minor): assert "macosx_10_15_universal2" in platforms assert "macosx_10_4_x86_64" in platforms assert "macosx_10_3_x86_64" not in platforms + assert "macosx_10_x86_64" not in platforms + assert "macosx_10_universal2" not in platforms if major >= 12: assert "macosx_12_0_x86_64" in platforms assert "macosx_12_0_universal" in platforms assert "macosx_12_0_universal2" in platforms + assert "macosx_12_x86_64" in platforms + assert "macosx_12_universal" in platforms + assert "macosx_12_universal2" in platforms + if major >= 13: + assert "macosx_13_0_x86_64" not in platforms + assert "macosx_13_0_universal" not in platforms + assert "macosx_13_0_universal2" not in platforms + assert "macosx_13_x86_64" in platforms + assert "macosx_13_universal" in platforms + assert "macosx_13_universal2" in platforms platforms = list(tags.mac_platforms((major, minor), "arm64")) assert "macosx_11_0_arm64" in platforms @@ -333,9 +351,21 @@ def test_macos_11(self, major, minor): 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 + assert "macosx_11_arm64" in platforms + assert "macosx_11_universal" not in platforms + assert "macosx_11_universal2" in platforms + assert "macosx_10_universal2" not in platforms + assert "macosx_10_x86_64" not in platforms if major >= 12: assert "macosx_12_0_arm64" in platforms assert "macosx_12_0_universal2" in platforms + assert "macosx_12_arm64" in platforms + assert "macosx_12_universal2" in platforms + if major >= 13: + assert "macosx_13_0_arm64" not in platforms + assert "macosx_13_0_universal2" not in platforms + assert "macosx_13_arm64" in platforms + assert "macosx_13_universal2" in platforms class TestManylinuxPlatform: @@ -1041,6 +1071,10 @@ def teardown_method(self): # Clear the version cache tags._glibc_version = [] + def test_interpreter_platform(self): + tag = sysconfig.get_platform().replace("-", "_").replace(".", "_") + assert tag in list(tags.platform_tags()) + @pytest.mark.parametrize( "name,expected", [("CPython", "cp"), ("PyPy", "pp"), ("Jython", "jy"), ("IronPython", "ip")],