diff options
author | Patrik Lehmann <Patrik.Lehmann-EXT@continental-corporation.com> | 2016-03-31 08:52:43 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-03-31 13:34:14 (GMT) |
commit | 4828a78c1080d36935904a9620911a6f3743d792 (patch) | |
tree | 111b0465704211dff0a548f888ada4d126c6f5cd | |
parent | 0aa736e62545cee8e3ed6c39667705d31ce66b8c (diff) | |
download | CMake-4828a78c1080d36935904a9620911a6f3743d792.zip CMake-4828a78c1080d36935904a9620911a6f3743d792.tar.gz CMake-4828a78c1080d36935904a9620911a6f3743d792.tar.bz2 |
Eclipse: Implement traversal of nested source groups (#15701)
-rw-r--r-- | Source/cmExtraEclipseCDT4Generator.cxx | 72 | ||||
-rw-r--r-- | Source/cmExtraEclipseCDT4Generator.h | 3 |
2 files changed, 47 insertions, 28 deletions
diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx index f0227b0..9e67301 100644 --- a/Source/cmExtraEclipseCDT4Generator.cxx +++ b/Source/cmExtraEclipseCDT4Generator.cxx @@ -467,6 +467,49 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile() xml.EndElement(); // projectDescription } +void cmExtraEclipseCDT4Generator::WriteGroups( + std::vector<cmSourceGroup> const& sourceGroups, + std::string& linkName, cmXMLWriter& xml) +{ + for(std::vector<cmSourceGroup>::const_iterator sgIt = sourceGroups.begin(); + sgIt != sourceGroups.end(); ++sgIt) + { + std::string linkName3 = linkName; + linkName3 += "/"; + linkName3 += sgIt->GetFullName(); + + size_t pos = 0; + while ((pos = linkName3.find("\\", pos)) != std::string::npos) + { + linkName3.replace(pos, 1, "/"); + pos++; + } + + this->AppendLinkedResource(xml, linkName3, "virtual:/virtual", + VirtualFolder); + std::vector<cmSourceGroup> const& children = sgIt->GetGroupChildren(); + if (!children.empty()) + { + this->WriteGroups(children, linkName, xml); + } + std::vector<const cmSourceFile*> sFiles = sgIt->GetSourceFiles(); + for(std::vector<const cmSourceFile*>::const_iterator + fileIt = sFiles.begin(); fileIt != sFiles.end(); ++fileIt) + { + std::string fullPath = (*fileIt)->GetFullPath(); + + if (!cmSystemTools::FileIsDirectory(fullPath)) + { + std::string linkName4 = linkName3; + linkName4 += "/"; + linkName4 += cmSystemTools::GetFilenameName(fullPath); + this->AppendLinkedResource(xml, linkName4, + this->GetEclipsePath(fullPath), + LinkToFile); + } + } + } +} //---------------------------------------------------------------------------- void cmExtraEclipseCDT4Generator::CreateLinksForTargets(cmXMLWriter& xml) @@ -523,34 +566,7 @@ void cmExtraEclipseCDT4Generator::CreateLinksForTargets(cmXMLWriter& xml) sourceGroup->AssignSource(*sfIt); } - for(std::vector<cmSourceGroup>::iterator sgIt = sourceGroups.begin(); - sgIt != sourceGroups.end(); - ++sgIt) - { - std::string linkName3 = linkName2; - linkName3 += "/"; - linkName3 += sgIt->GetFullName(); - this->AppendLinkedResource(xml, linkName3, "virtual:/virtual", - VirtualFolder); - - std::vector<const cmSourceFile*> sFiles = sgIt->GetSourceFiles(); - for(std::vector<const cmSourceFile*>::const_iterator fileIt = - sFiles.begin(); - fileIt != sFiles.end(); - ++fileIt) - { - std::string fullPath = (*fileIt)->GetFullPath(); - if (!cmSystemTools::FileIsDirectory(fullPath)) - { - std::string linkName4 = linkName3; - linkName4 += "/"; - linkName4 += cmSystemTools::GetFilenameName(fullPath); - this->AppendLinkedResource(xml, linkName4, - this->GetEclipsePath(fullPath), - LinkToFile); - } - } - } + this->WriteGroups(sourceGroups, linkName2, xml); } break; // ignore all others: diff --git a/Source/cmExtraEclipseCDT4Generator.h b/Source/cmExtraEclipseCDT4Generator.h index 4032a6c..26955ef 100644 --- a/Source/cmExtraEclipseCDT4Generator.h +++ b/Source/cmExtraEclipseCDT4Generator.h @@ -18,6 +18,7 @@ class cmMakefile; class cmXMLWriter; +class cmSourceGroup; /** \class cmExtraEclipseCDT4Generator * \brief Write Eclipse project files for Makefile based projects @@ -100,6 +101,8 @@ private: static void AddEnvVar(std::ostream& out, const char* envVar, cmLocalGenerator* lg); + void WriteGroups(std::vector<cmSourceGroup> const& sourceGroups, + std::string& linkName, cmXMLWriter& xml); void CreateLinksToSubprojects(cmXMLWriter& xml, const std::string& baseDir); void CreateLinksForTargets(cmXMLWriter& xml); |