summaryrefslogtreecommitdiffstats
path: root/Source/cmExtraEclipseCDT4Generator.cxx
diff options
context:
space:
mode:
authorAlexander Neundorf <neundorf@kde.org>2009-03-13 20:52:58 (GMT)
committerAlexander Neundorf <neundorf@kde.org>2009-03-13 20:52:58 (GMT)
commitcbb7a509e8989fd972eb6a33abea6bd3a05a97d1 (patch)
tree89720b69ea8dbb43e34e41fb0a400160f7d06b25 /Source/cmExtraEclipseCDT4Generator.cxx
parent4a23e052375e589719a7f3cbf146cdbbffb83734 (diff)
downloadCMake-cbb7a509e8989fd972eb6a33abea6bd3a05a97d1.zip
CMake-cbb7a509e8989fd972eb6a33abea6bd3a05a97d1.tar.gz
CMake-cbb7a509e8989fd972eb6a33abea6bd3a05a97d1.tar.bz2
ENH: when using the Eclipse project generator, run gcc so that it tells us
its system include directories. These are catched in CMakeSystemSpecificInformation.cmake (only with the Eclipse generator) and then written by the Eclipse generator in the Eclipse project file. This way Eclipse can find the standard headers (#7585) Not sure CMakeSystemSpecificInformation.cmake is the best place to do this. Alex
Diffstat (limited to 'Source/cmExtraEclipseCDT4Generator.cxx')
-rw-r--r--Source/cmExtraEclipseCDT4Generator.cxx60
1 files changed, 48 insertions, 12 deletions
diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx
index fcf5b67..b4dd41e 100644
--- a/Source/cmExtraEclipseCDT4Generator.cxx
+++ b/Source/cmExtraEclipseCDT4Generator.cxx
@@ -395,6 +395,30 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
}
//----------------------------------------------------------------------------
+void cmExtraEclipseCDT4Generator::AppendIncludeDirectories(
+ cmGeneratedFileStream& fout,
+ const std::vector<std::string>& includeDirs,
+ std::set<std::string>& emittedDirs)
+{
+ for(std::vector<std::string>::const_iterator inc = includeDirs.begin();
+ inc != includeDirs.end();
+ ++inc)
+ {
+ if (!inc->empty())
+ {
+ std::string dir = cmSystemTools::CollapseFullPath(inc->c_str());
+ if(emittedDirs.find(dir) == emittedDirs.end())
+ {
+ emittedDirs.insert(dir);
+ fout << "<pathentry include=\""
+ << cmExtraEclipseCDT4Generator::GetEclipsePath(dir)
+ << "\" kind=\"inc\" path=\"\" system=\"true\"/>\n";
+ }
+ }
+ }
+}
+
+//----------------------------------------------------------------------------
void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
{
std::set<std::string> emmited;
@@ -590,19 +614,31 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
{
const std::vector<std::string>& includeDirs
= (*it)->GetMakefile()->GetIncludeDirectories();
- for(std::vector<std::string>::const_iterator inc = includeDirs.begin();
- inc != includeDirs.end();
- ++inc)
- {
- std::string dir = cmSystemTools::CollapseFullPath(inc->c_str());
- if(emmited.find(dir) == emmited.end())
- {
- emmited.insert(dir);
- fout << "<pathentry include=\"" << this->GetEclipsePath(dir)
- << "\" kind=\"inc\" path=\"\" system=\"true\"/>\n";
- }
- }
+ this->AppendIncludeDirectories(fout, includeDirs, emmited);
}
+ // now also the system include directories, in case we found them in
+ // CMakeSystemSpecificInformation.cmake. This makes Eclipse find the
+ // standard headers.
+ mf->GetDefinition("CMAKE_ECLIPSE_C_SYSTEM_INCLUDE_DIRS");
+ std::string compiler = mf->GetSafeDefinition("CMAKE_C_COMPILER");
+ if (!compiler.empty())
+ {
+ std::string systemIncludeDirs = mf->GetSafeDefinition(
+ "CMAKE_ECLIPSE_C_SYSTEM_INCLUDE_DIRS");
+ std::vector<std::string> dirs;
+ cmSystemTools::ExpandListArgument(systemIncludeDirs.c_str(), dirs);
+ this->AppendIncludeDirectories(fout, dirs, emmited);
+ }
+ compiler = mf->GetSafeDefinition("CMAKE_CXX_COMPILER");
+ if (!compiler.empty())
+ {
+ std::string systemIncludeDirs = mf->GetSafeDefinition(
+ "CMAKE_ECLIPSE_CXX_SYSTEM_INCLUDE_DIRS");
+ std::vector<std::string> dirs;
+ cmSystemTools::ExpandListArgument(systemIncludeDirs.c_str(), dirs);
+ this->AppendIncludeDirectories(fout, dirs, emmited);
+ }
+
fout << "</storageModule>\n";
// add build targets