summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2006-11-25 15:59:26 (GMT)
committerBill Hoffman <bill.hoffman@kitware.com>2006-11-25 15:59:26 (GMT)
commit9baa760315f440b6c32087cdd5918d8a46c188d7 (patch)
tree1454ddd6ef39ce8676bd375c4f9e6fa8e358ad96
parent3ad6f7e8808333133cec8ab3bb8856df31ccc873 (diff)
downloadCMake-9baa760315f440b6c32087cdd5918d8a46c188d7.zip
CMake-9baa760315f440b6c32087cdd5918d8a46c188d7.tar.gz
CMake-9baa760315f440b6c32087cdd5918d8a46c188d7.tar.bz2
BUG: fix problem when a target name is the same as the output of a custom command
-rw-r--r--Source/cmLocalGenerator.cxx16
-rw-r--r--Source/cmTarget.cxx34
2 files changed, 46 insertions, 4 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 2909b33..84de442 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -1857,6 +1857,22 @@ std::string cmLocalGenerator::GetRealDependency(const char* inName,
// Look for a CMake target with the given name.
if(cmTarget* target = this->GlobalGenerator->FindTarget(0, name.c_str()))
{
+ // make sure it is not just a coincidence that the target name
+ // found is part of the inName
+ if(cmSystemTools::FileIsFullPath(inName))
+ {
+ std::string tLocation = target->GetLocation(config);
+ tLocation = cmSystemTools::GetFilenamePath(tLocation);
+ std::string depLocation = cmSystemTools::GetFilenamePath(
+ std::string(inName));
+ if(depLocation != tLocation)
+ {
+ // it is a full path to a depend that has the same name
+ // as a target but is in a different location so do not use
+ // the target as the depend
+ return inName;
+ }
+ }
switch (target->GetType())
{
case cmTarget::EXECUTABLE:
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index e7e3b99..0033d16 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -229,16 +229,42 @@ void cmTarget::TraceVSDependencies(std::string projFile,
// add its dependencies to the list to check
unsigned int i;
for (i = 0; i < outsf->GetCustomCommand()->GetDepends().size(); ++i)
- {
+ {
std::string dep = cmSystemTools::GetFilenameName(
outsf->GetCustomCommand()->GetDepends()[i]);
if (cmSystemTools::GetFilenameLastExtension(dep) == ".exe")
{
dep = cmSystemTools::GetFilenameWithoutLastExtension(dep);
}
- // watch for target dependencies,
- if(this->Makefile->GetLocalGenerator()->
- GetGlobalGenerator()->FindTarget(0, dep.c_str()))
+ bool isUtility = false;
+ // see if we can find a target with this name
+ cmTarget* t = this->Makefile->GetLocalGenerator()->
+ GetGlobalGenerator()->FindTarget(0, dep.c_str());
+ if(t)
+ {
+ // if we find the target and the dep was given as a full
+ // path, then make sure it was not a full path to something
+ // else, and the fact that the name matched a target was
+ // just a coincident
+ if(cmSystemTools::FileIsFullPath(
+ outsf->GetCustomCommand()->GetDepends()[i].c_str()))
+ {
+ std::string tLocation = t->GetLocation(0);
+ tLocation = cmSystemTools::GetFilenamePath(tLocation);
+ std::string depLocation = cmSystemTools::GetFilenamePath(
+ std::string(outsf->GetCustomCommand()->GetDepends()[i].c_str()));
+ if(depLocation == tLocation)
+ {
+ isUtility = true;
+ }
+ }
+ // if it was not a full path then it must be a target
+ else
+ {
+ isUtility = true;
+ }
+ }
+ if(isUtility)
{
// add the depend as a utility on the target
this->AddUtility(dep.c_str());