aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2021-04-18 13:46:19 +0200
committerIvan Komissarov <ABBAPOH@gmail.com>2021-04-19 09:23:08 +0000
commit0976a94724854501a12581201b2c6d860a0f6dd4 (patch)
treeb7cabb88e411bd83ae4279ce34b640c7f0753c47
parent8e71e73540eeba20bf8866b3b3909784c83d6c3c (diff)
update dmgbuild to master branch
This contains fixes for Python 3.9 Change-Id: I087e21a4208c9091aab4cd9fcb9b3c2d1bf9945a Fixes: QBS-1642 Reviewed-by: Max Bespalov <bespalov.maxim.a@gmail.com> Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/3rdparty/python/lib/python2.7/site-packages/dmgbuild/core.py79
1 files changed, 66 insertions, 13 deletions
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 efccd0028..d94a06c1f 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
@@ -3,6 +3,7 @@ from __future__ import unicode_literals
import os
import pkg_resources
+import platform
import re
import shutil
import stat
@@ -25,7 +26,19 @@ try:
except NameError:
unicode = str
-import biplist
+if sys.version_info < (3, 4):
+ import biplist
+ def plist_from_bytes(data):
+ return biplist.readPlistFromString(data)
+ def plist_bytes(data):
+ return biplist.Data(data)
+else:
+ import plistlib
+ def plist_from_bytes(data):
+ return plistlib.loads(data)
+ def plist_bytes(data):
+ return data
+
from mac_alias import *
from ds_store import *
@@ -39,6 +52,10 @@ except ImportError:
_hexcolor_re = re.compile(r'#[0-9a-f]{3}(?:[0-9a-f]{3})?')
+# The first element in the platform.mac_ver() tuple is a string containing the
+# macOS version (e.g., '10.15.6'). Parse into an integer tuple.
+MACOS_VERSION = tuple(int(v) for v in platform.mac_ver()[0].split('.'))
+
class DMGError(Exception):
pass
@@ -51,7 +68,7 @@ def hdiutil(cmd, *args, **kwargs):
p = subprocess.Popen(all_args, stdout=subprocess.PIPE, close_fds=True)
output, errors = p.communicate()
if plist:
- results = biplist.readPlistFromString(output)
+ results = plist_from_bytes(output)
else:
results = output
retcode = p.wait()
@@ -103,6 +120,8 @@ def load_json(filename, settings):
settings['compression_level'] = json_data.get('compression-level', None)
settings['license'] = json_data.get('license', None)
files = []
+ hide = []
+ hide_extensions = []
symlinks = {}
icon_locations = {}
for fileinfo in json_data.get('contents', []):
@@ -123,8 +142,16 @@ def load_json(filename, settings):
elif kind == 'position':
pass
icon_locations[name] = (fileinfo['x'], fileinfo['y'])
+ hide_ext = fileinfo.get('hide_extension', False)
+ if hide_ext:
+ hide_extensions.append(name)
+ hidden = fileinfo.get('hidden', False)
+ if hidden:
+ hide.append(name)
settings['files'] = files
+ settings['hide_extensions'] = hide_extensions
+ settings['hide'] = hide
settings['symlinks'] = symlinks
settings['icon_locations'] = icon_locations
@@ -139,6 +166,8 @@ def build_dmg(filename, volume_name, settings_file=None, settings={},
'size': None,
'files': [],
'symlinks': {},
+ 'hide': [],
+ 'hide_extensions': [],
'icon': None,
'badge_icon': None,
'background': None,
@@ -258,7 +287,7 @@ def build_dmg(filename, volume_name, settings_file=None, settings={},
}
background = options['background']
-
+
columns = {
'name': 'name',
'date-modified': 'dateModified',
@@ -297,7 +326,7 @@ def build_dmg(filename, volume_name, settings_file=None, settings={},
'version': 'ascending',
'comments': 'ascending',
}
-
+
lsvp = {
'viewOptionsVersion': 1,
'sortColumn': columns.get(options['list_sort_by'], 'name'),
@@ -319,7 +348,7 @@ def build_dmg(filename, volume_name, settings_file=None, settings={},
default_widths[column])
asc = 'ascending' == options['list_column_sort_directions'].get(column,
default_sort_directions[column])
-
+
lsvp['columns'][columns[column]] = {
'index': n,
'width': width,
@@ -334,7 +363,7 @@ def build_dmg(filename, volume_name, settings_file=None, settings={},
cndx[k] = n
width = default_widths[k]
asc = 'ascending' == default_sort_directions[k]
-
+
lsvp['columns'][columns[column]] = {
'index': n,
'width': width,
@@ -344,7 +373,7 @@ def build_dmg(filename, volume_name, settings_file=None, settings={},
}
n += 1
-
+
default_view = options['default_view']
views = {
'icon-view': b'icnv',
@@ -411,11 +440,19 @@ def build_dmg(filename, volume_name, settings_file=None, settings={},
if ret:
raise DMGError('Unable to create disk image')
- ret, output = hdiutil('attach',
- '-nobrowse',
- '-owners', 'off',
- '-noidme',
- writableFile.name)
+ # IDME was deprecated in macOS 10.15/Catalina; as a result, use of -noidme
+ # started raising a warning.
+ if MACOS_VERSION >= (10, 15):
+ ret, output = hdiutil('attach',
+ '-nobrowse',
+ '-owners', 'off',
+ writableFile.name)
+ else:
+ ret, output = hdiutil('attach',
+ '-nobrowse',
+ '-owners', 'off',
+ '-noidme',
+ writableFile.name)
if ret:
raise DMGError('Unable to attach disk image')
@@ -506,7 +543,7 @@ def build_dmg(filename, volume_name, settings_file=None, settings={},
background_bmk = Bookmark.for_file(path_in_image)
icvp['backgroundType'] = 2
- icvp['backgroundImageAlias'] = biplist.Data(alias.to_bytes())
+ icvp['backgroundImageAlias'] = plist_bytes(alias.to_bytes())
for f in options['files']:
if isinstance(f, tuple):
@@ -523,6 +560,22 @@ def build_dmg(filename, volume_name, settings_file=None, settings={},
name_in_image = os.path.join(mount_point, name)
os.symlink(target, name_in_image)
+ to_hide = []
+ for name in options['hide_extensions']:
+ name_in_image = os.path.join(mount_point, name)
+ to_hide.append(name_in_image)
+
+ if to_hide:
+ subprocess.call(['/usr/bin/SetFile', '-a', 'E'] + to_hide)
+
+ to_hide = []
+ for name in options['hide']:
+ name_in_image = os.path.join(mount_point, name)
+ to_hide.append(name_in_image)
+
+ if to_hide:
+ subprocess.call(['/usr/bin/SetFile', '-a', 'V'] + to_hide)
+
userfn = options.get('create_hook', None)
if callable(userfn):
userfn(mount_point, options)