diff options
Diffstat (limited to 'Source/cmExtraEclipseCDT4Generator.cxx')
-rw-r--r-- | Source/cmExtraEclipseCDT4Generator.cxx | 60 |
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 |