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.
This commit is contained in:
Stephen Kelly 2015-10-20 00:57:35 +02:00
parent 6d94078e62
commit 91411641a7
5 changed files with 33 additions and 30 deletions

View File

@ -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<std::string> 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");

View File

@ -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<std::string> 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();

View File

@ -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<std::string> 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

View File

@ -582,31 +582,6 @@ const std::vector<std::string>& 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<std::string> 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 )

View File

@ -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.
*/