diff options
author | Alexander Neundorf <neundorf@kde.org> | 2009-03-13 20:52:58 (GMT) |
---|---|---|
committer | Alexander Neundorf <neundorf@kde.org> | 2009-03-13 20:52:58 (GMT) |
commit | cbb7a509e8989fd972eb6a33abea6bd3a05a97d1 (patch) | |
tree | 89720b69ea8dbb43e34e41fb0a400160f7d06b25 /Source/cmExtraEclipseCDT4Generator.cxx | |
parent | 4a23e052375e589719a7f3cbf146cdbbffb83734 (diff) | |
download | CMake-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.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 |