cmGeneratorTarget: Move compile features processing from cmTarget.

This commit is contained in:
Stephen Kelly 2015-08-04 23:48:58 +02:00
parent db4cb92bda
commit d051086cce
5 changed files with 94 additions and 81 deletions

View File

@ -262,7 +262,8 @@ cmGeneratorTarget::cmGeneratorTarget(cmTarget* t, cmLocalGenerator* lg)
SourceFileFlagsConstructed(false), SourceFileFlagsConstructed(false),
PolicyWarnedCMP0022(false), PolicyWarnedCMP0022(false),
DebugIncludesDone(false), DebugIncludesDone(false),
DebugCompileOptionsDone(false) DebugCompileOptionsDone(false),
DebugCompileFeaturesDone(false)
{ {
this->Makefile = this->Target->GetMakefile(); this->Makefile = this->Target->GetMakefile();
this->LocalGenerator = lg; this->LocalGenerator = lg;
@ -277,12 +278,18 @@ cmGeneratorTarget::cmGeneratorTarget(cmTarget* t, cmLocalGenerator* lg)
t->GetCompileOptionsEntries(), t->GetCompileOptionsEntries(),
t->GetCompileOptionsBacktraces(), t->GetCompileOptionsBacktraces(),
this->CompileOptionsEntries); this->CompileOptionsEntries);
CreatePropertyGeneratorExpressions(
t->GetCompileFeaturesEntries(),
t->GetCompileFeaturesBacktraces(),
this->CompileFeaturesEntries);
} }
cmGeneratorTarget::~cmGeneratorTarget() cmGeneratorTarget::~cmGeneratorTarget()
{ {
cmDeleteAll(this->IncludeDirectoriesEntries); cmDeleteAll(this->IncludeDirectoriesEntries);
cmDeleteAll(this->CompileOptionsEntries); cmDeleteAll(this->CompileOptionsEntries);
cmDeleteAll(this->CompileFeaturesEntries);
cmDeleteAll(this->LinkInformation); cmDeleteAll(this->LinkInformation);
this->LinkInformation.clear(); this->LinkInformation.clear();
} }
@ -2370,6 +2377,73 @@ void cmGeneratorTarget::GetCompileOptions(std::vector<std::string> &result,
cmDeleteAll(linkInterfaceCompileOptionsEntries); cmDeleteAll(linkInterfaceCompileOptionsEntries);
} }
//----------------------------------------------------------------------------
static void processCompileFeatures(cmGeneratorTarget const* tgt,
const std::vector<cmGeneratorTarget::TargetPropertyEntry*> &entries,
std::vector<std::string> &options,
UNORDERED_SET<std::string> &uniqueOptions,
cmGeneratorExpressionDAGChecker *dagChecker,
const std::string& config, bool debugOptions)
{
processCompileOptionsInternal(tgt, entries, options, uniqueOptions,
dagChecker, config, debugOptions, "features",
std::string());
}
//----------------------------------------------------------------------------
void cmGeneratorTarget::GetCompileFeatures(std::vector<std::string> &result,
const std::string& config) const
{
UNORDERED_SET<std::string> uniqueFeatures;
cmGeneratorExpressionDAGChecker dagChecker(this->GetName(),
"COMPILE_FEATURES",
0, 0);
std::vector<std::string> debugProperties;
const char *debugProp =
this->Makefile->GetDefinition("CMAKE_DEBUG_TARGET_PROPERTIES");
if (debugProp)
{
cmSystemTools::ExpandListArgument(debugProp, debugProperties);
}
bool debugFeatures = !this->DebugCompileFeaturesDone
&& std::find(debugProperties.begin(),
debugProperties.end(),
"COMPILE_FEATURES")
!= debugProperties.end();
if (this->Makefile->IsConfigured())
{
this->DebugCompileFeaturesDone = true;
}
processCompileFeatures(this,
this->CompileFeaturesEntries,
result,
uniqueFeatures,
&dagChecker,
config,
debugFeatures);
std::vector<cmGeneratorTarget::TargetPropertyEntry*>
linkInterfaceCompileFeaturesEntries;
AddInterfaceEntries(
this, config, "INTERFACE_COMPILE_FEATURES",
linkInterfaceCompileFeaturesEntries);
processCompileFeatures(this,
linkInterfaceCompileFeaturesEntries,
result,
uniqueFeatures,
&dagChecker,
config,
debugFeatures);
cmDeleteAll(linkInterfaceCompileFeaturesEntries);
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGeneratorTarget::GenerateTargetManifest( void cmGeneratorTarget::GenerateTargetManifest(
const std::string& config) const const std::string& config) const

View File

@ -221,6 +221,9 @@ public:
const std::string& config, const std::string& config,
const std::string& language) const; const std::string& language) const;
void GetCompileFeatures(std::vector<std::string> &features,
const std::string& config) const;
bool IsSystemIncludeDirectory(const std::string& dir, bool IsSystemIncludeDirectory(const std::string& dir,
const std::string& config) const; const std::string& config) const;
@ -412,6 +415,7 @@ private:
std::vector<TargetPropertyEntry*> IncludeDirectoriesEntries; std::vector<TargetPropertyEntry*> IncludeDirectoriesEntries;
std::vector<TargetPropertyEntry*> CompileOptionsEntries; std::vector<TargetPropertyEntry*> CompileOptionsEntries;
std::vector<TargetPropertyEntry*> CompileFeaturesEntries;
void ExpandLinkItems(std::string const& prop, std::string const& value, void ExpandLinkItems(std::string const& prop, std::string const& value,
std::string const& config, cmTarget const* headTarget, std::string const& config, cmTarget const* headTarget,
@ -427,6 +431,7 @@ private:
mutable bool PolicyWarnedCMP0022; mutable bool PolicyWarnedCMP0022;
mutable bool DebugIncludesDone; mutable bool DebugIncludesDone;
mutable bool DebugCompileOptionsDone; mutable bool DebugCompileOptionsDone;
mutable bool DebugCompileFeaturesDone;
public: public:
std::vector<cmTarget const*> const& std::vector<cmTarget const*> const&

View File

@ -1138,7 +1138,7 @@ void cmLocalGenerator::AddCompileOptions(
} }
} }
std::vector<std::string> features; std::vector<std::string> features;
target->GetCompileFeatures(features, config); gtgt->GetCompileFeatures(features, config);
for(std::vector<std::string>::const_iterator it = features.begin(); for(std::vector<std::string>::const_iterator it = features.begin();
it != features.end(); ++it) it != features.end(); ++it)
{ {

View File

@ -143,7 +143,6 @@ public:
std::vector<cmListFileBacktrace> CompileOptionsBacktraces; std::vector<cmListFileBacktrace> CompileOptionsBacktraces;
std::vector<std::string> CompileFeaturesEntries; std::vector<std::string> CompileFeaturesEntries;
std::vector<cmListFileBacktrace> CompileFeaturesBacktraces; std::vector<cmListFileBacktrace> CompileFeaturesBacktraces;
std::vector<TargetPropertyEntry*> CompileFeaturesItems;
std::vector<std::string> CompileDefinitionsEntries; std::vector<std::string> CompileDefinitionsEntries;
std::vector<cmListFileBacktrace> CompileDefinitionsBacktraces; std::vector<cmListFileBacktrace> CompileDefinitionsBacktraces;
std::vector<TargetPropertyEntry*> CompileDefinitionsItems; std::vector<TargetPropertyEntry*> CompileDefinitionsItems;
@ -175,7 +174,6 @@ cmTarget::cmTarget()
this->IsApple = false; this->IsApple = false;
this->IsImportedTarget = false; this->IsImportedTarget = false;
this->BuildInterfaceIncludesAppended = false; this->BuildInterfaceIncludesAppended = false;
this->DebugCompileFeaturesDone = false;
this->DebugCompileDefinitionsDone = false; this->DebugCompileDefinitionsDone = false;
this->DebugSourcesDone = false; this->DebugSourcesDone = false;
this->LinkImplementationLanguageIsContextDependent = true; this->LinkImplementationLanguageIsContextDependent = true;
@ -421,11 +419,6 @@ void CreatePropertyGeneratorExpressions(
void cmTarget::Compute() void cmTarget::Compute()
{ {
CreatePropertyGeneratorExpressions(
this->Internal->CompileFeaturesEntries,
this->Internal->CompileFeaturesBacktraces,
this->Internal->CompileFeaturesItems);
CreatePropertyGeneratorExpressions( CreatePropertyGeneratorExpressions(
this->Internal->CompileDefinitionsEntries, this->Internal->CompileDefinitionsEntries,
this->Internal->CompileDefinitionsBacktraces, this->Internal->CompileDefinitionsBacktraces,
@ -1325,6 +1318,16 @@ cmBacktraceRange cmTarget::GetCompileOptionsBacktraces() const
return cmMakeRange(this->Internal->CompileOptionsBacktraces); return cmMakeRange(this->Internal->CompileOptionsBacktraces);
} }
cmStringRange cmTarget::GetCompileFeaturesEntries() const
{
return cmMakeRange(this->Internal->CompileFeaturesEntries);
}
cmBacktraceRange cmTarget::GetCompileFeaturesBacktraces() const
{
return cmMakeRange(this->Internal->CompileFeaturesBacktraces);
}
#if defined(_WIN32) && !defined(__CYGWIN__) #if defined(_WIN32) && !defined(__CYGWIN__)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void void
@ -2071,73 +2074,6 @@ void cmTarget::GetCompileDefinitions(std::vector<std::string> &list,
cmDeleteAll(linkInterfaceCompileDefinitionsEntries); cmDeleteAll(linkInterfaceCompileDefinitionsEntries);
} }
//----------------------------------------------------------------------------
static void processCompileFeatures(cmTarget const* tgt,
const std::vector<cmTargetInternals::TargetPropertyEntry*> &entries,
std::vector<std::string> &options,
UNORDERED_SET<std::string> &uniqueOptions,
cmGeneratorExpressionDAGChecker *dagChecker,
const std::string& config, bool debugOptions)
{
processCompileOptionsInternal(tgt, entries, options, uniqueOptions,
dagChecker, config, debugOptions, "features",
std::string());
}
//----------------------------------------------------------------------------
void cmTarget::GetCompileFeatures(std::vector<std::string> &result,
const std::string& config) const
{
UNORDERED_SET<std::string> uniqueFeatures;
cmGeneratorExpressionDAGChecker dagChecker(this->GetName(),
"COMPILE_FEATURES",
0, 0);
std::vector<std::string> debugProperties;
const char *debugProp =
this->Makefile->GetDefinition("CMAKE_DEBUG_TARGET_PROPERTIES");
if (debugProp)
{
cmSystemTools::ExpandListArgument(debugProp, debugProperties);
}
bool debugFeatures = !this->DebugCompileFeaturesDone
&& std::find(debugProperties.begin(),
debugProperties.end(),
"COMPILE_FEATURES")
!= debugProperties.end();
if (this->Makefile->IsConfigured())
{
this->DebugCompileFeaturesDone = true;
}
processCompileFeatures(this,
this->Internal->CompileFeaturesItems,
result,
uniqueFeatures,
&dagChecker,
config,
debugFeatures);
std::vector<cmTargetInternals::TargetPropertyEntry*>
linkInterfaceCompileFeaturesEntries;
this->Internal->AddInterfaceEntries(
this, config, "INTERFACE_COMPILE_FEATURES",
linkInterfaceCompileFeaturesEntries);
processCompileFeatures(this,
linkInterfaceCompileFeaturesEntries,
result,
uniqueFeatures,
&dagChecker,
config,
debugFeatures);
cmDeleteAll(linkInterfaceCompileFeaturesEntries);
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmTarget::MaybeInvalidatePropertyCache(const std::string& prop) void cmTarget::MaybeInvalidatePropertyCache(const std::string& prop)
{ {
@ -4098,7 +4034,6 @@ cmTargetInternalPointer
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmTargetInternalPointer::~cmTargetInternalPointer() cmTargetInternalPointer::~cmTargetInternalPointer()
{ {
cmDeleteAll(this->Pointer->CompileFeaturesItems);
cmDeleteAll(this->Pointer->CompileDefinitionsItems); cmDeleteAll(this->Pointer->CompileDefinitionsItems);
cmDeleteAll(this->Pointer->SourceEntries); cmDeleteAll(this->Pointer->SourceEntries);
delete this->Pointer; delete this->Pointer;

View File

@ -375,9 +375,6 @@ public:
void AppendBuildInterfaceIncludes(); void AppendBuildInterfaceIncludes();
void GetCompileFeatures(std::vector<std::string> &features,
const std::string& config) const;
bool IsNullImpliedByLinkLibraries(const std::string &p) const; bool IsNullImpliedByLinkLibraries(const std::string &p) const;
std::string GetDebugGeneratorExpressions(const std::string &value, std::string GetDebugGeneratorExpressions(const std::string &value,
@ -402,6 +399,9 @@ public:
cmStringRange GetCompileOptionsEntries() const; cmStringRange GetCompileOptionsEntries() const;
cmBacktraceRange GetCompileOptionsBacktraces() const; cmBacktraceRange GetCompileOptionsBacktraces() const;
cmStringRange GetCompileFeaturesEntries() const;
cmBacktraceRange GetCompileFeaturesBacktraces() const;
#if defined(_WIN32) && !defined(__CYGWIN__) #if defined(_WIN32) && !defined(__CYGWIN__)
const LinkLibraryVectorType &GetLinkLibrariesForVS6() const { const LinkLibraryVectorType &GetLinkLibrariesForVS6() const {
return this->LinkLibrariesForVS6;} return this->LinkLibrariesForVS6;}
@ -518,7 +518,6 @@ private:
bool BuildInterfaceIncludesAppended; bool BuildInterfaceIncludesAppended;
mutable bool DebugCompileDefinitionsDone; mutable bool DebugCompileDefinitionsDone;
mutable bool DebugSourcesDone; mutable bool DebugSourcesDone;
mutable bool DebugCompileFeaturesDone;
mutable bool LinkImplementationLanguageIsContextDependent; mutable bool LinkImplementationLanguageIsContextDependent;
#if defined(_WIN32) && !defined(__CYGWIN__) #if defined(_WIN32) && !defined(__CYGWIN__)
bool LinkLibrariesForVS6Analyzed; bool LinkLibrariesForVS6Analyzed;