Commit c42c039d authored by Brad King's avatar Brad King
Browse files

Merge branch 'vs-2017-sln-guid' into release-3.9

parents 7638c6ea 5cf9c3d0
...@@ -26,4 +26,6 @@ and ExtensibilityAddIns by default. If you set the corresponding ...@@ -26,4 +26,6 @@ and ExtensibilityAddIns by default. If you set the corresponding
property, it will override the default section. For example, setting property, it will override the default section. For example, setting
VS_GLOBAL_SECTION_POST_ExtensibilityGlobals will override the default VS_GLOBAL_SECTION_POST_ExtensibilityGlobals will override the default
contents of the ExtensibilityGlobals section, while keeping 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( ...@@ -520,6 +520,7 @@ std::string cmGlobalVisualStudio7Generator::ConvertToSolutionPath(
void cmGlobalVisualStudio7Generator::WriteSLNGlobalSections( void cmGlobalVisualStudio7Generator::WriteSLNGlobalSections(
std::ostream& fout, cmLocalGenerator* root) std::ostream& fout, cmLocalGenerator* root)
{ {
std::string const guid = this->GetGUID(root->GetProjectName() + ".sln");
bool extensibilityGlobalsOverridden = false; bool extensibilityGlobalsOverridden = false;
bool extensibilityAddInsOverridden = false; bool extensibilityAddInsOverridden = false;
const std::vector<std::string> propKeys = const std::vector<std::string> propKeys =
...@@ -538,11 +539,14 @@ void cmGlobalVisualStudio7Generator::WriteSLNGlobalSections( ...@@ -538,11 +539,14 @@ void cmGlobalVisualStudio7Generator::WriteSLNGlobalSections(
} else } else
continue; continue;
if (!name.empty()) { if (!name.empty()) {
if (name == "ExtensibilityGlobals" && sectionType == "postSolution") bool addGuid = false;
if (name == "ExtensibilityGlobals" && sectionType == "postSolution") {
addGuid = true;
extensibilityGlobalsOverridden = true; extensibilityGlobalsOverridden = true;
else if (name == "ExtensibilityAddIns" && } else if (name == "ExtensibilityAddIns" &&
sectionType == "postSolution") sectionType == "postSolution") {
extensibilityAddInsOverridden = true; extensibilityAddInsOverridden = true;
}
fout << "\tGlobalSection(" << name << ") = " << sectionType << "\n"; fout << "\tGlobalSection(" << name << ") = " << sectionType << "\n";
std::vector<std::string> keyValuePairs; std::vector<std::string> keyValuePairs;
cmSystemTools::ExpandListArgument( cmSystemTools::ExpandListArgument(
...@@ -557,15 +561,23 @@ void cmGlobalVisualStudio7Generator::WriteSLNGlobalSections( ...@@ -557,15 +561,23 @@ void cmGlobalVisualStudio7Generator::WriteSLNGlobalSections(
const std::string value = const std::string value =
cmSystemTools::TrimWhitespace(itPair->substr(posEqual + 1)); cmSystemTools::TrimWhitespace(itPair->substr(posEqual + 1));
fout << "\t\t" << key << " = " << value << "\n"; fout << "\t\t" << key << " = " << value << "\n";
if (key == "SolutionGuid") {
addGuid = false;
}
} }
} }
if (addGuid) {
fout << "\t\tSolutionGuid = {" << guid << "}\n";
}
fout << "\tEndGlobalSection\n"; fout << "\tEndGlobalSection\n";
} }
} }
} }
if (!extensibilityGlobalsOverridden) if (!extensibilityGlobalsOverridden) {
fout << "\tGlobalSection(ExtensibilityGlobals) = postSolution\n" fout << "\tGlobalSection(ExtensibilityGlobals) = postSolution\n"
<< "\t\tSolutionGuid = {" << guid << "}\n"
<< "\tEndGlobalSection\n"; << "\tEndGlobalSection\n";
}
if (!extensibilityAddInsOverridden) if (!extensibilityAddInsOverridden)
fout << "\tGlobalSection(ExtensibilityAddIns) = postSolution\n" fout << "\tGlobalSection(ExtensibilityAddIns) = postSolution\n"
<< "\tEndGlobalSection\n"; << "\tEndGlobalSection\n";
......
parseGlobalSections(pre post MorePost) parseGlobalSections(pre post MorePost)
testGlobalSection(post TestSec2 Key1=Value1 "Key2=Value with spaces") testGlobalSection(post TestSec2 Key1=Value1 "Key2=Value with spaces")
testGlobalSection(post TestSec4 Key6=Value1 "Key7=Value with spaces" Key8=ValueWithoutSpaces) 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) testGlobalSection(post ExtensibilityAddIns)
parseGlobalSections(pre post MorePre) parseGlobalSections(pre post MorePre)
testGlobalSection(pre TestSec1 Key1=Value1 "Key2=Value with spaces") testGlobalSection(pre TestSec1 Key1=Value1 "Key2=Value with spaces")
testGlobalSection(pre TestSec3 Key3=Value1 "Key4=Value with spaces" Key5=ValueWithoutSpaces) 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) testGlobalSection(post ExtensibilityAddIns)
parseGlobalSections(pre post OnePost) parseGlobalSections(pre post OnePost)
testGlobalSection(post TestSec2 Key1=Value1 "Key2=Value with spaces") testGlobalSection(post TestSec2 Key1=Value1 "Key2=Value with spaces")
testGlobalSection(post ExtensibilityGlobals) testGlobalSection(post ExtensibilityGlobals "SolutionGuid={00000000-0000-0000-0000-000000000000}")
testGlobalSection(post ExtensibilityAddIns) testGlobalSection(post ExtensibilityAddIns)
parseGlobalSections(pre post OnePre) parseGlobalSections(pre post OnePre)
testGlobalSection(pre TestSec1 Key1=Value1 "Key2=Value with spaces") testGlobalSection(pre TestSec1 Key1=Value1 "Key2=Value with spaces")
testGlobalSection(post ExtensibilityGlobals) testGlobalSection(post ExtensibilityGlobals "SolutionGuid={00000000-0000-0000-0000-000000000000}")
testGlobalSection(post ExtensibilityAddIns) testGlobalSection(post ExtensibilityAddIns)
parseGlobalSections(pre post Override1) parseGlobalSections(pre post Override1)
testGlobalSection(post TestSec Key2=Value2 Key3=Value3) 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) testGlobalSection(post ExtensibilityAddIns)
parseGlobalSections(pre post Override2) parseGlobalSections(pre post Override2)
testGlobalSection(pre TestSec Key2=Value2 Key3=Value3) testGlobalSection(pre TestSec Key2=Value2 Key3=Value3)
testGlobalSection(post ExtensibilityGlobals) testGlobalSection(post ExtensibilityGlobals "SolutionGuid={00000000-0000-0000-0000-000000000000}")
testGlobalSection(post ExtensibilityAddIns Key1=Value1) testGlobalSection(post ExtensibilityAddIns Key1=Value1)
parseGlobalSections(pre post Override3)
testGlobalSection(post ExtensibilityGlobals Key1=Value1 "SolutionGuid={custom-guid}")
testGlobalSection(post ExtensibilityAddIns)
set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_ExtensibilityGlobals
Key1=Value1
SolutionGuid={custom-guid}
)
...@@ -2,5 +2,5 @@ parseGlobalSections(pre post PrePost) ...@@ -2,5 +2,5 @@ parseGlobalSections(pre post PrePost)
testGlobalSection(post Postsec Key1=Value2) testGlobalSection(post Postsec Key1=Value2)
testGlobalSection(pre Presec Key1=Value1 "Key2=Value with some spaces") testGlobalSection(pre Presec Key1=Value1 "Key2=Value with some spaces")
testGlobalSection(post Emptysec) testGlobalSection(post Emptysec)
testGlobalSection(post ExtensibilityGlobals) testGlobalSection(post ExtensibilityGlobals "SolutionGuid={00000000-0000-0000-0000-000000000000}")
testGlobalSection(post ExtensibilityAddIns) testGlobalSection(post ExtensibilityAddIns)
...@@ -8,6 +8,7 @@ run_cmake(MorePost) ...@@ -8,6 +8,7 @@ run_cmake(MorePost)
run_cmake(PrePost) run_cmake(PrePost)
run_cmake(Override1) run_cmake(Override1)
run_cmake(Override2) run_cmake(Override2)
run_cmake(Override3)
run_cmake(StartupProject) run_cmake(StartupProject)
run_cmake(StartupProjectMissing) run_cmake(StartupProjectMissing)
run_cmake(AddPackageToDefault) run_cmake(AddPackageToDefault)
......
...@@ -44,6 +44,9 @@ macro(parseGlobalSections arg_out_pre arg_out_post testName) ...@@ -44,6 +44,9 @@ macro(parseGlobalSections arg_out_pre arg_out_post testName)
endif() endif()
string(STRIP "${CMAKE_MATCH_1}" key) string(STRIP "${CMAKE_MATCH_1}" key)
string(STRIP "${CMAKE_MATCH_2}" value) 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}") list(APPEND ${out_${sectionType}}_${sectionName} "${key}=${value}")
endif() endif()
endforeach() endforeach()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment