CMake: Fix projects with complex CMakeLists.txt layouts

This fixes soft assserts in e.g. Musescore.

Change-Id: I860c8c184161e53918fb901d66b89cffb0c09e23
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-03-13 18:13:47 +01:00
parent b3238d5736
commit b8417e0f0c
4 changed files with 29 additions and 79 deletions

View File

@@ -60,7 +60,8 @@ static FolderNode *folderNode(const FolderNode *folder, const Utils::FileName &d
static FolderNode *recursiveFindOrCreateFolderNode(FolderNode *folder,
const Utils::FileName &directory,
const Utils::FileName &overrideBaseDir)
const Utils::FileName &overrideBaseDir,
const FolderNode::FolderNodeFactory &factory)
{
Utils::FileName path = overrideBaseDir.isEmpty() ? folder->filePath() : overrideBaseDir;
@@ -90,7 +91,7 @@ static FolderNode *recursiveFindOrCreateFolderNode(FolderNode *folder,
FolderNode *next = folderNode(parent, path);
if (!next) {
// No FolderNode yet, so create it
auto tmp = new ProjectExplorer::FolderNode(path);
auto tmp = factory(path);
tmp->setDisplayName(part);
parent->addNode(tmp);
next = tmp;
@@ -460,20 +461,22 @@ QList<FolderNode*> FolderNode::folderNodes() const
return result;
}
void FolderNode::addNestedNode(FileNode *fileNode, const Utils::FileName &overrideBaseDir)
void FolderNode::addNestedNode(FileNode *fileNode, const Utils::FileName &overrideBaseDir,
const FolderNodeFactory &factory)
{
// Get relative path to rootNode
QString parentDir = fileNode->filePath().toFileInfo().absolutePath();
FolderNode *folder = recursiveFindOrCreateFolderNode(this, Utils::FileName::fromString(parentDir),
overrideBaseDir);
overrideBaseDir, factory);
folder->addNode(fileNode);
}
void FolderNode::addNestedNodes(QList<FileNode *> &files, const Utils::FileName &overrideBaseDir)
void FolderNode::addNestedNodes(const QList<FileNode *> &files, const Utils::FileName &overrideBaseDir,
const FolderNodeFactory &factory)
{
for (FileNode *fn : files)
addNestedNode(fn, overrideBaseDir);
addNestedNode(fn, overrideBaseDir, factory);
}
// "Compress" a tree of foldernodes such that foldernodes with exactly one foldernode as a child