summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmGlobalUnixMakefileGenerator3.cxx67
-rw-r--r--Source/cmGlobalUnixMakefileGenerator3.h4
-rw-r--r--Source/cmMakefile.cxx3
-rw-r--r--Source/cmTarget.h3
4 files changed, 48 insertions, 29 deletions
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx
index a3dcd62..b55164f 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.cxx
+++ b/Source/cmGlobalUnixMakefileGenerator3.cxx
@@ -869,7 +869,8 @@ cmGlobalUnixMakefileGenerator3
if(emitted.insert(lib->first).second)
{
// Add this dependency.
- this->AppendAnyGlobalDepend(depends, lib->first.c_str(), emitted);
+ this->AppendAnyGlobalDepend(depends, lib->first.c_str(),
+ emitted, target);
}
}
}
@@ -883,7 +884,7 @@ cmGlobalUnixMakefileGenerator3
if(emitted.insert(*util).second)
{
// Add this dependency.
- this->AppendAnyGlobalDepend(depends, util->c_str(), emitted);
+ this->AppendAnyGlobalDepend(depends, util->c_str(), emitted, target);
}
}
}
@@ -893,41 +894,55 @@ cmGlobalUnixMakefileGenerator3
void
cmGlobalUnixMakefileGenerator3
::AppendAnyGlobalDepend(std::vector<std::string>& depends, const char* name,
- std::set<cmStdString>& emitted)
+ std::set<cmStdString>& emitted, cmTarget &target)
{
cmTarget *result;
+ cmLocalUnixMakefileGenerator3 *lg3;
+
+ // first check the same dir as the current target
+ lg3 = static_cast<cmLocalUnixMakefileGenerator3 *>
+ (target.GetMakefile()->GetLocalGenerator());
+ result = target.GetMakefile()->FindTarget(name);
// search each local generator until a match is found
- unsigned int i;
- for (i = 0; i < m_LocalGenerators.size(); ++i)
+ if (!result)
+ {
+ unsigned int i;
+ for (i = 0; i < m_LocalGenerators.size(); ++i)
+ {
+ // search all targets
+ result = m_LocalGenerators[i]->GetMakefile()->FindTarget(name);
+ if (result)
+ {
+ lg3 = static_cast<cmLocalUnixMakefileGenerator3 *>
+ (m_LocalGenerators[i]);
+ break;
+ }
+ }
+ }
+
+ // if a match was found then ...
+ if (result)
{
- // search all targets
- result = m_LocalGenerators[i]->GetMakefile()->FindTarget(name);
- // if a match was found then ...
- if (result)
+ std::string tgtName = lg3->GetRelativeTargetDirectory(*result);
+ tgtName += "/all";
+ depends.push_back(tgtName);
+ if(result->GetType() == cmTarget::STATIC_LIBRARY)
{
- cmLocalUnixMakefileGenerator3 *lg3 =
- static_cast<cmLocalUnixMakefileGenerator3 *>(m_LocalGenerators[i]);
- std::string tgtName = lg3->GetRelativeTargetDirectory(*result);
- tgtName += "/all";
- depends.push_back(tgtName);
- if(result->GetType() == cmTarget::STATIC_LIBRARY)
+ const cmTarget::LinkLibraries& tlibs = result->GetLinkLibraries();
+ for(cmTarget::LinkLibraries::const_iterator lib = tlibs.begin();
+ lib != tlibs.end(); ++lib)
{
- const cmTarget::LinkLibraries& tlibs = result->GetLinkLibraries();
- for(cmTarget::LinkLibraries::const_iterator lib = tlibs.begin();
- lib != tlibs.end(); ++lib)
+ // Don't emit the same library twice for this target.
+ if(emitted.insert(lib->first).second)
{
- // Don't emit the same library twice for this target.
- if(emitted.insert(lib->first).second)
- {
- // Add this dependency.
- this->AppendAnyGlobalDepend(depends, lib->first.c_str(),
- emitted);
- }
+ // Add this dependency.
+ this->AppendAnyGlobalDepend(depends, lib->first.c_str(),
+ emitted, *result);
}
}
- return;
}
+ return;
}
}
diff --git a/Source/cmGlobalUnixMakefileGenerator3.h b/Source/cmGlobalUnixMakefileGenerator3.h
index aebc086..f82f9df 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.h
+++ b/Source/cmGlobalUnixMakefileGenerator3.h
@@ -111,7 +111,9 @@ protected:
void AppendGlobalTargetDepends(std::vector<std::string>& depends,
cmTarget& target);
void AppendAnyGlobalDepend(std::vector<std::string>& depends,
- const char* name, std::set<cmStdString>& emitted);
+ const char* name,
+ std::set<cmStdString>& emitted,
+ cmTarget &target);
// does this generator need a requires step for any of its targets
bool NeedRequiresStep(cmLocalUnixMakefileGenerator3 *lg, const char *);
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index beb1ef1..dcab4cb 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -701,7 +701,8 @@ void cmMakefile::AddUtilityCommand(const char* utilityName, bool all,
cmTarget target;
target.SetType(cmTarget::UTILITY, utilityName);
target.SetInAll(all);
-
+ target.SetMakefile(this);
+
// Store the custom command in the target.
cmCustomCommand cc(output, depends, commandLines, 0);
target.GetPostBuildCommands().push_back(cc);
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index c1c68e9..bae1eb9 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -63,7 +63,8 @@ public:
///! Set the cmMakefile that owns this target
void SetMakefile(cmMakefile *mf) { m_Makefile = mf; };
-
+ cmMakefile *GetMakefile() { return m_Makefile;};
+
/**
* Get the list of the custom commands for this target
*/