aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2017-06-02 20:12:10 -0700
committerJake Petroules <jake.petroules@qt.io>2017-06-06 16:45:31 +0000
commite68a7a584f84ed889255341fae21a5e35fdb1132 (patch)
treeca76d94e903a9d5d8cf2bb8701dd9f41858fcf38 /src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp
parent3285bc1b02ebd1a737ec3660502f7aab2850548b (diff)
Fix handling of same subproject names in generated VS solutions
While Qbs product names must be unambiguous, using the same project name several times is perfectly valid, as long as all projects with the same name belong to a different root project. Utilize the project's source file location to distinguish projects that have the same name. Use this in conjunction with the name to create an ID that is used as the key for the solutionFolders map. Change-Id: I47079cd4207d505892e79755a3986614025d2749 Task-number: QBS-1082 Reviewed-by: Jake Petroules <jake.petroules@qt.io> Reviewed-by: Thomas Epting <thomas.epting@stryker.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp')
-rw-r--r--src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp b/src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp
index ea621b271..179232114 100644
--- a/src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp
+++ b/src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp
@@ -79,7 +79,7 @@ public:
QString solutionFilePath;
QMap<QString, QSharedPointer<MSBuildProject>> msbuildProjects;
QMap<QString, VisualStudioSolutionFileProject *> solutionProjects;
- QMap<QString, VisualStudioSolutionFolderProject *> solutionFolders;
+ QMap<GeneratableProjectData::Id, VisualStudioSolutionFolderProject *> solutionFolders;
QList<std::pair<QString, bool>> propertySheetNames;
void reset();
@@ -118,9 +118,9 @@ public:
// as its parent object (so skip giving it a parent folder)
if (!parentProjectData.name().isEmpty()) {
nestedProjects->appendProperty(
- generator->d->solutionFolders.value(projectData.name())->guid()
+ generator->d->solutionFolders.value(projectData.uniqueName())->guid()
.toString(),
- generator->d->solutionFolders.value(parentProjectData.name())->guid()
+ generator->d->solutionFolders.value(parentProjectData.uniqueName())->guid()
.toString());
}
}
@@ -138,7 +138,8 @@ public:
nestedProjects->appendProperty(
generator->d->solutionProjects.value(productData.name())->guid().toString(),
- generator->d->solutionFolders.value(projectData.name())->guid().toString());
+ generator->d->solutionFolders.value(projectData.uniqueName())->guid()
+ .toString());
}
private:
@@ -340,7 +341,8 @@ void VisualStudioGenerator::visitProjectData(const GeneratableProject &project,
auto solutionFolder = new VisualStudioSolutionFolderProject(d->solution.data());
solutionFolder->setName(projectData.name());
d->solution->appendProject(solutionFolder);
- d->solutionFolders.insert(projectData.name(), solutionFolder);
+ QBS_CHECK(!d->solutionFolders.contains(projectData.uniqueName()));
+ d->solutionFolders.insert(projectData.uniqueName(), solutionFolder);
}
void VisualStudioGenerator::visitProduct(const GeneratableProject &project,