From 5b200e3bed8e450027ddad42a155d670f247e58c Mon Sep 17 00:00:00 2001
From: Alex Neundorf <neundorf@kde.org>
Date: Sat, 15 Oct 2011 19:40:21 +0200
Subject: Detect whether the current Eclipse version supports VirtualFolders

VirtualFolders are supported since 3.6 (Helios).
Next patch will be to actually make use of the new flag
SupportsVirtualFolders.

Alex
---
 Source/cmExtraEclipseCDT4Generator.cxx | 20 ++++++++++++++++++++
 Source/cmExtraEclipseCDT4Generator.h   |  1 +
 2 files changed, 21 insertions(+)

diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx
index 7beffdc..21b1b61 100644
--- a/Source/cmExtraEclipseCDT4Generator.cxx
+++ b/Source/cmExtraEclipseCDT4Generator.cxx
@@ -34,6 +34,8 @@ cmExtraEclipseCDT4Generator
 //  this->SupportedGlobalGenerators.push_back("MSYS Makefiles");
 #endif
   this->SupportedGlobalGenerators.push_back("Unix Makefiles");
+
+  this->SupportsVirtualFolders = true;
 }
 
 //----------------------------------------------------------------------------
@@ -57,6 +59,24 @@ void cmExtraEclipseCDT4Generator::Generate()
   const cmMakefile* mf
     = this->GlobalGenerator->GetLocalGenerators()[0]->GetMakefile();
 
+  std::string eclipseVersion = mf->GetSafeDefinition("CMAKE_ECLIPSE_VERSION");
+  cmsys::RegularExpression regex(".*([0-9]+\\.[0-9]+).*");
+  if (regex.find(eclipseVersion.c_str()))
+    {
+    unsigned int majorVersion = 0;
+    unsigned int minorVersion = 0;
+    int res=sscanf(regex.match(1).c_str(), "%u.%u", &majorVersion,
+                                                    &minorVersion);
+    if (res == 2)
+      {
+      int version = majorVersion * 1000 + minorVersion;
+      if (version < 3006) // 3.6 is Helios
+        {
+        this->SupportsVirtualFolders = false;
+        }
+      }
+    }
+
   // TODO: Decide if these are local or member variables
   this->HomeDirectory       = mf->GetHomeDirectory();
   this->HomeOutputDirectory = mf->GetHomeOutputDirectory();
diff --git a/Source/cmExtraEclipseCDT4Generator.h b/Source/cmExtraEclipseCDT4Generator.h
index a683731..b866619 100644
--- a/Source/cmExtraEclipseCDT4Generator.h
+++ b/Source/cmExtraEclipseCDT4Generator.h
@@ -107,6 +107,7 @@ private:
   std::string HomeOutputDirectory;
   bool IsOutOfSourceBuild;
   bool GenerateSourceProject;
+  bool SupportsVirtualFolders;
 
 };
 
-- 
cgit v0.12