summaryrefslogtreecommitdiffstats
path: root/Source/cmGlobalVisualStudio10Generator.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmGlobalVisualStudio10Generator.cxx')
-rw-r--r--Source/cmGlobalVisualStudio10Generator.cxx467
1 files changed, 236 insertions, 231 deletions
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index 321f377..aa8a895 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -9,6 +9,7 @@
#include <utility>
#include <cm/memory>
+#include <cmext/string_view>
#include <cm3p/json/reader.h>
#include <cm3p/json/value.h>
@@ -17,6 +18,7 @@
#include "cmsys/Glob.hxx"
#include "cmsys/RegularExpression.hxx"
+#include "cmCryptoHash.h"
#include "cmDocumentationEntry.h"
#include "cmGeneratorTarget.h"
#include "cmGlobalGenerator.h"
@@ -83,10 +85,10 @@ bool cmGlobalVisualStudio10Generator::SetGeneratorToolset(
{
if (this->SystemIsWindowsCE && ts.empty() &&
this->DefaultPlatformToolset.empty()) {
- std::ostringstream e;
- e << this->GetName() << " Windows CE version '" << this->SystemVersion
- << "' requires CMAKE_GENERATOR_TOOLSET to be set.";
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(
+ MessageType::FATAL_ERROR,
+ cmStrCat(this->GetName(), " Windows CE version '", this->SystemVersion,
+ "' requires CMAKE_GENERATOR_TOOLSET to be set."));
return false;
}
@@ -105,16 +107,17 @@ bool cmGlobalVisualStudio10Generator::SetGeneratorToolset(
if (!this->CustomFlagTableDir.empty() &&
!(cmSystemTools::FileIsFullPath(this->CustomFlagTableDir) &&
cmSystemTools::FileIsDirectory(this->CustomFlagTableDir))) {
- std::ostringstream e;
- /* clang-format off */
- e <<
- "Generator\n"
- " " << this->GetName() << "\n"
- "given toolset\n"
- " customFlagTableDir=" << this->CustomFlagTableDir << "\n"
- "that is not an absolute path to an existing directory.";
- /* clang-format on */
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(
+ MessageType::FATAL_ERROR,
+ cmStrCat("Generator\n"
+ " ",
+ this->GetName(),
+ "\n"
+ "given toolset\n"
+ " customFlagTableDir=",
+ this->CustomFlagTableDir,
+ "\n"
+ "that is not an absolute path to an existing directory."));
cmSystemTools::SetFatalErrorOccurred();
return false;
}
@@ -125,7 +128,8 @@ bool cmGlobalVisualStudio10Generator::SetGeneratorToolset(
// differing from the "false" and "true" values used in older toolsets.
// A VS 2015 update changed it back. Parse the "link.xml" file to
// discover which one we need.
- std::string const link_xml = this->VCTargetsPath + "/1033/link.xml";
+ std::string const link_xml =
+ cmStrCat(this->VCTargetsPath, "/1033/link.xml");
cmsys::ifstream fin(link_xml.c_str());
std::string line;
while (fin && cmSystemTools::GetLineFromStream(fin, line)) {
@@ -140,24 +144,24 @@ bool cmGlobalVisualStudio10Generator::SetGeneratorToolset(
this->SupportsUnityBuilds =
this->Version >= cmGlobalVisualStudioGenerator::VSVersion::VS16 ||
(this->Version == cmGlobalVisualStudioGenerator::VSVersion::VS15 &&
- cmSystemTools::PathExists(this->VCTargetsPath +
- "/Microsoft.Cpp.Unity.targets"));
+ cmSystemTools::PathExists(
+ cmStrCat(this->VCTargetsPath, "/Microsoft.Cpp.Unity.targets")));
if (this->GeneratorToolsetCuda.empty()) {
// Find the highest available version of the CUDA tools.
std::vector<std::string> cudaTools;
std::string bcDir;
if (this->GeneratorToolsetCudaCustomDir.empty()) {
- bcDir = this->VCTargetsPath + "/BuildCustomizations";
+ bcDir = cmStrCat(this->VCTargetsPath, "/BuildCustomizations");
} else {
- bcDir = this->GetPlatformToolsetCudaCustomDirString() +
- this->GetPlatformToolsetCudaVSIntegrationSubdirString() +
- "extras\\visual_studio_integration\\MSBuildExtensions";
+ bcDir = cmStrCat(this->GetPlatformToolsetCudaCustomDirString(),
+ this->GetPlatformToolsetCudaVSIntegrationSubdirString(),
+ "extras\\visual_studio_integration\\MSBuildExtensions");
cmSystemTools::ConvertToUnixSlashes(bcDir);
}
cmsys::Glob gl;
gl.SetRelative(bcDir.c_str());
- if (gl.FindFiles(bcDir + "/CUDA *.props")) {
+ if (gl.FindFiles(cmStrCat(bcDir, "/CUDA *.props"))) {
cudaTools = gl.GetFiles();
}
if (!cudaTools.empty()) {
@@ -168,18 +172,19 @@ bool cmGlobalVisualStudio10Generator::SetGeneratorToolset(
} else if (!this->GeneratorToolsetCudaCustomDir.empty()) {
// Generate an error if Visual Studio integration files are not found
// inside of custom cuda toolset.
- std::ostringstream e;
- /* clang-format off */
- e <<
- "Generator\n"
- " " << this->GetName() << "\n"
- "given toolset\n"
- " cuda=" << this->GeneratorToolsetCudaCustomDir << "\n"
- "cannot detect Visual Studio integration files in path\n"
- " " << bcDir;
-
- /* clang-format on */
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(
+ MessageType::FATAL_ERROR,
+ cmStrCat("Generator\n"
+ " ",
+ this->GetName(),
+ "\n"
+ "given toolset\n"
+ " cuda=",
+ this->GeneratorToolsetCudaCustomDir,
+ "\n"
+ "cannot detect Visual Studio integration files in path\n"
+ " ",
+ bcDir));
// Clear the configured tool-set
this->GeneratorToolsetCuda.clear();
@@ -187,32 +192,31 @@ bool cmGlobalVisualStudio10Generator::SetGeneratorToolset(
}
if (!this->GeneratorToolsetVersion.empty() &&
- this->GeneratorToolsetVersion != "Test Toolset Version") {
+ this->GeneratorToolsetVersion != "Test Toolset Version"_s) {
// If a specific minor version of the toolset was requested, verify that it
// is compatible to the major version and that is exists on disk.
// If not clear the value.
std::string versionToolset = this->GeneratorToolsetVersion;
cmsys::RegularExpression regex("[0-9][0-9]\\.[0-9][0-9]");
if (regex.find(versionToolset)) {
- versionToolset = "v" + versionToolset.erase(2, 1);
+ versionToolset = cmStrCat('v', versionToolset.erase(2, 1));
} else {
// Version not recognized. Clear it.
versionToolset.clear();
}
if (!cmHasPrefix(versionToolset, this->GetPlatformToolsetString())) {
- std::ostringstream e;
- /* clang-format off */
- e <<
- "Generator\n"
- " " << this->GetName() << "\n"
- "given toolset and version specification\n"
- " " << this->GetPlatformToolsetString() << ",version=" <<
- this->GeneratorToolsetVersion << "\n"
- "contains an invalid version specification."
- ;
- /* clang-format on */
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(MessageType::FATAL_ERROR,
+ cmStrCat("Generator\n"
+ " ",
+ this->GetName(),
+ "\n"
+ "given toolset and version specification\n"
+ " ",
+ this->GetPlatformToolsetString(),
+ ",version=", this->GeneratorToolsetVersion,
+ "\n"
+ "contains an invalid version specification."));
// Clear the configured tool-set
this->GeneratorToolsetVersion.clear();
@@ -232,40 +236,40 @@ bool cmGlobalVisualStudio10Generator::SetGeneratorToolset(
this->GeneratorToolsetVersionProps = std::move(auxProps);
break;
case AuxToolset::PropsMissing: {
- std::ostringstream e;
- /* clang-format off */
- e <<
- "Generator\n"
- " " << this->GetName() << "\n"
- "given toolset and version specification\n"
- " " << this->GetPlatformToolsetString() << ",version=" <<
- this->GeneratorToolsetVersion << "\n"
- "does not seem to be installed at\n" <<
- " " << auxProps;
- ;
- /* clang-format on */
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(MessageType::FATAL_ERROR,
+ cmStrCat("Generator\n"
+ " ",
+ this->GetName(),
+ "\n"
+ "given toolset and version specification\n"
+ " ",
+ this->GetPlatformToolsetString(),
+ ",version=", this->GeneratorToolsetVersion,
+ "\n"
+ "does not seem to be installed at\n"
+ " ",
+ auxProps));
// Clear the configured tool-set
this->GeneratorToolsetVersion.clear();
this->GeneratorToolsetVersionProps = {};
} break;
case AuxToolset::PropsIndeterminate: {
- std::ostringstream e;
- /* clang-format off */
- e <<
- "Generator\n"
- " " << this->GetName() << "\n"
- "given toolset and version specification\n"
- " " << this->GetPlatformToolsetString() << ",version=" <<
- this->GeneratorToolsetVersion << "\n"
- "has multiple matches installed at\n" <<
- " " << auxProps << "\n" <<
- "The toolset and version specification must resolve \n" <<
- "to a single installed toolset";
- ;
- /* clang-format on */
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(
+ MessageType::FATAL_ERROR,
+ cmStrCat("Generator\n"
+ " ",
+ this->GetName(),
+ "\n"
+ "given toolset and version specification\n"
+ " ",
+ this->GetPlatformToolsetString(),
+ ",version=", this->GeneratorToolsetVersion,
+ "\n"
+ "has multiple matches installed at\n",
+ " ", auxProps, "\n",
+ "The toolset and version specification must resolve \n"
+ "to a single installed toolset"));
// Clear the configured tool-set
this->GeneratorToolsetVersion.clear();
@@ -319,47 +323,47 @@ bool cmGlobalVisualStudio10Generator::ParseGeneratorToolset(
for (; fi != fields.end(); ++fi) {
std::string::size_type pos = fi->find('=');
if (pos == fi->npos) {
- std::ostringstream e;
- /* clang-format off */
- e <<
- "Generator\n"
- " " << this->GetName() << "\n"
- "given toolset specification\n"
- " " << ts << "\n"
- "that contains a field after the first ',' with no '='."
- ;
- /* clang-format on */
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(
+ MessageType::FATAL_ERROR,
+ cmStrCat("Generator\n"
+ " ",
+ this->GetName(),
+ "\n"
+ "given toolset specification\n"
+ " ",
+ ts,
+ "\n"
+ "that contains a field after the first ',' with no '='."));
return false;
}
std::string const key = fi->substr(0, pos);
std::string const value = fi->substr(pos + 1);
if (!handled.insert(key).second) {
- std::ostringstream e;
- /* clang-format off */
- e <<
- "Generator\n"
- " " << this->GetName() << "\n"
- "given toolset specification\n"
- " " << ts << "\n"
- "that contains duplicate field key '" << key << "'."
- ;
- /* clang-format on */
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(MessageType::FATAL_ERROR,
+ cmStrCat("Generator\n"
+ " ",
+ this->GetName(),
+ "\n"
+ "given toolset specification\n"
+ " ",
+ ts,
+ "\n"
+ "that contains duplicate field key '",
+ key, "'."));
return false;
}
if (!this->ProcessGeneratorToolsetField(key, value)) {
- std::ostringstream e;
- /* clang-format off */
- e <<
- "Generator\n"
- " " << this->GetName() << "\n"
- "given toolset specification\n"
- " " << ts << "\n"
- "that contains invalid field '" << *fi << "'."
- ;
- /* clang-format on */
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(MessageType::FATAL_ERROR,
+ cmStrCat("Generator\n"
+ " ",
+ this->GetName(),
+ "\n"
+ "given toolset specification\n"
+ " ",
+ ts,
+ "\n"
+ "that contains invalid field '",
+ *fi, "'."));
return false;
}
}
@@ -370,7 +374,7 @@ bool cmGlobalVisualStudio10Generator::ParseGeneratorToolset(
bool cmGlobalVisualStudio10Generator::ProcessGeneratorToolsetField(
std::string const& key, std::string const& value)
{
- if (key == "cuda") {
+ if (key == "cuda"_s) {
/* test if cuda toolset is path to custom dir or cuda version */
auto pos = value.find_first_not_of("0123456789.");
if (pos != std::string::npos) {
@@ -395,16 +399,16 @@ bool cmGlobalVisualStudio10Generator::ProcessGeneratorToolsetField(
}
return true;
}
- if (key == "customFlagTableDir") {
+ if (key == "customFlagTableDir"_s) {
this->CustomFlagTableDir = value;
cmSystemTools::ConvertToUnixSlashes(this->CustomFlagTableDir);
return true;
}
- if (key == "version") {
+ if (key == "version"_s) {
this->GeneratorToolsetVersion = value;
return true;
}
- if (key == "VCTargetsPath") {
+ if (key == "VCTargetsPath"_s) {
this->CustomVCTargetsPath = value;
ConvertToWindowsSlashes(this->CustomVCTargetsPath);
return true;
@@ -414,34 +418,35 @@ bool cmGlobalVisualStudio10Generator::ProcessGeneratorToolsetField(
bool cmGlobalVisualStudio10Generator::InitializeSystem(cmMakefile* mf)
{
- if (this->SystemName == "Windows") {
+ if (this->SystemName == "Windows"_s) {
if (!this->InitializeWindows(mf)) {
return false;
}
- } else if (this->SystemName == "WindowsCE") {
+ } else if (this->SystemName == "WindowsCE"_s) {
this->SystemIsWindowsCE = true;
if (!this->InitializeWindowsCE(mf)) {
return false;
}
- } else if (this->SystemName == "WindowsPhone") {
+ } else if (this->SystemName == "WindowsPhone"_s) {
this->SystemIsWindowsPhone = true;
if (!this->InitializeWindowsPhone(mf)) {
return false;
}
- } else if (this->SystemName == "WindowsStore") {
+ } else if (this->SystemName == "WindowsStore"_s) {
this->SystemIsWindowsStore = true;
if (!this->InitializeWindowsStore(mf)) {
return false;
}
- } else if (this->SystemName == "Android") {
+ } else if (this->SystemName == "Android"_s) {
if (this->PlatformInGeneratorName) {
- std::ostringstream e;
- e << "CMAKE_SYSTEM_NAME is 'Android' but CMAKE_GENERATOR "
- << "specifies a platform too: '" << this->GetName() << "'";
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(
+ MessageType::FATAL_ERROR,
+ cmStrCat("CMAKE_SYSTEM_NAME is 'Android' but CMAKE_GENERATOR ",
+ "specifies a platform too: '", this->GetName(), '\''));
return false;
}
- if (mf->GetSafeDefinition("CMAKE_GENERATOR_PLATFORM") == "Tegra-Android") {
+ if (mf->GetSafeDefinition("CMAKE_GENERATOR_PLATFORM") ==
+ "Tegra-Android"_s) {
if (!this->InitializeTegraAndroid(mf)) {
return false;
}
@@ -464,10 +469,10 @@ bool cmGlobalVisualStudio10Generator::InitializeWindows(cmMakefile*)
bool cmGlobalVisualStudio10Generator::InitializeWindowsCE(cmMakefile* mf)
{
if (this->PlatformInGeneratorName) {
- std::ostringstream e;
- e << "CMAKE_SYSTEM_NAME is 'WindowsCE' but CMAKE_GENERATOR "
- << "specifies a platform too: '" << this->GetName() << "'";
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(
+ MessageType::FATAL_ERROR,
+ cmStrCat("CMAKE_SYSTEM_NAME is 'WindowsCE' but CMAKE_GENERATOR ",
+ "specifies a platform too: '", this->GetName(), '\''));
return false;
}
@@ -485,17 +490,17 @@ bool cmGlobalVisualStudio10Generator::InitializeWindowsCE(cmMakefile* mf)
bool cmGlobalVisualStudio10Generator::InitializeWindowsPhone(cmMakefile* mf)
{
- std::ostringstream e;
- e << this->GetName() << " does not support Windows Phone.";
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(
+ MessageType::FATAL_ERROR,
+ cmStrCat(this->GetName(), " does not support Windows Phone."));
return false;
}
bool cmGlobalVisualStudio10Generator::InitializeWindowsStore(cmMakefile* mf)
{
- std::ostringstream e;
- e << this->GetName() << " does not support Windows Store.";
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(
+ MessageType::FATAL_ERROR,
+ cmStrCat(this->GetName(), " does not support Windows Store."));
return false;
}
@@ -519,15 +524,15 @@ bool cmGlobalVisualStudio10Generator::InitializeTegraAndroid(cmMakefile* mf)
bool cmGlobalVisualStudio10Generator::InitializeAndroid(cmMakefile* mf)
{
- std::ostringstream e;
- e << this->GetName() << " does not support Android.";
- mf->IssueMessage(MessageType::FATAL_ERROR, e.str());
+ mf->IssueMessage(MessageType::FATAL_ERROR,
+ cmStrCat(this->GetName(), " does not support Android."));
return false;
}
bool cmGlobalVisualStudio10Generator::InitializePlatform(cmMakefile* mf)
{
- if (this->SystemName == "Windows" || this->SystemName == "WindowsStore") {
+ if (this->SystemName == "Windows"_s ||
+ this->SystemName == "WindowsStore"_s) {
if (!this->InitializePlatformWindows(mf)) {
return false;
}
@@ -565,7 +570,7 @@ bool cmGlobalVisualStudio10Generator::SelectWindowsStoreToolset(
std::string cmGlobalVisualStudio10Generator::SelectWindowsCEToolset() const
{
- if (this->SystemVersion == "8.0") {
+ if (this->SystemVersion == "8.0"_s) {
return "CE800";
}
return "";
@@ -607,29 +612,30 @@ void cmGlobalVisualStudio10Generator::Generate()
}
if (this->LongestSource.Length > 0) {
cmLocalGenerator* lg = this->LongestSource.Target->GetLocalGenerator();
- std::ostringstream e;
- /* clang-format off */
- e <<
- "The binary and/or source directory paths may be too long to generate "
- "Visual Studio 10 files for this project. "
- "Consider choosing shorter directory names to build this project with "
- "Visual Studio 10. "
- "A more detailed explanation follows."
- "\n"
- "There is a bug in the VS 10 IDE that renders property dialog fields "
- "blank for files referenced by full path in the project file. "
- "However, CMake must reference at least one file by full path:\n"
- " " << this->LongestSource.SourceFile->GetFullPath() << "\n"
- "This is because some Visual Studio tools would append the relative "
- "path to the end of the referencing directory path, as in:\n"
- " " << lg->GetCurrentBinaryDirectory() << "/"
- << this->LongestSource.SourceRel << "\n"
- "and then incorrectly complain that the file does not exist because "
- "the path length is too long for some internal buffer or API. "
- "To avoid this problem CMake must use a full path for this file "
- "which then triggers the VS 10 property dialog bug.";
- /* clang-format on */
- lg->IssueMessage(MessageType::WARNING, e.str());
+ lg->IssueMessage(
+ MessageType::WARNING,
+ cmStrCat(
+ "The binary and/or source directory paths may be too long to generate "
+ "Visual Studio 10 files for this project. "
+ "Consider choosing shorter directory names to build this project with "
+ "Visual Studio 10. "
+ "A more detailed explanation follows."
+ "\n"
+ "There is a bug in the VS 10 IDE that renders property dialog fields "
+ "blank for files referenced by full path in the project file. "
+ "However, CMake must reference at least one file by full path:\n"
+ " ",
+ this->LongestSource.SourceFile->GetFullPath(),
+ "\n"
+ "This is because some Visual Studio tools would append the relative "
+ "path to the end of the referencing directory path, as in:\n"
+ " ",
+ lg->GetCurrentBinaryDirectory(), '/', this->LongestSource.SourceRel,
+ "\n"
+ "and then incorrectly complain that the file does not exist because "
+ "the path length is too long for some internal buffer or API. "
+ "To avoid this problem CMake must use a full path for this file "
+ "which then triggers the VS 10 property dialog bug."));
}
if (cmValue cached = this->CMakeInstance->GetState()->GetCacheEntryValue(
"CMAKE_VS_NUGET_PACKAGE_RESTORE")) {
@@ -641,10 +647,10 @@ void cmGlobalVisualStudio10Generator::EnableLanguage(
std::vector<std::string> const& lang, cmMakefile* mf, bool optional)
{
for (std::string const& it : lang) {
- if (it == "ASM_NASM") {
+ if (it == "ASM_NASM"_s) {
this->NasmEnabled = true;
}
- if (it == "CUDA") {
+ if (it == "CUDA"_s) {
this->CudaEnabled = true;
}
}
@@ -830,8 +836,8 @@ std::string cmGlobalVisualStudio10Generator::FindDevEnvCommand()
bool cmGlobalVisualStudio10Generator::FindVCTargetsPath(cmMakefile* mf)
{
// Skip this in special cases within our own test suite.
- if (this->GetPlatformName() == "Test Platform" ||
- this->GetPlatformToolsetString() == "Test Toolset") {
+ if (this->GetPlatformName() == "Test Platform"_s ||
+ this->GetPlatformToolsetString() == "Test Toolset"_s) {
return true;
}
@@ -843,11 +849,11 @@ bool cmGlobalVisualStudio10Generator::FindVCTargetsPath(cmMakefile* mf)
wd = cmStrCat(this->GetCMakeInstance()->GetHomeOutputDirectory(),
"/CMakeFiles");
}
- wd += "/";
+ wd += '/';
wd += cmVersion::GetCMakeVersion();
// We record the result persistently in a file.
- std::string const txt = wd + "/VCTargetsPath.txt";
+ std::string const txt = cmStrCat(wd, "/VCTargetsPath.txt");
// If we have a recorded result, use it.
{
@@ -861,8 +867,8 @@ bool cmGlobalVisualStudio10Generator::FindVCTargetsPath(cmMakefile* mf)
// Prepare the work directory.
if (!cmSystemTools::MakeDirectory(wd)) {
- std::string e = "Failed to make directory:\n " + wd;
- mf->IssueMessage(MessageType::FATAL_ERROR, e);
+ mf->IssueMessage(MessageType::FATAL_ERROR,
+ cmStrCat("Failed to make directory:\n ", wd));
cmSystemTools::SetFatalErrorOccurred();
return false;
}
@@ -870,7 +876,7 @@ bool cmGlobalVisualStudio10Generator::FindVCTargetsPath(cmMakefile* mf)
// Generate a project file for MSBuild to tell us the VCTargetsPath value.
std::string const vcxproj = "VCTargetsPath.vcxproj";
{
- std::string const vcxprojAbs = wd + "/" + vcxproj;
+ std::string const vcxprojAbs = cmStrCat(wd, '/', vcxproj);
cmsys::ofstream fout(vcxprojAbs.c_str());
cmXMLWriter xw(fout);
@@ -889,7 +895,7 @@ bool cmGlobalVisualStudio10Generator::FindVCTargetsPath(cmMakefile* mf)
cmXMLElement eig(eprj, "ItemGroup");
eig.Attribute("Label", "ProjectConfigurations");
cmXMLElement epc(eig, "ProjectConfiguration");
- epc.Attribute("Include", "Debug|" + this->GetPlatformName());
+ epc.Attribute("Include", cmStrCat("Debug|", this->GetPlatformName()));
cmXMLElement(epc, "Configuration").Content("Debug");
cmXMLElement(epc, "Platform").Content(this->GetPlatformName());
}
@@ -899,19 +905,19 @@ bool cmGlobalVisualStudio10Generator::FindVCTargetsPath(cmMakefile* mf)
cmXMLElement(epg, "ProjectGuid")
.Content("{F3FC6D86-508D-3FB1-96D2-995F08B142EC}");
cmXMLElement(epg, "Keyword")
- .Content(mf->GetSafeDefinition("CMAKE_SYSTEM_NAME") == "Android"
+ .Content(mf->GetSafeDefinition("CMAKE_SYSTEM_NAME") == "Android"_s
? "Android"
: "Win32Proj");
cmXMLElement(epg, "Platform").Content(this->GetPlatformName());
- if (this->GetSystemName() == "WindowsPhone") {
+ if (this->GetSystemName() == "WindowsPhone"_s) {
cmXMLElement(epg, "ApplicationType").Content("Windows Phone");
cmXMLElement(epg, "ApplicationTypeRevision")
.Content(this->GetApplicationTypeRevision());
- } else if (this->GetSystemName() == "WindowsStore") {
+ } else if (this->GetSystemName() == "WindowsStore"_s) {
cmXMLElement(epg, "ApplicationType").Content("Windows Store");
cmXMLElement(epg, "ApplicationTypeRevision")
.Content(this->GetApplicationTypeRevision());
- } else if (this->GetSystemName() == "Android") {
+ } else if (this->GetSystemName() == "Android"_s) {
cmXMLElement(epg, "ApplicationType").Content("Android");
cmXMLElement(epg, "ApplicationTypeRevision")
.Content(this->GetApplicationTypeRevision());
@@ -920,10 +926,10 @@ bool cmGlobalVisualStudio10Generator::FindVCTargetsPath(cmMakefile* mf)
cmXMLElement(epg, "WindowsTargetPlatformVersion")
.Content(this->WindowsTargetPlatformVersion);
}
- if (this->GetSystemName() != "Android") {
- if (this->GetPlatformName() == "ARM64") {
+ if (this->GetSystemName() != "Android"_s) {
+ if (this->GetPlatformName() == "ARM64"_s) {
cmXMLElement(epg, "WindowsSDKDesktopARM64Support").Content("true");
- } else if (this->GetPlatformName() == "ARM") {
+ } else if (this->GetPlatformName() == "ARM"_s) {
cmXMLElement(epg, "WindowsSDKDesktopARMSupport").Content("true");
}
}
@@ -970,10 +976,9 @@ bool cmGlobalVisualStudio10Generator::FindVCTargetsPath(cmMakefile* mf)
std::vector<std::string> cmd;
cmd.push_back(this->GetMSBuildCommand());
cmd.push_back(vcxproj);
- cmd.push_back("/p:Configuration=Debug");
- cmd.push_back(cmStrCat("/p:Platform=", this->GetPlatformName()));
- cmd.push_back(std::string("/p:VisualStudioVersion=") +
- this->GetIDEVersion());
+ cmd.emplace_back("/p:Configuration=Debug");
+ cmd.emplace_back(cmStrCat("/p:Platform=", this->GetPlatformName()));
+ cmd.emplace_back(cmStrCat("/p:VisualStudioVersion=", this->GetIDEVersion()));
std::string out;
int ret = 0;
cmsys::RegularExpression regex("\n *VCTargetsPath=([^%\r\n]+)[\r\n]");
@@ -1049,7 +1054,7 @@ cmGlobalVisualStudio10Generator::GenerateBuildCommand(
break;
}
std::string proj = project.GetRelativePath();
- if (proj.size() > 7 && proj.substr(proj.size() - 7) == ".vfproj") {
+ if (proj.size() > 7 && proj.substr(proj.size() - 7) == ".vfproj"_s) {
useDevEnv = true;
}
}
@@ -1080,7 +1085,7 @@ cmGlobalVisualStudio10Generator::GenerateBuildCommand(
makeCommand.Add(makeProgramSelected);
cm::optional<cmSlnProjectEntry> proj = cm::nullopt;
- if (tname == "clean") {
+ if (tname == "clean"_s) {
makeCommand.Add(cmStrCat(projectName, ".sln"));
makeCommand.Add("/t:Clean");
} else {
@@ -1104,7 +1109,7 @@ cmGlobalVisualStudio10Generator::GenerateBuildCommand(
requiresRestore = false;
} else if (cmValue cached =
this->CMakeInstance->GetState()->GetCacheEntryValue(
- tname + "_REQUIRES_VS_PACKAGE_RESTORE")) {
+ cmStrCat(tname, "_REQUIRES_VS_PACKAGE_RESTORE"))) {
requiresRestore = cached.IsOn();
} else {
// There are no package references defined.
@@ -1164,7 +1169,7 @@ cmGlobalVisualStudio10Generator::GenerateBuildCommand(
std::string extension =
cmSystemTools::GetFilenameLastExtension(proj->GetRelativePath());
extension = cmSystemTools::LowerCase(extension);
- if (extension == ".csproj") {
+ if (extension == ".csproj"_s) {
// Use correct platform name
platform =
slnData.GetConfigurationTarget(tname, plainConfig, platform);
@@ -1198,9 +1203,10 @@ std::string cmGlobalVisualStudio10Generator::GenerateRuleFile(
{
// The VS 10 generator needs to create the .rule files on disk.
// Hide them away under the CMakeFiles directory.
+ cmCryptoHash hasher(cmCryptoHash::AlgoMD5);
std::string ruleDir = cmStrCat(
this->GetCMakeInstance()->GetHomeOutputDirectory(), "/CMakeFiles/",
- cmSystemTools::ComputeStringMD5(cmSystemTools::GetFilenamePath(output)));
+ hasher.HashString(cmSystemTools::GetFilenamePath(output)));
std::string ruleFile =
cmStrCat(ruleDir, '/', cmSystemTools::GetFilenameName(output), ".rule");
return ruleFile;
@@ -1230,7 +1236,6 @@ const char* cmGlobalVisualStudio10Generator::GetToolsVersion() const
{
switch (this->Version) {
case cmGlobalVisualStudioGenerator::VSVersion::VS9:
- case cmGlobalVisualStudioGenerator::VSVersion::VS11:
return "4.0";
// in Visual Studio 2013 they detached the MSBuild tools version
@@ -1272,7 +1277,7 @@ std::string cmGlobalVisualStudio10Generator::GetInstalledNsightTegraVersion()
std::string cmGlobalVisualStudio10Generator::GetApplicationTypeRevision() const
{
- if (this->GetSystemName() == "Android") {
+ if (this->GetSystemName() == "Android"_s) {
return this->GetAndroidApplicationTypeRevision();
}
@@ -1303,23 +1308,23 @@ static unsigned int cmLoadFlagTableSpecial(Json::Value entry,
if (specials.isArray()) {
for (auto const& special : specials) {
std::string s = special.asString();
- if (s == "UserValue") {
+ if (s == "UserValue"_s) {
value |= cmIDEFlagTable::UserValue;
- } else if (s == "UserIgnored") {
+ } else if (s == "UserIgnored"_s) {
value |= cmIDEFlagTable::UserIgnored;
- } else if (s == "UserRequired") {
+ } else if (s == "UserRequired"_s) {
value |= cmIDEFlagTable::UserRequired;
- } else if (s == "Continue") {
+ } else if (s == "Continue"_s) {
value |= cmIDEFlagTable::Continue;
- } else if (s == "SemicolonAppendable") {
+ } else if (s == "SemicolonAppendable"_s) {
value |= cmIDEFlagTable::SemicolonAppendable;
- } else if (s == "UserFollowing") {
+ } else if (s == "UserFollowing"_s) {
value |= cmIDEFlagTable::UserFollowing;
- } else if (s == "CaseInsensitive") {
+ } else if (s == "CaseInsensitive"_s) {
value |= cmIDEFlagTable::CaseInsensitive;
- } else if (s == "SpaceAppendable") {
+ } else if (s == "SpaceAppendable"_s) {
value |= cmIDEFlagTable::SpaceAppendable;
- } else if (s == "CommaAppendable") {
+ } else if (s == "CommaAppendable"_s) {
value |= cmIDEFlagTable::CommaAppendable;
}
}
@@ -1538,22 +1543,22 @@ std::string cmGlobalVisualStudio10Generator::GetClFlagTableName() const
std::string const& toolset = this->GetPlatformToolsetString();
std::string const useToolset = this->CanonicalToolsetName(toolset);
- if (toolset == "v142") {
+ if (toolset == "v142"_s) {
return "v142";
}
- if (toolset == "v141") {
+ if (toolset == "v141"_s) {
return "v141";
}
- if (useToolset == "v140") {
+ if (useToolset == "v140"_s) {
return "v140";
}
- if (useToolset == "v120") {
+ if (useToolset == "v120"_s) {
return "v12";
}
- if (useToolset == "v110") {
+ if (useToolset == "v110"_s) {
return "v11";
}
- if (useToolset == "v100") {
+ if (useToolset == "v100"_s) {
return "v10";
}
return "";
@@ -1564,22 +1569,22 @@ std::string cmGlobalVisualStudio10Generator::GetCSharpFlagTableName() const
std::string const& toolset = this->GetPlatformToolsetString();
std::string const useToolset = this->CanonicalToolsetName(toolset);
- if (useToolset == "v142") {
+ if (useToolset == "v142"_s) {
return "v142";
}
- if (useToolset == "v141") {
+ if (useToolset == "v141"_s) {
return "v141";
}
- if (useToolset == "v140") {
+ if (useToolset == "v140"_s) {
return "v140";
}
- if (useToolset == "v120") {
+ if (useToolset == "v120"_s) {
return "v12";
}
- if (useToolset == "v110") {
+ if (useToolset == "v110"_s) {
return "v11";
}
- if (useToolset == "v100") {
+ if (useToolset == "v100"_s) {
return "v10";
}
return "";
@@ -1590,17 +1595,17 @@ std::string cmGlobalVisualStudio10Generator::GetRcFlagTableName() const
std::string const& toolset = this->GetPlatformToolsetString();
std::string const useToolset = this->CanonicalToolsetName(toolset);
- if ((useToolset == "v140") || (useToolset == "v141") ||
- (useToolset == "v142")) {
+ if ((useToolset == "v140"_s) || (useToolset == "v141"_s) ||
+ (useToolset == "v142"_s)) {
return "v14";
}
- if (useToolset == "v120") {
+ if (useToolset == "v120"_s) {
return "v12";
}
- if (useToolset == "v110") {
+ if (useToolset == "v110"_s) {
return "v11";
}
- if (useToolset == "v100") {
+ if (useToolset == "v100"_s) {
return "v10";
}
return "";
@@ -1611,17 +1616,17 @@ std::string cmGlobalVisualStudio10Generator::GetLibFlagTableName() const
std::string const& toolset = this->GetPlatformToolsetString();
std::string const useToolset = this->CanonicalToolsetName(toolset);
- if ((useToolset == "v140") || (useToolset == "v141") ||
- (useToolset == "v142")) {
+ if ((useToolset == "v140"_s) || (useToolset == "v141"_s) ||
+ (useToolset == "v142"_s)) {
return "v14";
}
- if (useToolset == "v120") {
+ if (useToolset == "v120"_s) {
return "v12";
}
- if (useToolset == "v110") {
+ if (useToolset == "v110"_s) {
return "v11";
}
- if (useToolset == "v100") {
+ if (useToolset == "v100"_s) {
return "v10";
}
return "";
@@ -1632,22 +1637,22 @@ std::string cmGlobalVisualStudio10Generator::GetLinkFlagTableName() const
std::string const& toolset = this->GetPlatformToolsetString();
std::string const useToolset = this->CanonicalToolsetName(toolset);
- if (useToolset == "v142") {
+ if (useToolset == "v142"_s) {
return "v142";
}
- if (useToolset == "v141") {
+ if (useToolset == "v141"_s) {
return "v141";
}
- if (useToolset == "v140") {
+ if (useToolset == "v140"_s) {
return "v140";
}
- if (useToolset == "v120") {
+ if (useToolset == "v120"_s) {
return "v12";
}
- if (useToolset == "v110") {
+ if (useToolset == "v110"_s) {
return "v11";
}
- if (useToolset == "v100") {
+ if (useToolset == "v100"_s) {
return "v10";
}
return "";
@@ -1658,17 +1663,17 @@ std::string cmGlobalVisualStudio10Generator::GetMasmFlagTableName() const
std::string const& toolset = this->GetPlatformToolsetString();
std::string const useToolset = this->CanonicalToolsetName(toolset);
- if ((useToolset == "v140") || (useToolset == "v141") ||
- (useToolset == "v142")) {
+ if ((useToolset == "v140"_s) || (useToolset == "v141"_s) ||
+ (useToolset == "v142"_s)) {
return "v14";
}
- if (useToolset == "v120") {
+ if (useToolset == "v120"_s) {
return "v12";
}
- if (useToolset == "v110") {
+ if (useToolset == "v110"_s) {
return "v11";
}
- if (useToolset == "v100") {
+ if (useToolset == "v100"_s) {
return "v10";
}
return "";