|
@@ -246,13 +246,7 @@ void cmComputeTargetDepends::AddTargetDepend(int depender_index,
|
|
|
|
|
|
|
|
// Check the target's makefile first.
|
|
// Check the target's makefile first.
|
|
|
cmTarget* dependee =
|
|
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
|
|
// Skip targets that will not really be linked. This is probably a
|
|
|
// name conflict between an external library and an executable
|
|
// name conflict between an external library and an executable
|
|
@@ -264,25 +258,42 @@ void cmComputeTargetDepends::AddTargetDepend(int depender_index,
|
|
|
dependee = 0;
|
|
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));
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------
|