diff --git a/src/blackconfig/buildconfig.cpp b/src/blackconfig/buildconfig.cpp index 9dcdbbdb4..28373f199 100644 --- a/src/blackconfig/buildconfig.cpp +++ b/src/blackconfig/buildconfig.cpp @@ -50,6 +50,13 @@ namespace BlackConfig return s; } + bool CBuildConfig::isKnownExecutableName(const QString &executable) + { + return executable == CBuildConfig::swiftCoreExecutableName() || + executable == CBuildConfig::swiftDataExecutableName() || + executable == CBuildConfig::swiftGuiExecutableName(); + } + bool CBuildConfig::isRunningOnWindowsNtPlatform() { #ifdef Q_OS_WIN diff --git a/src/blackconfig/buildconfig.h b/src/blackconfig/buildconfig.h index 9175f9fdd..6acb2a1d1 100644 --- a/src/blackconfig/buildconfig.h +++ b/src/blackconfig/buildconfig.h @@ -19,7 +19,7 @@ namespace BlackConfig { - //! Build configuration + //! Build configuration, also used to secure VATSIM key class CBuildConfig { public: @@ -101,6 +101,9 @@ namespace BlackConfig //! Executable name for swift data, no(!) appendix static const QString &swiftDataExecutableName(); + //! Known executable + static bool isKnownExecutableName(const QString &executable); + //! End of lifetime static const QDateTime &getEol(); // defined in buildconfig_gen.cpp.in diff --git a/src/blackmisc/directoryutils.cpp b/src/blackmisc/directoryutils.cpp index 20bd1c584..cb46a2a79 100644 --- a/src/blackmisc/directoryutils.cpp +++ b/src/blackmisc/directoryutils.cpp @@ -45,6 +45,23 @@ namespace BlackMisc return pDir; } + QString CDirectoryUtils::executableFilePath(const QString &executable) + { + Q_ASSERT_X(!executable.isEmpty(), Q_FUNC_INFO, "Missing executable file path"); + Q_ASSERT_X(CBuildConfig::isKnownExecutableName(executable), Q_FUNC_INFO, "Unknown exectuable"); + + QString s = CFileUtils::appendFilePaths(CDirectoryUtils::binDirectory(), executable); + if (CBuildConfig::isRunningOnMacOSXPlatform() && CDirectoryUtils::isMacOSXAppBundle()) + { + s += QLatin1String(".app/Contents/MacOS/") + executable; + } + else if (CBuildConfig::isRunningOnWindowsNtPlatform()) + { + s += QLatin1String(".exe"); + } + return s; + } + QString normalizedApplicationDirectoryImpl() { QString appDir = CDirectoryUtils::binDirectory(); diff --git a/src/blackmisc/directoryutils.h b/src/blackmisc/directoryutils.h index f35c56098..bd5755293 100644 --- a/src/blackmisc/directoryutils.h +++ b/src/blackmisc/directoryutils.h @@ -34,6 +34,9 @@ namespace BlackMisc //! Plugins directory static const QString &pluginsDirectory(); + //! The executable file path + static QString executableFilePath(const QString &executable); + //! swift application data directory, contains 0..n swift installation directories static const QString &applicationDataDirectory(); diff --git a/src/swiftlauncher/swiftlauncher.cpp b/src/swiftlauncher/swiftlauncher.cpp index 311ac11a9..2773a9f23 100644 --- a/src/swiftlauncher/swiftlauncher.cpp +++ b/src/swiftlauncher/swiftlauncher.cpp @@ -265,13 +265,7 @@ void CSwiftLauncher::startSwiftCore() // I set this for debug purpose only m_executableArgs = args; m_executable.clear(); - m_executable = CFileUtils::appendFilePaths(CDirectoryUtils::binDirectory(), CBuildConfig::swiftCoreExecutableName()); - if (CBuildConfig::isRunningOnMacOSXPlatform()) - { - m_executable += QLatin1String(".app/Contents/MacOS/"); - m_executable += CBuildConfig::swiftCoreExecutableName(); - } - + m_executable = CDirectoryUtils::executableFilePath(CBuildConfig::swiftCoreExecutableName()); CLogMessage(this).info(this->getCmdLine()); // start @@ -281,24 +275,14 @@ void CSwiftLauncher::startSwiftCore() void CSwiftLauncher::setSwiftDataExecutable() { m_executable.clear(); - m_executable = CFileUtils::appendFilePaths(CDirectoryUtils::binDirectory(), CBuildConfig::swiftDataExecutableName()); - if (CBuildConfig::isRunningOnMacOSXPlatform()) - { - m_executable += QLatin1String(".app/Contents/MacOS/"); - m_executable += CBuildConfig::swiftDataExecutableName(); - } + m_executable = CDirectoryUtils::executableFilePath(CBuildConfig::swiftDataExecutableName()); m_executableArgs.clear(); } bool CSwiftLauncher::setSwiftGuiExecutable() { m_executable.clear(); - m_executable = CFileUtils::appendFilePaths(CDirectoryUtils::binDirectory(), CBuildConfig::swiftGuiExecutableName()); - if (CBuildConfig::isRunningOnMacOSXPlatform()) - { - m_executable += QLatin1String(".app/Contents/MacOS/"); - m_executable += CBuildConfig::swiftGuiExecutableName(); - } + m_executable = CDirectoryUtils::executableFilePath(CBuildConfig::swiftGuiExecutableName()); QStringList args {