summaryrefslogtreecommitdiffstats
path: root/Source/cmVisualStudioSlnData.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmVisualStudioSlnData.cxx')
-rw-r--r--Source/cmVisualStudioSlnData.cxx48
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];
+}