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 "cmStringAlgorithms.h"
9 #include "cmSystemTools.h"
11 void cmSlnProjectEntry::AddProjectConfiguration(
12 const std::string
& solutionConfiguration
,
13 const std::string
& projectConfiguration
)
15 projectConfigurationMap
[solutionConfiguration
] = projectConfiguration
;
18 std::string
cmSlnProjectEntry::GetProjectConfiguration(
19 const std::string
& solutionConfiguration
)
21 return projectConfigurationMap
[solutionConfiguration
];
24 cm::optional
<cmSlnProjectEntry
> cmSlnData::GetProjectByGUID(
25 const std::string
& projectGUID
) const
27 auto it(ProjectsByGUID
.find(projectGUID
));
28 if (it
!= ProjectsByGUID
.end()) {
34 cm::optional
<cmSlnProjectEntry
> cmSlnData::GetProjectByName(
35 const std::string
& projectName
) const
37 auto it(ProjectNameIndex
.find(projectName
));
38 if (it
!= ProjectNameIndex
.end()) {
39 return it
->second
->second
;
44 std::vector
<cmSlnProjectEntry
> cmSlnData::GetProjects() const
46 auto it(this->ProjectNameIndex
.begin());
47 auto itEnd(this->ProjectNameIndex
.end());
48 std::vector
<cmSlnProjectEntry
> result
;
49 for (; it
!= itEnd
; ++it
) {
50 result
.push_back(it
->second
->second
);
55 cmSlnProjectEntry
* cmSlnData::AddProject(
56 const std::string
& projectGUID
, const std::string
& projectName
,
57 const std::string
& projectRelativePath
)
59 auto it(ProjectsByGUID
.find(projectGUID
));
60 if (it
!= ProjectsByGUID
.end()) {
64 .insert(ProjectStorage::value_type(
66 cmSlnProjectEntry(projectGUID
, projectName
, projectRelativePath
)))
68 ProjectNameIndex
[projectName
] = it
;
72 std::string
cmSlnData::GetConfigurationTarget(
73 const std::string
& projectName
, const std::string
& solutionConfiguration
,
74 const std::string
& platformName
)
76 std::string solutionTarget
=
77 cmStrCat(solutionConfiguration
, '|', platformName
);
78 cm::optional
<cmSlnProjectEntry
> project
= GetProjectByName(projectName
);
83 std::string projectTarget
= project
->GetProjectConfiguration(solutionTarget
);
84 if (projectTarget
.empty()) {
88 std::vector
<std::string
> targetElements
=
89 cmSystemTools::SplitString(projectTarget
, '|');
90 if (targetElements
.size() != 2) {
94 return targetElements
[1];