From 206debe875417c9c7740eefe37349caecc64f164 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 15 Mar 2019 12:57:57 +0100 Subject: Fix version detection for MSVC 2017 The version number for recent MSVC2017 installation has changed to the format \d+\.\d+\.\d+\.\d+ and the second number is not guaranteed to be a zero. Change-Id: I13728d2a5ea3162c3ff29558757cd576a83f4983 Reviewed-by: Christian Kandeler --- src/app/qbs-setup-toolchains/msvcprobe.cpp | 4 ++-- src/lib/corelib/tools/version.cpp | 2 +- src/lib/corelib/tools/visualstudioversioninfo.cpp | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/app/qbs-setup-toolchains/msvcprobe.cpp b/src/app/qbs-setup-toolchains/msvcprobe.cpp index 3bb99fd22..a6292d860 100644 --- a/src/app/qbs-setup-toolchains/msvcprobe.cpp +++ b/src/app/qbs-setup-toolchains/msvcprobe.cpp @@ -295,7 +295,7 @@ static std::vector installedMSVCs() installInfos = installedMSVCsFromRegistry(); for (const MSVCInstallInfo &installInfo : installInfos) { MSVC msvc; - msvc.internalVsVersion = Version::fromString(installInfo.version); + msvc.internalVsVersion = Version::fromString(installInfo.version, true); if (!msvc.internalVsVersion.isValid()) continue; @@ -307,7 +307,7 @@ static std::vector installedMSVCs() } msvc.version = QString::number(Internal::VisualStudioVersionInfo( - Version::fromString(installInfo.version)).marketingVersion()); + msvc.internalVsVersion).marketingVersion()); if (msvc.version.isEmpty()) { qbsWarning() << Tr::tr("Unknown MSVC version %1 found.").arg(installInfo.version); continue; diff --git a/src/lib/corelib/tools/version.cpp b/src/lib/corelib/tools/version.cpp index ccc9dd799..7ea2fda75 100644 --- a/src/lib/corelib/tools/version.cpp +++ b/src/lib/corelib/tools/version.cpp @@ -94,7 +94,7 @@ Version Version::fromString(const QString &versionString, bool buildNumberAllowe for (int i = 0; i < 2; ++i) pattern += QStringLiteral("(?:\\.(\\d+))?"); // Followed by a dot and a number up to two times. if (buildNumberAllowed) - pattern += QStringLiteral("(?:-(\\d+))?"); // And possibly a dash followed by the build number. + pattern += QStringLiteral("(?:[-.](\\d+))?"); // And possibly a dash or dot followed by the build number. QRegExp rex(pattern); if (!rex.exactMatch(versionString)) return Version{}; diff --git a/src/lib/corelib/tools/visualstudioversioninfo.cpp b/src/lib/corelib/tools/visualstudioversioninfo.cpp index 5383dcae0..008ab115d 100644 --- a/src/lib/corelib/tools/visualstudioversioninfo.cpp +++ b/src/lib/corelib/tools/visualstudioversioninfo.cpp @@ -53,7 +53,8 @@ VisualStudioVersionInfo::VisualStudioVersionInfo() VisualStudioVersionInfo::VisualStudioVersionInfo(const Version &version) : m_version(version) { - QBS_CHECK(version.minorVersion() == 0 || version == Version(7, 1)); + QBS_CHECK(version.minorVersion() == 0 || version == Version(7, 1) + || version.majorVersion() >= 15); } std::set VisualStudioVersionInfo::knownVersions() -- cgit v1.2.3