def test_macos_11(self, major, minor): platforms = list(tags.mac_platforms((major, minor), "x86_64")) assert "macosx_11_0_arm64" not in platforms assert "macosx_11_0_x86_64" in platforms assert "macosx_11_3_x86_64" not in platforms assert "macosx_11_0_universal" in platforms assert "macosx_11_0_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. 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: assert "macosx_12_0_x86_64" in platforms assert "macosx_12_0_universal" in platforms assert "macosx_12_0_universal2" in platforms platforms = list(tags.mac_platforms((major, minor), "arm64")) assert "macosx_11_0_arm64" in platforms 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 if major >= 12: assert "macosx_12_0_arm64" in platforms assert "macosx_12_0_universal2" in platforms
def test_arch_detection(self, arch, monkeypatch): if platform.system() != "Darwin" or platform.mac_ver()[2] != arch: monkeypatch.setattr( platform, "mac_ver", lambda: ("10.14", ("", "", ""), arch) ) monkeypatch.setattr(tags, "_mac_arch", lambda *args: arch) assert next(tags.mac_platforms((10, 14))).endswith(arch)
def test_mac_platforms(self): platforms = list(tags.mac_platforms((10, 5), "x86_64")) assert platforms == [ "macosx_10_5_x86_64", "macosx_10_5_intel", "macosx_10_5_fat64", "macosx_10_5_fat32", "macosx_10_5_universal", "macosx_10_4_x86_64", "macosx_10_4_intel", "macosx_10_4_fat64", "macosx_10_4_fat32", "macosx_10_4_universal", ] assert len(list(tags.mac_platforms((10, 17), "x86_64"))) == 14 * 5 assert not list(tags.mac_platforms((10, 0), "x86_64"))
def test_version_detection(self, monkeypatch): if platform.system() != "Darwin": monkeypatch.setattr(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]) platforms = list(tags.mac_platforms(arch="x86_64")) assert platforms[0].startswith(expected)
def tags(cls): from packaging import tags for tag in tags.sys_tags(): yield tag # FIXME: Work around for https://github.com/pypa/packaging/pull/319 and Big Sur if sys.platform == 'darwin' and Version.from_string(platform.mac_ver()[0]) > Version(10): for override in tags.mac_platforms(version=(10, 16)): for tag in tags.sys_tags(): if not tag.platform: pass yield tags.Tag(tag.interpreter, tag.abi, override)
def test_mac_cpython(self, mock_interpreter_name, monkeypatch): if mock_interpreter_name("CPython"): monkeypatch.setattr(tags, "_cpython_abis", lambda *a: ["cp33m"]) if platform.system() != "Darwin": monkeypatch.setattr(platform, "system", lambda: "Darwin") monkeypatch.setattr(tags, "mac_platforms", lambda: ["macosx_10_5_x86_64"]) abis = tags._cpython_abis(sys.version_info[:2]) platforms = list(tags.mac_platforms()) result = list(tags.sys_tags()) assert len(abis) == 1 assert result[0] == tags.Tag( "cp" + tags._version_nodot(sys.version_info[:2]), abis[0], platforms[0] ) assert result[-1] == tags.Tag( "py" + tags._version_nodot((sys.version_info[0], 0)), "none", "any" )
def _mac_platforms(arch): # type: (str) -> List[str] match = _osx_arch_pat.match(arch) if match: name, major, minor, actual_arch = match.groups() mac_version = (int(major), int(minor)) arches = [ # Since we have always only checked that the platform starts # with "macosx", for backwards-compatibility we extract the # actual prefix provided by the user in case they provided # something like "macosxcustom_". It may be good to remove # this as undocumented or deprecate it in the future. "{}_{}".format(name, arch[len("macosx_"):]) for arch in mac_platforms(mac_version, actual_arch) ] else: # arch pattern didn't match (?!) arches = [arch] return arches