[Cmake-commits] CMake branch, next, updated. v2.8.10.2-2126-g51ed80b

Stephen Kelly steveire at gmail.com
Wed Feb 13 09:18:04 EST 2013


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  51ed80b6824bc6c0c50b75e71b716ff1783a4645 (commit)
       via  fde949d1434c450914a8eab874940b3de074783c (commit)
       via  79ae968a18ea58219df419a4add55f054889be31 (commit)
       via  71bf96ec78afef09dc0b927f6dcebeb9b3208db1 (commit)
       via  3df36b5954bef70891a666756d325e8bb4d01c1a (commit)
       via  e1f908015f943ed507063260b3aae1f3b503237e (commit)
       via  567c8d103ed3c3cb7303877d89e8508dd3f8d0ca (commit)
       via  a1c4905f723f9d99bd481580f9fe24fdaf81b174 (commit)
      from  d09e490ec0fbbd9ba92762ad98043ed8414b2b79 (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=51ed80b6824bc6c0c50b75e71b716ff1783a4645
commit 51ed80b6824bc6c0c50b75e71b716ff1783a4645
Merge: d09e490 fde949d
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Wed Feb 13 09:17:50 2013 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Feb 13 09:17:50 2013 -0500

    Merge topic 'linked-usage-cleanup' into next
    
    fde949d Don't add target-specific interface includes and defines to Qt 4 targets.
    79ae968 Revert "Add a way to exclude INTERFACE properties from exported targets."
    71bf96e Revert "find_package: Reword <package>_NO_INTERFACES documentation"
    3df36b5 Revert "Add the $<LINKED:...> generator expression."
    e1f9080 Don't populate INTERFACE includes and defines properties in tll.
    567c8d1 Revert "Don't allow utility or global targets in the LINKED expression."
    a1c4905 Use the link information as a source of compile definitions and includes.


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fde949d1434c450914a8eab874940b3de074783c
commit fde949d1434c450914a8eab874940b3de074783c
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 12:05:40 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Wed Feb 13 15:12:31 2013 +0100

    Don't add target-specific interface includes and defines to Qt 4 targets.
    
    This is a partial revert of commit c8ee07d0 (FindQt4: Add INTERFACE
    includes and defines to Qt4 targets, 2012-12-31).

diff --git a/Modules/FindQt4.cmake b/Modules/FindQt4.cmake
index 5baee01..078c031 100644
--- a/Modules/FindQt4.cmake
+++ b/Modules/FindQt4.cmake
@@ -972,14 +972,6 @@ if (QT_QMAKE_EXECUTABLE AND QTVERSION)
           ${_PROPERTY}
           "Qt4::Qt${_DEPEND}"
         )
-        set_property(TARGET Qt4::${_QT_MODULE} APPEND PROPERTY
-          INTERFACE_INCLUDE_DIRECTORIES
-            "$<TARGET_PROPERTY:Qt4::Qt${_DEPEND},INTERFACE_INCLUDE_DIRECTORIES>"
-        )
-        set_property(TARGET Qt4::${_QT_MODULE} APPEND PROPERTY
-          INTERFACE_COMPILE_DEFINITIONS
-            "$<TARGET_PROPERTY:Qt4::Qt${_DEPEND},INTERFACE_COMPILE_DEFINITIONS>"
-        )
       endforeach()
     endif()
   endmacro()

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=79ae968a18ea58219df419a4add55f054889be31
commit 79ae968a18ea58219df419a4add55f054889be31
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 12:00:41 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Wed Feb 13 15:12:31 2013 +0100

    Revert "Add a way to exclude INTERFACE properties from exported targets."
    
    This reverts commit 2c3654c3de718fe822f8960063373774fc019494.
    
    The removal of some tests added in commit 77cecb77 (Add includes and compile
    definitions with target_link_libraries., 2012-11-05) are also squashed
    into this commit.

diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index ee8436c..ef4ea38 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -264,16 +264,15 @@ void cmExportFileGenerator::GenerateInterfaceProperties(cmTarget *target,
 {
   if (!properties.empty())
     {
-    os << "if(NOT ${CMAKE_FIND_PACKAGE_NAME}_NO_INTERFACES)\n";
     std::string targetName = this->Namespace;
     targetName += target->GetName();
-    os << "  set_target_properties(" << targetName << " PROPERTIES\n";
+    os << "set_target_properties(" << targetName << " PROPERTIES\n";
     for(ImportPropertyMap::const_iterator pi = properties.begin();
         pi != properties.end(); ++pi)
       {
-      os << "    " << pi->first << " \"" << pi->second << "\"\n";
+      os << "  " << pi->first << " \"" << pi->second << "\"\n";
       }
-    os << "  )\nendif()\n\n";
+    os << ")\n\n";
     }
 }
 
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index e9b6ab6..470ceca 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -376,27 +376,6 @@ void cmFindPackageCommand::GenerateDocumentation()
     "The package configuration file may set <package>_FOUND to false "
     "to tell find_package that component requirements are not satisfied."
     "\n"
-    "Targets exported by the install() command may have additional INTERFACE "
-    "properties set for include directories, compile definitions etc.  As "
-    "these may create a backward compatibility concern for consumers of "
-    "existing projects, it is possible to set the <package>_NO_INTERFACES "
-    "variable to disable populating those interfaces.  It is possible to "
-    "emulate a version-based policy for whether the interfaces should be "
-    "enabled in the config file before including the imported targets file. "
-    "This allows consumers to decide when to enable the new interfaces when "
-    "upgrading.  The upstream project is responsible for adding code similar "
-    "to this in the version which generates the INTERFACE content:\n"
-    "  if(${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION VERSION_LESS 2.3\n"
-    "      AND NOT ${CMAKE_FIND_PACKAGE_NAME}_INTERFACES)\n"
-    "    set(${CMAKE_FIND_PACKAGE_NAME}_NO_INTERFACES 1)\n"
-    "  endif()\n"
-    "  include(\"${CMAKE_CURRENT_LIST_DIR}/<package>Targets.cmake\")\n"
-    "\n"
-    "Downstream users may then choose to use the new interfaces by finding "
-    "the newer version of upstream.  They can also choose to not use the new "
-    "interfaces by setting <package>_INTERFACES to false before finding the "
-    "package.\n"
-    "\n"
     "See the cmake_policy() command documentation for discussion of the "
     "NO_POLICY_SCOPE option."
     ;
diff --git a/Tests/ExportImport/Import/CMakeLists.txt b/Tests/ExportImport/Import/CMakeLists.txt
index 237f8fa..3fc78a2 100644
--- a/Tests/ExportImport/Import/CMakeLists.txt
+++ b/Tests/ExportImport/Import/CMakeLists.txt
@@ -17,8 +17,3 @@ add_executable(imp_testTransExe1 imp_testTransExe1.c)
 target_link_libraries(imp_testTransExe1 imp_lib1)
 add_executable(imp_testTransExe1b imp_testTransExe1.c)
 target_link_libraries(imp_testTransExe1b imp_lib1b)
-
-# Test package INTERFACE controls
-add_subdirectory(package_old_old)
-add_subdirectory(package_new_old)
-add_subdirectory(package_new_new)
diff --git a/Tests/ExportImport/Import/package_new_new/CMakeLists.txt b/Tests/ExportImport/Import/package_new_new/CMakeLists.txt
deleted file mode 100644
index 4e6f642..0000000
--- a/Tests/ExportImport/Import/package_new_new/CMakeLists.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-
-cmake_minimum_required(VERSION 2.8)
-
-find_package(testLibRequired 2.5 REQUIRED)
-
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
-  "
-#include \"testSharedLibRequired.h\"
-int main(int argc, char **argv)
-{
-  TestSharedLibRequired req;
-  return req.foo();
-}
-"
-)
-
-get_target_property(prop Req::testSharedLibRequired INTERFACE_INCLUDE_DIRECTORIES)
-if (NOT prop)
-  message(SEND_ERROR "Interface of Req::testSharedLibRequired should not be empty")
-endif()
-
-add_executable(new_new_test "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
-target_link_libraries(new_new_test Req::testSharedLibRequired)
diff --git a/Tests/ExportImport/Import/package_new_old/CMakeLists.txt b/Tests/ExportImport/Import/package_new_old/CMakeLists.txt
deleted file mode 100644
index e675d64..0000000
--- a/Tests/ExportImport/Import/package_new_old/CMakeLists.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-
-cmake_minimum_required(VERSION 2.8)
-
-find_package(testLibRequired 2.5 REQUIRED)
-
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
-  "
-#include \"testSharedLibRequired.h\"
-int main(int argc, char **argv)
-{
-  TestSharedLibRequired req;
-  return req.foo();
-}
-"
-)
-
-get_target_property(prop Req::testSharedLibRequired INTERFACE_INCLUDE_DIRECTORIES)
-if ("${prop}" STREQUAL "")
-  message(SEND_ERROR "Interface of Req::testSharedLibRequired should not be empty")
-endif()
-
-add_executable(new_old_test "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
-target_link_libraries(new_old_test Req::testSharedLibRequired)
-include_directories(${testLibRequired_INCLUDE_DIRS})
diff --git a/Tests/ExportImport/Import/package_old_old/CMakeLists.txt b/Tests/ExportImport/Import/package_old_old/CMakeLists.txt
deleted file mode 100644
index 3b27330..0000000
--- a/Tests/ExportImport/Import/package_old_old/CMakeLists.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-
-cmake_minimum_required(VERSION 2.8)
-
-find_package(testLibRequired 2.1 REQUIRED)
-
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
-  "
-#include \"testSharedLibRequired.h\"
-int main(int argc, char **argv)
-{
-  TestSharedLibRequired req;
-  return req.foo();
-}
-"
-)
-
-get_target_property(prop Req::testSharedLibRequired INTERFACE_INCLUDE_DIRECTORIES)
-if (prop)
-  message(SEND_ERROR "Interface of Req::testSharedLibRequired should be empty, but is ${prop}")
-endif()
-
-add_executable(old_old_test "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
-target_link_libraries(old_old_test Req::testSharedLibRequired)
-include_directories(${testLibRequired_INCLUDE_DIRS})

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=71bf96ec78afef09dc0b927f6dcebeb9b3208db1
commit 71bf96ec78afef09dc0b927f6dcebeb9b3208db1
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 12:00:31 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Wed Feb 13 15:12:31 2013 +0100

    Revert "find_package: Reword <package>_NO_INTERFACES documentation"
    
    This reverts commit 179f49560286e2e322b9b0cf5d0a277b7634540f.

diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index 6e78bd7..e9b6ab6 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -376,25 +376,26 @@ void cmFindPackageCommand::GenerateDocumentation()
     "The package configuration file may set <package>_FOUND to false "
     "to tell find_package that component requirements are not satisfied."
     "\n"
-    "A package configuration file may include() a <package>Targets.cmake "
-    "file, created by install(EXPORT) in the upstream source, to import "
-    "targets into the downstream consumer.  "
-    "When a new version of the upstream adds INTERFACE properties not "
-    "present in a previous version it can change behavior for existing "
-    "downstreams.  "
-    "In order to remain source compatible the upstream package configuration "
-    "file may set <package>_NO_INTERFACES to disable INTERFACE properties.  "
-    "For example, code of the form:\n"
-    "  if(<package>_FIND_VERSION VERSION_LESS <new-version>\n"
-    "      AND NOT <package>_INTERFACES)\n"
-    "    set(<package>_NO_INTERFACES 1)\n"
+    "Targets exported by the install() command may have additional INTERFACE "
+    "properties set for include directories, compile definitions etc.  As "
+    "these may create a backward compatibility concern for consumers of "
+    "existing projects, it is possible to set the <package>_NO_INTERFACES "
+    "variable to disable populating those interfaces.  It is possible to "
+    "emulate a version-based policy for whether the interfaces should be "
+    "enabled in the config file before including the imported targets file. "
+    "This allows consumers to decide when to enable the new interfaces when "
+    "upgrading.  The upstream project is responsible for adding code similar "
+    "to this in the version which generates the INTERFACE content:\n"
+    "  if(${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION VERSION_LESS 2.3\n"
+    "      AND NOT ${CMAKE_FIND_PACKAGE_NAME}_INTERFACES)\n"
+    "    set(${CMAKE_FIND_PACKAGE_NAME}_NO_INTERFACES 1)\n"
     "  endif()\n"
     "  include(\"${CMAKE_CURRENT_LIST_DIR}/<package>Targets.cmake\")\n"
-    "tells <package>Targets.cmake not to provide the INTERFACE properties "
-    "unless the downstream requests at least <new-version> or sets "
-    "<package>_INTERFACES to explicitly request them.  "
-    "This allows consumers to decide when to enable the new interfaces when "
-    "upgrading."
+    "\n"
+    "Downstream users may then choose to use the new interfaces by finding "
+    "the newer version of upstream.  They can also choose to not use the new "
+    "interfaces by setting <package>_INTERFACES to false before finding the "
+    "package.\n"
     "\n"
     "See the cmake_policy() command documentation for discussion of the "
     "NO_POLICY_SCOPE option."

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3df36b5954bef70891a666756d325e8bb4d01c1a
commit 3df36b5954bef70891a666756d325e8bb4d01c1a
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 11:56:58 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Wed Feb 13 15:12:31 2013 +0100

    Revert "Add the $<LINKED:...> generator expression."
    
    This reverts commit 0b92602b816e2584db3781b120a1e5200da72ada.
    
    Conflicts:
    	Source/cmGeneratorExpressionEvaluator.cxx
    	Tests/CMakeCommands/target_compile_definitions/CMakeLists.txt
    	Tests/CMakeCommands/target_include_directories/CMakeLists.txt

diff --git a/Source/cmDocumentGeneratorExpressions.h b/Source/cmDocumentGeneratorExpressions.h
index 3993f7d..8b80a8a 100644
--- a/Source/cmDocumentGeneratorExpressions.h
+++ b/Source/cmDocumentGeneratorExpressions.h
@@ -51,14 +51,6 @@
   "on the target tgt.\n"                                                \
   "Note that tgt is not added as a dependency of the target this "      \
   "expression is evaluated on.\n"                                       \
-  "  $<LINKED:item>            = An empty string if item is not a "     \
-  "target.  If item is a target then the "                              \
-  "INTERFACE_INCLUDE_DIRECTORIES or INTERFACE_COMPILE_DEFINITIONS "     \
-  "content is read from the target.  "                                  \
-  "This generator expression can only be used in evaluation of the "    \
-  "INCLUDE_DIRECTORIES or COMPILE_DEFINITIONS property.  Note that "    \
-  "this expression is for internal use and may be changed or removed "  \
-  "in the future.\n"                                                    \
   "  $<TARGET_POLICY:pol>          = '1' if the policy was NEW when "   \
   "the 'head' target was created, else '0'.  If the policy was not "    \
   "set, the warning message for the policy will be emitted.  This "     \
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index fbed95a..ee8436c 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -25,8 +25,6 @@
 
 #include <cmsys/auto_ptr.hxx>
 
-#include "assert.h"
-
 //----------------------------------------------------------------------------
 cmExportFileGenerator::cmExportFileGenerator()
 {
@@ -162,7 +160,7 @@ void cmExportFileGenerator::PopulateInterfaceProperty(const char *propName,
                                                            preprocessRule);
     if (!prepro.empty())
       {
-      this->ResolveTargetsInGeneratorExpressions(prepro, target, propName,
+      this->ResolveTargetsInGeneratorExpressions(prepro, target,
                                                  missingTargets);
       properties[outputName] = prepro;
       }
@@ -318,14 +316,13 @@ cmExportFileGenerator::AddTargetNamespace(std::string &input,
 void
 cmExportFileGenerator::ResolveTargetsInGeneratorExpressions(
                                     std::string &input,
-                                    cmTarget* target, const char *propName,
+                                    cmTarget* target,
                                     std::vector<std::string> &missingTargets,
                                     FreeTargetsReplace replace)
 {
   if (replace == NoReplaceFreeTargets)
     {
-    this->ResolveTargetsInGeneratorExpression(input, target, propName,
-                                              missingTargets);
+    this->ResolveTargetsInGeneratorExpression(input, target, missingTargets);
     return;
     }
   std::vector<std::string> parts;
@@ -344,7 +341,7 @@ cmExportFileGenerator::ResolveTargetsInGeneratorExpressions(
       {
       this->ResolveTargetsInGeneratorExpression(
                                     *li,
-                                    target, propName,
+                                    target,
                                     missingTargets);
       }
     input += sep + *li;
@@ -356,7 +353,7 @@ cmExportFileGenerator::ResolveTargetsInGeneratorExpressions(
 void
 cmExportFileGenerator::ResolveTargetsInGeneratorExpression(
                                     std::string &input,
-                                    cmTarget* target, const char *propName,
+                                    cmTarget* target,
                                     std::vector<std::string> &missingTargets)
 {
   std::string::size_type pos = 0;
@@ -393,57 +390,6 @@ cmExportFileGenerator::ResolveTargetsInGeneratorExpression(
   std::string errorString;
   pos = 0;
   lastPos = pos;
-  while((pos = input.find("$<LINKED:", lastPos)) != input.npos)
-    {
-    std::string::size_type nameStartPos = pos + sizeof("$<LINKED:") - 1;
-    std::string::size_type endPos = input.find(">", nameStartPos);
-    if (endPos == input.npos)
-      {
-      errorString = "$<LINKED:...> expression incomplete";
-      break;
-      }
-    std::string targetName = input.substr(nameStartPos,
-                                                endPos - nameStartPos);
-    if(targetName.find("$<") != input.npos)
-      {
-      errorString = "$<LINKED:...> requires its parameter to be a "
-                    "literal.";
-      break;
-      }
-    if (this->AddTargetNamespace(targetName, target, missingTargets))
-      {
-      assert(propName); // The link libraries strings will
-                        // never contain $<LINKED>
-      std::string replacement = "$<TARGET_PROPERTY:"
-                              + targetName + "," + propName;
-      input.replace(pos, endPos - pos, replacement);
-      lastPos = pos + replacement.size() + 1;
-      }
-    else
-      {
-      if (pos != 0)
-        {
-        if (input[pos - 1] == ';')
-          {
-          --pos;
-          }
-        }
-      else if (input[endPos + 1] == ';')
-        {
-        ++endPos;
-        }
-      input.replace(pos, endPos - pos + 1, "");
-      lastPos = pos;
-      }
-    }
-  if (!errorString.empty())
-    {
-    mf->IssueMessage(cmake::FATAL_ERROR, errorString);
-    return;
-    }
-
-  pos = 0;
-  lastPos = pos;
   while((pos = input.find("$<TARGET_NAME:", lastPos)) != input.npos)
     {
     std::string::size_type nameStartPos = pos + sizeof("$<TARGET_NAME:") - 1;
@@ -537,7 +483,7 @@ cmExportFileGenerator
                                                          preprocessRule);
   if (!prepro.empty())
     {
-    this->ResolveTargetsInGeneratorExpressions(prepro, target, 0,
+    this->ResolveTargetsInGeneratorExpressions(prepro, target,
                                                missingTargets,
                                                ReplaceFreeTargets);
     properties["IMPORTED_LINK_INTERFACE_LIBRARIES" + suffix] = prepro;
diff --git a/Source/cmExportFileGenerator.h b/Source/cmExportFileGenerator.h
index 5ad27bf..776be61 100644
--- a/Source/cmExportFileGenerator.h
+++ b/Source/cmExportFileGenerator.h
@@ -119,7 +119,7 @@ protected:
   };
 
   void ResolveTargetsInGeneratorExpressions(std::string &input,
-                          cmTarget* target, const char *propName,
+                          cmTarget* target,
                           std::vector<std::string> &missingTargets,
                           FreeTargetsReplace replace = NoReplaceFreeTargets);
 
@@ -150,7 +150,7 @@ private:
                           std::vector<std::string> &missingTargets);
 
   void ResolveTargetsInGeneratorExpression(std::string &input,
-                                    cmTarget* target, const char *propName,
+                                    cmTarget* target,
                                     std::vector<std::string> &missingTargets);
 
   virtual void ReplaceInstallPrefix(std::string &input);
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index eb8cdc8..cd6a40b 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -713,98 +713,6 @@ static const struct InstallPrefixNode : public cmGeneratorExpressionNode
 } installPrefixNode;
 
 //----------------------------------------------------------------------------
-static const struct LinkedNode : public cmGeneratorExpressionNode
-{
-  LinkedNode() {}
-
-  virtual bool GeneratesContent() const { return true; }
-  virtual int NumExpectedParameters() const { return 1; }
-  virtual bool RequiresLiteralInput() const { return true; }
-
-  std::string Evaluate(const std::vector<std::string> &parameters,
-                       cmGeneratorExpressionContext *context,
-                       const GeneratorExpressionContent *content,
-                       cmGeneratorExpressionDAGChecker *dagChecker) const
-  {
-    if (dagChecker->EvaluatingIncludeDirectories())
-      {
-      return this->GetInterfaceProperty(parameters.front(),
-                                        "INCLUDE_DIRECTORIES",
-                                        context, content, dagChecker);
-      }
-    if (dagChecker->EvaluatingCompileDefinitions())
-      {
-      return this->GetInterfaceProperty(parameters.front(),
-                                        "COMPILE_DEFINITIONS",
-                                        context, content, dagChecker);
-      }
-
-    reportError(context, content->GetOriginalExpression(),
-                "$<LINKED:...> may only be used in INCLUDE_DIRECTORIES and "
-                "COMPILE_DEFINITIONS properties.");
-
-    return std::string();
-  }
-
-private:
-  std::string GetInterfaceProperty(const std::string &item,
-                      const std::string &prop,
-                      cmGeneratorExpressionContext *context,
-                      const GeneratorExpressionContent *content,
-                      cmGeneratorExpressionDAGChecker *dagCheckerParent) const
-  {
-    cmTarget *target = context->CurrentTarget
-                              ->GetMakefile()->FindTargetToUse(item.c_str());
-    if (!target)
-      {
-      return std::string();
-      }
-    std::string propertyName = "INTERFACE_" + prop;
-    const char *propContent = target->GetProperty(propertyName.c_str());
-    if (!propContent)
-      {
-      return std::string();
-      }
-
-    cmGeneratorExpressionDAGChecker dagChecker(context->Backtrace,
-                                               target->GetName(),
-                                               propertyName,
-                                               content,
-                                               dagCheckerParent);
-
-    switch (dagChecker.check())
-      {
-    case cmGeneratorExpressionDAGChecker::SELF_REFERENCE:
-      dagChecker.reportError(context, content->GetOriginalExpression());
-      return std::string();
-    case cmGeneratorExpressionDAGChecker::CYCLIC_REFERENCE:
-      // No error. We just skip cyclic references.
-      return std::string();
-    case cmGeneratorExpressionDAGChecker::ALREADY_SEEN:
-      // No error. We're not going to find anything new here.
-      return std::string();
-    case cmGeneratorExpressionDAGChecker::DAG:
-      break;
-      }
-
-    cmGeneratorExpression ge(context->Backtrace);
-    cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(propContent);
-    std::string result = cge->Evaluate(context->Makefile,
-                        context->Config,
-                        context->Quiet,
-                        context->HeadTarget,
-                        target,
-                        &dagChecker);
-    if (cge->GetHadContextSensitiveCondition())
-      {
-      context->HadContextSensitiveCondition = true;
-      }
-    return result;
-  }
-
-} linkedNode;
-
-//----------------------------------------------------------------------------
 template<bool linker, bool soname>
 struct TargetFilesystemArtifactResultCreator
 {
@@ -1038,8 +946,6 @@ cmGeneratorExpressionNode* GetNode(const std::string &identifier)
     return &targetDefinedNode;
   else if (identifier == "INSTALL_PREFIX")
     return &installPrefixNode;
-  else if (identifier == "LINKED")
-    return &linkedNode;
   return 0;
 
 }
diff --git a/Tests/CMakeCommands/target_compile_definitions/CMakeLists.txt b/Tests/CMakeCommands/target_compile_definitions/CMakeLists.txt
index 8fed4ca..8a4437b 100644
--- a/Tests/CMakeCommands/target_compile_definitions/CMakeLists.txt
+++ b/Tests/CMakeCommands/target_compile_definitions/CMakeLists.txt
@@ -16,15 +16,9 @@ add_executable(consumer
   "${CMAKE_CURRENT_SOURCE_DIR}/consumer.cpp"
 )
 
-add_library(linked UNKNOWN IMPORTED)
-set_property(TARGET linked PROPERTY
-  INTERFACE_COMPILE_DEFINITIONS "MY_LINKED_DEFINE")
-
-
 target_compile_definitions(consumer
   PRIVATE $<TARGET_PROPERTY:target_compile_definitions,INTERFACE_COMPILE_DEFINITIONS>
   $<$<TARGET_DEFINED:notdefined>:SHOULD_NOT_BE_DEFINED>
   $<$<TARGET_DEFINED:target_compile_definitions>:SHOULD_BE_DEFINED>
-  $<TARGET_PROPERTY:linked,INTERFACE_COMPILE_DEFINITIONS>
   -DDASH_D_DEFINE
 )
diff --git a/Tests/CMakeCommands/target_compile_definitions/consumer.cpp b/Tests/CMakeCommands/target_compile_definitions/consumer.cpp
index c077593..1a46aa5 100644
--- a/Tests/CMakeCommands/target_compile_definitions/consumer.cpp
+++ b/Tests/CMakeCommands/target_compile_definitions/consumer.cpp
@@ -23,8 +23,4 @@
 #error Expected DASH_D_DEFINE
 #endif
 
-#ifndef MY_LINKED_DEFINE
-#error Expected MY_LINKED_DEFINE
-#endif
-
 int main() { return 0; }
diff --git a/Tests/CMakeCommands/target_include_directories/CMakeLists.txt b/Tests/CMakeCommands/target_include_directories/CMakeLists.txt
index 2c2ca42..c2da175 100644
--- a/Tests/CMakeCommands/target_include_directories/CMakeLists.txt
+++ b/Tests/CMakeCommands/target_include_directories/CMakeLists.txt
@@ -17,9 +17,6 @@ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/poison/common.h" "#error Should not be i
 file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/cure")
 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cure/common.h" "#define CURE_DEFINE\n")
 
-file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/linkedinclude")
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/linkedinclude/linkedinclude.h" "#define LINKEDINCLUDE_DEFINE\n")
-
 add_executable(target_include_directories
   "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp"
 )
@@ -45,13 +42,8 @@ add_executable(consumer
   "${CMAKE_CURRENT_SOURCE_DIR}/consumer.cpp"
 )
 
-add_library(linked UNKNOWN IMPORTED)
-set_property(TARGET linked PROPERTY
-  INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/linkedinclude")
-
 target_include_directories(consumer
   PRIVATE
     $<TARGET_PROPERTY:target_include_directories,INTERFACE_INCLUDE_DIRECTORIES>
-    $<TARGET_PROPERTY:linked,INTERFACE_INCLUDE_DIRECTORIES>
   relative_dir
 )
diff --git a/Tests/CMakeCommands/target_include_directories/consumer.cpp b/Tests/CMakeCommands/target_include_directories/consumer.cpp
index ccffd9c..82b800a 100644
--- a/Tests/CMakeCommands/target_include_directories/consumer.cpp
+++ b/Tests/CMakeCommands/target_include_directories/consumer.cpp
@@ -3,7 +3,6 @@
 #include "publicinclude.h"
 #include "interfaceinclude.h"
 #include "relative_dir.h"
-#include "linkedinclude.h"
 
 #ifdef PRIVATEINCLUDE_DEFINE
 #error Unexpected PRIVATEINCLUDE_DEFINE
@@ -25,8 +24,4 @@
 #error Expected RELATIVE_DIR_DEFINE
 #endif
 
-#ifndef LINKEDINCLUDE_DEFINE
-#error Expected LINKEDINCLUDE_DEFINE
-#endif
-
 int main() { return 0; }
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-stderr.txt
deleted file mode 100644
index 4cd9cdd..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-stderr.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-CMake Error:
-  Error evaluating generator expression:
-
-    \$<LINKED:something>
-
-  \$<LINKED:...> may only be used in INCLUDE_DIRECTORIES and
-  COMPILE_DEFINITIONS properties.$
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked.cmake
deleted file mode 100644
index 542ea76..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
-           "int main(int, char **) { return 0; }\n")
-
-add_executable(TargetPropertyGeneratorExpressions
-           "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
-target_link_libraries(TargetPropertyGeneratorExpressions "$<LINKED:something>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
index ea48f61..0ee3238 100644
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
@@ -15,4 +15,3 @@ run_cmake(BadInvalidName5)
 run_cmake(BadInvalidName6)
 run_cmake(BadInvalidName7)
 run_cmake(BadInvalidName8)
-run_cmake(BadLinked)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e1f908015f943ed507063260b3aae1f3b503237e
commit e1f908015f943ed507063260b3aae1f3b503237e
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 11:58:50 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Wed Feb 13 15:12:31 2013 +0100

    Don't populate INTERFACE includes and defines properties in tll.
    
    This is a partial revert of commit 77cecb77 (Add includes and compile
    definitions with target_link_libraries., 2012-11-05).
    
    As the interface includes and defines are now determined by the link
    closure, there is no need to populate the corresponding properties
    explicitly.

diff --git a/Source/cmTargetLinkLibrariesCommand.cxx b/Source/cmTargetLinkLibrariesCommand.cxx
index 22ea920..3f652c9 100644
--- a/Source/cmTargetLinkLibrariesCommand.cxx
+++ b/Source/cmTargetLinkLibrariesCommand.cxx
@@ -252,42 +252,10 @@ cmTargetLinkLibrariesCommand
 }
 
 //----------------------------------------------------------------------------
-static std::string compileProperty(cmTarget *tgt, const std::string &lib,
-                                   bool isGenex,
-                                   const std::string &property,
-                                   cmTarget::LinkLibraryType llt)
-{
-  std::string value = !isGenex ? "$<LINKED:" + lib + ">"
-                               : "$<$<TARGET_DEFINED:" + lib + ">:" +
-                                   "$<TARGET_PROPERTY:" + lib +
-                                   ",INTERFACE_" + property + ">"
-                                 ">";
-
-  return tgt->GetDebugGeneratorExpressions(value, llt);
-}
-
-//----------------------------------------------------------------------------
 void
 cmTargetLinkLibrariesCommand::HandleLibrary(const char* lib,
                                             cmTarget::LinkLibraryType llt)
 {
-  const bool isGenex = cmGeneratorExpression::Find(lib) != std::string::npos;
-
-  const bool potentialTargetName
-                              = cmGeneratorExpression::IsValidTargetName(lib);
-
-  if (potentialTargetName || isGenex)
-    {
-    this->Target->AppendProperty("INCLUDE_DIRECTORIES",
-                                 compileProperty(this->Target, lib,
-                                                 isGenex,
-                                      "INCLUDE_DIRECTORIES", llt).c_str());
-    this->Target->AppendProperty("COMPILE_DEFINITIONS",
-                                 compileProperty(this->Target, lib,
-                                                 isGenex,
-                                      "COMPILE_DEFINITIONS", llt).c_str());
-    }
-
   // Handle normal case first.
   if(this->CurrentProcessingState != ProcessingLinkInterface)
     {
@@ -308,18 +276,6 @@ cmTargetLinkLibrariesCommand::HandleLibrary(const char* lib,
       }
     }
 
-  if (potentialTargetName || isGenex)
-    {
-    this->Target->AppendProperty("INTERFACE_COMPILE_DEFINITIONS",
-                                compileProperty(this->Target, lib,
-                                                isGenex,
-                                        "COMPILE_DEFINITIONS", llt).c_str());
-    this->Target->AppendProperty("INTERFACE_INCLUDE_DIRECTORIES",
-                                compileProperty(this->Target, lib,
-                                                isGenex,
-                                        "INCLUDE_DIRECTORIES", llt).c_str());
-    }
-
   // Get the list of configurations considered to be DEBUG.
   std::vector<std::string> const& debugConfigs =
     this->Makefile->GetCMakeInstance()->GetDebugConfigs();
diff --git a/Tests/RunCMake/include_directories/DebugIncludes-stderr.txt b/Tests/RunCMake/include_directories/DebugIncludes-stderr.txt
index c17e0ae..63aec90 100644
--- a/Tests/RunCMake/include_directories/DebugIncludes-stderr.txt
+++ b/Tests/RunCMake/include_directories/DebugIncludes-stderr.txt
@@ -23,21 +23,22 @@ CMake Debug Log at DebugIncludes.cmake:18 \(include_directories\):
 Call Stack \(most recent call first\):
   CMakeLists.txt:3 \(include\)
 +
-CMake Debug Log at DebugIncludes.cmake:26 \(target_link_libraries\):
+CMake Debug Log at DebugIncludes.cmake:33 \(set_property\):
   Used includes for target lll:
 
    \* .*/Tests/RunCMake/include_directories/five
+   \* .*/Tests/RunCMake/include_directories/six
+   \* .*/Tests/RunCMake/include_directories/seven
 
 Call Stack \(most recent call first\):
+  DebugIncludes.cmake:44 \(some_macro\)
+  DebugIncludes.cmake:47 \(some_function\)
   CMakeLists.txt:3 \(include\)
 +
-CMake Debug Log at DebugIncludes.cmake:29 \(set_property\):
+CMake Debug Log at DebugIncludes.cmake:30 \(target_link_libraries\):
   Used includes for target lll:
 
-   \* .*/Tests/RunCMake/include_directories/six
-   \* .*/Tests/RunCMake/include_directories/seven
+   \* .*/Tests/RunCMake/include_directories/eight
 
 Call Stack \(most recent call first\):
-  DebugIncludes.cmake:40 \(some_macro\)
-  DebugIncludes.cmake:43 \(some_function\)
   CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/include_directories/DebugIncludes.cmake b/Tests/RunCMake/include_directories/DebugIncludes.cmake
index 794a852..de36899 100644
--- a/Tests/RunCMake/include_directories/DebugIncludes.cmake
+++ b/Tests/RunCMake/include_directories/DebugIncludes.cmake
@@ -22,7 +22,11 @@ include_directories(
 )
 
 add_library(foo "${CMAKE_CURRENT_BINARY_DIR}/DebugIncludes.cpp")
-target_include_directories(foo INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/five")
+target_include_directories(foo
+  INTERFACE
+    "${CMAKE_CURRENT_SOURCE_DIR}/seven"
+    "${CMAKE_CURRENT_SOURCE_DIR}/eight"
+)
 target_link_libraries(lll foo)
 
 macro(some_macro)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=567c8d103ed3c3cb7303877d89e8508dd3f8d0ca
commit 567c8d103ed3c3cb7303877d89e8508dd3f8d0ca
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 11:53:36 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Wed Feb 13 15:12:31 2013 +0100

    Revert "Don't allow utility or global targets in the LINKED expression."
    
    This reverts commit 9712362b4580fb92394ecf8ff57be186571f4319.

diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 6c1c12a..eb8cdc8 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -759,14 +759,6 @@ private:
       {
       return std::string();
       }
-    if(target->GetType() >= cmTarget::UTILITY &&
-      target->GetType() != cmTarget::UNKNOWN_LIBRARY)
-      {
-      ::reportError(context, content->GetOriginalExpression(),
-                  "Target \"" + item
-                  + "\" is not an executable or library.");
-      return std::string();
-      }
     std::string propertyName = "INTERFACE_" + prop;
     const char *propContent = target->GetProperty(propertyName.c_str());
     if (!propContent)
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-UtilityTarget-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-UtilityTarget-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-UtilityTarget-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-UtilityTarget-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-UtilityTarget-stderr.txt
deleted file mode 100644
index fb06554..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-UtilityTarget-stderr.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-CMake Error at BadLinked-UtilityTarget.cmake:7 \(set_property\):
-  Error evaluating generator expression:
-
-    \$<LINKED:check>
-
-  Target "check" is not an executable or library.
-Call Stack \(most recent call first\):
-  CMakeLists.txt:8 \(include\)
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-UtilityTarget.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-UtilityTarget.cmake
deleted file mode 100644
index d114c8f..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadLinked-UtilityTarget.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-add_custom_target(check ALL
-  COMMAND ${CMAKE_COMMAND} -E echo check
-)
-
-add_library(foo STATIC empty.cpp)
-set_property(TARGET foo PROPERTY INCLUDE_DIRECTORIES $<LINKED:check>)
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
index 84039c4..ea48f61 100644
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
@@ -16,4 +16,3 @@ run_cmake(BadInvalidName6)
 run_cmake(BadInvalidName7)
 run_cmake(BadInvalidName8)
 run_cmake(BadLinked)
-run_cmake(BadLinked-UtilityTarget)
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/empty.cpp b/Tests/RunCMake/TargetPropertyGeneratorExpressions/empty.cpp
deleted file mode 100644
index 8b1a393..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/empty.cpp
+++ /dev/null
@@ -1 +0,0 @@
-// empty

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a1c4905f723f9d99bd481580f9fe24fdaf81b174
commit a1c4905f723f9d99bd481580f9fe24fdaf81b174
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 11:29:09 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Wed Feb 13 15:12:30 2013 +0100

    Use the link information as a source of compile definitions and includes.
    
    After evaluating the INTERFACE_INCLUDE_DIRECTORIES, of a target in a
    generator expression, also read the INTERFACE_INCLUDE_DIRECTORIES of
    its link interface dependencies.
    
    That means that code such as this will result in the 'user' target
    using /bar/include and /foo/include:
    
     add_library(foo ...)
     target_include_directories(foo INTERFACE /foo/include)
     add_library(bar ...)
     target_include_directories(bar INTERFACE /bar/include)
     target_link_libraries(bar LINK_PUBLIC foo)
    
     add_executable(user ...)
     target_include_directories(user PRIVATE
        $<TARGET_PROPERTY:bar,INTERFACE_INCLUDE_DIRECTORIES>)
    
    Also process the interface include directories from direct link
    dependencies for in-build targets.
    
    The situation is similar for the INTERFACE_COMPILE_DEFINITIONS. The
    include directories related code is currently more complex because
    we also need to store a backtrace at configure-time for the purpose
    of debugging includes. The compile definitions related code will use
    the same pattern in the future.
    
    This is not a change in behavior, as existing code has the same effect,
    but that existing code will be removed in follow-up commits.

diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 98e0ada..6c1c12a 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -451,15 +451,68 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
       }
 
     const char *prop = target->GetProperty(propertyName.c_str());
-    if (!prop)
+
+    std::string linkedTargetsContent;
+
+    if (dagCheckerParent)
       {
-      if (target->IsImported())
+      if (dagCheckerParent->EvaluatingLinkLibraries())
         {
-        return std::string();
+        if(!prop)
+          {
+          return std::string();
+          }
         }
-      if (dagCheckerParent && dagCheckerParent->EvaluatingLinkLibraries())
+      else
         {
-        return std::string();
+        assert(dagCheckerParent->EvaluatingIncludeDirectories()
+            || dagCheckerParent->EvaluatingCompileDefinitions());
+
+        if (propertyName == "INTERFACE_INCLUDE_DIRECTORIES"
+            || propertyName == "INTERFACE_COMPILE_DEFINITIONS")
+          {
+          const cmTarget::LinkInterface *iface = target->GetLinkInterface(
+                                                        context->Config,
+                                                        context->HeadTarget);
+          if(iface)
+            {
+            cmGeneratorExpression ge(context->Backtrace);
+
+            std::string sep;
+            std::string depString;
+            for (std::vector<std::string>::const_iterator
+                it = iface->Libraries.begin();
+                it != iface->Libraries.end(); ++it)
+              {
+              if (context->Makefile->FindTargetToUse(it->c_str()))
+                {
+                depString +=
+                  sep + "$<TARGET_PROPERTY:" + *it + "," + propertyName + ">";
+                sep = ";";
+                }
+              }
+            cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
+                                                          ge.Parse(depString);
+            linkedTargetsContent = cge->Evaluate(context->Makefile,
+                                context->Config,
+                                context->Quiet,
+                                context->HeadTarget,
+                                target,
+                                &dagChecker);
+            if (cge->GetHadContextSensitiveCondition())
+              {
+              context->HadContextSensitiveCondition = true;
+              }
+            }
+          }
+        }
+      }
+
+    if (!prop)
+      {
+      if (target->IsImported())
+        {
+        return linkedTargetsContent;
         }
       if (target->IsLinkInterfaceDependentBoolProperty(propertyName,
                                                        context->Config))
@@ -480,7 +533,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
         return propContent ? propContent : "";
         }
 
-      return std::string();
+      return linkedTargetsContent;
       }
 
     for (size_t i = 0;
@@ -503,6 +556,10 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
           {
           context->HadContextSensitiveCondition = true;
           }
+        if (!linkedTargetsContent.empty())
+          {
+          result += (result.empty() ? "" : ";") + linkedTargetsContent;
+          }
         return result;
         }
       }
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 6da6957..003f3d8 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -137,6 +137,7 @@ public:
     std::vector<std::string> CachedIncludes;
   };
   std::vector<IncludeDirectoriesEntry*> IncludeDirectoriesEntries;
+  std::vector<cmValueWithOrigin> LinkInterfaceIncludeDirectoriesEntries;
 };
 
 //----------------------------------------------------------------------------
@@ -2743,6 +2744,12 @@ void cmTarget::AppendBuildInterfaceIncludes()
 }
 
 //----------------------------------------------------------------------------
+void cmTarget::AppendTllInclude(const cmValueWithOrigin &entry)
+{
+  this->Internal->LinkInterfaceIncludeDirectoriesEntries.push_back(entry);
+}
+
+//----------------------------------------------------------------------------
 void cmTarget::InsertInclude(const cmValueWithOrigin &entry,
                      bool before)
 {
@@ -2757,43 +2764,18 @@ void cmTarget::InsertInclude(const cmValueWithOrigin &entry,
 }
 
 //----------------------------------------------------------------------------
-std::vector<std::string> cmTarget::GetIncludeDirectories(const char *config)
+static void processIncludeDirectories(cmTarget *tgt,
+      const std::vector<cmTargetInternals::IncludeDirectoriesEntry*> &entries,
+      std::vector<std::string> &includes,
+      std::set<std::string> &uniqueIncludes,
+      cmGeneratorExpressionDAGChecker *dagChecker,
+      const char *config, bool debugIncludes)
 {
-  std::vector<std::string> includes;
-  std::set<std::string> uniqueIncludes;
-  cmListFileBacktrace lfbt;
-
-  cmGeneratorExpressionDAGChecker dagChecker(lfbt,
-                                              this->GetName(),
-                                              "INCLUDE_DIRECTORIES", 0, 0);
-
-  this->AppendBuildInterfaceIncludes();
-
-  std::vector<std::string> debugProperties;
-  const char *debugProp =
-              this->Makefile->GetDefinition("CMAKE_DEBUG_TARGET_PROPERTIES");
-  if (debugProp)
-    {
-    cmSystemTools::ExpandListArgument(debugProp, debugProperties);
-    }
-
-  bool debugIncludes = !this->DebugIncludesDone
-                    && std::find(debugProperties.begin(),
-                                 debugProperties.end(),
-                                 "INCLUDE_DIRECTORIES")
-                        != debugProperties.end();
-
-  if (this->Makefile->IsGeneratingBuildSystem())
-    {
-    this->DebugIncludesDone = true;
-    }
+  cmMakefile *mf = tgt->GetMakefile();
 
   for (std::vector<cmTargetInternals::IncludeDirectoriesEntry*>::const_iterator
-      it = this->Internal->IncludeDirectoriesEntries.begin(),
-      end = this->Internal->IncludeDirectoriesEntries.end();
-      it != end; ++it)
+      it = entries.begin(), end = entries.end(); it != end; ++it)
     {
-
     bool testIsOff = true;
     bool cacheIncludes = false;
     std::vector<std::string> entryIncludes = (*it)->CachedIncludes;
@@ -2803,13 +2785,13 @@ std::vector<std::string> cmTarget::GetIncludeDirectories(const char *config)
       }
     else
       {
-      cmSystemTools::ExpandListArgument((*it)->ge->Evaluate(this->Makefile,
+      cmSystemTools::ExpandListArgument((*it)->ge->Evaluate(mf,
                                                 config,
                                                 false,
-                                                this,
-                                                &dagChecker),
+                                                tgt,
+                                                dagChecker),
                                       entryIncludes);
-      if (this->Makefile->IsGeneratingBuildSystem()
+      if (mf->IsGeneratingBuildSystem()
           && !(*it)->ge->GetHadContextSensitiveCondition())
         {
         cacheIncludes = true;
@@ -2840,11 +2822,90 @@ std::vector<std::string> cmTarget::GetIncludeDirectories(const char *config)
       }
     if (!usedIncludes.empty())
       {
-      this->Makefile->GetCMakeInstance()->IssueMessage(cmake::LOG,
-                            "Used includes for target " + this->Name + ":\n"
+      mf->GetCMakeInstance()->IssueMessage(cmake::LOG,
+                            std::string("Used includes for target ")
+                            + tgt->GetName() + ":\n"
                             + usedIncludes, (*it)->ge->GetBacktrace());
       }
     }
+}
+
+//----------------------------------------------------------------------------
+std::vector<std::string> cmTarget::GetIncludeDirectories(const char *config)
+{
+  std::vector<std::string> includes;
+  std::set<std::string> uniqueIncludes;
+  cmListFileBacktrace lfbt;
+
+  cmGeneratorExpressionDAGChecker dagChecker(lfbt,
+                                              this->GetName(),
+                                              "INCLUDE_DIRECTORIES", 0, 0);
+
+  this->AppendBuildInterfaceIncludes();
+
+  std::vector<std::string> debugProperties;
+  const char *debugProp =
+              this->Makefile->GetDefinition("CMAKE_DEBUG_TARGET_PROPERTIES");
+  if (debugProp)
+    {
+    cmSystemTools::ExpandListArgument(debugProp, debugProperties);
+    }
+
+  bool debugIncludes = !this->DebugIncludesDone
+                    && std::find(debugProperties.begin(),
+                                 debugProperties.end(),
+                                 "INCLUDE_DIRECTORIES")
+                        != debugProperties.end();
+
+  if (this->Makefile->IsGeneratingBuildSystem())
+    {
+    this->DebugIncludesDone = true;
+    }
+
+  processIncludeDirectories(this,
+                            this->Internal->IncludeDirectoriesEntries,
+                            includes,
+                            uniqueIncludes,
+                            &dagChecker,
+                            config,
+                            debugIncludes);
+
+  std::vector<cmTargetInternals::IncludeDirectoriesEntry*>
+                                      linkInterfaceIncludeDirectoriesEntries;
+
+  for (std::vector<cmValueWithOrigin>::const_iterator
+      it = this->Internal->LinkInterfaceIncludeDirectoriesEntries.begin(),
+      end = this->Internal->LinkInterfaceIncludeDirectoriesEntries.end();
+      it != end; ++it)
+    {
+    {
+    cmGeneratorExpression ge(lfbt);
+    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.c_str()))
+      {
+      continue;
+      }
+    }
+    cmGeneratorExpression ge(it->Backtrace);
+    cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(
+        "$<TARGET_PROPERTY:" + it->Value + ",INTERFACE_INCLUDE_DIRECTORIES>");
+
+    linkInterfaceIncludeDirectoriesEntries.push_back(
+                        new cmTargetInternals::IncludeDirectoriesEntry(cge));
+    }
+
+  processIncludeDirectories(this,
+                            linkInterfaceIncludeDirectoriesEntries,
+                            includes,
+                            uniqueIncludes,
+                            &dagChecker,
+                            config,
+                            debugIncludes);
+
+  deleteAndClear(linkInterfaceIncludeDirectoriesEntries);
+
   return includes;
 }
 
@@ -2858,23 +2919,57 @@ std::string cmTarget::GetCompileDefinitions(const char *config)
     }
 
   const char *prop = this->GetProperty(defPropName.c_str());
+  cmListFileBacktrace lfbt;
+  cmGeneratorExpressionDAGChecker dagChecker(lfbt,
+                                            this->GetName(),
+                                            defPropName, 0, 0);
 
-  if (!prop)
+  std::string result;
+  if (prop)
     {
-    return "";
+    cmGeneratorExpression ge(lfbt);
+
+    result = ge.Parse(prop)->Evaluate(this->Makefile,
+                                  config,
+                                  false,
+                                  this,
+                                  &dagChecker);
     }
 
-  cmListFileBacktrace lfbt;
-  cmGeneratorExpression ge(lfbt);
+  std::vector<std::string> libs;
+  this->GetDirectLinkLibraries(config, libs, this);
 
-  cmGeneratorExpressionDAGChecker dagChecker(lfbt,
-                                             this->GetName(),
-                                             defPropName, 0, 0);
-  return ge.Parse(prop)->Evaluate(this->Makefile,
-                                 config,
-                                 false,
-                                 this,
-                                 &dagChecker);
+  if (libs.empty())
+    {
+    return result;
+    }
+
+  std::string sep;
+  std::string depString;
+  for (std::vector<std::string>::const_iterator it = libs.begin();
+      it != libs.end(); ++it)
+    {
+    if (this->Makefile->FindTargetToUse(it->c_str()))
+      {
+      depString += sep + "$<TARGET_PROPERTY:"
+                + *it + ",INTERFACE_COMPILE_DEFINITIONS>";
+      sep = ";";
+      }
+    }
+
+  cmGeneratorExpression ge2(lfbt);
+  cmsys::auto_ptr<cmCompiledGeneratorExpression> cge2 = ge2.Parse(depString);
+  std::string depResult = cge2->Evaluate(this->Makefile,
+                      config,
+                      false,
+                      this,
+                      &dagChecker);
+  if (!depResult.empty())
+    {
+    result += (result.empty() ? "" : ";") + depResult;
+    }
+
+  return result;
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 028a55e..e659baf 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -495,6 +495,7 @@ public:
   std::vector<std::string> GetIncludeDirectories(const char *config);
   void InsertInclude(const cmValueWithOrigin &entry,
                      bool before = false);
+  void AppendTllInclude(const cmValueWithOrigin &entry);
 
   void AppendBuildInterfaceIncludes();
 
diff --git a/Source/cmTargetLinkLibrariesCommand.cxx b/Source/cmTargetLinkLibrariesCommand.cxx
index 9dd0e5b..22ea920 100644
--- a/Source/cmTargetLinkLibrariesCommand.cxx
+++ b/Source/cmTargetLinkLibrariesCommand.cxx
@@ -291,6 +291,14 @@ cmTargetLinkLibrariesCommand::HandleLibrary(const char* lib,
   // Handle normal case first.
   if(this->CurrentProcessingState != ProcessingLinkInterface)
     {
+    {
+    cmListFileBacktrace lfbt;
+    this->Makefile->GetBacktrace(lfbt);
+    cmValueWithOrigin entry(this->Target->GetDebugGeneratorExpressions(lib,
+                                                                       llt),
+                            lfbt);
+    this->Target->AppendTllInclude(entry);
+    }
     this->Makefile
       ->AddLinkLibraryForTarget(this->Target->GetName(), lib, llt);
     if (this->CurrentProcessingState != ProcessingPublicInterface)

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

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list