mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 21:59:54 -06:00
VS: Allow toolset version selection to specify default toolset
Teach the feature added by commit v3.12.0-rc1~38^2 (VS: Add option to select the version of the toolset used by VS 2017, 2018-05-19) to accept the default toolset version in addition to older versions. If the default toolset version is supplied, simply clear it so the default will be used. Fixes: #18107
This commit is contained in:
@@ -263,25 +263,32 @@ bool cmGlobalVisualStudio10Generator::SetGeneratorToolset(
|
|||||||
this->GeneratorToolsetVersion.clear();
|
this->GeneratorToolsetVersion.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string const toolsetPath = this->GetAuxiliaryToolset();
|
bool const isDefaultToolset =
|
||||||
if (!toolsetPath.empty() && !cmSystemTools::FileExists(toolsetPath)) {
|
this->IsDefaultToolset(this->GeneratorToolsetVersion);
|
||||||
|
if (isDefaultToolset) {
|
||||||
std::ostringstream e;
|
// If the given version is the default toolset, remove the setting
|
||||||
/* 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" <<
|
|
||||||
" " << toolsetPath;
|
|
||||||
;
|
|
||||||
/* clang-format on */
|
|
||||||
mf->IssueMessage(cmake::FATAL_ERROR, e.str());
|
|
||||||
|
|
||||||
// Clear the configured tool-set
|
|
||||||
this->GeneratorToolsetVersion.clear();
|
this->GeneratorToolsetVersion.clear();
|
||||||
|
} else {
|
||||||
|
std::string const toolsetPath = this->GetAuxiliaryToolset();
|
||||||
|
if (!toolsetPath.empty() && !cmSystemTools::FileExists(toolsetPath)) {
|
||||||
|
|
||||||
|
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" <<
|
||||||
|
" " << toolsetPath;
|
||||||
|
;
|
||||||
|
/* clang-format on */
|
||||||
|
mf->IssueMessage(cmake::FATAL_ERROR, e.str());
|
||||||
|
|
||||||
|
// Clear the configured tool-set
|
||||||
|
this->GeneratorToolsetVersion.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -615,6 +622,12 @@ cmGlobalVisualStudio10Generator::GetPlatformToolsetCudaString() const
|
|||||||
return this->GeneratorToolsetCuda;
|
return this->GeneratorToolsetCuda;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cmGlobalVisualStudio10Generator::IsDefaultToolset(
|
||||||
|
const std::string&) const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
std::string cmGlobalVisualStudio10Generator::GetAuxiliaryToolset() const
|
std::string cmGlobalVisualStudio10Generator::GetAuxiliaryToolset() const
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ public:
|
|||||||
std::string Encoding() override;
|
std::string Encoding() override;
|
||||||
virtual const char* GetToolsVersion() { return "4.0"; }
|
virtual const char* GetToolsVersion() { return "4.0"; }
|
||||||
|
|
||||||
|
virtual bool IsDefaultToolset(const std::string& version) const;
|
||||||
virtual std::string GetAuxiliaryToolset() const;
|
virtual std::string GetAuxiliaryToolset() const;
|
||||||
|
|
||||||
bool FindMakeProgram(cmMakefile* mf) override;
|
bool FindMakeProgram(cmMakefile* mf) override;
|
||||||
|
|||||||
@@ -158,6 +158,27 @@ bool cmGlobalVisualStudio15Generator::GetVSInstance(std::string& dir) const
|
|||||||
return vsSetupAPIHelper.GetVSInstanceInfo(dir);
|
return vsSetupAPIHelper.GetVSInstanceInfo(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cmGlobalVisualStudio15Generator::IsDefaultToolset(
|
||||||
|
const std::string& version) const
|
||||||
|
{
|
||||||
|
if (version.empty()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string vcToolsetVersion;
|
||||||
|
if (this->vsSetupAPIHelper.GetVCToolsetVersion(vcToolsetVersion)) {
|
||||||
|
|
||||||
|
cmsys::RegularExpression regex("[0-9][0-9]\\.[0-9]+");
|
||||||
|
if (regex.find(version) && regex.find(vcToolsetVersion)) {
|
||||||
|
const auto majorMinorEnd = vcToolsetVersion.find('.', 3);
|
||||||
|
const auto majorMinor = vcToolsetVersion.substr(0, majorMinorEnd);
|
||||||
|
return version == majorMinor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
std::string cmGlobalVisualStudio15Generator::GetAuxiliaryToolset() const
|
std::string cmGlobalVisualStudio15Generator::GetAuxiliaryToolset() const
|
||||||
{
|
{
|
||||||
const char* version = this->GetPlatformToolsetVersion();
|
const char* version = this->GetPlatformToolsetVersion();
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ public:
|
|||||||
|
|
||||||
bool GetVSInstance(std::string& dir) const;
|
bool GetVSInstance(std::string& dir) const;
|
||||||
|
|
||||||
|
bool IsDefaultToolset(const std::string& version) const override;
|
||||||
std::string GetAuxiliaryToolset() const override;
|
std::string GetAuxiliaryToolset() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
Reference in New Issue
Block a user