瀏覽代碼

ENH: Pass config to cmTarget::GetLinkerLanguage

This passes the build configuration to most GetLinkerLanguage calls.  In
the future the linker language will account for targets linked in each
configuration.
Brad King 16 年之前
父節點
當前提交
173448d988

+ 1 - 1
Source/cmComputeLinkInformation.cxx

@@ -264,7 +264,7 @@ cmComputeLinkInformation
   this->OrderDependentRPath = 0;
   this->OrderDependentRPath = 0;
 
 
   // Get the language used for linking this target.
   // Get the language used for linking this target.
-  this->LinkLanguage = this->Target->GetLinkerLanguage();
+  this->LinkLanguage = this->Target->GetLinkerLanguage(config);
   if(!this->LinkLanguage)
   if(!this->LinkLanguage)
     {
     {
     // The Compute method will do nothing, so skip the rest of the
     // The Compute method will do nothing, so skip the rest of the

+ 1 - 1
Source/cmGlobalXCodeGenerator.cxx

@@ -1378,7 +1378,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
   bool shared = ((target.GetType() == cmTarget::SHARED_LIBRARY) ||
   bool shared = ((target.GetType() == cmTarget::SHARED_LIBRARY) ||
                  (target.GetType() == cmTarget::MODULE_LIBRARY));
                  (target.GetType() == cmTarget::MODULE_LIBRARY));
 
 
-  const char* lang = target.GetLinkerLanguage();
+  const char* lang = target.GetLinkerLanguage(configName);
   std::string cflags;
   std::string cflags;
   if(lang)
   if(lang)
     {
     {

+ 2 - 2
Source/cmLocalVisualStudio7Generator.cxx

@@ -656,7 +656,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
   std::string flags;
   std::string flags;
   if(strcmp(configType, "10") != 0)
   if(strcmp(configType, "10") != 0)
     {
     {
-    const char* linkLanguage = target.GetLinkerLanguage();
+    const char* linkLanguage = target.GetLinkerLanguage(configName);
     if(!linkLanguage)
     if(!linkLanguage)
       {
       {
       cmSystemTools::Error
       cmSystemTools::Error
@@ -1362,7 +1362,7 @@ cmLocalVisualStudio7GeneratorFCInfo
       lg->GlobalGenerator->GetLanguageFromExtension
       lg->GlobalGenerator->GetLanguageFromExtension
       (sf.GetExtension().c_str());
       (sf.GetExtension().c_str());
     const char* sourceLang = lg->GetSourceFileLanguage(sf);
     const char* sourceLang = lg->GetSourceFileLanguage(sf);
-    const char* linkLanguage = target.GetLinkerLanguage();
+    const char* linkLanguage = target.GetLinkerLanguage(i->c_str());
     bool needForceLang = false;
     bool needForceLang = false;
     // source file does not match its extension language
     // source file does not match its extension language
     if(lang && sourceLang && strcmp(lang, sourceLang) != 0)
     if(lang && sourceLang && strcmp(lang, sourceLang) != 0)

+ 2 - 1
Source/cmMakefileExecutableTargetGenerator.cxx

@@ -178,7 +178,8 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
                   cmLocalGenerator::SHELL);
                   cmLocalGenerator::SHELL);
 
 
   // Get the language to use for linking this executable.
   // Get the language to use for linking this executable.
-  const char* linkLanguage = this->Target->GetLinkerLanguage();
+  const char* linkLanguage =
+    this->Target->GetLinkerLanguage(this->ConfigName);
 
 
   // Make sure we have a link language.
   // Make sure we have a link language.
   if(!linkLanguage)
   if(!linkLanguage)

+ 10 - 5
Source/cmMakefileLibraryTargetGenerator.cxx

@@ -109,7 +109,8 @@ void cmMakefileLibraryTargetGenerator::WriteRuleFiles()
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 void cmMakefileLibraryTargetGenerator::WriteStaticLibraryRules()
 void cmMakefileLibraryTargetGenerator::WriteStaticLibraryRules()
 {
 {
-  const char* linkLanguage = this->Target->GetLinkerLanguage();
+  const char* linkLanguage =
+    this->Target->GetLinkerLanguage(this->ConfigName);
   std::string linkRuleVar = "CMAKE_";
   std::string linkRuleVar = "CMAKE_";
   if (linkLanguage)
   if (linkLanguage)
     {
     {
@@ -131,7 +132,8 @@ void cmMakefileLibraryTargetGenerator::WriteSharedLibraryRules(bool relink)
     this->WriteFrameworkRules(relink);
     this->WriteFrameworkRules(relink);
     return;
     return;
     }
     }
-  const char* linkLanguage = this->Target->GetLinkerLanguage();
+  const char* linkLanguage =
+    this->Target->GetLinkerLanguage(this->ConfigName);
   std::string linkRuleVar = "CMAKE_";
   std::string linkRuleVar = "CMAKE_";
   if (linkLanguage)
   if (linkLanguage)
     {
     {
@@ -176,7 +178,8 @@ void cmMakefileLibraryTargetGenerator::WriteSharedLibraryRules(bool relink)
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 void cmMakefileLibraryTargetGenerator::WriteModuleLibraryRules(bool relink)
 void cmMakefileLibraryTargetGenerator::WriteModuleLibraryRules(bool relink)
 {
 {
-  const char* linkLanguage = this->Target->GetLinkerLanguage();
+  const char* linkLanguage =
+    this->Target->GetLinkerLanguage(this->ConfigName);
   std::string linkRuleVar = "CMAKE_";
   std::string linkRuleVar = "CMAKE_";
   if (linkLanguage)
   if (linkLanguage)
     {
     {
@@ -201,7 +204,8 @@ void cmMakefileLibraryTargetGenerator::WriteModuleLibraryRules(bool relink)
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 void cmMakefileLibraryTargetGenerator::WriteFrameworkRules(bool relink)
 void cmMakefileLibraryTargetGenerator::WriteFrameworkRules(bool relink)
 {
 {
-  const char* linkLanguage = this->Target->GetLinkerLanguage();
+  const char* linkLanguage =
+    this->Target->GetLinkerLanguage(this->ConfigName);
   std::string linkRuleVar = "CMAKE_";
   std::string linkRuleVar = "CMAKE_";
   if (linkLanguage)
   if (linkLanguage)
     {
     {
@@ -347,7 +351,8 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
     }
     }
   
   
   // Get the language to use for linking this library.
   // Get the language to use for linking this library.
-  const char* linkLanguage = this->Target->GetLinkerLanguage();
+  const char* linkLanguage =
+    this->Target->GetLinkerLanguage(this->ConfigName);
 
 
   // Make sure we have a link language.
   // Make sure we have a link language.
   if(!linkLanguage)
   if(!linkLanguage)

+ 4 - 4
Source/cmTarget.cxx

@@ -2320,7 +2320,7 @@ bool cmTarget::GetPropertyAsBool(const char* prop)
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-const char* cmTarget::GetLinkerLanguage()
+const char* cmTarget::GetLinkerLanguage(const char*)
 {
 {
   cmGlobalGenerator* gg =
   cmGlobalGenerator* gg =
     this->Makefile->GetLocalGenerator()->GetGlobalGenerator();
     this->Makefile->GetLocalGenerator()->GetGlobalGenerator();
@@ -2772,7 +2772,7 @@ void cmTarget::GetLibraryNames(std::string& name,
     }
     }
 
 
   // Construct the name of the soname flag variable for this language.
   // Construct the name of the soname flag variable for this language.
-  const char* ll = this->GetLinkerLanguage();
+  const char* ll = this->GetLinkerLanguage(config);
   std::string sonameFlag = "CMAKE_SHARED_LIBRARY_SONAME";
   std::string sonameFlag = "CMAKE_SHARED_LIBRARY_SONAME";
   if(ll)
   if(ll)
     {
     {
@@ -3062,7 +3062,7 @@ bool cmTarget::NeedRelinkBeforeInstall(const char* config)
     }
     }
 
 
   // Check for rpath support on this platform.
   // Check for rpath support on this platform.
-  if(const char* ll = this->GetLinkerLanguage())
+  if(const char* ll = this->GetLinkerLanguage(config))
     {
     {
     std::string flagVar = "CMAKE_SHARED_LIBRARY_RUNTIME_";
     std::string flagVar = "CMAKE_SHARED_LIBRARY_RUNTIME_";
     flagVar += ll;
     flagVar += ll;
@@ -3387,7 +3387,7 @@ bool cmTarget::IsChrpathUsed(const char* config)
 
 
   // Enable if the rpath flag uses a separator and the target uses ELF
   // Enable if the rpath flag uses a separator and the target uses ELF
   // binaries.
   // binaries.
-  if(const char* ll = this->GetLinkerLanguage())
+  if(const char* ll = this->GetLinkerLanguage(config))
     {
     {
     std::string sepVar = "CMAKE_SHARED_LIBRARY_RUNTIME_";
     std::string sepVar = "CMAKE_SHARED_LIBRARY_RUNTIME_";
     sepVar += ll;
     sepVar += ll;

+ 1 - 1
Source/cmTarget.h

@@ -305,7 +305,7 @@ public:
   bool FindSourceFiles();
   bool FindSourceFiles();
 
 
   ///! Return the prefered linker language for this target
   ///! Return the prefered linker language for this target
-  const char* GetLinkerLanguage();
+  const char* GetLinkerLanguage(const char* config = 0);
 
 
   ///! Return the rule variable used to create this type of target,
   ///! Return the rule variable used to create this type of target,
   //  need to add CMAKE_(LANG) for full name.
   //  need to add CMAKE_(LANG) for full name.

+ 6 - 3
Source/cmVisualStudio10TargetGenerator.cxx

@@ -582,7 +582,8 @@ OutputLinkIncremental(std::string const& configName)
   
   
   // assume incremental linking
   // assume incremental linking
   const char* incremental = "true";
   const char* incremental = "true";
-  const char* linkLanguage = this->Target->GetLinkerLanguage();
+  const char* linkLanguage =
+    this->Target->GetLinkerLanguage(configName.c_str());
   if(!linkLanguage)
   if(!linkLanguage)
     {
     {
     cmSystemTools::Error
     cmSystemTools::Error
@@ -638,7 +639,8 @@ WriteClOptions(std::string const& configName,
   // collect up flags for 
   // collect up flags for 
   if(this->Target->GetType() < cmTarget::UTILITY)
   if(this->Target->GetType() < cmTarget::UTILITY)
     {
     {
-    const char* linkLanguage = this->Target->GetLinkerLanguage();
+    const char* linkLanguage =
+      this->Target->GetLinkerLanguage(configName.c_str());
     if(!linkLanguage)
     if(!linkLanguage)
       {
       {
       cmSystemTools::Error
       cmSystemTools::Error
@@ -772,7 +774,8 @@ void cmVisualStudio10TargetGenerator::WriteLinkOptions(std::string const&
     {
     {
     return;
     return;
     }
     }
-  const char* linkLanguage = this->Target->GetLinkerLanguage();
+  const char* linkLanguage =
+    this->Target->GetLinkerLanguage(config.c_str());
   if(!linkLanguage)
   if(!linkLanguage)
     {
     {
     cmSystemTools::Error
     cmSystemTools::Error