aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2020-09-13 16:07:25 +0200
committerIvan Komissarov <ABBAPOH@gmail.com>2020-09-14 11:19:29 +0000
commit776e9ba9ed29818e926b5f89e98b0c38cdaf896f (patch)
tree7dce65d57aec7a83ddc8709e7ebfaacb95cf3872 /src
parentb088f765f8133beecde23fa9fa6888b976764bd1 (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')
-rwxr-xr-xsrc/3rdparty/python/bin/dmgbuild9
-rw-r--r--src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/colors.py14
-rw-r--r--src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/core.py13
-rw-r--r--src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/licensing.py16
-rw-r--r--src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/resources.py26
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)