diff options
author | Brad King <brad.king@kitware.com> | 2008-04-29 18:17:42 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2008-04-29 18:17:42 (GMT) |
commit | 3344ce9197926f262fa4eed30f085d72b08af744 (patch) | |
tree | bdf69c8d44f3f03a2b8609f7d4f11235beae6e59 /Source | |
parent | 19aafdb35526cbb2cf6b16cd8e264cb06cc15650 (diff) | |
download | CMake-3344ce9197926f262fa4eed30f085d72b08af744.zip CMake-3344ce9197926f262fa4eed30f085d72b08af744.tar.gz CMake-3344ce9197926f262fa4eed30f085d72b08af744.tar.bz2 |
ENH: In cmSourceFile::GetLanguage use the file extension (if not ambiguous) to determine the language without requiring the source file to exist.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmSourceFile.cxx | 37 | ||||
-rw-r--r-- | Source/cmSourceFile.h | 1 |
2 files changed, 34 insertions, 4 deletions
diff --git a/Source/cmSourceFile.cxx b/Source/cmSourceFile.cxx index 7b32235..0a848f6 100644 --- a/Source/cmSourceFile.cxx +++ b/Source/cmSourceFile.cxx @@ -46,10 +46,28 @@ std::string const& cmSourceFile::GetExtension() const //---------------------------------------------------------------------------- const char* cmSourceFile::GetLanguage() { - // Compute the final location of the file if necessary. - if(this->FullPath.empty()) + // If the language was set explicitly by the user then use it. + if(const char* lang = this->GetProperty("LANGUAGE")) { - this->GetFullPath(); + return lang; + } + + // Perform computation needed to get the language if necessary. + if(this->FullPath.empty() && this->Language.empty()) + { + if(this->Location.ExtensionIsAmbiguous()) + { + // Finalize the file location to get the extension and set the + // language. + this->GetFullPath(); + } + else + { + // Use the known extension to get the language if possible. + std::string ext = + cmSystemTools::GetFilenameLastExtension(this->Location.GetName()); + this->CheckLanguage(ext); + } } // Now try to determine the language. @@ -252,8 +270,19 @@ void cmSourceFile::CheckExtension() } // Try to identify the source file language from the extension. + if(this->Language.empty()) + { + this->CheckLanguage(this->Extension); + } +} + +//---------------------------------------------------------------------------- +void cmSourceFile::CheckLanguage(std::string const& ext) +{ + // Try to identify the source file language from the extension. + cmMakefile* mf = this->Location.GetMakefile(); cmGlobalGenerator* gg = mf->GetLocalGenerator()->GetGlobalGenerator(); - if(const char* l = gg->GetLanguageFromExtension(this->Extension.c_str())) + if(const char* l = gg->GetLanguageFromExtension(ext.c_str())) { this->Language = l; } diff --git a/Source/cmSourceFile.h b/Source/cmSourceFile.h index 1eca56e..59cb7db 100644 --- a/Source/cmSourceFile.h +++ b/Source/cmSourceFile.h @@ -116,6 +116,7 @@ private: bool FindFullPath(); bool TryFullPath(const char* tryPath, const char* ext); void CheckExtension(); + void CheckLanguage(std::string const& ext); std::vector<std::string> Depends; }; |