Browse Source

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.
Stephen Kelly 12 years ago
parent
commit
d4e5c6787c

+ 2 - 3
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)
       {

+ 2 - 2
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;
 };

+ 2 - 1
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);
       }
 

+ 9 - 34
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);
+        }
+      }
     }
 }
 
@@ -4519,18 +4527,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)
 {
@@ -4538,24 +4534,6 @@ bool cmTarget::IsNullImpliedByLinkLibraries(const std::string &p)
       != this->LinkImplicitNullProperties.end();
 }
 
-//----------------------------------------------------------------------------
-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,
@@ -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)

+ 0 - 7
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;