summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2021-06-17 07:30:48 -0400
committerBrad King <brad.king@kitware.com>2021-06-17 07:54:48 -0400
commit3fd65f5ca601d38c7b2ee8c99b148df31cea1acd (patch)
treee36f7bd076f484ca5148a383fbaf4aeec8d2d673 /Source
parentc92595be1d7c0ae3cd4ea8ff0ce27ede37f676e8 (diff)
downloadcmake-3fd65f5ca601d38c7b2ee8c99b148df31cea1acd.tar.gz
VS: Compare VS instance versions as strings
This makes the values more readable.
Diffstat (limited to 'Source')
-rw-r--r--Source/cmGlobalVisualStudio10Generator.cxx13
-rw-r--r--Source/cmGlobalVisualStudio10Generator.h5
-rw-r--r--Source/cmGlobalVisualStudioVersionedGenerator.cxx14
-rw-r--r--Source/cmGlobalVisualStudioVersionedGenerator.h2
-rw-r--r--Source/cmVSSetupHelper.cxx8
-rw-r--r--Source/cmVSSetupHelper.h4
6 files changed, 21 insertions, 25 deletions
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index fa51092e3a..6ce82f4ea6 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -1361,10 +1361,10 @@ static unsigned int cmLoadFlagTableSpecial(Json::Value entry,
namespace {
-unsigned long long const vsVer16_10_0 = 4503644629696790;
+std::string const vsVer16_10_0 = "16.10.31321.278";
-cmIDEFlagTable const* cmLoadFlagTableJson(
- std::string const& flagJsonPath, cm::optional<unsigned long long> vsver)
+cmIDEFlagTable const* cmLoadFlagTableJson(std::string const& flagJsonPath,
+ cm::optional<std::string> vsVer)
{
cmIDEFlagTable* ret = nullptr;
auto savedFlagIterator = loadedFlagJsonFiles.find(flagJsonPath);
@@ -1387,7 +1387,8 @@ cmIDEFlagTable const* cmLoadFlagTableJson(
flagEntry.value = cmLoadFlagTableString(flag, "value");
flagEntry.special = cmLoadFlagTableSpecial(flag, "flags");
// FIXME: Port this version check to a Json field.
- if (vsver && *vsver < vsVer16_10_0 &&
+ if (vsVer &&
+ !cmSystemTools::VersionCompareGreaterEq(*vsVer, vsVer16_10_0) &&
flagEntry.IDEName == "ExternalWarningLevel") {
continue;
}
@@ -1466,8 +1467,8 @@ cmIDEFlagTable const* cmGlobalVisualStudio10Generator::LoadFlagTable(
}
}
- cm::optional<unsigned long long> vsver = this->GetVSInstanceVersion();
- if (cmIDEFlagTable const* ret = cmLoadFlagTableJson(filename, vsver)) {
+ cm::optional<std::string> vsVer = this->GetVSInstanceVersion();
+ if (cmIDEFlagTable const* ret = cmLoadFlagTableJson(filename, vsVer)) {
return ret;
}
diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h
index 48fe4659ab..646dbe28ae 100644
--- a/Source/cmGlobalVisualStudio10Generator.h
+++ b/Source/cmGlobalVisualStudio10Generator.h
@@ -128,10 +128,7 @@ public:
std::string Encoding() override;
const char* GetToolsVersion() const;
- virtual cm::optional<unsigned long long> GetVSInstanceVersion() const
- {
- return {};
- }
+ virtual cm::optional<std::string> GetVSInstanceVersion() const { return {}; }
bool GetSupportsUnityBuilds() const { return this->SupportsUnityBuilds; }
diff --git a/Source/cmGlobalVisualStudioVersionedGenerator.cxx b/Source/cmGlobalVisualStudioVersionedGenerator.cxx
index 50dc30b32c..384aa66bde 100644
--- a/Source/cmGlobalVisualStudioVersionedGenerator.cxx
+++ b/Source/cmGlobalVisualStudioVersionedGenerator.cxx
@@ -391,11 +391,11 @@ bool cmGlobalVisualStudioVersionedGenerator::GetVSInstance(
return vsSetupAPIHelper.GetVSInstanceInfo(dir);
}
-cm::optional<unsigned long long>
+cm::optional<std::string>
cmGlobalVisualStudioVersionedGenerator::GetVSInstanceVersion() const
{
- cm::optional<unsigned long long> result;
- unsigned long long vsInstanceVersion;
+ cm::optional<std::string> result;
+ std::string vsInstanceVersion;
if (vsSetupAPIHelper.GetVSInstanceVersion(vsInstanceVersion)) {
result = vsInstanceVersion;
}
@@ -411,10 +411,10 @@ bool cmGlobalVisualStudioVersionedGenerator::IsStdOutEncodingSupported() const
if (this->Version < cmGlobalVisualStudioGenerator::VSVersion::VS16) {
return false;
}
- unsigned long long const vsInstanceVersion16_7_P2 = 4503631666610212;
- cm::optional<unsigned long long> vsInstanceVersion =
- this->GetVSInstanceVersion();
- return (vsInstanceVersion && *vsInstanceVersion > vsInstanceVersion16_7_P2);
+ static std::string const vsVer16_7_P2 = "16.7.30128.36";
+ cm::optional<std::string> vsVer = this->GetVSInstanceVersion();
+ return (vsVer &&
+ cmSystemTools::VersionCompareGreaterEq(*vsVer, vsVer16_7_P2));
}
const char*
diff --git a/Source/cmGlobalVisualStudioVersionedGenerator.h b/Source/cmGlobalVisualStudioVersionedGenerator.h
index 105e4954bd..db4a0ba97a 100644
--- a/Source/cmGlobalVisualStudioVersionedGenerator.h
+++ b/Source/cmGlobalVisualStudioVersionedGenerator.h
@@ -28,7 +28,7 @@ public:
bool GetVSInstance(std::string& dir) const;
- cm::optional<unsigned long long> GetVSInstanceVersion() const override;
+ cm::optional<std::string> GetVSInstanceVersion() const override;
AuxToolset FindAuxToolset(std::string& version,
std::string& props) const override;
diff --git a/Source/cmVSSetupHelper.cxx b/Source/cmVSSetupHelper.cxx
index 9626599a30..969a2c2c1c 100644
--- a/Source/cmVSSetupHelper.cxx
+++ b/Source/cmVSSetupHelper.cxx
@@ -258,15 +258,13 @@ bool cmVSSetupAPIHelper::GetVSInstanceInfo(std::string& vsInstallLocation)
return isInstalled;
}
-bool cmVSSetupAPIHelper::GetVSInstanceVersion(
- unsigned long long& vsInstanceVersion)
+bool cmVSSetupAPIHelper::GetVSInstanceVersion(std::string& vsInstanceVersion)
{
- vsInstanceVersion = 0;
+ vsInstanceVersion.clear();
bool isInstalled = this->EnumerateAndChooseVSInstance();
if (isInstalled) {
- vsInstanceVersion =
- static_cast<unsigned long long>(chosenInstanceInfo.ullVersion);
+ vsInstanceVersion = cmsys::Encoding::ToNarrow(chosenInstanceInfo.Version);
}
return isInstalled;
diff --git a/Source/cmVSSetupHelper.h b/Source/cmVSSetupHelper.h
index 04ea46db11..61a3ac7f8d 100644
--- a/Source/cmVSSetupHelper.h
+++ b/Source/cmVSSetupHelper.h
@@ -88,7 +88,7 @@ struct VSInstanceInfo
std::wstring VSInstallLocation;
std::wstring Version;
std::string VCToolsetVersion;
- ULONGLONG ullVersion = 0;
+ ULONGLONG ullVersion = 0; // A.B.C.D = (A<<48)|(B<<32)|(C<<16)|D
bool IsWin10SDKInstalled = false;
bool IsWin81SDKInstalled = false;
@@ -105,7 +105,7 @@ public:
bool IsVSInstalled();
bool GetVSInstanceInfo(std::string& vsInstallLocation);
- bool GetVSInstanceVersion(unsigned long long& vsInstanceVersion);
+ bool GetVSInstanceVersion(std::string& vsInstanceVersion);
bool GetVCToolsetVersion(std::string& vsToolsetVersion);
bool IsWin10SDKInstalled();
bool IsWin81SDKInstalled();