summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2020-12-13 13:36:50 +0200
committerGitHub <noreply@github.com>2020-12-13 13:36:50 +0200
commitac5c0d9e78002f4aae9fd44e88dab3f5c2aebb2c (patch)
tree66fddb182684901a134e25a98613ad950f29e3e7 /src
parent2736fdae95461d2b23e4bbf0d81b907b71604957 (diff)
parent16777fb4c075df682c085d48b9c3703a36bf65c3 (diff)
downloadwheel-git-fix-367.tar.gz
Merge branch 'master' into fix-367fix-367
Diffstat (limited to 'src')
-rw-r--r--src/wheel/__init__.py2
-rw-r--r--src/wheel/bdist_wheel.py5
-rw-r--r--src/wheel/macosx_libfile.py30
3 files changed, 30 insertions, 7 deletions
diff --git a/src/wheel/__init__.py b/src/wheel/__init__.py
index 288ed76..eb426c5 100644
--- a/src/wheel/__init__.py
+++ b/src/wheel/__init__.py
@@ -1 +1 @@
-__version__ = '0.35.1'
+__version__ = '0.36.1'
diff --git a/src/wheel/bdist_wheel.py b/src/wheel/bdist_wheel.py
index a28b0b7..585d136 100644
--- a/src/wheel/bdist_wheel.py
+++ b/src/wheel/bdist_wheel.py
@@ -378,6 +378,11 @@ class bdist_wheel(Command):
def write_wheelfile(self, wheelfile_base, generator='bdist_wheel (' + wheel_version + ')'):
from email.message import Message
+
+ # Workaround for Python 2.7 for when "generator" is unicode
+ if sys.version_info < (3,) and not isinstance(generator, str):
+ generator = generator.encode('utf-8')
+
msg = Message()
msg['Wheel-Version'] = '1.0' # of the spec
msg['Generator'] = generator
diff --git a/src/wheel/macosx_libfile.py b/src/wheel/macosx_libfile.py
index 9141f26..8918039 100644
--- a/src/wheel/macosx_libfile.py
+++ b/src/wheel/macosx_libfile.py
@@ -33,6 +33,9 @@ Important remarks:
- All structures signatures are taken form macosx header files.
- I think that binary format will be more stable than `otool` output.
and if apple introduce some changes both implementation will need to be updated.
+- The system compile will set the deployment target no lower than
+ 11.0 for arm64 builds. For "Universal 2" builds use the x86_64 deployment
+ target when the arm64 target is 11.0.
"""
import ctypes
@@ -53,6 +56,7 @@ MH_CIGAM_64 = 0xcffaedfe
LC_VERSION_MIN_MACOSX = 0x24
LC_BUILD_VERSION = 0x32
+CPU_TYPE_ARM64 = 0x0100000c
mach_header_fields = [
("magic", ctypes.c_uint32), ("cputype", ctypes.c_int),
@@ -271,6 +275,16 @@ def extract_macosx_min_system_version(path_to_lib):
try:
version = read_mach_header(lib_file, el.offset)
if version is not None:
+ if el.cputype == CPU_TYPE_ARM64 and len(fat_arch_list) != 1:
+ # Xcode will not set the deployment target below 11.0.0
+ # for the arm64 architecture. Ignore the arm64 deployment
+ # in fat binaries when the target is 11.0.0, that way
+ # the other architetures can select a lower deployment
+ # target.
+ # This is safe because there is no arm64 variant for
+ # macOS 10.15 or earlier.
+ if version == (11, 0, 0):
+ continue
versions_list.append(version)
except ValueError:
pass
@@ -350,15 +364,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 +393,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()))