mirror of
https://github.com/reactos/CMake.git
synced 2024-11-24 03:59:58 +00:00
VS: Add SolutionGuid to generated .sln files
Visual Studio 2017 Update 3 adds a SolutionGuid to its `.sln` files. Fixes: #17041
This commit is contained in:
parent
372de3f803
commit
5cf9c3d0cc
@ -26,4 +26,6 @@ and ExtensibilityAddIns by default. If you set the corresponding
|
||||
property, it will override the default section. For example, setting
|
||||
VS_GLOBAL_SECTION_POST_ExtensibilityGlobals will override the default
|
||||
contents of the ExtensibilityGlobals section, while keeping
|
||||
ExtensibilityAddIns on its default.
|
||||
ExtensibilityAddIns on its default. However, CMake will always
|
||||
add a ``SolutionGuid`` to the ``ExtensibilityGlobals`` section
|
||||
if it is not specified explicitly.
|
||||
|
@ -520,6 +520,7 @@ std::string cmGlobalVisualStudio7Generator::ConvertToSolutionPath(
|
||||
void cmGlobalVisualStudio7Generator::WriteSLNGlobalSections(
|
||||
std::ostream& fout, cmLocalGenerator* root)
|
||||
{
|
||||
std::string const guid = this->GetGUID(root->GetProjectName() + ".sln");
|
||||
bool extensibilityGlobalsOverridden = false;
|
||||
bool extensibilityAddInsOverridden = false;
|
||||
const std::vector<std::string> propKeys =
|
||||
@ -538,11 +539,14 @@ void cmGlobalVisualStudio7Generator::WriteSLNGlobalSections(
|
||||
} else
|
||||
continue;
|
||||
if (!name.empty()) {
|
||||
if (name == "ExtensibilityGlobals" && sectionType == "postSolution")
|
||||
bool addGuid = false;
|
||||
if (name == "ExtensibilityGlobals" && sectionType == "postSolution") {
|
||||
addGuid = true;
|
||||
extensibilityGlobalsOverridden = true;
|
||||
else if (name == "ExtensibilityAddIns" &&
|
||||
sectionType == "postSolution")
|
||||
} else if (name == "ExtensibilityAddIns" &&
|
||||
sectionType == "postSolution") {
|
||||
extensibilityAddInsOverridden = true;
|
||||
}
|
||||
fout << "\tGlobalSection(" << name << ") = " << sectionType << "\n";
|
||||
std::vector<std::string> keyValuePairs;
|
||||
cmSystemTools::ExpandListArgument(
|
||||
@ -557,15 +561,23 @@ void cmGlobalVisualStudio7Generator::WriteSLNGlobalSections(
|
||||
const std::string value =
|
||||
cmSystemTools::TrimWhitespace(itPair->substr(posEqual + 1));
|
||||
fout << "\t\t" << key << " = " << value << "\n";
|
||||
if (key == "SolutionGuid") {
|
||||
addGuid = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (addGuid) {
|
||||
fout << "\t\tSolutionGuid = {" << guid << "}\n";
|
||||
}
|
||||
fout << "\tEndGlobalSection\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!extensibilityGlobalsOverridden)
|
||||
if (!extensibilityGlobalsOverridden) {
|
||||
fout << "\tGlobalSection(ExtensibilityGlobals) = postSolution\n"
|
||||
<< "\t\tSolutionGuid = {" << guid << "}\n"
|
||||
<< "\tEndGlobalSection\n";
|
||||
}
|
||||
if (!extensibilityAddInsOverridden)
|
||||
fout << "\tGlobalSection(ExtensibilityAddIns) = postSolution\n"
|
||||
<< "\tEndGlobalSection\n";
|
||||
|
@ -1,5 +1,5 @@
|
||||
parseGlobalSections(pre post MorePost)
|
||||
testGlobalSection(post TestSec2 Key1=Value1 "Key2=Value with spaces")
|
||||
testGlobalSection(post TestSec4 Key6=Value1 "Key7=Value with spaces" Key8=ValueWithoutSpaces)
|
||||
testGlobalSection(post ExtensibilityGlobals)
|
||||
testGlobalSection(post ExtensibilityGlobals "SolutionGuid={00000000-0000-0000-0000-000000000000}")
|
||||
testGlobalSection(post ExtensibilityAddIns)
|
||||
|
@ -1,5 +1,5 @@
|
||||
parseGlobalSections(pre post MorePre)
|
||||
testGlobalSection(pre TestSec1 Key1=Value1 "Key2=Value with spaces")
|
||||
testGlobalSection(pre TestSec3 Key3=Value1 "Key4=Value with spaces" Key5=ValueWithoutSpaces)
|
||||
testGlobalSection(post ExtensibilityGlobals)
|
||||
testGlobalSection(post ExtensibilityGlobals "SolutionGuid={00000000-0000-0000-0000-000000000000}")
|
||||
testGlobalSection(post ExtensibilityAddIns)
|
||||
|
@ -1,4 +1,4 @@
|
||||
parseGlobalSections(pre post OnePost)
|
||||
testGlobalSection(post TestSec2 Key1=Value1 "Key2=Value with spaces")
|
||||
testGlobalSection(post ExtensibilityGlobals)
|
||||
testGlobalSection(post ExtensibilityGlobals "SolutionGuid={00000000-0000-0000-0000-000000000000}")
|
||||
testGlobalSection(post ExtensibilityAddIns)
|
||||
|
@ -1,4 +1,4 @@
|
||||
parseGlobalSections(pre post OnePre)
|
||||
testGlobalSection(pre TestSec1 Key1=Value1 "Key2=Value with spaces")
|
||||
testGlobalSection(post ExtensibilityGlobals)
|
||||
testGlobalSection(post ExtensibilityGlobals "SolutionGuid={00000000-0000-0000-0000-000000000000}")
|
||||
testGlobalSection(post ExtensibilityAddIns)
|
||||
|
@ -1,4 +1,4 @@
|
||||
parseGlobalSections(pre post Override1)
|
||||
testGlobalSection(post TestSec Key2=Value2 Key3=Value3)
|
||||
testGlobalSection(post ExtensibilityGlobals Key1=Value1)
|
||||
testGlobalSection(post ExtensibilityGlobals Key1=Value1 "SolutionGuid={00000000-0000-0000-0000-000000000000}")
|
||||
testGlobalSection(post ExtensibilityAddIns)
|
||||
|
@ -1,4 +1,4 @@
|
||||
parseGlobalSections(pre post Override2)
|
||||
testGlobalSection(pre TestSec Key2=Value2 Key3=Value3)
|
||||
testGlobalSection(post ExtensibilityGlobals)
|
||||
testGlobalSection(post ExtensibilityGlobals "SolutionGuid={00000000-0000-0000-0000-000000000000}")
|
||||
testGlobalSection(post ExtensibilityAddIns Key1=Value1)
|
||||
|
3
Tests/RunCMake/VSSolution/Override3-check.cmake
Normal file
3
Tests/RunCMake/VSSolution/Override3-check.cmake
Normal file
@ -0,0 +1,3 @@
|
||||
parseGlobalSections(pre post Override3)
|
||||
testGlobalSection(post ExtensibilityGlobals Key1=Value1 "SolutionGuid={custom-guid}")
|
||||
testGlobalSection(post ExtensibilityAddIns)
|
4
Tests/RunCMake/VSSolution/Override3.cmake
Normal file
4
Tests/RunCMake/VSSolution/Override3.cmake
Normal file
@ -0,0 +1,4 @@
|
||||
set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_ExtensibilityGlobals
|
||||
Key1=Value1
|
||||
SolutionGuid={custom-guid}
|
||||
)
|
@ -2,5 +2,5 @@ parseGlobalSections(pre post PrePost)
|
||||
testGlobalSection(post Postsec Key1=Value2)
|
||||
testGlobalSection(pre Presec Key1=Value1 "Key2=Value with some spaces")
|
||||
testGlobalSection(post Emptysec)
|
||||
testGlobalSection(post ExtensibilityGlobals)
|
||||
testGlobalSection(post ExtensibilityGlobals "SolutionGuid={00000000-0000-0000-0000-000000000000}")
|
||||
testGlobalSection(post ExtensibilityAddIns)
|
||||
|
@ -8,6 +8,7 @@ run_cmake(MorePost)
|
||||
run_cmake(PrePost)
|
||||
run_cmake(Override1)
|
||||
run_cmake(Override2)
|
||||
run_cmake(Override3)
|
||||
run_cmake(StartupProject)
|
||||
run_cmake(StartupProjectMissing)
|
||||
run_cmake(AddPackageToDefault)
|
||||
|
@ -44,6 +44,9 @@ macro(parseGlobalSections arg_out_pre arg_out_post testName)
|
||||
endif()
|
||||
string(STRIP "${CMAKE_MATCH_1}" key)
|
||||
string(STRIP "${CMAKE_MATCH_2}" value)
|
||||
if(key STREQUAL "SolutionGuid" AND value MATCHES "^{[0-9A-F-]+}$")
|
||||
set(value "{00000000-0000-0000-0000-000000000000}")
|
||||
endif()
|
||||
list(APPEND ${out_${sectionType}}_${sectionName} "${key}=${value}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
Loading…
Reference in New Issue
Block a user