diff options
author | Brad King <brad.king@kitware.com> | 2007-08-02 17:38:39 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2007-08-02 17:38:39 (GMT) |
commit | 9f2de08f909350da3ebc14f124051a59ed1947c3 (patch) | |
tree | d773eed9e9015e94b2ecf74ac6fb8aef2b1c9381 | |
parent | dac7814841a09d80b75eba37ac50aa9ae17ced19 (diff) | |
download | CMake-9f2de08f909350da3ebc14f124051a59ed1947c3.zip CMake-9f2de08f909350da3ebc14f124051a59ed1947c3.tar.gz CMake-9f2de08f909350da3ebc14f124051a59ed1947c3.tar.bz2 |
ENH: Added cmTarget::GetLanguages method to centralize computation of the list of languages compiled in a target.
-rw-r--r-- | Source/cmMakefileTargetGenerator.cxx | 12 | ||||
-rw-r--r-- | Source/cmTarget.cxx | 22 | ||||
-rw-r--r-- | Source/cmTarget.h | 9 |
3 files changed, 27 insertions, 16 deletions
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index 3a990fe..2eedfbb 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -234,14 +234,12 @@ void cmMakefileTargetGenerator::WriteCommonCodeRules() void cmMakefileTargetGenerator::WriteTargetLanguageFlags() { // write language flags for target - std::map<cmStdString,cmLocalUnixMakefileGenerator3::IntegrityCheckSet>& - checkSet = - this->LocalGenerator->GetIntegrityCheckSet()[this->Target->GetName()]; - for(std::map<cmStdString, - cmLocalUnixMakefileGenerator3::IntegrityCheckSet>::const_iterator - l = checkSet.begin(); l != checkSet.end(); ++l) + std::set<cmStdString> languages; + this->Target->GetLanguages(languages); + for(std::set<cmStdString>::const_iterator l = languages.begin(); + l != languages.end(); ++l) { - const char *lang = l->first.c_str(); + const char *lang = l->c_str(); std::string flags; bool shared = ((this->Target->GetType() == cmTarget::SHARED_LIBRARY) || (this->Target->GetType() == cmTarget::MODULE_LIBRARY)); diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index c4b6e34..18b0ad1 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -1488,14 +1488,7 @@ const char* cmTarget::GetLinkerLanguage(cmGlobalGenerator* gg) // if the property has not yet been set, collect all languages in the // target and then find the language with the highest preference value std::set<cmStdString> languages; - for(std::vector<cmSourceFile*>::const_iterator - i = this->SourceFiles.begin(); i != this->SourceFiles.end(); ++i) - { - if(const char* lang = (*i)->GetLanguage()) - { - languages.insert(lang); - } - } + this->GetLanguages(languages); std::string linkerLangList; // only used for the error message int maxLinkerPref = 0; @@ -2369,3 +2362,16 @@ const char* cmTarget::GetExportMacro() return 0; } } + +//---------------------------------------------------------------------------- +void cmTarget::GetLanguages(std::set<cmStdString>& languages) const +{ + for(std::vector<cmSourceFile*>::const_iterator + i = this->SourceFiles.begin(); i != this->SourceFiles.end(); ++i) + { + if(const char* lang = (*i)->GetLanguage()) + { + languages.insert(lang); + } + } +} diff --git a/Source/cmTarget.h b/Source/cmTarget.h index d0168a2..4b59e8b 100644 --- a/Source/cmTarget.h +++ b/Source/cmTarget.h @@ -61,7 +61,7 @@ public: ///! Set the cmMakefile that owns this target void SetMakefile(cmMakefile *mf); - cmMakefile *GetMakefile() { return this->Makefile;}; + cmMakefile *GetMakefile() const { return this->Makefile;}; /** * Get the list of the custom commands for this target @@ -264,6 +264,13 @@ public: If no macro should be defined null is returned. */ const char* GetExportMacro(); + // Compute the set of languages compiled by the target. This is + // computed every time it is called because the languages can change + // when source file properties are changed and we do not have enough + // information to forward these property changes to the targets + // until we have per-target object file properties. + void GetLanguages(std::set<cmStdString>& languages) const; + private: /** * A list of direct dependencies. Use in conjunction with DependencyMap. |