[Cmake-commits] CMake branch, next, updated. v2.8.3-678-gb9b5aee

Brad King brad.king at kitware.com
Mon Nov 22 09:15:05 EST 2010


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  b9b5aee2a6a761066f2f2c7fc94c93de3402b2ba (commit)
       via  e01cce28694201342adc97825982ed66fc52af65 (commit)
       via  bc7395c096be40f8a0fecbab4aa7539c05898ef2 (commit)
      from  7ccae4678f0db4715a359387b9bfa5db4a1ddb9c (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=b9b5aee2a6a761066f2f2c7fc94c93de3402b2ba
commit b9b5aee2a6a761066f2f2c7fc94c93de3402b2ba
Merge: 7ccae46 e01cce2
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Nov 22 09:15:02 2010 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Nov 22 09:15:02 2010 -0500

    Merge topic 'imported-target-dependencies' into next
    
    e01cce2 Allow add_dependencies() on imported targets (#10395)
    bc7395c Merge branch 'vs-target-dependencies' into imported-target-dependencies


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e01cce28694201342adc97825982ed66fc52af65
commit e01cce28694201342adc97825982ed66fc52af65
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 19 13:36:11 2010 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Nov 19 17:19:21 2010 -0500

    Allow add_dependencies() on imported targets (#10395)
    
    Imported targets do not themselves build, but we can follow dependencies
    through them to find real targets.  This allows imported targets to
    depend on custom targets that provide the underlying files at build
    time.

diff --git a/Source/cmAddDependenciesCommand.cxx b/Source/cmAddDependenciesCommand.cxx
index 1205f07..a77140d 100644
--- a/Source/cmAddDependenciesCommand.cxx
+++ b/Source/cmAddDependenciesCommand.cxx
@@ -24,11 +24,7 @@ bool cmAddDependenciesCommand
     }
 
   std::string target_name = args[0];
-
-  cmTarget* target = 
-    this->GetMakefile()->GetLocalGenerator()->
-    GetGlobalGenerator()->FindTarget(0, target_name.c_str());
-  if(target)
+  if(cmTarget* target = this->Makefile->FindTargetToUse(target_name.c_str()))
     {
     std::vector<std::string>::const_iterator s = args.begin();
     ++s; // skip over target_name
diff --git a/Source/cmAddDependenciesCommand.h b/Source/cmAddDependenciesCommand.h
index 6a981c3..fee011c 100644
--- a/Source/cmAddDependenciesCommand.h
+++ b/Source/cmAddDependenciesCommand.h
@@ -62,6 +62,8 @@ public:
       "top-level target is one created by ADD_EXECUTABLE, ADD_LIBRARY, "
       "or ADD_CUSTOM_TARGET.  Adding dependencies with this command "
       "can be used to make sure one target is built before another target.  "
+      "Dependencies added to an IMPORTED target are followed transitively "
+      "in its place since the target itself does not build.  "
       "See the DEPENDS option of ADD_CUSTOM_TARGET "
       "and ADD_CUSTOM_COMMAND for adding file-level dependencies in custom "
       "rules.  See the OBJECT_DEPENDS option in "
diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx
index 3f9c7ec..a4ca363 100644
--- a/Source/cmComputeTargetDepends.cxx
+++ b/Source/cmComputeTargetDepends.cxx
@@ -246,13 +246,7 @@ void cmComputeTargetDepends::AddTargetDepend(int depender_index,
 
   // Check the target's makefile first.
   cmTarget* dependee =
-    depender->GetMakefile()->FindTarget(dependee_name);
-
-  // Then search globally.
-  if(!dependee)
-    {
-    dependee = this->GlobalGenerator->FindTarget(0, dependee_name);
-    }
+    depender->GetMakefile()->FindTargetToUse(dependee_name);
 
   // Skip targets that will not really be linked.  This is probably a
   // name conflict between an external library and an executable
@@ -264,25 +258,42 @@ void cmComputeTargetDepends::AddTargetDepend(int depender_index,
     dependee = 0;
     }
 
-  // If not found then skip then the dependee.
-  if(!dependee)
+  if(dependee)
     {
-    return;
+    this->AddTargetDepend(depender_index, dependee, linking);
     }
+}
 
-  // No imported targets should have been found.
-  assert(!dependee->IsImported());
-
-  // Lookup the index for this target.  All targets should be known by
-  // this point.
-  std::map<cmTarget*, int>::const_iterator tii =
-    this->TargetIndex.find(dependee);
-  assert(tii != this->TargetIndex.end());
-  int dependee_index = tii->second;
-
-  // Add this entry to the dependency graph.
-  this->InitialGraph[depender_index].push_back(
-    cmGraphEdge(dependee_index, !linking));
+//----------------------------------------------------------------------------
+void cmComputeTargetDepends::AddTargetDepend(int depender_index,
+                                             cmTarget* dependee,
+                                             bool linking)
+{
+  if(dependee->IsImported())
+    {
+    // Skip imported targets but follow their utility dependencies.
+    std::set<cmStdString> const& utils = dependee->GetUtilities();
+    for(std::set<cmStdString>::const_iterator i = utils.begin();
+        i != utils.end(); ++i)
+      {
+      cmTarget* transitive_dependee =
+        dependee->GetMakefile()->FindTargetToUse(i->c_str());
+      this->AddTargetDepend(depender_index, transitive_dependee, false);
+      }
+    }
+  else
+    {
+    // Lookup the index for this target.  All targets should be known by
+    // this point.
+    std::map<cmTarget*, int>::const_iterator tii =
+      this->TargetIndex.find(dependee);
+    assert(tii != this->TargetIndex.end());
+    int dependee_index = tii->second;
+
+    // Add this entry to the dependency graph.
+    this->InitialGraph[depender_index].push_back(
+      cmGraphEdge(dependee_index, !linking));
+    }
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmComputeTargetDepends.h b/Source/cmComputeTargetDepends.h
index 36e533f..67bce72 100644
--- a/Source/cmComputeTargetDepends.h
+++ b/Source/cmComputeTargetDepends.h
@@ -46,6 +46,7 @@ private:
   void CollectTargetDepends(int depender_index);
   void AddTargetDepend(int depender_index, const char* dependee_name,
                        bool linking);
+  void AddTargetDepend(int depender_index, cmTarget* dependee, bool linking);
   bool ComputeFinalDepends(cmComputeComponentGraph const& ccg);
 
   cmGlobalGenerator* GlobalGenerator;
diff --git a/Tests/ExportImport/Import/A/CMakeLists.txt b/Tests/ExportImport/Import/A/CMakeLists.txt
index 34b8717..0828343 100644
--- a/Tests/ExportImport/Import/A/CMakeLists.txt
+++ b/Tests/ExportImport/Import/A/CMakeLists.txt
@@ -75,6 +75,22 @@ foreach(c DEBUG RELWITHDEBINFO)
   set_property(TARGET imp_testExe1b PROPERTY COMPILE_DEFINITIONS_${c} EXE_DBG)
 endforeach(c)
 
+# Create a custom target to generate a header for the libraries below.
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+add_custom_command(
+  OUTPUT testLib2.h
+  VERBATIM COMMAND
+  ${CMAKE_COMMAND} -E echo "extern int testLib2(void);" > testLib2.h
+  )
+add_custom_target(hdr_testLib2 DEPENDS testLib2.h)
+
+# Drive the header generation through an indirect chain of imported
+# target dependencies.
+add_library(dep_testLib2 UNKNOWN IMPORTED)
+add_dependencies(dep_testLib2 hdr_testLib2)
+add_dependencies(bld_testLib2 dep_testLib2)
+add_dependencies(exp_testLib2 dep_testLib2)
+
 # Create a library to be linked by another directory in this project
 # to test transitive linking to otherwise invisible imported targets.
 add_library(imp_lib1 STATIC imp_lib1.c)
diff --git a/Tests/ExportImport/Import/A/imp_lib1.c b/Tests/ExportImport/Import/A/imp_lib1.c
index d8c66e6..5b3215e 100644
--- a/Tests/ExportImport/Import/A/imp_lib1.c
+++ b/Tests/ExportImport/Import/A/imp_lib1.c
@@ -1,4 +1,4 @@
-extern int testLib2(void);
+#include "testLib2.h"
 
 int imp_lib1(void)
 {

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=bc7395c096be40f8a0fecbab4aa7539c05898ef2
commit bc7395c096be40f8a0fecbab4aa7539c05898ef2
Merge: acf6046 fd614e6
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Nov 19 13:23:17 2010 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Nov 19 13:23:17 2010 -0500

    Merge branch 'vs-target-dependencies' into imported-target-dependencies


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

Summary of changes:
 Source/cmAddDependenciesCommand.cxx        |    6 +--
 Source/cmAddDependenciesCommand.h          |    2 +
 Source/cmComputeTargetDepends.cxx          |   57 ++++++++++++++++-----------
 Source/cmComputeTargetDepends.h            |    1 +
 Tests/ExportImport/Import/A/CMakeLists.txt |   16 ++++++++
 Tests/ExportImport/Import/A/imp_lib1.c     |    2 +-
 6 files changed, 55 insertions(+), 29 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list