[Cmake-commits] CMake branch, next, updated. v3.0.0-4084-gdb98e04

Brad King brad.king at kitware.com
Wed Jul 2 10:08:54 EDT 2014


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  db98e04debb3b13fbacc3359edfb0b8047079513 (commit)
       via  3c8f6b1d0c29a8fdb35d8a72ae91f7820254fedb (commit)
       via  e77a094d103eb2bbb24e55e4356fb4c8b44483a8 (commit)
       via  ba76e7ef85d2ef4be25fb60f9409deb273de4dd1 (commit)
       via  fd021b9f9d3a6881438e01d8ffc9d6f39339f8ad (commit)
       via  361f99b53d92f6c31205818fb0cf18ac35a678c1 (commit)
       via  36c4c139b8364817f02bb95f18c1f1d0ba53371d (commit)
       via  586ff5f3aab418ee13b6c978ea2e5e9c6b7c2060 (commit)
       via  3843c41f9919a5a2e510e93cb5b404201f211aa9 (commit)
       via  81f1bfe261a02e63d6b5d54767b61a7b8bbccb99 (commit)
       via  2cf120cf89deb4c7e92d060f4796299cbe825adc (commit)
       via  0e9f7a1e576ceb9e5c7f4933ec0cdd9c27dec529 (commit)
       via  3cb21f27cab42789744ee383664fb11dcb8ac800 (commit)
      from  f3ebed934d8996b719e61555f375f07c96d889db (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=db98e04debb3b13fbacc3359edfb0b8047079513
commit db98e04debb3b13fbacc3359edfb0b8047079513
Merge: f3ebed9 3c8f6b1
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Jul 2 10:08:53 2014 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Jul 2 10:08:53 2014 -0400

    Merge topic 'refactor-usage-requirement-evaluation' into next
    
    3c8f6b1d cmTarget: Simplify INTERFACE_INCLUDE_DIRECTORIES usage requirement lookup
    e77a094d cmTarget: Simplify CMP0027 logic in processIncludeDirectories
    ba76e7ef cmTarget: Add to LinkImplementation whether each library was a genex
    fd021b9f cmTarget: Simplify INTERFACE_COMPILE_FEATURES usage requirement lookup
    361f99b5 cmTarget: Simplify INTERFACE_COMPILE_DEFINITIONS usage requirement lookup
    36c4c139 cmTarget: Simplify INTERFACE_COMPILE_OPTIONS usage requirement lookup
    586ff5f3 cmTarget: Simplify INTERFACE_SOURCES usage requirement lookup
    3843c41f cmTarget: Add method to add usage requirements from linked interfaces
    81f1bfe2 cmTarget: Add to LinkImplementation a backtrace for each library
    2cf120cf cmTarget: Refactor LinkImplementation to allow more information
    0e9f7a1e cmGeneratorExpressionEvaluator: Shorten some long lines
    3cb21f27 cmComputeLinkDepends: Convert AddLinkEntries to a template


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3c8f6b1d0c29a8fdb35d8a72ae91f7820254fedb
commit 3c8f6b1d0c29a8fdb35d8a72ae91f7820254fedb
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jun 30 13:23:49 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:36 2014 -0400

    cmTarget: Simplify INTERFACE_INCLUDE_DIRECTORIES usage requirement lookup
    
    Use the AddInterfaceEntries helper to avoid duplication.  In
    TargetPropertyEntry, replace the TargetName string member with a
    reference to the full cmLinkImplItem that produced the entry.  This is
    possible because the cmLinkImplItem is available in AddInterfaceEntries
    (it was not available in GetIncludeDirectories).  Having the full
    cmLinkImplItem allows processIncludeDirectories to implement CMP0027 OLD
    behavior without repeating the target name lookup.
    
    Update the RunCMake.CompatibleInterface test DebugProperties case
    expected output for the new order of the messages.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 7cb3268..94da3c2 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -165,14 +165,16 @@ public:
   std::set<cmLinkItem> UtilityItems;
   bool UtilityItemsDone;
 
-  struct TargetPropertyEntry {
+  class TargetPropertyEntry {
+    static cmLinkImplItem NoLinkImplItem;
+  public:
     TargetPropertyEntry(cmsys::auto_ptr<cmCompiledGeneratorExpression> cge,
-      const std::string &targetName = std::string())
-      : ge(cge), TargetName(targetName)
+                        cmLinkImplItem const& item = NoLinkImplItem)
+      : ge(cge), LinkImplItem(item)
     {}
     const cmsys::auto_ptr<cmCompiledGeneratorExpression> ge;
     std::vector<std::string> CachedEntries;
-    const std::string TargetName;
+    cmLinkImplItem const& LinkImplItem;
   };
   std::vector<TargetPropertyEntry*> IncludeDirectoriesEntries;
   std::vector<TargetPropertyEntry*> CompileOptionsEntries;
@@ -206,6 +208,8 @@ public:
   std::map<std::string, bool> CacheLinkImplementationClosureDone;
 };
 
+cmLinkImplItem cmTargetInternals::TargetPropertyEntry::NoLinkImplItem;
+
 //----------------------------------------------------------------------------
 void deleteAndClear(
       std::vector<cmTargetInternals::TargetPropertyEntry*> &entries)
