|
|
@@ -80,6 +80,14 @@ cmVSSetupAPIHelper::~cmVSSetupAPIHelper()
|
|
|
CoUninitialize();
|
|
|
}
|
|
|
|
|
|
+bool cmVSSetupAPIHelper::SetVSInstance(std::string const& vsInstallLocation)
|
|
|
+{
|
|
|
+ this->SpecifiedVSInstallLocation = vsInstallLocation;
|
|
|
+ cmSystemTools::ConvertToUnixSlashes(this->SpecifiedVSInstallLocation);
|
|
|
+ chosenInstanceInfo = VSInstanceInfo();
|
|
|
+ return this->EnumerateAndChooseVSInstance();
|
|
|
+}
|
|
|
+
|
|
|
bool cmVSSetupAPIHelper::IsVS2017Installed()
|
|
|
{
|
|
|
return this->EnumerateAndChooseVSInstance();
|
|
|
@@ -296,16 +304,29 @@ bool cmVSSetupAPIHelper::EnumerateAndChooseVSInstance()
|
|
|
instance = instance2 = NULL;
|
|
|
|
|
|
if (isInstalled) {
|
|
|
- if (!envVSCommonToolsDir.empty()) {
|
|
|
+ if (!this->SpecifiedVSInstallLocation.empty()) {
|
|
|
+ // We are looking for a specific instance.
|
|
|
std::string currentVSLocation = instanceInfo.GetInstallLocation();
|
|
|
- currentVSLocation += "/Common7/Tools";
|
|
|
if (cmSystemTools::ComparePath(currentVSLocation,
|
|
|
- envVSCommonToolsDir)) {
|
|
|
+ this->SpecifiedVSInstallLocation)) {
|
|
|
chosenInstanceInfo = instanceInfo;
|
|
|
return true;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ // We are not looking for a specific instance.
|
|
|
+ // If we've been given a hint then use it.
|
|
|
+ if (!envVSCommonToolsDir.empty()) {
|
|
|
+ std::string currentVSLocation = instanceInfo.GetInstallLocation();
|
|
|
+ currentVSLocation += "/Common7/Tools";
|
|
|
+ if (cmSystemTools::ComparePath(currentVSLocation,
|
|
|
+ envVSCommonToolsDir)) {
|
|
|
+ chosenInstanceInfo = instanceInfo;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // Otherwise, add this to the list of candidates.
|
|
|
+ vecVSInstances.push_back(instanceInfo);
|
|
|
}
|
|
|
- vecVSInstances.push_back(instanceInfo);
|
|
|
}
|
|
|
}
|
|
|
|