diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2020-09-13 16:07:25 +0200 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2020-09-14 11:19:29 +0000 |
commit | 776e9ba9ed29818e926b5f89e98b0c38cdaf896f (patch) | |
tree | 7dce65d57aec7a83ddc8709e7ebfaacb95cf3872 /src | |
parent | b088f765f8133beecde23fa9fa6888b976764bd1 (diff) |
Update dmgbuild to upstream
This includes python3 support and adds retries to hdutil detach.
Use c88163e70e95985a744bd0d0dc0817cea582b694 as the base commit.
Change-Id: I14458a9c12fb6446796685867ee4c0c07c462d80
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src')
5 files changed, 43 insertions, 35 deletions
diff --git a/src/3rdparty/python/bin/dmgbuild b/src/3rdparty/python/bin/dmgbuild index 4647448da..74fc367c8 100755 --- a/src/3rdparty/python/bin/dmgbuild +++ b/src/3rdparty/python/bin/dmgbuild @@ -1,4 +1,4 @@ -#!/usr/bin/python +#! /usr/bin/env python # -*- coding: utf-8 -*- from __future__ import unicode_literals @@ -33,9 +33,4 @@ for d in args.defines: v = v[1:-1] defines[k] = v -dmgbuild.build_dmg( - args.filename.decode('utf_8'), - args.volume_name.decode('utf_8'), - args.settings.decode('utf_8'), - defines=defines, - lookForHiDPI=args.lookForHiDPI) +dmgbuild.build_dmg(args.filename, args.volume_name, args.settings, defines=defines, lookForHiDPI=args.lookForHiDPI) diff --git a/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/colors.py b/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/colors.py index 1d252a6bd..891e5d536 100644 --- a/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/colors.py +++ b/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/colors.py @@ -251,10 +251,11 @@ _x11_colors = { 'yellowgreen': (154, 205, 50) } -_ws_re = re.compile('\s+') -_token_re = re.compile('[A-Za-z_][A-Za-z0-9_]*') -_hex_re = re.compile('#([0-9a-f]{3}(?:[0-9a-f]{3})?)$') -_number_re = re.compile('[0-9]*(\.[0-9]*)') +_ws_re = re.compile(r'\s+') +_token_re = re.compile(r'[A-Za-z_][A-Za-z0-9_]*') +_hex_re = re.compile(r'#([0-9a-f]{3}(?:[0-9a-f]{3})?)$') +_number_re = re.compile(r'[0-9]*(\.[0-9]*)') + class ColorParser (object): def __init__(self, s): @@ -485,10 +486,13 @@ class ColorParser (object): raise ValueError('bad angle unit "%s"' % tok) return n -_color_re = re.compile('\s*(#|rgb|hsl|hwb|cmyk|gray|grey|%s)' +_color_re = re.compile(r'\s*(#|rgb|hsl|hwb|cmyk|gray|grey|%s)' % '|'.join(_x11_colors.keys())) + + def isAColor(s): return _color_re.match(s) + def parseColor(s): return ColorParser(s).parseColor() diff --git a/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/core.py b/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/core.py index 463730b68..efccd0028 100644 --- a/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/core.py +++ b/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/core.py @@ -11,6 +11,7 @@ import sys import tempfile import tokenize import json +import time try: {}.iteritems @@ -128,7 +129,7 @@ def load_json(filename, settings): settings['icon_locations'] = icon_locations def build_dmg(filename, volume_name, settings_file=None, settings={}, - defines={}, lookForHiDPI=True): + defines={}, lookForHiDPI=True, detach_retries=5): options = { # Default settings 'filename': filename, @@ -397,7 +398,7 @@ def build_dmg(filename, volume_name, settings_file=None, settings={}, for name,target in iteritems(options['symlinks']): total_size += 4096 - total_size = str(max(total_size / 1024, 1024)) + 'K' + total_size = str(max(total_size / 1000, 1024)) + 'K' ret, output = hdiutil('create', '-ov', @@ -462,7 +463,7 @@ def build_dmg(filename, volume_name, settings_file=None, settings={}, imageDirectory = '.' for candidateName in os.listdir(imageDirectory): hasScale = re.match( - '^(?P<name>.+)@(?P<scale>\d+)x(?P<extension>\.\w+)$', + r'^(?P<name>.+)@(?P<scale>\d+)x(?P<extension>\.\w+)$', candidateName) if hasScale and name == hasScale.group('name') and \ extension == hasScale.group('extension'): @@ -549,7 +550,11 @@ def build_dmg(filename, volume_name, settings_file=None, settings={}, hdiutil('detach', '-force', device, plist=False) raise - ret, output = hdiutil('detach', device, plist=False) + for tries in range(detach_retries): + ret, output = hdiutil('detach', device, plist=False) + if not ret: + break + time.sleep(1) if ret: hdiutil('detach', '-force', device, plist=False) diff --git a/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/licensing.py b/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/licensing.py index 5c2679096..871104040 100644 --- a/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/licensing.py +++ b/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/licensing.py @@ -428,16 +428,17 @@ def add_license(filename, license_info): is_two_byte = lang_id in (14, 51, 52, 53) # Japanese, Korean, SimpChinese, TradChinese if os.path.isfile(license_data): - with open(license_data) as f: + mode = 'rb' if license_data.endswith('.rtf') else 'r' + with open(license_data, mode=mode) as f: license_data = f.read() - if license_data.startswith('{\\rtf1'): - fork.add(Resource(b'RTF ', 5000 + ndx, language + ' SLA', - str(license_data))) + if type(license_data) == bytes and license_data.startswith(b'{\\rtf1'): + fork.add(Resource(b'RTF ', 5000 + ndx, (language + ' SLA').encode(), + license_data)) else: - fork.add(TextResource(5000 + ndx, language + ' SLA', + fork.add(TextResource(5000 + ndx, (language + ' SLA').encode(), maybe_encode(license_data, encoding_name))) - fork.add(StyleResource(5000 + ndx, language + ' SLA', + fork.add(StyleResource(5000 + ndx, (language + ' SLA').encode(), [Style(0, 12, 9, Style.Helvetica, 0, 0, (0, 0, 0))])) @@ -449,8 +450,7 @@ def add_license(filename, license_info): buttons = [maybe_encode(b, encoding_name) for b in buttons] - fork.add(StringListResource(5000 + ndx, language + ' Buttons', - buttons)) + fork.add(StringListResource(5000 + ndx, (language + ' Buttons').encode(), buttons)) lpic.append((lang_id, ndx, is_two_byte)) diff --git a/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/resources.py b/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/resources.py index d2f58e64a..03e2a43f3 100644 --- a/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/resources.py +++ b/src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/resources.py @@ -1,19 +1,16 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals - import struct class Resource (object): def __init__(self, res_type, res_id, res_name, data=None, res_attrs=0): - self.res_type = str(res_type) + self.res_type = res_type self.res_id = res_id - if isinstance(res_name, basestring): - res_name = str(res_name) self.res_name = res_name self.res_attrs = res_attrs if data is None: self.data = None - self.data = str(data) + self.data = data self.data_offset = None self.name_offset = None @@ -30,8 +27,8 @@ class TMPLResource (Resource): data = [] for name,typecode in tmpl: data.append(struct.pack(b'B', len(name))) - data.append(str(name)) - data.append(str(typecode)) + data.append(name) + data.append(typecode) super(TMPLResource, self).__init__(b'TMPL', res_id, res_name, b''.join(data), res_attrs) @@ -41,14 +38,15 @@ class StringListResource (Resource): data.append(struct.pack(b'>H', len(strings))) for s in strings: data.append(struct.pack(b'B', len(s))) - data.append(str(s)) + data.append(s) + super(StringListResource, self).__init__(b'STR#', res_id, res_name, b''.join(data), res_attrs) class TextResource (Resource): def __init__(self, res_id, res_name, string, res_attrs=0): super(TextResource, self).__init__(b'TEXT', res_id, res_name, - str(string), res_attrs) + string, res_attrs) class Style (object): # Fonts @@ -234,7 +232,13 @@ class ResourceFork (object): res_name_offset += name_offset if res_name_offset >= map_start + map_len: raise ValueError('Bad resource data - name out of range') - res_name_len = struct.unpack(b'B', data[res_name_offset])[0] + try: + # python2 + res_name_len = struct.unpack(b'B', data[res_name_offset])[0] + except: + # python3 + res_name_len = data[res_name_offset] + res_name = data[res_name_offset + 1:res_name_offset + res_name_len + 1] result.types[res_type].append(Resource(res_type, res_id, @@ -271,7 +275,7 @@ class ResourceFork (object): name_offset = 65535 else: name_offset = names_len - n = str(item.res_name) + n = item.res_name names.append(struct.pack(b'B', len(n)) + n) names_len += 1 + len(n) |