aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/findAnyMSBuildWithCppPlatformToolset.ps12
-rw-r--r--scripts/findVisualStudioInstallationInstances.ps14
-rw-r--r--toolsrc/src/vcpkg/vcpkgpaths.cpp25
3 files changed, 25 insertions, 6 deletions
diff --git a/scripts/findAnyMSBuildWithCppPlatformToolset.ps1 b/scripts/findAnyMSBuildWithCppPlatformToolset.ps1
index 3269562dc..d9ffbd32a 100644
--- a/scripts/findAnyMSBuildWithCppPlatformToolset.ps1
+++ b/scripts/findAnyMSBuildWithCppPlatformToolset.ps1
@@ -11,7 +11,7 @@ $VisualStudioInstallationInstances = & $scriptsDir\findVisualStudioInstallationI
Write-Verbose "VS Candidates:`n`r$([system.String]::Join([Environment]::NewLine, $VisualStudioInstallationInstances))"
foreach ($instanceCandidateWithEOL in $VisualStudioInstallationInstances)
{
- $instanceCandidate = $instanceCandidateWithEOL -replace "::<eol>"
+ $instanceCandidate = $instanceCandidateWithEOL -replace "<sol>::" -replace "::<eol>"
Write-Verbose "Inspecting: $instanceCandidate"
$split = $instanceCandidate -split "::"
# $preferenceWeight = $split[0]
diff --git a/scripts/findVisualStudioInstallationInstances.ps1 b/scripts/findVisualStudioInstallationInstances.ps1
index 566560cdb..5470b57c0 100644
--- a/scripts/findVisualStudioInstallationInstances.ps1
+++ b/scripts/findVisualStudioInstallationInstances.ps1
@@ -29,7 +29,7 @@ foreach ($instance in $asXml.instances.instance)
}
# Placed like that for easy sorting according to preference
- $results.Add("${releaseType}::${installationVersion}::${installationPath}::<eol>") > $null
+ $results.Add("<sol>::${releaseType}::${installationVersion}::${installationPath}::<eol>") > $null
}
# If nothing is found, attempt to find VS2015 Build Tools (not detected by vswhere.exe)
@@ -42,7 +42,7 @@ if ($results.Count -eq 0)
if ((Test-Path $clExe) -And (Test-Path $vcvarsallbat))
{
- return "PreferenceWeight1::Legacy::14.0::$installationPath::<eol>"
+ return "<sol>::PreferenceWeight1::Legacy::14.0::$installationPath::<eol>"
}
}
diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp
index c6a92f813..8b9e6c598 100644
--- a/toolsrc/src/vcpkg/vcpkgpaths.cpp
+++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp
@@ -320,6 +320,23 @@ namespace vcpkg
std::string major_version() const { return version.substr(0, 2); }
};
+ static std::vector<std::string> keep_data_lines(const std::string& data_blob)
+ {
+ static const std::regex DATA_LINE_REGEX(R"(<sol>::(.+?)(?=::<eol>))");
+
+ std::vector<std::string> data_lines;
+
+ const std::sregex_iterator it(data_blob.cbegin(), data_blob.cend(), DATA_LINE_REGEX);
+ const std::sregex_iterator end;
+ for (std::sregex_iterator i = it; i != end; ++i)
+ {
+ const std::smatch match = *i;
+ data_lines.push_back(match[1].str());
+ }
+
+ return data_lines;
+ }
+
static std::vector<VisualStudioInstance> get_visual_studio_instances(const VcpkgPaths& paths)
{
const fs::path script = paths.scripts / "findVisualStudioInstallationInstances.ps1";
@@ -327,9 +344,11 @@ namespace vcpkg
Checks::check_exit(
VCPKG_LINE_INFO, ec_data.exit_code == 0, "Could not run script to detect Visual Studio instances");
- const std::vector<std::string> instances_as_strings = Strings::split(ec_data.output, "::<eol>");
- Checks::check_exit(
- VCPKG_LINE_INFO, !instances_as_strings.empty(), "Could not detect any Visual Studio instances.\n");
+ const std::vector<std::string> instances_as_strings = keep_data_lines(ec_data.output);
+ Checks::check_exit(VCPKG_LINE_INFO,
+ !instances_as_strings.empty(),
+ "Could not detect any Visual Studio instances. Powershell returned: %s\n",
+ ec_data.output);
std::vector<VisualStudioInstance> output;
for (const std::string& instance_as_string : instances_as_strings)