diff options
author | Stephen Kelly <steveire@gmail.com> | 2013-02-07 12:04:46 (GMT) |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2013-02-07 15:21:09 (GMT) |
commit | d4e5c6787c40e27394c336730f59d878a81d1991 (patch) | |
tree | c262428c71c0c4fd31f24f71f2347031358db0d6 | |
parent | 1fb545ad3a8f6d263c9f01300bce978e81b6fe8c (diff) | |
download | CMake-d4e5c6787c40e27394c336730f59d878a81d1991.zip CMake-d4e5c6787c40e27394c336730f59d878a81d1991.tar.gz CMake-d4e5c6787c40e27394c336730f59d878a81d1991.tar.bz2 |
Don't keep track of content determined by target property values.
This tracking was added during the development of commit 042ecf04
(Add API to calculate link-interface-dependent bool properties
or error., 2013-01-06), but was never used.
It was not necessary to use the content because what is really
useful in that logic is to determine if a property has been implied
to be null by appearing in a LINK_LIBRARIES genex.
I think the motivating usecase for developing the feature of
keeping track of the targets relevant to a property was that I
thought it would make it possible to allow requiring granular
compatibility of interface properties only for targets which
depended on the interface property. Eg:
add_library(foo ...)
add_library(bar ...)
add_executable(user ...)
# Read the INTERFACE_POSITION_INDEPENDENT_CODE from bar, but not
# from foo:
target_link_libraries(user foo $<$<TARGET_PROPERTY:POSTITION_INDEPENDENT_CODE>:bar>)
This obviously doesn't make sense. We require that INTERFACE
properties are consistent across all linked targets instead.
-rw-r--r-- | Source/cmGeneratorExpression.cxx | 5 | ||||
-rw-r--r-- | Source/cmGeneratorExpression.h | 4 | ||||
-rw-r--r-- | Source/cmGeneratorExpressionEvaluator.cxx | 3 | ||||
-rw-r--r-- | Source/cmTarget.cxx | 43 | ||||
-rw-r--r-- | Source/cmTarget.h | 7 |
5 files changed, 15 insertions, 47 deletions
diff --git a/Source/cmGeneratorExpression.cxx b/Source/cmGeneratorExpression.cxx index 60bf179..5d162fe 100644 --- a/Source/cmGeneratorExpression.cxx +++ b/Source/cmGeneratorExpression.cxx @@ -95,14 +95,13 @@ const char *cmCompiledGeneratorExpression::Evaluate( for ( ; it != end; ++it) { - const std::string result = (*it)->Evaluate(&context, dagChecker); - this->Output += result; + this->Output += (*it)->Evaluate(&context, dagChecker); for(std::set<cmStdString>::const_iterator p = context.SeenTargetProperties.begin(); p != context.SeenTargetProperties.end(); ++p) { - this->SeenTargetProperties[*p] += result + ";"; + this->SeenTargetProperties.insert(*p); } if (context.HadError) { diff --git a/Source/cmGeneratorExpression.h b/Source/cmGeneratorExpression.h index 4eab2dd..489b052 100644 --- a/Source/cmGeneratorExpression.h +++ b/Source/cmGeneratorExpression.h @@ -90,7 +90,7 @@ public: std::set<cmTarget*> const& GetTargets() const { return this->Targets; } - std::map<cmStdString, cmStdString> const& GetSeenTargetProperties() const + std::set<cmStdString> const& GetSeenTargetProperties() const { return this->SeenTargetProperties; } ~cmCompiledGeneratorExpression(); @@ -124,7 +124,7 @@ private: bool NeedsParsing; mutable std::set<cmTarget*> Targets; - mutable std::map<cmStdString, cmStdString> SeenTargetProperties; + mutable std::set<cmStdString> SeenTargetProperties; mutable std::string Output; mutable bool HadContextSensitiveCondition; }; diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx index f601ea3..d2dbf11 100644 --- a/Source/cmGeneratorExpressionEvaluator.cxx +++ b/Source/cmGeneratorExpressionEvaluator.cxx @@ -398,7 +398,8 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode { // Keep track of the properties seen while processing. // The evaluation of the LINK_LIBRARIES generator expressions - // will check this to ensure that properties form a DAG. + // will check this to ensure that properties have one consistent + // value for all evaluations. context->SeenTargetProperties.insert(propertyName); } diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 6f197b8..f55999f 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -2233,7 +2233,15 @@ void cmTarget::GetDirectLinkLibraries(const char *config, &dagChecker), libs); - this->AddLinkDependentTargetsForProperties(cge->GetSeenTargetProperties()); + std::set<cmStdString> seenProps = cge->GetSeenTargetProperties(); + for (std::set<cmStdString>::const_iterator it = seenProps.begin(); + it != seenProps.end(); ++it) + { + if (!this->GetProperty(it->c_str())) + { + this->LinkImplicitNullProperties.insert(*it); + } + } } } @@ -4520,18 +4528,6 @@ const char* cmTarget::GetExportMacro() } //---------------------------------------------------------------------------- -void cmTarget::GetLinkDependentTargetsForProperty(const std::string &p, - std::set<std::string> &targets) -{ - const std::map<cmStdString, std::set<std::string> >::const_iterator findIt - = this->LinkDependentProperties.find(p); - if (findIt != this->LinkDependentProperties.end()) - { - targets = findIt->second; - } -} - -//---------------------------------------------------------------------------- bool cmTarget::IsNullImpliedByLinkLibraries(const std::string &p) { return this->LinkImplicitNullProperties.find(p) @@ -4539,24 +4535,6 @@ bool cmTarget::IsNullImpliedByLinkLibraries(const std::string &p) } //---------------------------------------------------------------------------- -void cmTarget::AddLinkDependentTargetsForProperties( - const std::map<cmStdString, cmStdString> &map) -{ - for (std::map<cmStdString, cmStdString>::const_iterator it = map.begin(); - it != map.end(); ++it) - { - std::vector<std::string> targets; - cmSystemTools::ExpandListArgument(it->second.c_str(), targets); - this->LinkDependentProperties[it->first].insert(targets.begin(), - targets.end()); - if (!this->GetProperty(it->first.c_str())) - { - this->LinkImplicitNullProperties.insert(it->first); - } - } -} - -//---------------------------------------------------------------------------- template<typename PropertyType> PropertyType getTypedProperty(cmTarget *tgt, const char *prop, PropertyType *); @@ -4611,9 +4589,6 @@ PropertyType checkInterfacePropertyCompatibility(cmTarget *tgt, const bool explicitlySet = tgt->GetProperties() .find(p.c_str()) != tgt->GetProperties().end(); - std::set<std::string> dependentTargets; - tgt->GetLinkDependentTargetsForProperty(p, - dependentTargets); const bool impliedByUse = tgt->IsNullImpliedByLinkLibraries(p); assert((impliedByUse ^ explicitlySet) diff --git a/Source/cmTarget.h b/Source/cmTarget.h index 7577a59..fb1496f 100644 --- a/Source/cmTarget.h +++ b/Source/cmTarget.h @@ -498,17 +498,12 @@ public: void AppendBuildInterfaceIncludes(); - void GetLinkDependentTargetsForProperty(const std::string &p, - std::set<std::string> &targets); bool IsNullImpliedByLinkLibraries(const std::string &p); bool IsLinkInterfaceDependentBoolProperty(const std::string &p, const char *config); bool IsLinkInterfaceDependentStringProperty(const std::string &p, const char *config); - void AddLinkDependentTargetsForProperties( - const std::map<cmStdString, cmStdString> &map); - bool GetLinkInterfaceDependentBoolProperty(const std::string &p, const char *config); @@ -627,8 +622,6 @@ private: bool IsApple; bool IsImportedTarget; bool DebugIncludesDone; - mutable std::map<cmStdString, std::set<std::string> > - LinkDependentProperties; mutable std::set<std::string> LinkImplicitNullProperties; bool BuildInterfaceIncludesAppended; |