[Cmake-commits] CMake branch, next, updated. v2.8.10.2-2107-g1537ebe

Stephen Kelly steveire at gmail.com
Tue Feb 12 11:25:51 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  1537ebe0c16d741b2f7e8a10c5f40799267784ad (commit)
       via  54a8404013674c1ec32e19c45365d293c9fb75fa (commit)
       via  3659e7f830372889a4ac95b72f31583e1383ea99 (commit)
       via  cb940c16ddce289579066ce54799f506606906e3 (commit)
       via  26aec5ff20e2d94a7f27f882e2328e3c98a85c58 (commit)
       via  492c7e0b064ad72915988d456fd102d48acf6917 (commit)
       via  1c14b1eca70d541d1b828e2fd95a27ab2868c60f (commit)
       via  9ddef5b3d47876e7758c67c13705e171769306d2 (commit)
      from  f4ccda667ab0f63f0480091b4e59cc6180c9426e (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=1537ebe0c16d741b2f7e8a10c5f40799267784ad
commit 1537ebe0c16d741b2f7e8a10c5f40799267784ad
Merge: f4ccda6 54a8404
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 11:25:43 2013 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Feb 12 11:25:43 2013 -0500

    Merge topic 'linked-usage-cleanup' into next
    
    54a8404 Don't add target-specific interface includes and defines to Qt 4 targets.
    3659e7f Revert "Add a way to exclude INTERFACE properties from exported targets."
    cb940c1 Revert "find_package: Reword <package>_NO_INTERFACES documentation"
    26aec5f Revert "Add the $<LINKED:...> generator expression."
    492c7e0 Don't populate INTERFACE includes and defines properties in tll.
    1c14b1e Revert "Don't allow utility or global targets in the LINKED expression."
    9ddef5b Use the link information as a source of compile definitions and includes.


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=54a8404013674c1ec32e19c45365d293c9fb75fa
commit 54a8404013674c1ec32e19c45365d293c9fb75fa
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 12:05:40 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Tue Feb 12 17:25:19 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=3659e7f830372889a4ac95b72f31583e1383ea99
commit 3659e7f830372889a4ac95b72f31583e1383ea99
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 12:00:41 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Tue Feb 12 17:25:19 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=cb940c16ddce289579066ce54799f506606906e3
commit cb940c16ddce289579066ce54799f506606906e3
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 12:00:31 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Tue Feb 12 17:25:19 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=26aec5ff20e2d94a7f27f882e2328e3c98a85c58
commit 26aec5ff20e2d94a7f27f882e2328e3c98a85c58
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 11:56:58 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Tue Feb 12 17:25:19 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=492c7e0b064ad72915988d456fd102d48acf6917
commit 492c7e0b064ad72915988d456fd102d48acf6917
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 11:58:50 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Tue Feb 12 17:25:18 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=1c14b1eca70d541d1b828e2fd95a27ab2868c60f
commit 1c14b1eca70d541d1b828e2fd95a27ab2868c60f
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 11:53:36 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Tue Feb 12 17:25:18 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=9ddef5b3d47876e7758c67c13705e171769306d2
commit 9ddef5b3d47876e7758c67c13705e171769306d2
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 12 11:29:09 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Tue Feb 12 17:25:18 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..35ebf8d 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,88 @@ 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);
+
   return includes;
 }
 
@@ -2858,23 +2917,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