diff options
Diffstat (limited to 'Source/cmVisualStudioSlnData.cxx')
-rw-r--r-- | Source/cmVisualStudioSlnData.cxx | 48 |
1 files changed, 42 insertions, 6 deletions
diff --git a/Source/cmVisualStudioSlnData.cxx b/Source/cmVisualStudioSlnData.cxx index 8d4b658..2a6dfc4 100644 --- a/Source/cmVisualStudioSlnData.cxx +++ b/Source/cmVisualStudioSlnData.cxx @@ -5,24 +5,39 @@ #include <cstddef> #include <utility> -const cmSlnProjectEntry* cmSlnData::GetProjectByGUID( +#include "cmSystemTools.h" + +void cmSlnProjectEntry::AddProjectConfiguration( + const std::string& solutionConfiguration, + const std::string& projectConfiguration) +{ + projectConfigurationMap[solutionConfiguration] = projectConfiguration; +} + +std::string cmSlnProjectEntry::GetProjectConfiguration( + const std::string& solutionConfiguration) +{ + return projectConfigurationMap[solutionConfiguration]; +} + +const cm::optional<cmSlnProjectEntry> cmSlnData::GetProjectByGUID( const std::string& projectGUID) const { ProjectStorage::const_iterator it(ProjectsByGUID.find(projectGUID)); if (it != ProjectsByGUID.end()) - return &it->second; + return it->second; else - return NULL; + return cm::nullopt; } -const cmSlnProjectEntry* cmSlnData::GetProjectByName( +const cm::optional<cmSlnProjectEntry> cmSlnData::GetProjectByName( const std::string& projectName) const { ProjectStringIndex::const_iterator it(ProjectNameIndex.find(projectName)); if (it != ProjectNameIndex.end()) - return &it->second->second; + return it->second->second; else - return NULL; + return cm::nullopt; } std::vector<cmSlnProjectEntry> cmSlnData::GetProjects() const @@ -50,3 +65,24 @@ cmSlnProjectEntry* cmSlnData::AddProject( ProjectNameIndex[projectName] = it; return &it->second; } + +std::string cmSlnData::GetConfigurationTarget( + const std::string& projectName, const std::string& solutionConfiguration, + const std::string& platformName) +{ + std::string solutionTarget = solutionConfiguration + "|" + platformName; + cm::optional<cmSlnProjectEntry> project = GetProjectByName(projectName); + if (!project) + return platformName; + + std::string projectTarget = project->GetProjectConfiguration(solutionTarget); + if (projectTarget.empty()) + return platformName; + + std::vector<std::string> targetElements = + cmSystemTools::SplitString(projectTarget, '|'); + if (targetElements.size() != 2) + return platformName; + + return targetElements[1]; +} |