diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2006-03-14 19:03:16 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2006-03-14 19:03:16 (GMT) |
commit | 88bd3b5281a146e1d1a31af4ab768a427341aedf (patch) | |
tree | 31bcd668e2890fabf59cfdd5c2e4f53bc2c82f7b /Source | |
parent | 8e702ac5a800fcd4fce0984b7a0e439b77d68ae9 (diff) | |
download | CMake-88bd3b5281a146e1d1a31af4ab768a427341aedf.zip CMake-88bd3b5281a146e1d1a31af4ab768a427341aedf.tar.gz CMake-88bd3b5281a146e1d1a31af4ab768a427341aedf.tar.bz2 |
ENH: add support for removing language flags from shared library and shared module link commands
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmMakefileLibraryTargetGenerator.cxx | 22 | ||||
-rw-r--r-- | Source/cmMakefileTargetGenerator.cxx | 22 | ||||
-rw-r--r-- | Source/cmMakefileTargetGenerator.h | 3 |
3 files changed, 42 insertions, 5 deletions
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx index 60303ea..4ae00db 100644 --- a/Source/cmMakefileLibraryTargetGenerator.cxx +++ b/Source/cmMakefileLibraryTargetGenerator.cxx @@ -246,16 +246,23 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules // Add the link message. std::string buildEcho = "Linking "; buildEcho += linkLanguage; + const char* forbiddenFlagVar = 0; switch(this->Target->GetType()) { case cmTarget::STATIC_LIBRARY: - buildEcho += " static library "; break; + buildEcho += " static library "; + break; case cmTarget::SHARED_LIBRARY: - buildEcho += " shared library "; break; + forbiddenFlagVar = "_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS"; + buildEcho += " shared library "; + break; case cmTarget::MODULE_LIBRARY: - buildEcho += " shared module "; break; + forbiddenFlagVar = "_CREATE_SHARED_MODULE_FORBIDDEN_FLAGS"; + buildEcho += " shared module "; + break; default: - buildEcho += " library "; break; + buildEcho += " library "; + break; } buildEcho += targetOutPath.c_str(); this->LocalGenerator->AppendEcho(commands, buildEcho.c_str()); @@ -436,6 +443,13 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules this->LocalGenerator ->AddLanguageFlags(langFlags, linkLanguage, this->LocalGenerator->m_ConfigurationName.c_str()); + // remove any language flags that might not work with the + // particular os + if(forbiddenFlagVar) + { + this->RemoveForbiddenFlags(forbiddenFlagVar, + linkLanguage, langFlags); + } vars.LanguageCompileFlags = langFlags.c_str(); // Expand placeholders in the commands. this->LocalGenerator->m_TargetImplib = targetOutPathImport; diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index 3ec828b..842c6eb 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -799,3 +799,25 @@ void cmMakefileTargetGenerator delete this->InfoFileStream; delete this->FlagFileStream; } + +void cmMakefileTargetGenerator::RemoveForbiddenFlags(const char* flagVar, + const char* linkLang, + std::string& linkFlags) +{ + // check for language flags that are not allowed at link time, and + // remove them, -w on darwin for gcc -w -dynamiclib sends -w to libtool + // which fails, there may be more] + + std::string removeFlags = "CMAKE_"; + removeFlags += linkLang; + removeFlags += flagVar; + std::string removeflags = + this->Makefile->GetSafeDefinition(removeFlags.c_str()); + std::vector<std::string> removeList; + cmSystemTools::ExpandListArgument(removeflags, removeList); + for(std::vector<std::string>::iterator i = removeList.begin(); + i != removeList.end(); ++i) + { + cmSystemTools::ReplaceString(linkFlags, i->c_str(), ""); + } +} diff --git a/Source/cmMakefileTargetGenerator.h b/Source/cmMakefileTargetGenerator.h index cbc67ca..9bc2345 100644 --- a/Source/cmMakefileTargetGenerator.h +++ b/Source/cmMakefileTargetGenerator.h @@ -99,7 +99,8 @@ protected: void AppendTargetDepends(std::vector<std::string>& depends); virtual void CloseFileStreams(); - + void RemoveForbiddenFlags(const char* flagVar, const char* linkLang, + std::string& linkFlags); cmStdString TargetName; cmTarget *Target; cmLocalUnixMakefileGenerator3 *LocalGenerator; |