swift
buildconfig.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include "buildconfig.h"
7 
8 #include <QCoreApplication>
9 #include <QLocale>
10 #include <QOperatingSystemVersion>
11 #include <QStringList>
12 #include <QSysInfo>
13 #include <QtGlobal>
14 
15 namespace swift::config
16 {
18  {
19  static const QString s("swiftguistd");
20  return s;
21  }
22 
24  {
25  static const QString s("swiftcore");
26  return s;
27  }
28 
30  {
31  static const QString s("swiftdata");
32  return s;
33  }
34 
35  const QString &CBuildConfig::getPlatformString()
36  {
37  static const QString p([] {
38  if constexpr (CBuildConfig::isRunningOnLinuxPlatform()) return QString("Linux");
39  if constexpr (CBuildConfig::isRunningOnMacOSPlatform()) return QString("MacOS");
40  if constexpr (CBuildConfig::isRunningOnWindowsNtPlatform())
41  {
42  if (CBuildConfig::buildWordSize() == 32) return QString("Win32");
43  if (CBuildConfig::buildWordSize() == 64) return QString("Win64");
44  }
45  return QString("unknown");
46  }());
47  return p;
48  }
49 
50  namespace Private
51  {
52  bool isLocalDeveloperBuildImpl()
53  {
54  if constexpr (!CBuildConfig::isDebugBuild()) { return false; }
55  const QString p = QCoreApplication::applicationDirPath().toLower();
56 
57  // guessing, feel free to add path checks
58  if (p.contains("build")) { return true; }
59  if (p.contains("msvc")) { return true; }
60  return false;
61  }
62  } // namespace Private
63 
65  {
66  static const bool devBuild = Private::isLocalDeveloperBuildImpl();
67  return devBuild;
68  }
69 
70  const QString &CBuildConfig::compiledWithInfo()
71  {
72  static QString infoShort;
73  QStringList sl;
74  if constexpr (CBuildConfig::isCompiledWithFs9Support()) { sl << "FS9"; }
75  if constexpr (CBuildConfig::isCompiledWithFsxSupport()) { sl << "FSX"; }
76  if constexpr (CBuildConfig::isCompiledWithMSFSSupport()) { sl << "MSFS2020"; }
77  if constexpr (CBuildConfig::isCompiledWithMSFS2024Support()) { sl << "MSFS2024"; }
78  if constexpr (CBuildConfig::isCompiledWithXPlaneSupport()) { sl << "XPlane"; }
79  if constexpr (CBuildConfig::isCompiledWithP3DSupport()) { sl << "P3D"; }
80  if constexpr (CBuildConfig::isCompiledWithFGSupport()) { sl << "FG"; }
81  infoShort = sl.join(", ");
82  if (infoShort.isEmpty()) { infoShort = "<none>"; }
83  return infoShort;
84  }
85 
86  const QString &CBuildConfig::gitHubRepoUrl()
87  {
88  static const QString url = "https://github.com/swift-project/pilotclient/";
89  return url;
90  }
91 
92  const QString &CBuildConfig::gitHubRepoApiUrl()
93  {
94  static const QString url = "https://api.github.com/repos/swift-project/pilotclient/";
95  return url;
96  }
97 
98  const QString &CBuildConfig::buildDateAndTime()
99  {
100  // http://en.cppreference.com/w/cpp/preprocessor/replace#Predefined_macros
101  static const QString buildDateAndTime = QString(__DATE__ " " __TIME__).simplified();
102  return buildDateAndTime;
103  }
104 
105  const QVersionNumber &CBuildConfig::getVersion()
106  {
107  static const QVersionNumber v { versionMajor(), versionMinor(), versionRevision() };
108  return v;
109  }
110 
111  const QString &CBuildConfig::getVersionString()
112  {
113  static const QString s(getVersion().toString());
114  return s;
115  }
116 
117  const QString &CBuildConfig::getShortVersionString()
118  {
119  static const QVersionNumber v { versionMajor(), versionMinor() };
120  static const QString s(v.toString());
121  return s;
122  }
123 
125  {
126  static const QString s = getPlatformString() % u' ' % getVersionString();
127  return s;
128  }
129 
130  const QStringList &CBuildConfig::getBuildAbiParts()
131  {
132  static const QStringList parts = QSysInfo::buildAbi().split('-');
133  return parts;
134  }
135 
136  namespace Private
137  {
138  int buildWordSizeImpl()
139  {
140  if (CBuildConfig::getBuildAbiParts().length() < 3) { return -1; }
141  const QString abiWs = CBuildConfig::getBuildAbiParts()[2];
142  if (abiWs.contains("32")) { return 32; }
143  if (abiWs.contains("64")) { return 64; }
144  return -1;
145  }
146  } // namespace Private
147 
149  {
150  static const int bws = Private::buildWordSizeImpl();
151  return bws;
152  }
153 } // namespace swift::config
154 
static const QString & getPlatformString()
Info such as Win32, Win64, macOS, Linux.
static constexpr bool isDebugBuild()
Debug build?
static const QString & buildDateAndTime()
Returns the build date and time as string.
static constexpr bool isCompiledWithFs9Support()
with FS9 support?
static const QVersionNumber & getVersion()
Version as QVersionNumber.
static constexpr bool isRunningOnMacOSPlatform()
Running on MacOS platform?
static const QString & getShortVersionString()
Version as QVersionNumber.
static const QString & gitHubRepoApiUrl()
GitHub Packages REST API URL.
static constexpr bool isCompiledWithMSFSSupport()
with MSFS support?
static const QString & getVersionString()
Version as QVersionNumber.
static constexpr bool isCompiledWithFsxSupport()
with FSX support?
static constexpr bool isCompiledWithFGSupport()
with FG support?
static bool isLocalDeveloperDebugBuild()
Local build for developers.
static constexpr bool isRunningOnWindowsNtPlatform()
Running on Windows NT platform?
static const QString & gitHubRepoUrl()
GitHub repository URL.
static constexpr bool isCompiledWithMSFS2024Support()
with MSFS2024 support?
static const QString & swiftCoreExecutableName()
Executable name for swift core, no(!) appendix.
static const QString & swiftGuiExecutableName()
Executable name for swift GUI, no(!) appendix.
static constexpr bool isRunningOnLinuxPlatform()
Running on Linux platform?
static const QString & swiftDataExecutableName()
Executable name for swift data, no(!) appendix.
static const QString & compiledWithInfo()
Info string about compilation.
static const QStringList & getBuildAbiParts()
Build ABI parts as in http://doc.qt.io/qt-5/qsysinfo.html#buildAbi.
static const QString & getVersionStringPlatform()
Version as QVersionNumber plus platform info.
static constexpr bool isCompiledWithXPlaneSupport()
with XPlane support?
static constexpr bool isCompiledWithP3DSupport()
with P3D support?
static int buildWordSize()
Whether this swift application is build as 32 or 64bit application.