summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2018-08-23 18:57:59 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2018-08-25 09:34:36 +0000
commit42588a84878c4d58ba5bf46636e31ba99a11227a (patch)
treee2bfe2acfe38e4d5724dcd6801cc8c70955e5b88
parent563c9eb4eefe758ed101ef246dbcbece8877d77c (diff)
Improve detection and handling of unsupported Apple platforms
The application name wasn't always printed, so we try try a few more possibilities before falling back to the process name. We also run the check as early as possible, instead of relying on a QCoreApplication. We do not have to provide a dialog to the user, as macOS will do this for us if the application is launched from Finder. Change-Id: Ifbec86946d60294806364e08964852fd4b74ff56 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
-rw-r--r--src/corelib/kernel/qcore_mac_objc.mm23
-rw-r--r--src/corelib/kernel/qcore_mac_p.h1
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp3
3 files changed, 15 insertions, 12 deletions
diff --git a/src/corelib/kernel/qcore_mac_objc.mm b/src/corelib/kernel/qcore_mac_objc.mm
index 2e303607df..4ca9c2e996 100644
--- a/src/corelib/kernel/qcore_mac_objc.mm
+++ b/src/corelib/kernel/qcore_mac_objc.mm
@@ -448,16 +448,23 @@ void qt_apple_check_os_version()
version / 10000, version / 100 % 100, version % 100};
const NSOperatingSystemVersion current = NSProcessInfo.processInfo.operatingSystemVersion;
if (![NSProcessInfo.processInfo isOperatingSystemAtLeastVersion:required]) {
- fprintf(stderr, "You can't use this version of %s with this version of %s. "
- "You have %s %ld.%ld.%ld. Qt requires %s %ld.%ld.%ld or later.\n",
- (reinterpret_cast<const NSString *>(
- NSBundle.mainBundle.infoDictionary[@"CFBundleName"]).UTF8String),
- os,
- os, long(current.majorVersion), long(current.minorVersion), long(current.patchVersion),
- os, long(required.majorVersion), long(required.minorVersion), long(required.patchVersion));
- abort();
+ NSDictionary *plist = NSBundle.mainBundle.infoDictionary;
+ NSString *applicationName = plist[@"CFBundleDisplayName"];
+ if (!applicationName)
+ applicationName = plist[@"CFBundleName"];
+ if (!applicationName)
+ applicationName = NSProcessInfo.processInfo.processName;
+
+ fprintf(stderr, "Sorry, \"%s\" can not be run on this version of %s. "
+ "Qt requires %s %ld.%ld.%ld or later, you have %s %ld.%ld.%ld.\n",
+ applicationName.UTF8String, os,
+ os, long(required.majorVersion), long(required.minorVersion), long(required.patchVersion),
+ os, long(current.majorVersion), long(current.minorVersion), long(current.patchVersion));
+
+ exit(1);
}
}
+Q_CONSTRUCTOR_FUNCTION(qt_apple_check_os_version);
// -------------------------------------------------------------------------
diff --git a/src/corelib/kernel/qcore_mac_p.h b/src/corelib/kernel/qcore_mac_p.h
index bf540c2e35..19dddbc2ae 100644
--- a/src/corelib/kernel/qcore_mac_p.h
+++ b/src/corelib/kernel/qcore_mac_p.h
@@ -190,7 +190,6 @@ Q_CORE_EXPORT bool qt_mac_applicationIsInDarkMode();
QDebug operator<<(QDebug debug, const QMacAutoReleasePool *pool);
#endif
-Q_CORE_EXPORT void qt_apple_check_os_version();
Q_CORE_EXPORT bool qt_apple_isApplicationExtension();
#if defined(Q_OS_MACOS) && !defined(QT_BOOTSTRAPPED)
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 04da52a960..0303916c11 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -456,9 +456,6 @@ QCoreApplicationPrivate::QCoreApplicationPrivate(int &aargc, char **aargv, uint
, q_ptr(0)
#endif
{
-#if defined(Q_OS_DARWIN)
- qt_apple_check_os_version();
-#endif
app_compile_version = flags & 0xffffff;
static const char *const empty = "";
if (argc == 0 || argv == 0) {