diff options
author | Samuel Gaist <samuel.gaist@edeltech.ch> | 2018-01-18 08:09:51 +0100 |
---|---|---|
committer | Samuel Gaist <samuel.gaist@edeltech.ch> | 2018-01-23 13:49:51 +0000 |
commit | b6713898a2eb277b7ed8cea0f3c3192124e0bb51 (patch) | |
tree | 083a62bdc042678492cb7267f3b70812c19d630a | |
parent | b9834c0651a46ec43c891ec097252af260429304 (diff) | |
download | qttools-b6713898a2eb277b7ed8cea0f3c3192124e0bb51.tar.gz |
macdeployqt: Implement selection of file system for .dmg file
With macOS High Sierra, Apple machines using SSD see their file
system changed for APFS automatically.
hdiutil by default uses the current file system to build the dmg file
which in this case makes them unusable on older version of macOS that
don't have support for APFS.
This patch adds an additional option to macdeployqt to select the
file system to use when building the .dmg. It defaults to HFS+ which
was the official file system used until now for all currently
supported version of macOS.
[ChangeLog][macdeployqt][feature] Added support for selecting the
file system type to use when building a .dmg file. Defaults to HFS+
to support a wider range of macOS versions.
Task-number: QTBUG-65844
Change-Id: Ic66856344f96c6536b224d13d309715b34eb0874
Reviewed-by: André Hartmann <aha_1980@gmx.de>
-rw-r--r-- | src/macdeployqt/macdeployqt/main.cpp | 11 | ||||
-rw-r--r-- | src/macdeployqt/shared/shared.cpp | 8 | ||||
-rw-r--r-- | src/macdeployqt/shared/shared.h | 2 |
3 files changed, 18 insertions, 3 deletions
diff --git a/src/macdeployqt/macdeployqt/main.cpp b/src/macdeployqt/macdeployqt/main.cpp index 5488a5f61..90a5412b2 100644 --- a/src/macdeployqt/macdeployqt/main.cpp +++ b/src/macdeployqt/macdeployqt/main.cpp @@ -53,6 +53,7 @@ int main(int argc, char **argv) qDebug() << " -codesign=<ident> : Run codesign with the given identity on all executables"; qDebug() << " -appstore-compliant: Skip deployment of components that use private API"; qDebug() << " -libpath=<path> : Add the given path to the library search path"; + qDebug() << " -fs=<filesystem> : Set the filesystem used for the .dmg disk image (defaults to HFS+)"; qDebug() << ""; qDebug() << "macdeployqt takes an application bundle as input and makes it"; qDebug() << "self-contained by copying in the Qt frameworks and plugins that"; @@ -83,6 +84,7 @@ int main(int argc, char **argv) bool plugins = true; bool dmg = false; + QByteArray filesystem("HFS+"); bool useDebugLibs = false; extern bool runStripEnabled; extern bool alwaysOwerwriteEnabled; @@ -162,6 +164,13 @@ int main(int argc, char **argv) LogDebug() << "Argument found:" << argument; deployFramework = true; + } else if (argument.startsWith(QByteArray("-fs"))) { + LogDebug() << "Argument found:" << argument; + int index = argument.indexOf('='); + if (index == -1) + LogError() << "Missing filesystem type"; + else + filesystem = argument.mid(index+1); } else if (argument.startsWith("-")) { LogError() << "Unknown argument" << argument << "\n"; return 1; @@ -207,7 +216,7 @@ int main(int argc, char **argv) if (dmg) { LogNormal(); - createDiskImage(appBundlePath); + createDiskImage(appBundlePath, filesystem); } return 0; diff --git a/src/macdeployqt/shared/shared.cpp b/src/macdeployqt/shared/shared.cpp index 49dbe5426..90cfaf2ee 100644 --- a/src/macdeployqt/shared/shared.cpp +++ b/src/macdeployqt/shared/shared.cpp @@ -1493,7 +1493,7 @@ void codesign(const QString &identity, const QString &appBundlePath) { codesignBundle(identity, appBundlePath, QList<QString>()); } -void createDiskImage(const QString &appBundlePath) +void createDiskImage(const QString &appBundlePath, const QString &filesystemType) { QString appBaseName = appBundlePath; appBaseName.chop(4); // remove ".app" from end @@ -1511,16 +1511,22 @@ void createDiskImage(const QString &appBundlePath) LogNormal() << "Creating disk image (.dmg) for" << appBundlePath; } + LogNormal() << "Image will use" << filesystemType; + // More dmg options can be found in the hdiutil man page. QStringList options = QStringList() << "create" << dmgName << "-srcfolder" << appBundlePath << "-format" << "UDZO" + << "-fs" << filesystemType << "-volname" << appBaseName; QProcess hdutil; hdutil.start("hdiutil", options); hdutil.waitForFinished(-1); + if (hdutil.exitCode() != 0) { + LogError() << "Bundle creation error:" << hdutil.readAllStandardError(); + } } void fixupFramework(const QString &frameworkName) diff --git a/src/macdeployqt/shared/shared.h b/src/macdeployqt/shared/shared.h index c173846c8..c4d60ea0a 100644 --- a/src/macdeployqt/shared/shared.h +++ b/src/macdeployqt/shared/shared.h @@ -129,7 +129,7 @@ QSet<QString> codesignBundle(const QString &identity, const QString &appBundlePath, QList<QString> additionalBinariesContainingRpaths); void codesign(const QString &identity, const QString &appBundlePath); -void createDiskImage(const QString &appBundlePath); +void createDiskImage(const QString &appBundlePath, const QString &filesystemType); void fixupFramework(const QString &appBundlePath); |