cmVisualStudioSlnData.cxx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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"
  4. #include <cstddef>
  5. #include <utility>
  6. #include "cmSystemTools.h"
  7. void cmSlnProjectEntry::AddProjectConfiguration(
  8. const std::string& solutionConfiguration,
  9. const std::string& projectConfiguration)
  10. {
  11. projectConfigurationMap[solutionConfiguration] = projectConfiguration;
  12. }
  13. std::string cmSlnProjectEntry::GetProjectConfiguration(
  14. const std::string& solutionConfiguration)
  15. {
  16. return projectConfigurationMap[solutionConfiguration];
  17. }
  18. const cm::optional<cmSlnProjectEntry> cmSlnData::GetProjectByGUID(
  19. const std::string& projectGUID) const
  20. {
  21. ProjectStorage::const_iterator it(ProjectsByGUID.find(projectGUID));
  22. if (it != ProjectsByGUID.end())
  23. return it->second;
  24. else
  25. return cm::nullopt;
  26. }
  27. const cm::optional<cmSlnProjectEntry> cmSlnData::GetProjectByName(
  28. const std::string& projectName) const
  29. {
  30. ProjectStringIndex::const_iterator it(ProjectNameIndex.find(projectName));
  31. if (it != ProjectNameIndex.end())
  32. return it->second->second;
  33. else
  34. return cm::nullopt;
  35. }
  36. std::vector<cmSlnProjectEntry> cmSlnData::GetProjects() const
  37. {
  38. ProjectStringIndex::const_iterator it(this->ProjectNameIndex.begin()),
  39. itEnd(this->ProjectNameIndex.end());
  40. std::vector<cmSlnProjectEntry> result;
  41. for (; it != itEnd; ++it)
  42. result.push_back(it->second->second);
  43. return result;
  44. }
  45. cmSlnProjectEntry* cmSlnData::AddProject(
  46. const std::string& projectGUID, const std::string& projectName,
  47. const std::string& projectRelativePath)
  48. {
  49. ProjectStorage::iterator it(ProjectsByGUID.find(projectGUID));
  50. if (it != ProjectsByGUID.end())
  51. return nullptr;
  52. it = ProjectsByGUID
  53. .insert(ProjectStorage::value_type(
  54. projectGUID,
  55. cmSlnProjectEntry(projectGUID, projectName, projectRelativePath)))
  56. .first;
  57. ProjectNameIndex[projectName] = it;
  58. return &it->second;
  59. }
  60. std::string cmSlnData::GetConfigurationTarget(
  61. const std::string& projectName, const std::string& solutionConfiguration,
  62. const std::string& platformName)
  63. {
  64. std::string solutionTarget = solutionConfiguration + "|" + platformName;
  65. cm::optional<cmSlnProjectEntry> project = GetProjectByName(projectName);
  66. if (!project)
  67. return platformName;
  68. std::string projectTarget = project->GetProjectConfiguration(solutionTarget);
  69. if (projectTarget.empty())
  70. return platformName;
  71. std::vector<std::string> targetElements =
  72. cmSystemTools::SplitString(projectTarget, '|');
  73. if (targetElements.size() != 2)
  74. return platformName;
  75. return targetElements[1];
  76. }