+ // Set umask so files are created with restricted permissions
+#ifdef HAVE_UMASK
+ umask(S_IRWXG | S_IRWXO);
+#endif
+
+ // Instantiate early, so log messages are handled
+ Quassel quassel;
+
+ Quassel::setupBuildInfo();
+ QCoreApplication::setApplicationName(Quassel::buildInfo().applicationName);
+ QCoreApplication::setApplicationVersion(Quassel::buildInfo().plainVersionString);
+ QCoreApplication::setOrganizationName(Quassel::buildInfo().organizationName);
+ QCoreApplication::setOrganizationDomain(Quassel::buildInfo().organizationDomain);
+
+ // Migrate settings from KDE4 to KF5 if appropriate
+#ifdef HAVE_KF5
+ Kdelibs4ConfigMigrator migrator(QCoreApplication::applicationName());
+ migrator.setConfigFiles(QStringList() << "quasselrc" << "quassel.notifyrc");
+ migrator.migrate();
+#endif
+
+ //Setup the High-DPI settings
+# if QT_VERSION >= 0x050600 && defined(Q_OS_WIN)
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); //Added in Qt 5.6
+#endif
+ QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
+
+ // Instantiate application
+#if defined BUILD_CORE
+ CoreApplication app(argc, argv);
+ const auto runMode = Quassel::RunMode::CoreOnly;
+#elif defined BUILD_QTUI
+ QtUiApplication app(argc, argv);
+ const auto runMode = Quassel::RunMode::ClientOnly;
+#elif defined BUILD_MONO
+ MonolithicApplication app(argc, argv);
+ const auto runMode = Quassel::RunMode::Monolithic;
+#endif