diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2019-06-28 12:08:34 +0300 |
---|---|---|
committer | Denis Shienkov <denis.shienkov@gmail.com> | 2019-07-02 15:42:58 +0000 |
commit | 27e11e6e14ae9a00b757a7b1e2b438e0297c0cc0 (patch) | |
tree | 665f4c6a0a00363ee113fa20d3adb4aff12566e5 /src | |
parent | acd61329b2401f8004254a062b325bd2dc4d150b (diff) |
baremetal: Insert the version into auto-detected IAREW profile
This is useful in case we have installed a multiple toolchain
versions.
Change-Id: Ia6d5fa1be16199d5e5f1eea8a077fcb885ba42e6
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/app/qbs-setup-toolchains/iarewprobe.cpp | 40 | ||||
-rw-r--r-- | src/app/qbs-setup-toolchains/iarewprobe.h | 6 | ||||
-rw-r--r-- | src/app/qbs-setup-toolchains/probe.h | 10 | ||||
-rw-r--r-- | src/lib/corelib/tools/version.cpp | 12 | ||||
-rw-r--r-- | src/lib/corelib/tools/version.h | 4 |
5 files changed, 45 insertions, 27 deletions
diff --git a/src/app/qbs-setup-toolchains/iarewprobe.cpp b/src/app/qbs-setup-toolchains/iarewprobe.cpp index 5d3785759..cc55575df 100644 --- a/src/app/qbs-setup-toolchains/iarewprobe.cpp +++ b/src/app/qbs-setup-toolchains/iarewprobe.cpp @@ -47,7 +47,6 @@ #include <tools/hostosinfo.h> #include <tools/profile.h> -#include <QtCore/qfileinfo.h> #include <QtCore/qlist.h> #include <QtCore/qsettings.h> @@ -72,14 +71,24 @@ static QString guessIarArchitecture(const QFileInfo &compiler) return {}; } -static Profile createIarProfileHelper(const QFileInfo &compiler, Settings *settings, +static Profile createIarProfileHelper(const ToolchainInstallInfo &info, + Settings *settings, QString profileName = QString()) { + const QFileInfo compiler = info.compilerPath; const QString architecture = guessIarArchitecture(compiler); // In case the profile is auto-detected. - if (profileName.isEmpty()) - profileName = QLatin1String("iar-") + architecture; + if (profileName.isEmpty()) { + if (!info.compilerVersion.isValid()) { + profileName = QStringLiteral("iar-unknown-%1").arg(architecture); + } else { + const QString version = info.compilerVersion.toString(QLatin1Char('_'), + QLatin1Char('_')); + profileName = QStringLiteral("iar-%1-%2").arg( + version, architecture); + } + } Profile profile(profileName, settings); profile.setValue(QLatin1String("cpp.toolchainInstallPath"), compiler.absolutePath()); @@ -92,9 +101,9 @@ static Profile createIarProfileHelper(const QFileInfo &compiler, Settings *setti return profile; } -static std::vector<IarInstallInfo> installedIarsFromPath() +static std::vector<ToolchainInstallInfo> installedIarsFromPath() { - std::vector<IarInstallInfo> infos; + std::vector<ToolchainInstallInfo> infos; const auto compilerNames = knownIarCompilerNames(); for (const QString &compilerName : compilerNames) { const QFileInfo iarPath( @@ -102,14 +111,14 @@ static std::vector<IarInstallInfo> installedIarsFromPath() HostOsInfo::appendExecutableSuffix(compilerName))); if (!iarPath.exists()) continue; - infos.push_back({iarPath.absoluteFilePath(), {}}); + infos.push_back({iarPath, Version{}}); } return infos; } -static std::vector<IarInstallInfo> installedIarsFromRegistry() +static std::vector<ToolchainInstallInfo> installedIarsFromRegistry() { - std::vector<IarInstallInfo> infos; + std::vector<ToolchainInstallInfo> infos; if (HostOsInfo::isWindowsHost()) { @@ -148,7 +157,7 @@ static std::vector<IarInstallInfo> installedIarsFromRegistry() if (iarPath.exists()) { // Note: threeLevelKey is a guessed toolchain version. const QString version = threeLevelKey; - infos.push_back({iarPath.absoluteFilePath(), version}); + infos.push_back({iarPath, Version::fromString(version)}); } } registry.endGroup(); @@ -175,19 +184,20 @@ bool isIarCompiler(const QString &compilerName) void createIarProfile(const QFileInfo &compiler, Settings *settings, QString profileName) { - createIarProfileHelper(compiler, settings, profileName); + const ToolchainInstallInfo info = {compiler, Version{}}; + createIarProfileHelper(info, settings, profileName); } void iarProbe(Settings *settings, QList<Profile> &profiles) { qbsInfo() << Tr::tr("Trying to detect IAR toolchains..."); - std::vector<IarInstallInfo> allInfos = installedIarsFromRegistry(); - const std::vector<IarInstallInfo> pathInfos = installedIarsFromPath(); + std::vector<ToolchainInstallInfo> allInfos = installedIarsFromRegistry(); + const std::vector<ToolchainInstallInfo> pathInfos = installedIarsFromPath(); allInfos.insert(std::end(allInfos), std::begin(pathInfos), std::end(pathInfos)); - for (const IarInstallInfo &info : allInfos) { - const auto profile = createIarProfileHelper(info.compilerPath, settings); + for (const ToolchainInstallInfo &info : allInfos) { + const auto profile = createIarProfileHelper(info, settings); profiles.push_back(profile); } diff --git a/src/app/qbs-setup-toolchains/iarewprobe.h b/src/app/qbs-setup-toolchains/iarewprobe.h index f5caf61ed..b21049314 100644 --- a/src/app/qbs-setup-toolchains/iarewprobe.h +++ b/src/app/qbs-setup-toolchains/iarewprobe.h @@ -51,12 +51,6 @@ class Profile; class Settings; } -struct IarInstallInfo -{ - QString compilerPath; - QString version; -}; - bool isIarCompiler(const QString &compilerName); void createIarProfile(const QFileInfo &compiler, qbs::Settings *settings, diff --git a/src/app/qbs-setup-toolchains/probe.h b/src/app/qbs-setup-toolchains/probe.h index 510747ef7..dab48a340 100644 --- a/src/app/qbs-setup-toolchains/probe.h +++ b/src/app/qbs-setup-toolchains/probe.h @@ -39,7 +39,9 @@ #ifndef QBS_PROBE_H #define QBS_PROBE_H -#include <QtCore/qglobal.h> +#include <tools/version.h> + +#include <QtCore/qfileinfo.h> QT_BEGIN_NAMESPACE class QString; @@ -55,4 +57,10 @@ void createProfile(const QString &profileName, const QString &toolchainType, void probe(qbs::Settings *settings); +struct ToolchainInstallInfo +{ + QFileInfo compilerPath; + qbs::Version compilerVersion; +}; + #endif // Header guard diff --git a/src/lib/corelib/tools/version.cpp b/src/lib/corelib/tools/version.cpp index d2b337d3a..dfb7f49b7 100644 --- a/src/lib/corelib/tools/version.cpp +++ b/src/lib/corelib/tools/version.cpp @@ -105,13 +105,17 @@ Version Version::fromString(const QString &versionString, bool buildNumberAllowe return Version{majorNr, minorNr, patchNr, buildNr}; } -QString Version::toString() const +QString Version::toString(const QChar &separator, const QChar &buildSeparator) const { if (m_build) { - return QString(QStringLiteral("%1.%2.%3-%4")) - .arg(m_major).arg(m_minor).arg(m_patch).arg(m_build); + return QStringLiteral("%1%5%2%5%3%6%4") + .arg(QString::number(m_major), QString::number(m_minor), + QString::number(m_patch), QString::number(m_build), + separator, buildSeparator); } - return QString(QStringLiteral("%1.%2.%3")).arg(m_major).arg(m_minor).arg(m_patch); + return QStringLiteral("%1%4%2%4%3") + .arg(QString::number(m_major), QString::number(m_minor), + QString::number(m_patch), separator); } int compare(const Version &lhs, const Version &rhs) diff --git a/src/lib/corelib/tools/version.h b/src/lib/corelib/tools/version.h index 4f5e46500..a0239a6e4 100644 --- a/src/lib/corelib/tools/version.h +++ b/src/lib/corelib/tools/version.h @@ -42,6 +42,7 @@ #include "qbs_export.h" +#include <QtCore/qchar.h> #include <QtCore/qglobal.h> QT_BEGIN_NAMESPACE @@ -71,7 +72,8 @@ public: void setBuildNumber(int nr); static Version fromString(const QString &versionString, bool buildNumberAllowed = false); - QString toString() const; + QString toString(const QChar &separator = QLatin1Char('.'), + const QChar &buildSeparator = QLatin1Char('-')) const; private: int m_major; |