From 91411641a7b8029d05899b11590fb4e676716a85 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Tue, 20 Oct 2015 00:57:35 +0200 Subject: [PATCH] Move ComputeLinkType out of cmTarget. Keep it out of the way, so that it does not become part of cmGeneratorTarget, but where it can be used to implement CMP0003. --- Source/cmComputeLinkDepends.cxx | 4 +++- Source/cmGeneratorTarget.cxx | 7 ++++++- Source/cmLinkItem.h | 24 ++++++++++++++++++++++++ Source/cmTarget.cxx | 25 ------------------------- Source/cmTarget.h | 3 --- 5 files changed, 33 insertions(+), 30 deletions(-) diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx index 465db92b7..13098ad5b 100644 --- a/Source/cmComputeLinkDepends.cxx +++ b/Source/cmComputeLinkDepends.cxx @@ -185,7 +185,9 @@ cmComputeLinkDepends // The configuration being linked. this->HasConfig = !config.empty(); this->Config = (this->HasConfig)? config : std::string(); - this->LinkType = this->Target->Target->ComputeLinkType(this->Config); + std::vector debugConfigs = + this->Makefile->GetCMakeInstance()->GetDebugConfigs(); + this->LinkType = CMP0003_ComputeLinkType(this->Config, debugConfigs); // Enable debug mode if requested. this->DebugMode = this->Makefile->IsOn("CMAKE_LINK_DEPENDS_DEBUG_MODE"); diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index 6e312ced8..2a35259d4 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -5877,7 +5877,12 @@ void cmGeneratorTarget::ComputeLinkImplementationLibraries( this->MaxLanguageStandards); } - cmTargetLinkLibraryType linkType = this->Target->ComputeLinkType(config); + // Get the list of configurations considered to be DEBUG. + std::vector debugConfigs = + this->Makefile->GetCMakeInstance()->GetDebugConfigs(); + + cmTargetLinkLibraryType linkType = + CMP0003_ComputeLinkType(config, debugConfigs); cmTarget::LinkLibraryVectorType const& oldllibs = this->Target->GetOriginalLinkLibraries(); for(cmTarget::LinkLibraryVectorType::const_iterator li = oldllibs.begin(); diff --git a/Source/cmLinkItem.h b/Source/cmLinkItem.h index b875cc03d..b603bcc2a 100644 --- a/Source/cmLinkItem.h +++ b/Source/cmLinkItem.h @@ -14,6 +14,7 @@ #define cmLinkItem_h #include "cmListFileCache.h" +#include "cmSystemTools.h" class cmGeneratorTarget; @@ -118,4 +119,27 @@ struct cmOptionalLinkImplementation: public cmLinkImplementation bool HadHeadSensitiveCondition; }; +/** Compute the link type to use for the given configuration. */ +inline cmTargetLinkLibraryType +CMP0003_ComputeLinkType(const std::string& config, + std::vector const& debugConfigs) +{ + // No configuration is always optimized. + if(config.empty()) + { + return OPTIMIZED_LibraryType; + } + + // Check if any entry in the list matches this configuration. + std::string configUpper = cmSystemTools::UpperCase(config); + if (std::find(debugConfigs.begin(), debugConfigs.end(), configUpper) != + debugConfigs.end()) + { + return DEBUG_LibraryType; + } + // The current configuration is not a debug configuration. + return OPTIMIZED_LibraryType; +} + + #endif diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 63d3d072d..0d8c57d22 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -582,31 +582,6 @@ const std::vector& cmTarget::GetLinkDirectories() const return this->LinkDirectories; } -//---------------------------------------------------------------------------- -cmTargetLinkLibraryType cmTarget::ComputeLinkType( - const std::string& config) const -{ - // No configuration is always optimized. - if(config.empty()) - { - return OPTIMIZED_LibraryType; - } - - // Get the list of configurations considered to be DEBUG. - std::vector debugConfigs = - this->Makefile->GetCMakeInstance()->GetDebugConfigs(); - - // Check if any entry in the list matches this configuration. - std::string configUpper = cmSystemTools::UpperCase(config); - if (std::find(debugConfigs.begin(), debugConfigs.end(), configUpper) != - debugConfigs.end()) - { - return DEBUG_LibraryType; - } - // The current configuration is not a debug configuration. - return OPTIMIZED_LibraryType; -} - //---------------------------------------------------------------------------- void cmTarget::ClearDependencyInformation( cmMakefile& mf, const std::string& target ) diff --git a/Source/cmTarget.h b/Source/cmTarget.h index 33631e79f..9ed7f841e 100644 --- a/Source/cmTarget.h +++ b/Source/cmTarget.h @@ -140,9 +140,6 @@ public: const LinkLibraryVectorType &GetOriginalLinkLibraries() const {return this->OriginalLinkLibraries;} - /** Compute the link type to use for the given configuration. */ - cmTargetLinkLibraryType ComputeLinkType(const std::string& config) const; - /** * Clear the dependency information recorded for this target, if any. */