diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx index f0227b03e..9e67301fd 100644 --- a/Source/cmExtraEclipseCDT4Generator.cxx +++ b/Source/cmExtraEclipseCDT4Generator.cxx @@ -467,6 +467,49 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile() xml.EndElement(); // projectDescription } +void cmExtraEclipseCDT4Generator::WriteGroups( + std::vector const& sourceGroups, + std::string& linkName, cmXMLWriter& xml) +{ + for(std::vector::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 const& children = sgIt->GetGroupChildren(); + if (!children.empty()) + { + this->WriteGroups(children, linkName, xml); + } + std::vector sFiles = sgIt->GetSourceFiles(); + for(std::vector::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::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 sFiles = sgIt->GetSourceFiles(); - for(std::vector::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 4032a6c75..26955ef92 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 const& sourceGroups, + std::string& linkName, cmXMLWriter& xml); void CreateLinksToSubprojects(cmXMLWriter& xml, const std::string& baseDir); void CreateLinksForTargets(cmXMLWriter& xml);