1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
3 #include "cmVisualStudioSlnData.h"
8 #include "cmSystemTools.h"
10 void cmSlnProjectEntry::AddProjectConfiguration(
11 const std::string& solutionConfiguration,
12 const std::string& projectConfiguration)
14 projectConfigurationMap[solutionConfiguration] = projectConfiguration;
17 std::string cmSlnProjectEntry::GetProjectConfiguration(
18 const std::string& solutionConfiguration)
20 return projectConfigurationMap[solutionConfiguration];
23 const cm::optional<cmSlnProjectEntry> cmSlnData::GetProjectByGUID(
24 const std::string& projectGUID) const
26 ProjectStorage::const_iterator it(ProjectsByGUID.find(projectGUID));
27 if (it != ProjectsByGUID.end())
33 const cm::optional<cmSlnProjectEntry> cmSlnData::GetProjectByName(
34 const std::string& projectName) const
36 ProjectStringIndex::const_iterator it(ProjectNameIndex.find(projectName));
37 if (it != ProjectNameIndex.end())
38 return it->second->second;
43 std::vector<cmSlnProjectEntry> cmSlnData::GetProjects() const
45 ProjectStringIndex::const_iterator it(this->ProjectNameIndex.begin()),
46 itEnd(this->ProjectNameIndex.end());
47 std::vector<cmSlnProjectEntry> result;
48 for (; it != itEnd; ++it)
49 result.push_back(it->second->second);
53 cmSlnProjectEntry* cmSlnData::AddProject(
54 const std::string& projectGUID, const std::string& projectName,
55 const std::string& projectRelativePath)
57 ProjectStorage::iterator it(ProjectsByGUID.find(projectGUID));
58 if (it != ProjectsByGUID.end())
61 .insert(ProjectStorage::value_type(
63 cmSlnProjectEntry(projectGUID, projectName, projectRelativePath)))
65 ProjectNameIndex[projectName] = it;
69 std::string cmSlnData::GetConfigurationTarget(
70 const std::string& projectName, const std::string& solutionConfiguration,
71 const std::string& platformName)
73 std::string solutionTarget = solutionConfiguration + "|" + platformName;
74 cm::optional<cmSlnProjectEntry> project = GetProjectByName(projectName);
78 std::string projectTarget = project->GetProjectConfiguration(solutionTarget);
79 if (projectTarget.empty())
82 std::vector<std::string> targetElements =
83 cmSystemTools::SplitString(projectTarget, '|');
84 if (targetElements.size() != 2)
87 return targetElements[1];