summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2016-04-01 14:01:58 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2016-04-01 14:01:58 (GMT)
commitde7f2ae3f13c183c534f2298a1452ddd5c6e0aaa (patch)
tree2b43cea6db51a1f3fd9c793ada1d4ecfce6f8df1 /Source
parente8c1363ee8f08cf0b36e17f85ddb461abd06e0b6 (diff)
parent4828a78c1080d36935904a9620911a6f3743d792 (diff)
downloadCMake-de7f2ae3f13c183c534f2298a1452ddd5c6e0aaa.zip
CMake-de7f2ae3f13c183c534f2298a1452ddd5c6e0aaa.tar.gz
CMake-de7f2ae3f13c183c534f2298a1452ddd5c6e0aaa.tar.bz2
Merge topic 'eclipse-source-groups'
4828a78c Eclipse: Implement traversal of nested source groups (#15701)
Diffstat (limited to 'Source')
-rw-r--r--Source/cmExtraEclipseCDT4Generator.cxx72
-rw-r--r--Source/cmExtraEclipseCDT4Generator.h3
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);