[Cmake-commits] CMake branch, next, updated. v3.0.0-4115-g5be1d3d

Brad King brad.king at kitware.com
Mon Jul 7 08:54:18 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  5be1d3d4f1f62492e826a9b05f4171d1d88c24b6 (commit)
       via  93790506f52cb4e420be6a1a6988613380ecb1bc (commit)
       via  b5b098ebb39c97f3420eb7c24f0d4d5bc2d15a5a (commit)
       via  5e07dcf7c8e884380e1ad5ab64ba3bcdef601eee (commit)
       via  f77b384cf6a4e9206e6067b7bfe0677a962268c4 (commit)
       via  61ef8daad5d15256daec08eeb0437fdece330001 (commit)
       via  d9586f83f11f56d8d9f88892f543918f50e9525c (commit)
       via  3156275bc74e355f8309617344693a0f14b7a370 (commit)
       via  363cd33ebe5a8fb495fffc07cf39c59082e83bbf (commit)
       via  251e835b3f7320f0099d003de5a675af58e62e46 (commit)
       via  848c8ccf18e325e0d2833ac468f733261832feca (commit)
       via  f85ccf23eeec08fff46c0788b8ee357b3f5220e4 (commit)
       via  82e91e34872fd8fa394d14f1e4fac60f9e993a35 (commit)
      from  dda1412ca0ced365f48d8ce8cc1df0af490e2398 (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=5be1d3d4f1f62492e826a9b05f4171d1d88c24b6
commit 5be1d3d4f1f62492e826a9b05f4171d1d88c24b6
Merge: dda1412 9379050
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jul 7 08:54:16 2014 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Jul 7 08:54:16 2014 -0400

    Merge topic 'refactor-usage-requirement-evaluation' into next
    
    93790506 cmTarget: Simplify INTERFACE_INCLUDE_DIRECTORIES usage requirement lookup
    b5b098eb cmTarget: Simplify CMP0027 logic in processIncludeDirectories
    5e07dcf7 cmTarget: Add to LinkImplementation whether each library was a genex
    f77b384c cmTarget: Simplify INTERFACE_COMPILE_FEATURES usage requirement lookup
    61ef8daa cmTarget: Simplify INTERFACE_COMPILE_DEFINITIONS usage requirement lookup
    d9586f83 cmTarget: Simplify INTERFACE_COMPILE_OPTIONS usage requirement lookup
    3156275b cmTarget: Simplify INTERFACE_SOURCES usage requirement lookup
    363cd33e cmTarget: Add method to add usage requirements from linked interfaces
    251e835b cmTarget: Add to LinkImplementation a backtrace for each library
    848c8ccf cmTarget: Refactor LinkImplementation to allow more information
    f85ccf23 cmGeneratorExpressionEvaluator: Shorten some long lines
    82e91e34 cmComputeLinkDepends: Convert AddLinkEntries to a template


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=93790506f52cb4e420be6a1a6988613380ecb1bc
commit 93790506f52cb4e420be6a1a6988613380ecb1bc
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: Mon Jul 7 08:52:42 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 0c96c91..0a7724c 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=b5b098ebb39c97f3420eb7c24f0d4d5bc2d15a5a
commit b5b098ebb39c97f3420eb7c24f0d4d5bc2d15a5a
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: Mon Jul 7 08:52:41 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 9ba8456..0c96c91 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=5e07dcf7c8e884380e1ad5ab64ba3bcdef601eee
commit 5e07dcf7c8e884380e1ad5ab64ba3bcdef601eee
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: Mon Jul 7 08:52:41 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 98a9920..9ba8456 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -6509,12 +6509,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)
@@ -6562,7 +6559,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=f77b384cf6a4e9206e6067b7bfe0677a962268c4
commit f77b384cf6a4e9206e6067b7bfe0677a962268c4
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: Mon Jul 7 08:52:41 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 e35167e..98a9920 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=61ef8daad5d15256daec08eeb0437fdece330001
commit 61ef8daad5d15256daec08eeb0437fdece330001
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: Mon Jul 7 08:52:41 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 2cc21f5..e35167e 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=d9586f83f11f56d8d9f88892f543918f50e9525c
commit d9586f83f11f56d8d9f88892f543918f50e9525c
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: Mon Jul 7 08:52:40 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 a87e98d..2cc21f5 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=3156275bc74e355f8309617344693a0f14b7a370
commit 3156275bc74e355f8309617344693a0f14b7a370
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: Mon Jul 7 08:52:40 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 0ad4ffb..a87e98d 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=363cd33ebe5a8fb495fffc07cf39c59082e83bbf
commit 363cd33ebe5a8fb495fffc07cf39c59082e83bbf
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: Mon Jul 7 08:52:40 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 6bc4273..0ad4ffb 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*> >
@@ -6550,6 +6554,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=251e835b3f7320f0099d003de5a675af58e62e46
commit 251e835b3f7320f0099d003de5a675af58e62e46
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: Mon Jul 7 08:52:40 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 94b339b..6bc4273 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -6677,7 +6677,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=848c8ccf18e325e0d2833ac468f733261832feca
commit 848c8ccf18e325e0d2833ac468f733261832feca
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: Mon Jul 7 08:52:39 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..94b339b 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,8 @@ 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;
+    std::copy(impl->Libraries.begin(), impl->Libraries.end(),
+              std::back_inserter(iface.Libraries));
     if(this->PolicyStatusCMP0022 == cmPolicies::WARN &&
        !this->Internal->PolicyWarnedCMP0022 && !usage_requirements_only)
       {
@@ -6397,12 +6400,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 +6473,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 +6677,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=f85ccf23eeec08fff46c0788b8ee357b3f5220e4
commit f85ccf23eeec08fff46c0788b8ee357b3f5220e4
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: Mon Jul 7 08:52:39 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=82e91e34872fd8fa394d14f1e4fac60f9e993a35
commit 82e91e34872fd8fa394d14f1e4fac60f9e993a35
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: Mon Jul 7 08:52:36 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:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list