summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmComputeLinkDepends.cxx34
-rw-r--r--Source/cmComputeLinkDepends.h6
2 files changed, 26 insertions, 14 deletions
diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx
index 7b768dc..1278d8c 100644
--- a/Source/cmComputeLinkDepends.cxx
+++ b/Source/cmComputeLinkDepends.cxx
@@ -295,7 +295,8 @@ cmComputeLinkDepends::AllocateLinkEntry(std::string const& item)
}
//----------------------------------------------------------------------------
-int cmComputeLinkDepends::AddLinkEntry(std::string const& item)
+int cmComputeLinkDepends::AddLinkEntry(int depender_index,
+ std::string const& item)
{
// Check if the item entry has already been added.
std::map<cmStdString, int>::iterator lei = this->LinkEntryIndex.find(item);
@@ -312,7 +313,7 @@ int cmComputeLinkDepends::AddLinkEntry(std::string const& item)
int index = lei->second;
LinkEntry& entry = this->EntryList[index];
entry.Item = item;
- entry.Target = this->FindTargetToLink(entry.Item.c_str());
+ entry.Target = this->FindTargetToLink(depender_index, entry.Item.c_str());
entry.IsFlag = (!entry.Target && item[0] == '-' && item[1] != 'l' &&
item.substr(0, 10) != "-framework");
@@ -409,7 +410,8 @@ void cmComputeLinkDepends::HandleSharedDependency(SharedDepEntry const& dep)
// Initialize the item entry.
LinkEntry& entry = this->EntryList[lei->second];
entry.Item = dep.Item;
- entry.Target = this->FindTargetToLink(dep.Item.c_str());
+ entry.Target = this->FindTargetToLink(dep.DependerIndex,
+ dep.Item.c_str());
// This item was added specifically because it is a dependent
// shared library. It may get special treatment
@@ -500,7 +502,7 @@ void cmComputeLinkDepends::AddVarLinkEntries(int depender_index,
}
else if(this->OldLinkDirMode)
{
- this->CheckWrongConfigItem(*di);
+ this->CheckWrongConfigItem(depender_index, *di);
}
// Reset the link type until another explicit type is given.
@@ -529,7 +531,7 @@ cmComputeLinkDepends::AddTargetLinkEntries(int depender_index,
}
else if(this->OldLinkDirMode)
{
- this->CheckWrongConfigItem(li->first);
+ this->CheckWrongConfigItem(depender_index, li->first);
}
}
@@ -558,7 +560,7 @@ cmComputeLinkDepends::AddLinkEntries(int depender_index,
}
// Add a link entry for this item.
- int dependee_index = this->AddLinkEntry(item);
+ int dependee_index = this->AddLinkEntry(depender_index, item);
// The dependee must come after the depender.
if(depender_index >= 0)
@@ -664,10 +666,19 @@ std::string cmComputeLinkDepends::CleanItemName(std::string const& item)
}
//----------------------------------------------------------------------------
-cmTarget* cmComputeLinkDepends::FindTargetToLink(const char* name)
+cmTarget* cmComputeLinkDepends::FindTargetToLink(int depender_index,
+ const char* name)
{
- // Look for a target.
- cmTarget* tgt = this->Makefile->FindTargetToUse(name);
+ // Look for a target in the scope of the depender.
+ cmMakefile* mf = this->Makefile;
+ if(depender_index >= 0)
+ {
+ if(cmTarget* depender = this->EntryList[depender_index].Target)
+ {
+ mf = depender->GetMakefile();
+ }
+ }
+ cmTarget* tgt = mf->FindTargetToUse(name);
// Skip targets that will not really be linked. This is probably a
// name conflict between an external library and an executable
@@ -987,7 +998,8 @@ void cmComputeLinkDepends::DisplayFinalEntries()
}
//----------------------------------------------------------------------------
-void cmComputeLinkDepends::CheckWrongConfigItem(std::string const& item)
+void cmComputeLinkDepends::CheckWrongConfigItem(int depender_index,
+ std::string const& item)
{
if(!this->OldLinkDirMode)
{
@@ -997,7 +1009,7 @@ void cmComputeLinkDepends::CheckWrongConfigItem(std::string const& item)
// For CMake 2.4 bug-compatibility we need to consider the output
// directories of targets linked in another configuration as link
// directories.
- if(cmTarget* tgt = this->FindTargetToLink(item.c_str()))
+ if(cmTarget* tgt = this->FindTargetToLink(depender_index, item.c_str()))
{
if(!tgt->IsImported())
{
diff --git a/Source/cmComputeLinkDepends.h b/Source/cmComputeLinkDepends.h
index 47fa648..fdca2b5 100644
--- a/Source/cmComputeLinkDepends.h
+++ b/Source/cmComputeLinkDepends.h
@@ -81,14 +81,14 @@ private:
std::map<cmStdString, int>::iterator
AllocateLinkEntry(std::string const& item);
- int AddLinkEntry(std::string const& item);
+ int AddLinkEntry(int depender_index, std::string const& item);
void AddVarLinkEntries(int depender_index, const char* value);
void AddTargetLinkEntries(int depender_index,
LinkLibraryVectorType const& libs);
void AddLinkEntries(int depender_index,
std::vector<std::string> const& libs);
std::string CleanItemName(std::string const& item);
- cmTarget* FindTargetToLink(const char* name);
+ cmTarget* FindTargetToLink(int depender_index, const char* name);
// One entry for each unique item.
std::vector<LinkEntry> EntryList;
@@ -162,7 +162,7 @@ private:
// Compatibility help.
bool OldLinkDirMode;
- void CheckWrongConfigItem(std::string const& item);
+ void CheckWrongConfigItem(int depender_index, std::string const& item);
std::set<cmTarget*> OldWrongConfigItems;
};