@@ -2012,24 +2016,10 @@ static void processIncludeDirectories(cmTarget const* tgt,
   for (std::vector<cmTargetInternals::TargetPropertyEntry*>::const_iterator
       it = entries.begin(), end = entries.end(); it != end; ++it)
     {
-    std::string targetName = (*it)->TargetName;
-    bool checkCMP0027 = false;
-    if(!cmGeneratorExpression::IsValidTargetName(targetName)
-       && cmGeneratorExpression::Find(targetName) != std::string::npos)
-      {
-      std::string evaluatedTargetName;
-      cmGeneratorExpression ge;
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
-        ge.Parse(targetName);
-      evaluatedTargetName = cge->Evaluate(mf, config, false, tgt, 0, 0);
-      checkCMP0027 = evaluatedTargetName != targetName;
-      targetName = evaluatedTargetName;
-      }
-    cmTarget *dependentTarget = mf->FindTargetToUse(targetName);
-
-    const bool fromImported =
-      dependentTarget && dependentTarget->IsImported();
-
+    cmLinkImplItem const& item = (*it)->LinkImplItem;
+    std::string const& targetName = item;
+    bool const fromImported = item.Target && item.Target->IsImported();
+    bool const checkCMP0027 = item.FromGenex;
     bool testIsOff = true;
     bool cacheIncludes = false;
     std::vector<std::string>& entryIncludes = (*it)->CachedEntries;
@@ -2200,45 +2190,9 @@ cmTarget::GetIncludeDirectories(const std::string& config) const
 
   if (!this->Internal->CacheLinkInterfaceIncludeDirectoriesDone[config])
     {
-    for (std::vector<cmValueWithOrigin>::const_iterator
-        it = this->Internal->LinkImplementationPropertyEntries.begin(),
-        end = this->Internal->LinkImplementationPropertyEntries.end();
-        it != end; ++it)
-      {
-      if (!cmGeneratorExpression::IsValidTargetName(it->Value)
-          && cmGeneratorExpression::Find(it->Value) == std::string::npos)
-        {
-        continue;
-        }
-      {
-      cmGeneratorExpression ge;
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
-                                                        ge.Parse(it->Value);
-      std::string result = cge->Evaluate(this->Makefile, config,
-                                        false, this, 0, 0);
-      if (!this->Makefile->FindTargetToUse(result))
-        {
-        continue;
-        }
-      }
-      std::string includeGenex = "$<TARGET_PROPERTY:" +
-                              it->Value + ",INTERFACE_INCLUDE_DIRECTORIES>";
-      if (cmGeneratorExpression::Find(it->Value) != std::string::npos)
-        {
-        // Because it->Value is a generator expression, ensure that it
-        // evaluates to the non-empty string before being used in the
-        // TARGET_PROPERTY expression.
-        includeGenex = "$<$<BOOL:" + it->Value + ">:" + includeGenex + ">";
-        }
-      cmGeneratorExpression ge(&it->Backtrace);
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(
-                                                              includeGenex);
-
-      this->Internal
-        ->CachedLinkInterfaceIncludeDirectoriesEntries[config].push_back(
-                        new cmTargetInternals::TargetPropertyEntry(cge,
-                                                              it->Value));
-      }
+    this->Internal->AddInterfaceEntries(
+      this, config, "INTERFACE_INCLUDE_DIRECTORIES",
+      this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries[config]);
 
     if(this->Makefile->IsOn("APPLE"))
       {
diff --git a/Tests/RunCMake/CompatibleInterface/DebugProperties-stderr.txt b/Tests/RunCMake/CompatibleInterface/DebugProperties-stderr.txt
index 82a34d5..17b8a5c 100644
--- a/Tests/RunCMake/CompatibleInterface/DebugProperties-stderr.txt
+++ b/Tests/RunCMake/CompatibleInterface/DebugProperties-stderr.txt
@@ -1,11 +1,4 @@
 CMake Debug Log:
-  Boolean compatibility of property "BOOL_PROP7" for target
-  "CompatibleInterface" \(result: "FALSE"\):
-
-   \* Target "CompatibleInterface" property is implied by use.
-   \* Target "iface1" property value "FALSE" \(Agree\)
-+
-CMake Debug Log:
   Boolean compatibility of property "BOOL_PROP1" for target
   "CompatibleInterface" \(result: "TRUE"\):
 
@@ -47,6 +40,13 @@ CMake Debug Log:
    \* Target "iface2" property value "FALSE" \(Agree\)
 +
 CMake Debug Log:
+  Boolean compatibility of property "BOOL_PROP7" for target
+  "CompatibleInterface" \(result: "FALSE"\):
+
+   \* Target "CompatibleInterface" property is implied by use.
+   \* Target "iface1" property value "FALSE" \(Agree\)
++
+CMake Debug Log:
   String compatibility of property "STRING_PROP1" for target
   "CompatibleInterface" \(result: "prop1"\):
 

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e77a094d103eb2bbb24e55e4356fb4c8b44483a8
commit e77a094d103eb2bbb24e55e4356fb4c8b44483a8
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jun 30 11:41:54 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:36 2014 -0400

    cmTarget: Simplify CMP0027 logic in processIncludeDirectories
    
    Evaluate and lookup the target name only once per TargetPropertyEntry
    instead of repeating it for each include directory entry.  Use a local
    checkCMP0027 variable to record whether the policy should be checked.
    Evaluate the target name as a generator expression only if it looks like
    one.  Lookup the target by name only after evaluation of generator
    expressions.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 8272af3..7cb3268 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -2012,6 +2012,24 @@ static void processIncludeDirectories(cmTarget const* tgt,
   for (std::vector<cmTargetInternals::TargetPropertyEntry*>::const_iterator
       it = entries.begin(), end = entries.end(); it != end; ++it)
     {
+    std::string targetName = (*it)->TargetName;
+    bool checkCMP0027 = false;
+    if(!cmGeneratorExpression::IsValidTargetName(targetName)
+       && cmGeneratorExpression::Find(targetName) != std::string::npos)
+      {
+      std::string evaluatedTargetName;
+      cmGeneratorExpression ge;
+      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
+        ge.Parse(targetName);
+      evaluatedTargetName = cge->Evaluate(mf, config, false, tgt, 0, 0);
+      checkCMP0027 = evaluatedTargetName != targetName;
+      targetName = evaluatedTargetName;
+      }
+    cmTarget *dependentTarget = mf->FindTargetToUse(targetName);
+
+    const bool fromImported =
+      dependentTarget && dependentTarget->IsImported();
+
     bool testIsOff = true;
     bool cacheIncludes = false;
     std::vector<std::string>& entryIncludes = (*it)->CachedEntries;
@@ -2037,36 +2055,12 @@ static void processIncludeDirectories(cmTarget const* tgt,
     for(std::vector<std::string>::iterator
           li = entryIncludes.begin(); li != entryIncludes.end(); ++li)
       {
-      std::string targetName = (*it)->TargetName;
-      std::string evaluatedTargetName;
-      {
-      cmGeneratorExpression ge;
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
-                                                        ge.Parse(targetName);
-      evaluatedTargetName = cge->Evaluate(mf, config, false, tgt, 0, 0);
-      }
-
-      cmTarget *dependentTarget = mf->FindTargetToUse(targetName);
-
-      const bool fromImported = dependentTarget
-                             && dependentTarget->IsImported();
-
-      cmTarget *evaluatedDependentTarget =
-        (targetName != evaluatedTargetName)
-          ? mf->FindTargetToUse(evaluatedTargetName)
-          : 0;
-
-      targetName = evaluatedTargetName;
-
-      const bool fromEvaluatedImported = evaluatedDependentTarget
-                             && evaluatedDependentTarget->IsImported();
-
-      if ((fromImported || fromEvaluatedImported)
+      if (fromImported
           && !cmSystemTools::FileExists(li->c_str()))
         {
         cmOStringStream e;
         cmake::MessageType messageType = cmake::FATAL_ERROR;
-        if (fromEvaluatedImported)
+        if (checkCMP0027)
           {
           switch(tgt->GetPolicyStatusCMP0027())
             {

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ba76e7ef85d2ef4be25fb60f9409deb273de4dd1
commit ba76e7ef85d2ef4be25fb60f9409deb273de4dd1
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jun 30 11:39:09 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:36 2014 -0400

    cmTarget: Add to LinkImplementation whether each library was a genex
    
    Implementation of CMP0027 OLD behavior needs to know whether each entry
    in LinkImplementation::Libraries came from a generator expression or
    not.  Add a FromGenex member to cmLinkImplItem to record this.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 175ceba..8272af3 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -6510,12 +6510,9 @@ void cmTarget::ComputeLinkImplementation(const std::string& config,
     cmGeneratorExpression ge(&le->Backtrace);
     cmsys::auto_ptr<cmCompiledGeneratorExpression> const cge =
       ge.Parse(le->Value);
-    cmSystemTools::ExpandListArgument(cge->Evaluate(this->Makefile,
-                                        config,
-                                        false,
-                                        head,
-                                        &dagChecker),
-                                      llibs);
+    std::string const evaluated =
+      cge->Evaluate(this->Makefile, config, false, head, &dagChecker);
+    cmSystemTools::ExpandListArgument(evaluated, llibs);
 
     for(std::vector<std::string>::const_iterator li = llibs.begin();
         li != llibs.end(); ++li)
@@ -6563,7 +6560,8 @@ void cmTarget::ComputeLinkImplementation(const std::string& config,
 
       // The entry is meant for this configuration.
       impl.Libraries.push_back(
-        cmLinkImplItem(name, this->FindTargetToLink(name), le->Backtrace));
+        cmLinkImplItem(name, this->FindTargetToLink(name),
+                       le->Backtrace, evaluated != le->Value));
       }
 
     std::set<std::string> const& seenProps = cge->GetSeenTargetProperties();
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 5f2a557..dc67f1e 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -57,14 +57,16 @@ public:
 class cmLinkImplItem: public cmLinkItem
 {
 public:
-  cmLinkImplItem(): cmLinkItem(), Backtrace(0) {}
+  cmLinkImplItem(): cmLinkItem(), Backtrace(0), FromGenex(false) {}
   cmLinkImplItem(std::string const& n,
                  cmTarget const* t,
-                 cmListFileBacktrace const& bt):
-    cmLinkItem(n, t), Backtrace(bt) {}
+                 cmListFileBacktrace const& bt,
+                 bool fromGenex):
+    cmLinkItem(n, t), Backtrace(bt), FromGenex(fromGenex) {}
   cmLinkImplItem(cmLinkImplItem const& r):
-    cmLinkItem(r), Backtrace(r.Backtrace) {}
+    cmLinkItem(r), Backtrace(r.Backtrace), FromGenex(r.FromGenex) {}
   cmListFileBacktrace Backtrace;
+  bool FromGenex;
 };
 
 struct cmTargetLinkInformationMap:

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fd021b9f9d3a6881438e01d8ffc9d6f39339f8ad
commit fd021b9f9d3a6881438e01d8ffc9d6f39339f8ad
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jun 19 13:39:25 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:35 2014 -0400

    cmTarget: Simplify INTERFACE_COMPILE_FEATURES usage requirement lookup
    
    Use the AddInterfaceEntries helper to avoid duplication.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 8ff83fb..175ceba 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -2615,45 +2615,9 @@ void cmTarget::GetCompileFeatures(std::vector<std::string> &result,
 
   if (!this->Internal->CacheLinkInterfaceCompileFeaturesDone[config])
     {
-    for (std::vector<cmValueWithOrigin>::const_iterator
-        it = this->Internal->LinkImplementationPropertyEntries.begin(),
-        end = this->Internal->LinkImplementationPropertyEntries.end();
-        it != end; ++it)
-      {
-      if (!cmGeneratorExpression::IsValidTargetName(it->Value)
-          && cmGeneratorExpression::Find(it->Value) == std::string::npos)
-        {
-        continue;
-        }
-      {
-      cmGeneratorExpression ge;
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
-                                                        ge.Parse(it->Value);
-      std::string targetResult = cge->Evaluate(this->Makefile, config,
-                                        false, this, 0, 0);
-      if (!this->Makefile->FindTargetToUse(targetResult))
-        {
-        continue;
-        }
-      }
-      std::string featureGenex = "$<TARGET_PROPERTY:" +
-                              it->Value + ",INTERFACE_COMPILE_FEATURES>";
-      if (cmGeneratorExpression::Find(it->Value) != std::string::npos)
-        {
-        // Because it->Value is a generator expression, ensure that it
-        // evaluates to the non-empty string before being used in the
-        // TARGET_PROPERTY expression.
-        featureGenex = "$<$<BOOL:" + it->Value + ">:" + featureGenex + ">";
-        }
-      cmGeneratorExpression ge(&it->Backtrace);
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(
-                                                                featureGenex);
-
-      this->Internal
-        ->CachedLinkInterfaceCompileFeaturesEntries[config].push_back(
-                        new cmTargetInternals::TargetPropertyEntry(cge,
-                                                              it->Value));
-      }
+    this->Internal->AddInterfaceEntries(
+      this, config, "INTERFACE_COMPILE_FEATURES",
+      this->Internal->CachedLinkInterfaceCompileFeaturesEntries[config]);
     }
 
   processCompileFeatures(this,

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=361f99b53d92f6c31205818fb0cf18ac35a678c1
commit 361f99b53d92f6c31205818fb0cf18ac35a678c1
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jun 19 13:38:51 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:35 2014 -0400

    cmTarget: Simplify INTERFACE_COMPILE_DEFINITIONS usage requirement lookup
    
    Use the AddInterfaceEntries helper to avoid duplication.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index b4b1d95..8ff83fb 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -2504,45 +2504,9 @@ void cmTarget::GetCompileDefinitions(std::vector<std::string> &list,
 
   if (!this->Internal->CacheLinkInterfaceCompileDefinitionsDone[config])
     {
-    for (std::vector<cmValueWithOrigin>::const_iterator
-        it = this->Internal->LinkImplementationPropertyEntries.begin(),
-        end = this->Internal->LinkImplementationPropertyEntries.end();
-        it != end; ++it)
-      {
-      if (!cmGeneratorExpression::IsValidTargetName(it->Value)
-          && cmGeneratorExpression::Find(it->Value) == std::string::npos)
-        {
-        continue;
-        }
-      {
-      cmGeneratorExpression ge;
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
-                                                        ge.Parse(it->Value);
-      std::string targetResult = cge->Evaluate(this->Makefile, config,
-                                        false, this, 0, 0);
-      if (!this->Makefile->FindTargetToUse(targetResult))
-        {
-        continue;
-        }
-      }
-      std::string defsGenex = "$<TARGET_PROPERTY:" +
-                              it->Value + ",INTERFACE_COMPILE_DEFINITIONS>";
-      if (cmGeneratorExpression::Find(it->Value) != std::string::npos)
-        {
-        // Because it->Value is a generator expression, ensure that it
-        // evaluates to the non-empty string before being used in the
-        // TARGET_PROPERTY expression.
-        defsGenex = "$<$<BOOL:" + it->Value + ">:" + defsGenex + ">";
-        }
-      cmGeneratorExpression ge(&it->Backtrace);
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(
-                                                                defsGenex);
-
-      this->Internal
-        ->CachedLinkInterfaceCompileDefinitionsEntries[config].push_back(
-                        new cmTargetInternals::TargetPropertyEntry(cge,
-                                                              it->Value));
-      }
+    this->Internal->AddInterfaceEntries(
+      this, config, "INTERFACE_COMPILE_DEFINITIONS",
+      this->Internal->CachedLinkInterfaceCompileDefinitionsEntries[config]);
     if (!config.empty())
       {
       std::string configPropName = "COMPILE_DEFINITIONS_"

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=36c4c139b8364817f02bb95f18c1f1d0ba53371d
commit 36c4c139b8364817f02bb95f18c1f1d0ba53371d
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jun 19 13:38:26 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:35 2014 -0400

    cmTarget: Simplify INTERFACE_COMPILE_OPTIONS usage requirement lookup
    
    Use the AddInterfaceEntries helper to avoid duplication.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 418e5e5..b4b1d95 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -2430,45 +2430,9 @@ void cmTarget::GetCompileOptions(std::vector<std::string> &result,
 
   if (!this->Internal->CacheLinkInterfaceCompileOptionsDone[config])
     {
-    for (std::vector<cmValueWithOrigin>::const_iterator
-        it = this->Internal->LinkImplementationPropertyEntries.begin(),
-        end = this->Internal->LinkImplementationPropertyEntries.end();
-        it != end; ++it)
-      {
-      if (!cmGeneratorExpression::IsValidTargetName(it->Value)
-          && cmGeneratorExpression::Find(it->Value) == std::string::npos)
-        {
-        continue;
-        }
-      {
-      cmGeneratorExpression ge;
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
-                                                        ge.Parse(it->Value);
-      std::string targetResult = cge->Evaluate(this->Makefile, config,
-                                        false, this, 0, 0);
-      if (!this->Makefile->FindTargetToUse(targetResult))
-        {
-        continue;
-        }
-      }
-      std::string optionGenex = "$<TARGET_PROPERTY:" +
-                              it->Value + ",INTERFACE_COMPILE_OPTIONS>";
-      if (cmGeneratorExpression::Find(it->Value) != std::string::npos)
-        {
-        // Because it->Value is a generator expression, ensure that it
-        // evaluates to the non-empty string before being used in the
-        // TARGET_PROPERTY expression.
-        optionGenex = "$<$<BOOL:" + it->Value + ">:" + optionGenex + ">";
-        }
-      cmGeneratorExpression ge(&it->Backtrace);
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(
-                                                                optionGenex);
-
-      this->Internal
-        ->CachedLinkInterfaceCompileOptionsEntries[config].push_back(
-                        new cmTargetInternals::TargetPropertyEntry(cge,
-                                                              it->Value));
-      }
+    this->Internal->AddInterfaceEntries(
+      this, config, "INTERFACE_COMPILE_OPTIONS",
+      this->Internal->CachedLinkInterfaceCompileOptionsEntries[config]);
     }
 
   processCompileOptions(this,

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=586ff5f3aab418ee13b6c978ea2e5e9c6b7c2060
commit 586ff5f3aab418ee13b6c978ea2e5e9c6b7c2060
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jun 19 13:37:30 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:35 2014 -0400

    cmTarget: Simplify INTERFACE_SOURCES usage requirement lookup
    
    Use the AddInterfaceEntries helper to avoid duplication.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 8d294a3..418e5e5 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -774,45 +774,9 @@ void cmTarget::GetSourceFiles(std::vector<std::string> &files,
 
   if (!this->Internal->CacheLinkInterfaceSourcesDone[config])
     {
-    for (std::vector<cmValueWithOrigin>::const_iterator
-        it = this->Internal->LinkImplementationPropertyEntries.begin(),
-        end = this->Internal->LinkImplementationPropertyEntries.end();
-        it != end; ++it)
-      {
-      if (!cmGeneratorExpression::IsValidTargetName(it->Value)
-          && cmGeneratorExpression::Find(it->Value) == std::string::npos)
-        {
-        continue;
-        }
-      {
-      cmGeneratorExpression ge;
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
-                                                        ge.Parse(it->Value);
-      std::string targetResult = cge->Evaluate(this->Makefile, config,
-                                        false, this, 0, &dagChecker);
-      if (!this->Makefile->FindTargetToUse(targetResult))
-        {
-        continue;
-        }
-      }
-      std::string sourceGenex = "$<TARGET_PROPERTY:" +
-                              it->Value + ",INTERFACE_SOURCES>";
-      if (cmGeneratorExpression::Find(it->Value) != std::string::npos)
-        {
-        // Because it->Value is a generator expression, ensure that it
-        // evaluates to the non-empty string before being used in the
-        // TARGET_PROPERTY expression.
-        sourceGenex = "$<$<BOOL:" + it->Value + ">:" + sourceGenex + ">";
-        }
-      cmGeneratorExpression ge(&it->Backtrace);
-      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(
-                                                                sourceGenex);
-
-      this->Internal
-        ->CachedLinkInterfaceSourcesEntries[config].push_back(
-                        new cmTargetInternals::TargetPropertyEntry(cge,
-                                                              it->Value));
-      }
+    this->Internal->AddInterfaceEntries(
+      this, config, "INTERFACE_SOURCES",
+      this->Internal->CachedLinkInterfaceSourcesEntries[config]);
     }
 
     std::vector<std::string>::size_type numFilesBefore = files.size();
diff --git a/Tests/RunCMake/Languages/LINK_LANGUAGE-genex-stderr.txt b/Tests/RunCMake/Languages/LINK_LANGUAGE-genex-stderr.txt
index a5d5d50..3a7f480 100644
--- a/Tests/RunCMake/Languages/LINK_LANGUAGE-genex-stderr.txt
+++ b/Tests/RunCMake/Languages/LINK_LANGUAGE-genex-stderr.txt
@@ -1,7 +1,9 @@
-CMake Error:
+CMake Error at LINK_LANGUAGE-genex.cmake:[0-9]+ \(target_link_libraries\):
   Error evaluating generator expression:
 
     \$<TARGET_PROPERTY:LINKER_LANGUAGE>
 
   LINKER_LANGUAGE target property can not be used while evaluating link
-  libraries
+  libraries for a static library
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/Languages/link-libraries-TARGET_FILE-genex-stderr.txt b/Tests/RunCMake/Languages/link-libraries-TARGET_FILE-genex-stderr.txt
index 2d7a3c9..d8bc238 100644
--- a/Tests/RunCMake/Languages/link-libraries-TARGET_FILE-genex-stderr.txt
+++ b/Tests/RunCMake/Languages/link-libraries-TARGET_FILE-genex-stderr.txt
@@ -1,7 +1,9 @@
-CMake Error:
+CMake Error at link-libraries-TARGET_FILE-genex.cmake:[0-9]+ \(target_link_libraries\):
   Error evaluating generator expression:
 
     \$<TARGET_FILE:foo>
 
   Expressions which require the linker language may not be used while
   evaluating link libraries
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3843c41f9919a5a2e510e93cb5b404201f211aa9
commit 3843c41f9919a5a2e510e93cb5b404201f211aa9
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jun 30 10:47:21 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:35 2014 -0400

    cmTarget: Add method to add usage requirements from linked interfaces
    
    Create a cmTargetInternals::AddInterfaceEntries method to construct a
    $<TARGET_PROPERTY:tgt,INTERFACE_XYZ> generator expression and evaluate
    it for every target in the link implementation.  This will be useful to
    de-duplicate such evaluation for each usage requirement separately.
    
    The new method will soon be used in the implementation of the
    INTERFACE_* usage requirement lookup methods (GetSourceFiles,
    GetCompileOptions, GetCompileDefinitions, GetCompileFeatures,
    GetIncludeDirectories).  It is necessary for these methods to determine
    whether an expression in LinkImplementationPropertyEntries evaluates to
    a target or not because generator expression evaluation reports an error
    for non-targets and we construct a $<TARGET_PROPERTY:tgt,INTERFACE_XYZ>
    expression for each entry that is a target.
    
    The implementation of each usage requirement currently processes the
    LinkImplementationPropertyEntries and evaluates all generator
    expressions to determine targets.  That is no longer necessary because
    GetLinkImplementationLibraries now returns resolved and cached targets
    together with their name.  Use it to implement AddInterfaceEntries.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 911c0c2..8d294a3 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -181,6 +181,10 @@ public:
   std::vector<TargetPropertyEntry*> SourceEntries;
   std::vector<cmValueWithOrigin> LinkImplementationPropertyEntries;
 
+  void AddInterfaceEntries(
+    cmTarget const* thisTarget, std::string const& config,
+    std::string const& prop, std::vector<TargetPropertyEntry*>& entries);
+
   std::map<std::string, std::vector<TargetPropertyEntry*> >
                         CachedLinkInterfaceIncludeDirectoriesEntries;
   std::map<std::string, std::vector<TargetPropertyEntry*> >
@@ -6551,6 +6555,31 @@ void cmTargetInternals::ComputeLinkInterface(cmTarget const* thisTarget,
 }
 
 //----------------------------------------------------------------------------
+void cmTargetInternals::AddInterfaceEntries(
+  cmTarget const* thisTarget, std::string const& config,
+  std::string const& prop, std::vector<TargetPropertyEntry*>& entries)
+{
+  if(cmTarget::LinkImplementation const* impl =
+     thisTarget->GetLinkImplementationLibraries(config))
+    {
+    for (std::vector<cmLinkImplItem>::const_iterator
+           it = impl->Libraries.begin(), end = impl->Libraries.end();
+         it != end; ++it)
+      {
+      if(it->Target)
+        {
+        std::string genex =
+          "$<TARGET_PROPERTY:" + *it + "," + prop + ">";
+        cmGeneratorExpression ge(&it->Backtrace);
+        cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(genex);
+        entries.push_back(
+          new cmTargetInternals::TargetPropertyEntry(cge, *it));
+        }
+      }
+    }
+}
+
+//----------------------------------------------------------------------------
 cmTarget::LinkImplementation const*
 cmTarget::GetLinkImplementation(const std::string& config) const
 {

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=81f1bfe261a02e63d6b5d54767b61a7b8bbccb99
commit 81f1bfe261a02e63d6b5d54767b61a7b8bbccb99
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jun 30 10:43:36 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:34 2014 -0400

    cmTarget: Add to LinkImplementation a backtrace for each library
    
    Allow clients to provide backtrace context on evaluation diagnostics.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 6c2d867..911c0c2 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -6678,7 +6678,7 @@ void cmTarget::ComputeLinkImplementation(const std::string& config,
 
       // The entry is meant for this configuration.
       impl.Libraries.push_back(
-        cmLinkImplItem(name, this->FindTargetToLink(name)));
+        cmLinkImplItem(name, this->FindTargetToLink(name), le->Backtrace));
       }
 
     std::set<std::string> const& seenProps = cge->GetSeenTargetProperties();
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 8578c51..5f2a557 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -57,12 +57,14 @@ public:
 class cmLinkImplItem: public cmLinkItem
 {
 public:
-  cmLinkImplItem(): cmLinkItem() {}
+  cmLinkImplItem(): cmLinkItem(), Backtrace(0) {}
   cmLinkImplItem(std::string const& n,
-                 cmTarget const* t):
-    cmLinkItem(n, t) {}
+                 cmTarget const* t,
+                 cmListFileBacktrace const& bt):
+    cmLinkItem(n, t), Backtrace(bt) {}
   cmLinkImplItem(cmLinkImplItem const& r):
-    cmLinkItem(r) {}
+    cmLinkItem(r), Backtrace(r.Backtrace) {}
+  cmListFileBacktrace Backtrace;
 };
 
 struct cmTargetLinkInformationMap:

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2cf120cf89deb4c7e92d060f4796299cbe825adc
commit 2cf120cf89deb4c7e92d060f4796299cbe825adc
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jun 30 10:38:59 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:34 2014 -0400

    cmTarget: Refactor LinkImplementation to allow more information
    
    Create a cmLinkImplItem class derived from cmLinkItem so more
    information can be added to link implementation entries than link
    interface entries.  Convert the LinkImplementation Libraries member to
    hold it.  Update client sites accordingly.

diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx
index 3929af4..75d3967 100644
--- a/Source/cmComputeTargetDepends.cxx
+++ b/Source/cmComputeTargetDepends.cxx
@@ -255,7 +255,7 @@ void cmComputeTargetDepends::CollectTargetDepends(int depender_index)
 
     // A target should not depend on itself.
     emitted.insert(depender->GetName());
-    for(std::vector<cmLinkItem>::const_iterator
+    for(std::vector<cmLinkImplItem>::const_iterator
           lib = impl->Libraries.begin();
         lib != impl->Libraries.end(); ++lib)
       {
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index cf112ec..13eac3b 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -844,7 +844,7 @@ getLinkedTargetsContent(
 
 std::string
 getLinkedTargetsContent(
-  std::vector<cmLinkItem> const &libraries,
+  std::vector<cmLinkImplItem> const &libraries,
   cmTarget const* target,
   cmTarget const* headTarget,
   cmGeneratorExpressionContext *context,
@@ -852,7 +852,7 @@ getLinkedTargetsContent(
   const std::string &interfacePropertyName)
 {
   std::vector<cmTarget const*> tgts;
-  for (std::vector<cmLinkItem>::const_iterator
+  for (std::vector<cmLinkImplItem>::const_iterator
       it = libraries.begin();
       it != libraries.end(); ++it)
     {
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index fd82d17..eccb06a 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -475,8 +475,8 @@ bool cmGeneratorTarget::IsSystemIncludeDirectory(const std::string& dir,
       }
 
     std::set<cmTarget const*> uniqueDeps;
-    for(std::vector<cmLinkItem>::const_iterator li = impl->Libraries.begin();
-        li != impl->Libraries.end(); ++li)
+    for(std::vector<cmLinkImplItem>::const_iterator
+          li = impl->Libraries.begin(); li != impl->Libraries.end(); ++li)
       {
       cmTarget const* tgt = li->Target;
       if (!tgt)
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index d27293a..6c2d867 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -2281,7 +2281,7 @@ cmTarget::GetIncludeDirectories(const std::string& config) const
     if(this->Makefile->IsOn("APPLE"))
       {
       LinkImplementation const* impl = this->GetLinkImplementation(config);
-      for(std::vector<cmLinkItem>::const_iterator
+      for(std::vector<cmLinkImplItem>::const_iterator
           it = impl->Libraries.begin();
           it != impl->Libraries.end(); ++it)
         {
@@ -3675,7 +3675,8 @@ void cmTarget::ComputeLinkClosure(const std::string& config,
 
   // Add interface languages from linked targets.
   cmTargetCollectLinkLanguages cll(this, config, languages, this);
-  for(std::vector<cmLinkItem>::const_iterator li = impl->Libraries.begin();
+  for(std::vector<cmLinkImplItem>::const_iterator
+        li = impl->Libraries.begin();
       li != impl->Libraries.end(); ++li)
     {
     cll.Visit(*li);
@@ -6242,7 +6243,8 @@ cmTarget::GetLinkImplementationClosure(const std::string& config) const
     cmTarget::LinkImplementation const* impl
       = this->GetLinkImplementationLibraries(config);
 
-    for(std::vector<cmLinkItem>::const_iterator it = impl->Libraries.begin();
+    for(std::vector<cmLinkImplItem>::const_iterator
+          it = impl->Libraries.begin();
         it != impl->Libraries.end(); ++it)
       {
       processILibs(config, this, *it, tgts , emitted);
@@ -6383,7 +6385,9 @@ const char* cmTarget::ComputeLinkInterfaceLibraries(const std::string& config,
     // The link implementation is the default link interface.
     LinkImplementation const* impl =
         this->GetLinkImplementationLibrariesInternal(config, headTarget);
-    iface.Libraries = impl->Libraries;
+    iface.Libraries.insert(iface.Libraries.end(),
+                           impl->Libraries.begin(),
+                           impl->Libraries.end());
     if(this->PolicyStatusCMP0022 == cmPolicies::WARN &&
        !this->Internal->PolicyWarnedCMP0022 && !usage_requirements_only)
       {
@@ -6397,12 +6401,12 @@ const char* cmTarget::ComputeLinkInterfaceLibraries(const std::string& config,
                               headTarget, usage_requirements_only,
                               ifaceLibs);
         }
-      if (ifaceLibs != impl->Libraries)
+      if (ifaceLibs != iface.Libraries)
         {
         std::string oldLibraries;
         std::string newLibraries;
         const char *sep = "";
-        for(std::vector<cmLinkItem>::const_iterator it
+        for(std::vector<cmLinkImplItem>::const_iterator it
               = impl->Libraries.begin(); it != impl->Libraries.end(); ++it)
           {
           oldLibraries += sep;
@@ -6470,7 +6474,7 @@ void cmTargetInternals::ComputeLinkInterface(cmTarget const* thisTarget,
         {
         cmTarget::LinkImplementation const* impl =
             thisTarget->GetLinkImplementation(config);
-        for(std::vector<cmLinkItem>::const_iterator
+        for(std::vector<cmLinkImplItem>::const_iterator
               li = impl->Libraries.begin(); li != impl->Libraries.end(); ++li)
           {
           if(emitted.insert(*li).second)
@@ -6674,7 +6678,7 @@ void cmTarget::ComputeLinkImplementation(const std::string& config,
 
       // The entry is meant for this configuration.
       impl.Libraries.push_back(
-        cmLinkItem(name, this->FindTargetToLink(name)));
+        cmLinkImplItem(name, this->FindTargetToLink(name)));
       }
 
     std::set<std::string> const& seenProps = cge->GetSeenTargetProperties();
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 9d1f966..8578c51 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -54,6 +54,16 @@ public:
   cmLinkItem(cmLinkItem const& r): std_string(r), Target(r.Target) {}
   cmTarget const* Target;
 };
+class cmLinkImplItem: public cmLinkItem
+{
+public:
+  cmLinkImplItem(): cmLinkItem() {}
+  cmLinkImplItem(std::string const& n,
+                 cmTarget const* t):
+    cmLinkItem(n, t) {}
+  cmLinkImplItem(cmLinkImplItem const& r):
+    cmLinkItem(r) {}
+};
 
 struct cmTargetLinkInformationMap:
   public std::map<std::string, cmComputeLinkInformation*>
@@ -296,7 +306,7 @@ public:
     std::vector<std::string> Languages;
 
     // Libraries linked directly in this configuration.
-    std::vector<cmLinkItem> Libraries;
+    std::vector<cmLinkImplItem> Libraries;
 
     // Libraries linked directly in other configurations.
     // Needed only for OLD behavior of CMP0003.

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0e9f7a1e576ceb9e5c7f4933ec0cdd9c27dec529
commit 0e9f7a1e576ceb9e5c7f4933ec0cdd9c27dec529
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jun 30 10:31:01 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:34 2014 -0400

    cmGeneratorExpressionEvaluator: Shorten some long lines
    
    Adjust the definitions of getLinkedTargetsContent to avoid long lines.

diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index b648eb2..cf112ec 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -799,13 +799,14 @@ static const char* targetPropertyTransitiveWhitelist[] = {
 
 #undef TRANSITIVE_PROPERTY_NAME
 
-std::string getLinkedTargetsContent(
-                                  std::vector<cmTarget const*> &targets,
-                                  cmTarget const* target,
-                                  cmTarget const* headTarget,
-                                  cmGeneratorExpressionContext *context,
-                                  cmGeneratorExpressionDAGChecker *dagChecker,
-                                  const std::string &interfacePropertyName)
+std::string
+getLinkedTargetsContent(
+  std::vector<cmTarget const*> &targets,
+  cmTarget const* target,
+  cmTarget const* headTarget,
+  cmGeneratorExpressionContext *context,
+  cmGeneratorExpressionDAGChecker *dagChecker,
+  const std::string &interfacePropertyName)
 {
   cmGeneratorExpression ge(&context->Backtrace);
 
@@ -841,12 +842,14 @@ std::string getLinkedTargetsContent(
   return linkedTargetsContent;
 }
 
-std::string getLinkedTargetsContent(std::vector<cmLinkItem> const &libraries,
-                                  cmTarget const* target,
-                                  cmTarget const* headTarget,
-                                  cmGeneratorExpressionContext *context,
-                                  cmGeneratorExpressionDAGChecker *dagChecker,
-                                  const std::string &interfacePropertyName)
+std::string
+getLinkedTargetsContent(
+  std::vector<cmLinkItem> const &libraries,
+  cmTarget const* target,
+  cmTarget const* headTarget,
+  cmGeneratorExpressionContext *context,
+  cmGeneratorExpressionDAGChecker *dagChecker,
+  const std::string &interfacePropertyName)
 {
   std::vector<cmTarget const*> tgts;
   for (std::vector<cmLinkItem>::const_iterator

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3cb21f27cab42789744ee383664fb11dcb8ac800
commit 3cb21f27cab42789744ee383664fb11dcb8ac800
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jun 30 10:28:08 2014 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:57:34 2014 -0400

    cmComputeLinkDepends: Convert AddLinkEntries to a template
    
    Allow the method to be called with a vector of any type that can be
    converted to cmLinkItem.

diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx
index 6170e92..c13da50 100644
--- a/Source/cmComputeLinkDepends.cxx
+++ b/Source/cmComputeLinkDepends.cxx
@@ -553,15 +553,16 @@ void cmComputeLinkDepends::AddDirectLinkEntries()
 }
 
 //----------------------------------------------------------------------------
+template <typename T>
 void
 cmComputeLinkDepends::AddLinkEntries(
-  int depender_index, std::vector<cmLinkItem> const& libs)
+  int depender_index, std::vector<T> const& libs)
 {
   // Track inferred dependency sets implied by this list.
   std::map<int, DependSet> dependSets;
 
   // Loop over the libraries linked directly by the depender.
-  for(std::vector<cmLinkItem>::const_iterator li = libs.begin();
+  for(typename std::vector<T>::const_iterator li = libs.begin();
       li != libs.end(); ++li)
     {
     // Skip entries that will resolve to the target getting linked or
diff --git a/Source/cmComputeLinkDepends.h b/Source/cmComputeLinkDepends.h
index 3207ecb..a931726 100644
--- a/Source/cmComputeLinkDepends.h
+++ b/Source/cmComputeLinkDepends.h
@@ -80,8 +80,8 @@ private:
   int AddLinkEntry(cmLinkItem const& item);
   void AddVarLinkEntries(int depender_index, const char* value);
   void AddDirectLinkEntries();
-  void AddLinkEntries(int depender_index,
-                      std::vector<cmLinkItem> const& libs);
+  template <typename T>
+    void AddLinkEntries(int depender_index, std::vector<T> const& libs);
   cmTarget const* FindTargetToLink(int depender_index,
                                    const std::string& name);
 

-----------------------------------------------------------------------

Summary of changes:
 Source/cmComputeLinkDepends.cxx                    |    5 +-
 Source/cmComputeLinkDepends.h                      |    4 +-
 Source/cmComputeTargetDepends.cxx                  |    2 +-
 Source/cmGeneratorExpressionEvaluator.cxx          |   31 +-
 Source/cmGeneratorTarget.cxx                       |    4 +-
 Source/cmTarget.cxx                                |  313 +++++---------------
 Source/cmTarget.h                                  |   16 +-
 .../CompatibleInterface/DebugProperties-stderr.txt |   14 +-
 .../Languages/LINK_LANGUAGE-genex-stderr.txt       |    6 +-
 .../link-libraries-TARGET_FILE-genex-stderr.txt    |    4 +-
 10 files changed, 128 insertions(+), 271 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list