From 7debdc2b75cacc2531b9e4e325e7ef3f30ef45ed Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Tue, 30 Jun 2009 17:38:27 +0200 Subject: [PATCH] Add all cmake files to the project tree That is if using a cmake that outputs enough information. The necessary patch for that was commited to cmake's cvs recently by Alexander Neundorf. Task-Nr: 250399 --- .../cmakeprojectmanager/cmakeproject.cpp | 49 +++++++++++++++++-- .../cmakeprojectmanager/cmakeproject.h | 6 +++ 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 0e1667d78f2..606d970f5a0 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -175,9 +175,15 @@ void CMakeProject::parseCMakeLists() //qDebug()<<"Building Tree"; + QList<ProjectExplorer::FileNode *> fileList = cbpparser.fileList(); - // Manually add the CMakeLists.txt file - fileList.append(new ProjectExplorer::FileNode(sourceDirectory() + "/CMakeLists.txt", ProjectExplorer::ProjectFileType, false)); + + if (cbpparser.hasCMakeFiles()) { + fileList.append(cbpparser.cmakeFileList()); + } else { + // Manually add the CMakeLists.txt file + fileList.append(new ProjectExplorer::FileNode(sourceDirectory() + "/CMakeLists.txt", ProjectExplorer::ProjectFileType, false)); + } m_files.clear(); foreach (ProjectExplorer::FileNode *fn, fileList) @@ -941,18 +947,43 @@ void CMakeCbpParser::parseUnit() { //qDebug()<<stream.attributes().value("filename"); QString fileName = attributes().value("filename").toString(); - if (!fileName.endsWith(".rule")) - m_fileList.append( new ProjectExplorer::FileNode(fileName, ProjectExplorer::SourceType, false)); + m_parsingCmakeUnit = false; while (!atEnd()) { readNext(); if (isEndElement()) { + if (!fileName.endsWith(".rule") && !m_processedUnits.contains(fileName)) { + // Now check whether we found a virtual element beneath + if (m_parsingCmakeUnit) + m_fileList.append( new ProjectExplorer::FileNode(fileName, ProjectExplorer::SourceType, false)); + else + m_cmakeFileList.append( new ProjectExplorer::FileNode(fileName, ProjectExplorer::ProjectFileType, false)); + m_processedUnits.insert(fileName); + } return; + } else if (name() == "Option") { + parseUnitOption(); } else if (isStartElement()) { parseUnknownElement(); } } } +void CMakeCbpParser::parseUnitOption() +{ + if (attributes().hasAttribute("virtualFolder")) + m_parsingCmakeUnit = true; + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) + parseUnknownElement(); + } +} + void CMakeCbpParser::parseUnknownElement() { Q_ASSERT(isStartElement()); @@ -973,6 +1004,16 @@ QList<ProjectExplorer::FileNode *> CMakeCbpParser::fileList() return m_fileList; } +QList<ProjectExplorer::FileNode *> CMakeCbpParser::cmakeFileList() +{ + return m_cmakeFileList; +} + +bool CMakeCbpParser::hasCMakeFiles() +{ + return !m_cmakeFileList.isEmpty(); +} + QStringList CMakeCbpParser::includeFiles() { return m_includeFiles; diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index 603d4e85553..6f17e3fa3ec 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -145,10 +145,12 @@ class CMakeCbpParser : public QXmlStreamReader public: bool parseCbpFile(const QString &fileName); QList<ProjectExplorer::FileNode *> fileList(); + QList<ProjectExplorer::FileNode *> cmakeFileList(); QStringList includeFiles(); QList<CMakeTarget> targets(); QString projectName() const; QString compilerName() const; + bool hasCMakeFiles(); private: void parseCodeBlocks_project_file(); void parseProject(); @@ -162,9 +164,13 @@ private: void parseCompiler(); void parseAdd(); void parseUnit(); + void parseUnitOption(); void parseUnknownElement(); QList<ProjectExplorer::FileNode *> m_fileList; + QList<ProjectExplorer::FileNode *> m_cmakeFileList; + QSet<QString> m_processedUnits; + bool m_parsingCmakeUnit; QStringList m_includeFiles; CMakeTarget m_target; -- GitLab