From b6713898a2eb277b7ed8cea0f3c3192124e0bb51 Mon Sep 17 00:00:00 2001 From: Samuel Gaist Date: Thu, 18 Jan 2018 08:09:51 +0100 Subject: macdeployqt: Implement selection of file system for .dmg file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/macdeployqt/macdeployqt/main.cpp | 11 ++++++++++- src/macdeployqt/shared/shared.cpp | 8 +++++++- 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= : Run codesign with the given identity on all executables"; qDebug() << " -appstore-compliant: Skip deployment of components that use private API"; qDebug() << " -libpath= : Add the given path to the library search path"; + qDebug() << " -fs= : 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()); } -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 codesignBundle(const QString &identity, const QString &appBundlePath, QList 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); -- cgit v1.2.3