diff --git a/src/wheel/macosx_libfile.py b/src/wheel/macosx_libfile.py index 9141f269..f8ad3cab 100644 --- a/src/wheel/macosx_libfile.py +++ b/src/wheel/macosx_libfile.py @@ -350,15 +350,16 @@ def calculate_macosx_platform_tag(archive_root, platform_tag): """ prefix, base_version, suffix = platform_tag.split('-') base_version = tuple([int(x) for x in base_version.split(".")]) - if len(base_version) >= 2: - base_version = base_version[0:2] - + base_version = base_version[:2] + if base_version[0] > 10: + base_version = (base_version[0], 0) assert len(base_version) == 2 if "MACOSX_DEPLOYMENT_TARGET" in os.environ: deploy_target = tuple([int(x) for x in os.environ[ "MACOSX_DEPLOYMENT_TARGET"].split(".")]) - if len(deploy_target) >= 2: - deploy_target = deploy_target[0:2] + deploy_target = deploy_target[:2] + if deploy_target[0] > 10: + deploy_target = (deploy_target[0], 0) if deploy_target < base_version: sys.stderr.write( "[WARNING] MACOSX_DEPLOYMENT_TARGET is set to a lower value ({}) than the " @@ -378,7 +379,10 @@ def calculate_macosx_platform_tag(archive_root, platform_tag): lib_path = os.path.join(dirpath, filename) min_ver = extract_macosx_min_system_version(lib_path) if min_ver is not None: - versions_dict[lib_path] = min_ver[0:2] + min_ver = min_ver[0:2] + if min_ver[0] > 10: + min_ver = (min_ver[0], 0) + versions_dict[lib_path] = min_ver if len(versions_dict) > 0: base_version = max(base_version, max(versions_dict.values())) diff --git a/tests/test_macosx_libfile.py b/tests/test_macosx_libfile.py index 35cff83b..337f0e30 100644 --- a/tests/test_macosx_libfile.py +++ b/tests/test_macosx_libfile.py @@ -21,7 +21,8 @@ def test_read_from_dylib(): ("test_lib_10_10_386.dylib", "10.10.0"), ("test_lib_10_14_386.dylib", "10.14.0"), ("test_lib_multiple_fat.dylib", "10.14.0"), - ("test_lib_10_10_10.dylib", "10.10.10") + ("test_lib_10_10_10.dylib", "10.10.10"), + ("test_lib_11.dylib", "11.0.0"), ] for file_name, ver in versions: extracted = extract_macosx_min_system_version( @@ -48,14 +49,14 @@ class TestGetPlatformMacosx: def test_simple(self, monkeypatch): dirname = os.path.dirname(__file__) dylib_dir = os.path.join(dirname, "testdata", "macosx_minimal_system_version") - monkeypatch.setattr(distutils.util, "get_platform", return_factory("macosx-10.14-x86_64")) - assert get_platform(dylib_dir) == "macosx_10_14_x86_64" + monkeypatch.setattr(distutils.util, "get_platform", return_factory("macosx-11.0-x86_64")) + assert get_platform(dylib_dir) == "macosx_11_0_x86_64" def test_version_bump(self, monkeypatch, capsys): dirname = os.path.dirname(__file__) dylib_dir = os.path.join(dirname, "testdata", "macosx_minimal_system_version") monkeypatch.setattr(distutils.util, "get_platform", return_factory("macosx-10.9-x86_64")) - assert get_platform(dylib_dir) == "macosx_10_14_x86_64" + assert get_platform(dylib_dir) == "macosx_11_0_x86_64" captured = capsys.readouterr() assert "[WARNING] This wheel needs a higher macOS version than" in captured.err @@ -127,6 +128,25 @@ def test_warning_on_to_low_env_variable(self, monkeypatch, capsys): captured = capsys.readouterr() assert "MACOSX_DEPLOYMENT_TARGET is set to a lower value (10.8) than the" in captured.err + def test_get_platform_bigsur_env(self, monkeypatch): + dirname = os.path.dirname(__file__) + dylib_dir = os.path.join(dirname, "testdata", "macosx_minimal_system_version") + monkeypatch.setattr(distutils.util, "get_platform", return_factory("macosx-10.9-x86_64")) + monkeypatch.setenv("MACOSX_DEPLOYMENT_TARGET", "11") + monkeypatch.setattr(os, "walk", return_factory( + [(dylib_dir, [], ["test_lib_10_6.dylib", "test_lib_10_10_fat.dylib"])] + )) + assert get_platform(dylib_dir) == "macosx_11_0_x86_64" + + def test_get_platform_bigsur_platform(self, monkeypatch): + dirname = os.path.dirname(__file__) + dylib_dir = os.path.join(dirname, "testdata", "macosx_minimal_system_version") + monkeypatch.setattr(distutils.util, "get_platform", return_factory("macosx-11-x86_64")) + monkeypatch.setattr(os, "walk", return_factory( + [(dylib_dir, [], ["test_lib_10_6.dylib", "test_lib_10_10_fat.dylib"])] + )) + assert get_platform(dylib_dir) == "macosx_11_0_x86_64" + def test_get_platform_linux(monkeypatch): monkeypatch.setattr(distutils.util, "get_platform", return_factory("linux_x86_64")) diff --git a/tests/testdata/macosx_minimal_system_version/test_lib_11.dylib b/tests/testdata/macosx_minimal_system_version/test_lib_11.dylib new file mode 100644 index 00000000..80202c11 Binary files /dev/null and b/tests/testdata/macosx_minimal_system_version/test_lib_11.dylib differ